Проверка на успешное удаление
Я пытаюсь автоматизировать процесс установки, при котором я удаляю предыдущую версию и устанавливаю более новую версию поверх. Как я должен проверить (в моем загрузчике, написанном на C#), если удаление прошло успешно?
Это в настоящее время, как я запускаю удаление.
Process p = Process.Start("msiexec", /*various switches*/);
p.WaitForExit();
Я также в настоящее время сталкиваюсь с несколькими динамическими экземплярами, которые действительно смущают меня, поэтому решение этой проблемы в самом WiX сложно, если не невозможно.
2 ответа
Вместо того, чтобы вызывать установщик Windows через msiexec, вы можете использовать API установщика Windows. Вы можете сделать это через P/Invoke, активировав интерфейс COM или через библиотеку оболочки DTF WiX. Специальная функция для удаления продукта MsiConfigureProductEx
,
С DTF вы можете сделать это так:
Installer.SetInternalUI(InstallUIOptions.Silent);
Installer.SetExternalUI(UiHandler, InstallLogModes.Verbose);
Installer.EnableLog(InstallLogModes.None, null);
Installer.ConfigureProduct(productCode, 0, InstallState.Removed, "");
Console.WriteLine("RebootRequired: {0} RebootInitiated: {1}", Installer.RebootRequired, Installer.RebootInitiated);
UiHandler
Делегат позволяет приложению отслеживать прогресс. Если возникает ошибка, DTF выдает исключение.
В качестве альтернативы обработке этого в вашем загрузчике и при условии, что установщик для более новой версии представляет собой разрабатываемый пакет установщика Windows (.msi), вы можете использовать функциональность установщика Windows для удаления более старой версии, где это необходимо. Когда вы делаете это, обновление может быть одним из следующих:
- Major Upgrade - свойство UpgradeCode такое же; Код продукта отличается
- Незначительное обновление - свойства UpgradeCode и ProductCode одинаковы; ProductVersion выше
- Удаление связанного продукта - Удаление любым кодом UpgradeCode, который вы укажете
Основное обновление - это удаление старой версии и установка новой. WiX позволяет вам легко создавать любые из них в проекте установки.
Итак, вашему загрузчику нужно будет просто установить более новую версию и позволить установщику Windows сделать все остальное.
Кстати, вы можете захотеть использовать WiX Bootstrapper вместо того, чтобы писать собственную логику. При желании вы можете написать собственный пользовательский интерфейс в.NET для загрузчика WiX, если по этой причине вы пишете свой собственный загрузчик.