我正在编写一个 Wix C++ 自定义操作来检测是否安装了 SCCM 2012。我通过从注册表中读取产品 GUID 来做到这一点:SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\
但这不起作用,因为在安装了 SCCM 2012 的系统上,注册表中没有此类信息。
谁能指出我正确的方向来实现这一目标?
我只想在安装 SCCM 2012 时安装我的软件。
您不应该依赖未记录的内部结构来检测软件——它们可以在没有警告的情况下更改。(例如,产品代码 GUID 在升级期间发生变化,因此除非 SCCM 团队表示不会更改,否则 SCCM 2012 RTM 甚至 2012 更新可能会发生变化。)
相反,看看团队是否记录了一种检测方法。大多数团队都会记录一个注册表值,用于检测安装的版本等内容。如果他们不这样做,您最好还是查看注册表,因为那里的值不太可能消失。
为此,您应该利用Condition元素。如果将它放在 Product 或 Fragment 下,它将作为启动条件。在此处了解有关启动条件的更多信息。
您将创建的此条件将检查属性。如果安装了您要查找的软件,则应设置该属性,否则不应设置(这是最简单的情况)。为了实现这一点,编写RegistrySearch元素,该元素将定义属性以防找到正确的注册表路径。RegistrySearch 元素应该是Property元素的子元素。
如您所见 - 这里没有自定义操作,这很棒!:)