使用Windows,我可以通过脚本/命令行卸载软件,如下所示:
msiexec /x {00000000-0000-0000-0000-000000000000}
是否有方法只测试给定包的存在而不影响它?
我对true / false或任何其他输入感兴趣,指示该程序包是否存在于计算机上,并且可以使用Windows安装程序使用给定命令将其删除。
对于上下文:我正在使用NSIS,并且需要在找到特定包时修改我的安装程序行为。可以使用命令行,因为它可以返回值,也可以通过cmd使用VBScript。
绝对不会对包裹产生任何影响,也不会向用户显示流程,因此例如修理是不可接受的。
答案 0 :(得分:1)
找到这个的“正确”方法是调用诸如MsiQueryProductState
之类的函数。这可用于各种其他时尚,包括VB可访问的Installer.ProductState
property。如果您尝试生成计算机上的内容列表,MsiEnumProducts
或Installer.Products
(或其Ex版本)更合适。看来PowerShell可以通过WMI调用访问等效信息。
不太正确的方法包括调用msiexec /f {PROD-UCT-CODE}
来修复产品或找不到它,或者直接查询注册表是否存在产品的Uninstall key条目(它的子项名称与{匹配} {1}};检查32位和64位密钥以及每个机器和每个用户的安装(如果需要),例如使用{PROD-UCT-CODE}
。