0

我自己对这个主题所做的所有研究似乎都声称每个已安装的程序都分配了一个唯一的 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 文件之前,我需要确定 -有时。

谢谢!

4

2 回答 2

2

GUID 因已安装应用程序的不同版本和语言而异。在尝试使用此批处理文件卸载它们之前,您应该首先确保它们相同。不过,有比使用批处理文件更好的方法。

如果您了解 C/C++,请考虑有关使用 Windows 安装程序 ( http://msdn.microsoft.com/en-us/library/aa372463%28v=vs.85%29.aspx ) 的 MSDN 文档,尤其是确定安装上下文部分。

于 2013-02-04T11:05:42.543 回答
1

产品代码是一个 GUID,被视为应用程序或产品的主要标识保持包名称和包代码一致是“Windows Installer 最佳实践” 。某些类型的更新需要更改产品代码。这些在 MSDN 文档中进行了描述:更改产品代码

因此,一个产品可能有多个产品代码。

产品代码是ProductCode 属性的值。绝不能为不同的产品分配与任何其他产品相同的产品代码 guid。这将是一件非常糟糕的事情,但是没有机制可以防止它。包作者负责使用 GUIDGEN 等实用程序来获取唯一的 GUID。(注意:GUIDGEN 等实用程序可以生成包含小写字母的 GUID。这些必须全部更改为大写字母,安装程序才能将 GUID 用作有效的产品代码。)

于 2013-02-05T23:32:45.730 回答