我自己对这个主题所做的所有研究似乎都声称每个已安装的程序都分配了一个唯一的 GUID。考虑到这一点,我开始设计一个非常简单的 .bat 文件,该文件将使用 msiexec 静默卸载一组程序列表
使用 MSI Inventory(类似于从 HKLM 下的注册表中获取 GUID),我为每个要卸载的程序收集了所有产品代码。
例子:
Product code: {89C254A9-2FB5-4FC9-B34F-BDEB2713C5FA}
Product state: (5) Installed.
Package code: {BD709EB5-2B9C-4664-A654-C9AB18B25DBE}
Version: 2.10.28
我从上面的示例中获取了产品代码,并非常简单地编写了我的批处理:
msiexec /x {89C254A9-2FB5-4FC9-B34F-BDEB2713C5FA} /passive
据我了解,此 ID:{89C254A9-2FB5-4FC9-B34F-BDEB2713C5FA} 对于我正在卸载的该程序应该是唯一的。因此,如果我从另一台安装了相同程序的计算机上运行此批处理,它会找到它并被动地卸载它,而无需用户输入。
但是,我的结果好坏参半。它从某些计算机上卸载,有些计算机似乎找不到该程序。未能卸载程序的计算机上的 MSI Inventory 显示不同的产品代码。
我想知道,这些产品代码是在程序创建时创建并嵌入在安装程序中的真正唯一的 GUID 吗?它们应该在您安装程序的每台机器上都相同吗?
如果答案是肯定的,我必须处理程序代码随时间变化的“不同版本”问题......但在我将太多工作放入可能只能工作的 .bat 文件之前,我需要确定 -有时。
谢谢!