Microsoft程序的产品/升级代码

时间:2013-07-08 14:09:51

标签: windows-installer

我的安装项目需要检测已安装的程序作为先决条件或选择退出某些组件。 msi函数MsiGetProductInfo()MsiEnumRelatedProducts()函数公开了所需的功能。

但遗憾的是,我找不到所需的Microsoft软件产品和升级代码来检查任何地方。有谁知道在哪里查找它们?由于大多数软件包和/或序列代码的可用性,Testwise安装这些产品以确定代码不是一种选择。

我可能会尝试下载每个软件包并使用Orca进行检查,但由于我们的互联网连接很少,这需要几天甚至几周,所以我更喜欢一种更简单的方法。

目前,最重要的数据是Microsoft Office 2010家族及其版本的代码。但是将来,我肯定需要检查其他产品。

先谢谢你的帮助, 汉纳斯

2 个答案:

答案 0 :(得分:2)

Office产品有各种具有不同ProductCode和UpgradeCode属性的SKU。因此我不会使用它们。而是查看物理注册表项和DLL以指示安装所需的功能(实际依赖项)。

答案 1 :(得分:1)

理解你的问题并不容易。如果您希望能够构建一个检测requisiteINSTALLPROPERTY_INSTALLEDPRODUCTNAME的设置,那么您必须至少拥有一台安装了所有先决条件的机器吗?

要获取所有已安装的ProductCodes的列表,您可以使用MsiEnumProducts()或MsiEnumProductsEx()。

您刚刚提供了一些正确的API函数。 “完全找到所需产品/升级代码的问题在哪里? 您期望的产品不在列表中,或者您还没有尝试生成已安装程序的列表? MsiGetProductInfo()的一个返回属性将为您提供INSTALLPROPERTY_INSTALLEDPRODUCTNAME信息。这对你来说还不够吗?

而不是自己编程:有一个工具msiinv.exe可用于获取已安装程序的列表及其代码,例如:从这里: https://skydrive.live.com/?cid=27e6a35d1a492af7&id=27E6A35D1A492AF7%21910&authkey=!ANs8Pr0aVhaT_qQ 用法示例:c:\ msiinv \ msiinv.exe -p> C:\ msiinv \ msiinv_output.txt 请关注Aaron Stebners博客以获取更多信息(例如,当下载链接过期时): http://blogs.msdn.com/b/astebner/archive/2005/07/01/434814.aspx

您也可以使用一些脚本来完成。

首先,使用ProductCodes识别外包不是一个好主意,因为对该包的简单更新会改变该代码。 UpgradeCode更好,但是..

但是如果你想要识别像Office或SQL Server这样的更大的产品,它可以真正识别所有正确的包,而不是可选的,以处理语言特定的包,处理32位或64位包。 即使您是专家,我也不建议依赖MSI代码来处理复杂的情况。失败很容易。 尝试在HKLM \ Software \ Microsoft下找到一个注册表项,它在版本之间是持久的,或者更好地告诉版本,例如HKLM \ Software \ Microsoft \ Microsoft SQL Server下的一键用于搜索此产品,类似于Office等。

如果还有什么事,请随时询问。