我正在尝试将安装程序配置为仅在安装某些版本的 3rd 方应用程序时有条件地安装某些组件。
<EDIT>
应该注意的是,第 3 方软件版本与我们的版本之间存在 1:1 的对应关系。第 3 方软件的此类版本是否有几十个(加上每个月最多三个额外版本),所以我们这样做不想进行手动编辑。我们的程序是针对第 3 方软件的所有版本自动构建的,但安装哪些文件需要有条件地进行。
<\编辑>
我只是将它部署为单个 .MSI,所以没有 Bootstrapper 等。从我的阅读和谷歌搜索来看,我相信我需要有一个 UPGRADE 部分,以确定应用程序当前将具有什么 PRODUCTCODE(多个版本.. 所以有是多个 PRODUCTCODEs 可能的)。然后可以使用此 PRODUCTCODE 从注册表中读取 DisplayVersion。
所以我有:
<Upgrade Id="{6D991503-3102-437E-B21D-471599D491AB}">
<UpgradeVersion Minimum="0.0.0.0" OnlyDetect="yes" Property="CLEARSCADADETECTED" />
</Upgrade>
对于升级部分,然后..
<Property Id="CLEARSCADA_VER" Secure="yes" Hidden="no" Value="6.78.6626.1">
<RegistrySearch Id="ClearSCADAVersionSearch"
Root="HKLM"
Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\[CLEARSCADADETECTED]"
Name="DisplayVersion"
Type="raw"
Win64="yes" />
</Property>
对于 REGISTRYSEARCH。
似乎 PRODUCTCODE 查找正在工作,但是 Registrysearch 没有.. (我期待 AppSearch 之后有一个 PROPERTY CHANGE 条目)
FindRelatedProducts: Found application: {2ACE38B2-F142-4EFE-9AC7-B25514E4930E}
MSI (c) (F0:90) [23:17:39:598]: PROPERTY CHANGE: Adding CLEARSCADADETECTED property. Its value is '{2ACE38B2-F142-4EFE-9AC7-B25514E4930E}'.
Action ended 23:17:39: FindRelatedProducts. Return value 1.
...
AppSearch: Property: CLEARSCADA_VER, Signature: ClearSCADAVersionSearch
MSI (c) (F0:90) [23:17:39:629]: Note: 1: 2262 2: Signature 3: -2147287038
Action ended 23:17:39: AppSearch. Return value 1.
我已经尝试硬编码注册表查找(即用 {2ACE38B2-F142-4EFE-9AC7-B25514E4930E} 的静态文本替换 [CLEARSCADADETECTED]),没有任何更改。 对于检查内容的任何其他建议将不胜感激。
<EDIT 2>
好的,令人困惑的是,如果我引用 Version DWORD 值(而不是 DisplayVersion 字符串值),那么它确实将其正确读取为 #105781730。RegistrySearch 是否可能不适用于字符串值?
<编辑 2>
<EDIT 3>
是的......它正在工作。而且我想它现在也已经工作了一段时间。当我输入 Value='6.78.6626.1' 时,我应该意识到,如果我正在测试它的版本已经是 '6.78.6626.1',那么它就不会表明属性更改。
<编辑 3>
贝文