我正在创建一个 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, "");
我面临的问题如下所述
首先,我必须以管理员身份运行 CustomBA 来卸载现有的 MSI,否则它会抛出错误“错误 1730。您必须是管理员才能删除此应用程序。”。有没有办法在没有管理员的情况下运行 CustomBA 并卸载 MSI。
卸载时(当我以管理员身份运行 customBA 时),上面提到的代码也删除了它的链包,我不希望它这样做。
运行卸载代码后,它不会从 ARP 中删除 MSI 条目。
我找到了这些链接,但我不知道它是否相关: https ://stackoverflow.com/questions/17523974/how-to-uninstall-msi-using-its-product-code-in-c-sharp 检查成功卸载