2009-07-20 3 views
1

Я использую проект установки и развертывания VS 2008 для развертывания смешанного управляемого/неуправляемого приложения. У меня возникли проблемы с регистрацией DLL смешанного режима, используя встроенное свойство регистрации («vsdraCOM», перечисленное значение свойства «Register».) В качестве обходного пути я добавил сборку пользовательской установки .NET (с классом, который происходит из System.Configuration.Install.Installer.) Я уверен, что этот класс запущен и несколько операций успешно устанавливаются и удаляются с помощью кода в этой сборке, включая выполнение точки входа Dll (Un) RegisterServer для нескольких сборок ,Принудительная установка GAC перед запуском .NET custom action?

Тем не менее, одна DLL не успешно регистрируется. Это единственная DLL, которая зависит от некоторых сторонних распространяемых сборок, которые хотят быть установлены в GAC. У меня есть те сборки, которые установлены в GAC благодаря встроенной поддержке этого в проектах установки и развертывания VS 2008, и я знаю, что это работает. Я подтвердил, что происходит то, что пользовательское действие выполняется до того, как установщик выполнит установку GAC.

Whew. Поэтому мой вопрос заключается в том, есть ли способ заставить установщика выполнить установку GAC перед выполнением пользовательского действия? Можно ли использовать свойство «Условие» для пользовательского действия? Если нет, то какая у меня лучшая альтернатива? Захват записей в реестре из библиотеки DLL и добавление их в настройки реестра установщика (не нравится это, потому что кто-то может добавить новые COM-серверы в класс в будущем)? Использование .NET-кода для установки сборки в GAC вручную (пока не знаете, как это сделать)?

Спасибо,

Dave

ответ

2

Проекты установки, которые можно создать в Visual Studio очень ограничены. Он позволяет настраивать индивидуальные действия в 4 балла. Однако MSI позволяет настраивать пользовательские действия в любой момент процесса с некоторыми ограничениями на то, что они могут делать.

Моим первым решением является прекращение использования Visual Studio 2008 в качестве средства разработки. Команда Visual Studio попыталась отвлечь всю сложность создания установки. Однако в процессе они также отобрали всю гибкость MSI. Wix, InstallShield или Wise - намного лучшие продукты для чего угодно, кроме простой установки. Я начал использовать Visual Studio для наших установок, и это закончилось слишком большой работой. Всегда нужно было найти еще один обходной путь, и его побочные эффекты должны быть решены.

Если вы не можете переключить технологию, вам нужно будет узнать, как вручную изменить полученный файл MSI. В вашем случае вам нужно будет изменить таблицу InstallExecuteSequence, http://msdn.microsoft.com/en-us/library/aa369500(VS.85).aspx. Вы можете сделать это вручную через Orca, http://msdn.microsoft.com/en-us/library/aa370557(VS.85).aspx или через MSI API http://msdn.microsoft.com/en-us/library/aa372860(VS.85).aspx. Обязательно загрузите Orca и запустите сценарии проверки на вашу установку. В сценариях указывается множество проблем, которые устраняют вас, когда вы будете работать на клиентских компьютерах.

+0

Спасибо, мы используем installshield, но это будет за несколько недель до того, как компьютер сборки снова запустится, и мне нужна надежная установка ASAP. Решение MSI API кажется многообещающим. FYI, я обнаружил, что System.EnterpriseServices.Internal.Publish.GACInstall() установит произвольную сборку в GAC, но это не идеально по ряду причин («Внутренний», небольшая проверка ошибок, не идеально подходит для отката/удалить семантику.) –

Смежные вопросы