【问题标题】:Are Product Codes on installed Windows Programs identical on all computers? Or does each computer assign one at random?在所有计算机上安装的 Windows 程序上的产品代码是否相同?还是每台计算机随机分配一个?
【发布时间】:2013-01-18 20:44:08
【问题描述】:

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

谢谢!

【问题讨论】:

  • 你确定不同电脑上的程序都是同一个版本吗?

标签: windows batch-file guid windows-installer


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    product code 是一个 GUID,被视为应用程序或产品的主要标识。这是Keep package names and package codes consistent 的“Windows 安装程序最佳实践”。某些类型的更新需要更改产品代码。这些在 MSDN 文档中有所描述:Changing the Product Code

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

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

    【讨论】:

    • 顺便说一句,Mark 和 Arthur 的两个答案都是正确的。 ProductCode 不会被 Windows 更改,但用户看到的“产品”级别与 ProductCode 级别完全不同:一个用户产品可能包含许多具有不同 ProductCode 的 MSI,并且每个版本和/或变体这些有一个由他们的设置开发人员分配的自己的 ProductCode(需要)。因此,ProductCode 更像是一个特定主要版本中的一个 MSI 文件的唯一 ID,并且可以或不可以在真实(用户)产品级别。
    猜你喜欢
    • 2013-12-24
    • 2011-09-13
    • 1970-01-01
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-26
    • 1970-01-01
    相关资源
    最近更新 更多