0

我正在创建一个 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 检查成功卸载

4

1 回答 1

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

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

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

于 2015-06-07T18:47:17.943 回答