2013-08-23 5 views
0

Я создал установщик (основной тип установки Windows) несколько недель назад (версия 1.0.0), который развертывает некоторые DLL, а также регистрирует один из них для com-interop (с vdsrpCOM). На самом деле это неважно. У меня также есть вспомогательный класс, который выполняет некоторые функции onBeforeInstall и onAfterInstall с помощью настраиваемых действий (извлечение ZIP-библиотеки в определенном месте).Обновление MSI Обновление с Com interop

Теперь пришло время обновить мой продукт и, более конкретно, мою зарегистрированную DLL. Итак, я изменил файл и версию сборки всех DLL, которые должны обновиться и отметить установщик RemovePreviousVersions = true. Конечно, помимо обновления файлов и ассемблерных версий моих проектов, я также обновляю версию моего установщика (до 1.1.1).

При установке этой новой версии каждая DLL, имеющая новую версию файла, получает красивую перезапись, а те, у которых нет измененной файловой системы, не являются (конечно, MSI - это умный, «если вещь не изменилось, почему я должен его заменить?? ...)

Единственная ошибка, с которой я сталкиваюсь сейчас, заключается в том, что моя зарегистрированная со списком dll не зарегистрирована очень хорошо. Я также замечаю, что в ole-view моя dll все еще зарегистрирована, но в некоторых разделах кода в разделе «Регистрирование» отсутствуют некоторые строки кода: MyNamespace.MyClass = MyNamespace.MyClass CLSID = {bla-bla-bla-bla -bla}

Устранение неполадок и устранение неполадок. Но, конечно, я не хочу unistall и reinststall, потому что это то, что MSI должен заботиться.

Итак, я думал, так как у меня есть installerHelper, который запускается на onBeforeInstall с помощью настраиваемого действия, почему бы мне просто не проверить, установлена ​​ли версия, и если да, удалите ее.

Теперь единственная константа между версиями в UpgradeCode. И там, где начинается мой вопрос: Как я могу получить код обновления с моим вспомогательным классом, проверьте предыдущие версии с одинаковым кодом обновления, UnInstall те в методе onBeforeInstall?

Или, может быть, лучше, как я могу гарантировать, что регистрация com-register хорошо обрабатывается при обновлении? (возможно, даже проще, но я уверен, что Идея может заставить полностью unistall/переустановить)

ответ

0

Это пример того, почему любая форма «самостоятельной регистрации» не является лучшей практикой в ​​мире установщика окон , Когда вы используете встроенную функцию установщика Windows, она обычно работает, и вы получаете надлежащее транзакционное поведение (установка, удаление, откат, фиксация). Когда вы выходите из процесса и используете «помощников», он становится уродливым, если вы не знаете точно, и я имею в виду именно то, что вы делаете.

Мне непонятно, если ваш COM-сервер является родным или управляемым. Также неясно, какой инструмент вы используете для создания своего MSI. Точный ответ будет зависеть от этих двух факторов.

Но в целом концепция состоит в том, чтобы «собирать» или «извлекать» метаданные COM из библиотеки DLL и публиковать ее непосредственно в MSI либо с использованием таблиц COM (ProdID, Class et al tables), либо во избежание определенных COM реклама раздражает таблицу реестра. У инструментов, таких как InstallShield, есть поддержка, чтобы сделать это проще (щелчок правой кнопкой мыши | COM Extract или COM Extract при Build = True или .NET Com Interop = True), но есть также способы с инструментами для получения этой информации, а затем импортировать их вручную в ваш проект установщика или код.

Преимущество этого в том, что MSI полностью понимает ресурсы этой DLL и может управлять всем этим для вас. Это улучшает производительность и надежность установки.

+0

ahm, для регистрации моего .net com-доступного класса, я просто отмечаю основной вывод этого проекта для регистрации как vsdrpCOM. – KenGey

+0

«vsdrpCOM» не является термином установщика Windows. Это термин проекта развертывания Visual Studio. Этот тип проекта был настолько ужасен, что MSFT удалил его из VS2012. Я бы предложил использовать другой инструмент, чтобы получить лучшие результаты. –

+0

Хм, хорошо. Я буду искать другие инструменты. По большей части я на самом деле не разочарован проектом VS Deployment, хотя .. – KenGey