【问题标题】:Issue faced during uninstall MSI using its Product Code in c#(DTF)使用 c#(DTF) 中的产品代码卸载 MSI 时遇到的问题
【发布时间】:2015-08-21 13:57:31
【问题描述】:

我正在创建一个 CustomBA,它将替换现有的安装屏蔽 Bootstrapper(我真的不知道它叫什么)。

我们正在安装与 install shield 使用相同数量的 MSI,所以这没有问题。 ARP 中的所有 MSI 条目都被删除,因为我们正在使 MSI 的 Visible="no"。

在 ARP 中只有 Custom BA 条目和 Install shield Bootstrapper 条目可用,两者具有相同的名称。

经过一番研究,我了解到 Windows Installer XML (WiX) 将 Microsoft.Deployment.WindowsInstaller 互操作库作为部署工具基础 (DTF) 的一部分提供,可用于卸载 MSI。

我正在使用以下代码卸载 MSI。

Microsoft.Deployment.WindowsInstaller.Installer.SetInternalUI(InstallUIOptions.Silent);
Microsoft.Deployment.WindowsInstaller.Installer.EnableLog(InstallLogModes.Info, @"C:\Uninstall.log");
Microsoft.Deployment.WindowsInstaller.Installer.ConfigureProduct(productCode, 0, InstallState.Absent, "");

我面临的问题如下所述

  1. 首先,我必须以管理员身份运行 CustomBA 来卸载现有的 MSI,否则它会抛出错误“错误 1730。您必须是管理员才能删除此应用程序。”。有没有办法在没有管理员的情况下运行 CustomBA 并卸载 MSI。

    1. 卸载时(当我以管理员身份运行 customBA 时),上面提到的代码也删除了它的链包,我不希望它这样做。

    2. 运行卸载代码后,它不会从 ARP 中删除 MSI 条目。

我找到了这些链接,但我不知道它是否相关: https://stackoverflow.com/questions/17523974/how-to-uninstall-msi-using-its-product-code-in-c-sharp Checking for successful uninstall

【问题讨论】:

    标签: c# wix windows-installer wix3.9 dtf


    【解决方案1】:
    1. 如果您需要成为管理员,那么您需要成为管理员。允许受限用户更改系统中受限的区域将构成安全漏洞。

    2. 您使用了“链”一词,因此看起来 InstallShield 设置是多 MSI 安装,可能带有被抑制的嵌入式 UI。因此,以前的 MSI 似乎是作为单一产品视图安装的,看起来它们都已卸载,也作为单一产品视图 - 它们都卸载了。这可能是最初的意图 - 使多个 MSI 显示为一个产品,全部安装并全部卸载。此外,如果该 IS 安装是一系列 MSI,那么您肯定会全部替换(或升级)它们,是吗? Burn 和 BA 也会这样做。

    3. 哪个 MSI 的 ARP 条目?从您的帖子中不清楚是哪个 MSI,假设您可能指的是 IS 安装的链式 MSI 之一。你确定它是一个 MSI 条目吗?它可能是 InstallShield 放在那里的链接产品的条目,而不是 MSI 条目。当然,如果您卸载 MSI 成功,它的 ARP 条目将被删除,但可能需要刷新才能看到它真的消失了(但这是 Windows 问题)。保持实物链接的 MSI 产品(通常也是 Burn)将抑制单个 MSI ARP 条目,以支持包含多个 MSI 的单个条目。

    【讨论】:

    • 2 ) 无论如何我们可以打破这种“链”行为,只卸载这个 IS Bootstrapper MSI(fyi..所有其他 MSI 在 ARP 中也有条目)3)除了 IS引导程序 MSI 所有其他链接的 MSI 条目在卸载所有链包时被删除。
    • 2) 我可以通过将 UPGRADINGPRODUCTCODE 作为 Dummy 值传递来仅卸载 IS 根 MSI,如下面的代码“Microsoft.Deployment.WindowsInstaller.Installer.ConfigureProduct(productCode, 0 , InstallState.Absent, "UPGRADINGPRODUCTCODE=Dummy ") ' 但在 ARP 中仍然存在 IS 根 MSI 条目。日志文件条目还说其已正确卸载 Windows Installer 删除了该产品。产品名称:XYZ。产品版本:7.0.0.0。产品语言:1033。制造商:XYZ。移除成功或错误状态:0
    猜你喜欢
    • 2013-07-05
    • 2021-12-31
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 2021-09-21
    • 2012-04-06
    相关资源
    最近更新 更多