使用windows,我可以通过脚本/命令行卸载软件,如下所示:

msiexec /x {00000000-0000-0000-0000-000000000000}

有没有一种方法可以在不影响给定包的情况下测试它的存在性?
我对true/false或任何其他输入感兴趣,这些输入指示程序包是否存在于计算机上,并且可以使用带有给定命令的windows安装程序将其删除。
上下文:我正在使用nsis,需要修改我的安装程序行为,以防找到特定的包。命令行可以用于返回值,vbscript也可以通过cmd使用。
绝对没有对包的影响是强制性的,也没有向用户指示过程,因此例如,修复是不可接受的。

最佳答案

找到这个问题的“正确”方法是调用一个函数,比如MsiQueryProductState。这是在各种其他时尚,包括vb可访问Installer.ProductState property。如果您试图生成机器上的内容列表,MsiEnumProductsInstaller.Products(或它们的前变种)更合适。似乎PowerShell可以通过wmi调用访问等效信息。
不太合适的方法包括调用msiexec /f {PROD-UCT-CODE}来修复产品或找不到它,或者直接查询注册表中是否存在产品的Uninstall key项(它的子项名称与{PROD-UCT-CODE}匹配);根据需要检查32位和64位密钥以及每台计算机和每用户的安装,例如使用reg query

09-26 20:06
查看更多