我有一个Wix Managed Bootstrapper应用程序/捆绑(刻录)安装程序。
从C#开始,我需要使用捆绑包的ProductCode或UpgradeCode来确定该捆绑包的安装状态。我尝试使用Wix部署工具基础(DTF)库的Microsoft.Deployment.WindowsInstaller.ProductInstallation
类,但它似乎不适用于bundle,只适用于嵌入式软件包(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)?
答案 0 :(得分:3)
捆绑包是MSI之上的一层,因此MSI不了解它们,也无法对它们进行操作。 WiX v3.9在C / C ++ DUtil库中具有函数以获取包信息,包括用于卸载或修复它的缓存包的路径。到目前为止,没有人完成将其转换为C#的工作。