Автоматическое обновление и управление обновлением для установщика Windows XML (WiX) - PullRequest
7 голосов
/ 10 марта 2012

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

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

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

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

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

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

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

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

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

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

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

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

1 Ответ

9 голосов
/ 10 марта 2012

WiX - определенно способ пойти по моему мнению.

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

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

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

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

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

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

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

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

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

    По моему опыту, это серьезных обновлений .наименее сложный подход.

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...