我正在创建一个CustomBA,它将取代现有的安装盾牌Bootstrapper(我真的不知道它叫什么)。
我们正在安装与安装屏蔽相同数量的MSI,所以没问题。 ARP中的所有MSI条目都被删除,因为我们正在使MSI的Visible =“no”。
ARP中只有自定义BA条目以及安装盾牌引导程序条目,两者都具有相同的名称。
经过一些研究后,我了解到Windows Installer XML(WiX)将Microsoft.Deployment.WindowsInstaller互操作库作为部署工具基础(DTF)的一部分提供,可以用来卸载MSI。
我使用以下代码卸载MSI。
base_sales <- df[df$Year==2000, c("Product","Sales")]
base_sales <- plyr::rename(base_sales, c("Sales" = "Sales_2000"))
print(base_sales)
# Product Sales_2000
# 1 A 1
# 4 B 4
# 7 C 7
df2 <- merge(df,base_sales,by="Product")
df2$adj_Sales <- df2$Sales / df2$Sales_2000
print(df2)
# Product Year Sales Sales_2000 adj_Sales
# 1 A 2000 1 1 1.0000
# 2 A 2001 2 1 2.0000
# 3 A 2002 3 1 3.0000
# 4 B 2000 4 4 1.0000
# 5 B 2001 5 4 1.2500
# 6 B 2002 6 4 1.5000
# 7 C 2000 7 7 1.0000
# 8 C 2001 8 7 1.1429
# 9 C 2002 9 7 1.2857
我面临的问题如下所述
首先,我必须以管理员身份运行CustomBA以卸载现有的MSI,否则它会抛出错误“错误1730.您必须是管理员才能删除此应用程序。”有没有办法在没有管理员的情况下运行CustomBA并卸载MSI。
在卸载时(当我以管理员身份运行customBA时),上面提到的代码也会删除带有它的链包,我不希望它这样做。
运行卸载代码后,它不会从ARP中删除MSI条目。
我找到了这些链接,但我不知道它是否相关: https://stackoverflow.com/questions/17523974/how-to-uninstall-msi-using-its-product-code-in-c-sharp Checking for successful uninstall
答案 0 :(得分:1)
如果您需要成为管理员,那么您需要成为管理员。允许受限用户更改受限制的系统区域将是安全漏洞。
您使用了“chain”这个词,因此看起来InstallShield设置是多MSI安装,可能是嵌入式UI被抑制。因此,以前的MSI似乎作为单一产品视图安装,看起来它们都被卸载,也作为单个产品视图 - 它们都卸载了。这可能是首先意图 - 使多个MSI显示为单个产品,全部安装并全部卸载。此外,如果IS安装是一系列MSI,那么你肯定会将它们全部替换掉(或升级它们),是吗?这就是Burn和BA也会做的事情。
哪个MSI的ARP条目?从你的帖子中不清楚哪个MSI,假设你可能指的是IS安装的一个链式MSI。你确定它仍然是MSI条目吗?它可能是由InstallShield放入的链式产品条目,而不是MSI条目。当然,如果您的MSI卸载工作,其ARP条目将被删除,但可能需要刷新才能看到它真的消失了(但这是一个Windows问题)。保持链接的MSI产品(通常也是Burn)会抑制单个MSI ARP条目,而不是包含多个MSI的单个条目。