【问题标题】:How to determine/change install state of a Wix Bundle programatically?如何以编程方式确定/更改 Wix Bundle 的安装状态?
【发布时间】:2014-01-14 12:13:41
【问题描述】:

我有一个 Wix 托管引导程序应用程序/捆绑(刻录)安装程序。

在 C# 中,我需要使用捆绑包的 ProductCode 或 UpgradeCode 来确定该捆绑包的安装状态。我尝试使用 Wix 部署工具基础 (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)?

【问题讨论】:

    标签: c# wix burn dtf


    【解决方案1】:

    Bundle 是 MSI 之上的一层,因此 MSI 不了解它们,也无法对其进行操作。 WiX v3.9 在 C/C++ DUtil 库中有函数来获取包信息,包括缓存包的路径以卸载或修复它。到目前为止,还没有人完成将其转换为 C# 的工作。

    【讨论】:

    • v3.9 版本是否有(粗略的)ETA?
    • 仍在讨论中,但我们目前正在讨论夏季的 v3.9。
    • 这有什么更新吗?有人做过这方面的工作吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多