我自己对这个主题所做的所有研究似乎都声称,每个已安装的程序都分配了一个独特的GUID。考虑到这一点,我开始设计一个非常简单的.bat文件,该文件将使用msiexec悄悄卸载一组程序列表。
使用MSI目录(类似于从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-B34F-BDEB2713C5FA}应该是我正在卸载的程序中唯一的。因此,如果我从另一台安装了相同程序的计算机上运行这个批处理,它将在不需要用户输入的情况下找到并卸载它。
然而,我的结果好坏参半。一些它卸载的计算机,一些它似乎找不到程序。未能卸载程序的计算机上的MSI目录显示不同的产品代码。
我想知道,这些产品代码是否确实是在程序创建时创建并嵌入到安装程序中的唯一GUID?在你安装程序的每台机器上,它们应该是相同的吗?
如果答案是肯定的,我必须处理一个“不同版本”的问题,在这个问题上,程序代码会随着时间的推移而改变.但是,在我将过多的工作放入一个可能只工作了几次的.bat文件之前,我需要确定一下。
谢谢!
发布于 2013-02-04 11:05:42
GUID因安装应用程序的不同版本和语言而有所不同。在尝试将它们与此批处理文件合并之前,首先应确保它们是相同的。但是,有比使用批处理文件更好的方法来做到这一点。
如果您知道C/C++,请考虑使用Windows (http://msdn.microsoft.com/en-us/library/aa372463%28v=vs.85%29.aspx)的MSDN文档,特别是http://msdn.microsoft.com/en-us/library/aa368279%28v=vs.85%29.aspx部分。
发布于 2013-02-05 23:32:45
产品代码是一个GUID,它被认为是应用程序或产品的主要标识。它是保持包名和包代码一致的"Windows最佳实践“。某些类型的更新要求更改产品代码。这些都在MSDN文档:更改产品代码中进行了描述。
因此,产品有可能有多个产品代码。
产品代码是ProductCode性质的值。不同的产品不应分配任何其他产品所使用的相同的产品代码guid。这将是一件非常糟糕的事情,但没有任何机制来防止这种情况发生。包作者负责使用GUIDGEN这样的实用工具来获得唯一的GUID。(注意: GUIDGEN等实用工具可以生成包含小写字母的GUID。必须将所有这些更改为大写字母,然后安装程序才能将GUID用作有效的产品代码。)
https://stackoverflow.com/questions/14681851
复制相似问题