Windows 安装程序,检查包是否存在

Windows installer, check existence of package

使用 windows,我可以通过 script/command 行卸载软件,如下所示:

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

有没有一种方法可以只测试给定包的存在而不影响它?

我对 true/false 或任何其他输入感兴趣,指示该软件包是否存在于计算机上,并且可以使用 Windows 安装程序和给定命令将其删除。

对于上下文:我正在使用 NSIS,并且需要修改我的安装程序行为以防找到特定包。可以使用命令行,因为它可以 return 值,也可以通过 cmd 使用 VBScript。

绝对不影响包装是强制性的,也没有向用户说明过程,因此不能接受例如修复。

找出这个问题的 "proper" 方法是调用函数,例如 MsiQueryProductState. This is available in various other fashions including the VB-accessible Installer.ProductState property. If instead you're trying to generate a list of what is on the machine, MsiEnumProducts or Installer.Products (or their Ex variants) are more appropriate. It appears that PowerShell 可以通过 WMI 调用访问等效信息。

不太合适的方法包括调用 msiexec /f {PROD-UCT-CODE} 来修复产品或无法找到它,或者直接查询注册表以查找产品的 Uninstall key 条目,(它的子项名称匹配{PROD-UCT-CODE};根据需要检查 32 位和 64 位密钥以及 per-machine 和 per-user 安装)例如 reg query.