Автоматическое обновление и управление обновлениями для установщика Windows XML (WiX)

Я использую InstallShield LE в Visual Studio 2010, но он сильно ограничен и иногда глючит. Я посмотрел платные версии InstallShield, но у них также слишком много ограничений для этого ценника.

поэтому я решил переключиться на WiX. У меня был некоторый опыт в этом несколько лет назад. Было довольно легко построить простой установщик с помощью SharpDevelop с инструментами WiX.

теперь я пытаюсь собрать решения и инструменты для WiX. В принципе, мне нужно следующая функциональность (запрошенная моим клиентом):

  • когда я запускаю установщик, он должен проверить текстовый файл на сервере и посмотреть, если новая версия доступна. Если это так, то установщик должен иметь возможность загрузить обновленный пакет установщика и запустить его (есть ли какие-либо утилиты загрузчика в WiX?)

  • устранение зависимостей. Основной зависимостью моего приложения является .NET 4 (который сам зависит от установщика Windows 3). Этот установщик должен предложить пользователю загрузить и установить их автоматически

  • ведение журнала процесса установки, а также сбор файла журнала процесса установки зависимостей. Я не хочу, чтобы пользователь охотился на разных .файлы журнала на всякий случай .Сбой установки NET4 или WindowsInstaller3. Вся информация должна быть собрана в одном месте и если что-то не удается, я должен показать пользователю настраиваемое всплывающее окно с возможностью сохранить файл install log и пошли его мне!--1-->

  • установщик должен иметь возможность определить, есть ли более новая версия моего приложения уже установлена, и показать значимое настраиваемое сообщение об ошибке, прежде чем он выйдет

  • установщик должен иметь возможность определить, есть ли более старая версия моего приложения уже установлена. и предложить пользователю выйти из установки или удалить предыдущую версию и установить новую версию. Кстати, нет никаких незначительных обновлений компонентов, я предпочитаю переустановите все свежее (я думаю, это серьезное обновление с точки зрения WindowsInstaller). Installshield LE не удался мне для этого, он просто показал окно ошибки с сообщением о другом продукте, но не предложил его удалить

  • в случае обновления установщик должен иметь возможность определить, используются ли некоторые компоненты приложения (запущенные процессы приложений), и показать пользовательское сообщение об ошибке, а не только какую-то загадочную " установку не"

Я прочитал, что может быть немного больно управлять обновлениями, даже если я сохраню свой UpgradeCode нетронутым, потому что этот код хранится в реестре Windows в сжатом виде, а также если пользователь переименует загруженный файл, он может быть обнаружен как совершенно новый продукт WindowsInstaller ... или, может, это только в случае с WindowsInstaller .msi-файлы и WiX имеет какой-то трюк, чтобы избежать этой проблемы?

о загрузке обновлений-мне нужно эта функциональность также в моем приложении. Я не уверен, как реализовать его эффективно, поэтому я могу повторно использовать один и тот же код загрузчика обновлений/утилиту как в установщике WiX, так и в моем приложении.

можно ли удовлетворить все эти требования, используя существующие в настоящее время инструменты WiX, или, может быть, мне нужно будет кодировать некоторые компоненты с нуля?

1 ответов


WiX, безусловно, путь, на мой взгляд.

  1. когда я запускаю установщик, он должен проверить текстовый файл на сервере и посмотреть, если новая версия доступна. Если это так, затем установщик должен иметь возможность загрузить обновленный установщик пакет и запустить его (есть ли какие-либо утилиты загрузчика в WiX?)

    на мой взгляд, этот тип функциональности лучше обрабатываться приложением. Однако вы можете реализуйте такую функциональность в пользовательском загрузчике. Последняя разработка WiX включает в себя загрузочный движок ожог это позволяет вам написать свой собственный загрузчик поверх него.

  2. устранение зависимостей. Основной зависимостью моего приложения является .NET 4 (который сам зависит от установщика Windows 3). Установщик должен предложить пользователю загрузить и установить их автоматически

    вы можете использовать стандартный WiX загрузчика, для установки .NET в качестве prereq. Или если вы создадите свое собственное управляемое загрузочное приложение, вы можете установить .NET a prereq в свой загрузчик как в этом примере

  3. ведение журнала процесса установки, а также сбор файла журнала процесса установки зависимостей. Я не хочу, чтобы пользователь охота разнообразная .файлы журнала в случае .Серии net4 или WindowsInstaller3 сбой установки. Вся необходимая информация должно быть собрано в одном место и если что-то не удается, я должен показать пользователю пользовательские всплывающие диалоговое окно с возможностью сохранения полного файла журнала установки и отправки это мне

    используя два метода начальной загрузки выше, при запуске msi вы можете указать параметры для ведения журнала. В моем собственном настраиваемом управляемом загрузчике я создал кнопку для открытия файлов журнала, созданных во время установки.

  4. установщик должен иметь возможность определите, установлена ли более новая версия моего приложения, и покажите значимую настраиваемую ошибку сообщение перед выходом

    вы можете сделать это с помощью условия запуска

  5. установщик должен иметь возможность определить, есть ли более старая версия моего приложения уже установлена. и предложить пользователю выйти из установки или удалите предыдущую версию и установите новую версию. КСТАТИ, нет незначительных компонентов обновления запланированы, я предпочитаю переустановить все свежее (я думаю, это серьезное обновление с точки зрения WindowsInstaller). Installshield LE не удалось на меня для этого, это просто показал окно ошибки с сообщением о другом продукте, но сделал не предлагать удалить его

    по моему опыту это основные обновления являются наименее сложными подход.

  6. в случае обновления, установщик должен быть в состоянии обнаружить если некоторые из используются компоненты приложения (запущенные процессы приложения) и показать пользовательское сообщение об ошибке, а не просто какую-то загадочную " установку не"

    Я думаю, что установщик WiX/Windows, как правило, хорош в обработке этих сценарии и автоматическое уведомление пользователя о том, что файлы / приложения необходимо выключить без необходимости автора что-нибудь дополнительное в вашем установщике.

все, что сказано, вы можете посмотреть на создание своего собственного пользовательский управляемый загрузчик с помощью WiX и Burn. Что, однако, не является тривиальной. Лучшее место, чтобы пойти, чтобы загрузить исходный код на WiX Еженедельные Выпуски и проверка проекта src\Setup\WixBA. Это пользовательский BA, который они написали для установки WiX. Там еще не так много документации, потому что WiX 3.6 не выпущен (хотя он довольно стабилен). Однако вам не нужно создавать свой собственный BA, чтобы сделать твердый установщик WiX, который может обрабатывать обновления и ведение журнала.