Как программно определить / изменить состояние установки Wix Bundle?

У меня есть установщик Wix Managed Bootstrapper Application / bundle (burn).

Из C# мне нужно определить состояние установки этого пакета, используя либо ProductCode, либо UpgradeCode пакета. Я попытался использовать библиотеку Wix Deployment Tools Foundation (DTF) Microsoft.Deployment.WindowsInstaller.ProductInstallation класс, но он не работает для пакетов, только встроенные пакеты (MSI):

var myBundle = new ProductInstallation(bundleProductCode);
if (myBundle.IsInstalled) ... // This returns false, even if the bundle is installed

В конце концов мне также нужно попытаться удалить пакет из того же кода. Я планировал использовать DTF Installer.ConfigureProduct статический метод, но он также не работает с пакетами, только с продуктами, так как следующий вызов выдает ArgumentException с сообщением "Это действие действительно только для продуктов, которые в данный момент установлены". даже если пакет установлен:

Microsoft.Deployment.WindowsInstaller.Installer.ConfigureProduct(
      bundleProductCode, 0, InstallState.Absent, "");

Итак, мой вопрос:

Как определить текущее состояние установки для моего пакета и как принудительно удалить все из C# (предпочтительно с использованием DTF API)?

1 ответ

Решение

Пакеты - это уровень над MSI, поэтому MSI не знает о них и не может с ними работать. WiX v3.9 имеет функции в библиотеке C/C++ DUtil для получения информации о пакете, включая путь к кэшированному пакету для его удаления или восстановления. Пока что никто не сделал работу по переводу этого на C#.

Другие вопросы по тегам