Как программно определить / изменить состояние установки 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#.