【发布时间】:2018-03-21 13:00:09
【问题描述】:
我正在尝试将安装程序配置为仅在安装某些版本的第 3 方应用程序时有条件地安装某些组件。
需要注意的是,第 3 方软件版本与我们的版本之间存在 1:1 对应关系。第 3 方软件的此类版本是否有几十个(加上每个月最多三个额外版本),所以我们不想正在执行手动编辑。我们的程序是针对第 3 方软件的所有版本自动构建的,但安装哪些文件需要有条件地进行。
我只是将其部署为单个 .MSI,因此没有 Bootstrapper 等。 根据我的阅读和谷歌搜索,我相信我需要有一个 UPGRADE 部分,以确定应用程序当前将具有什么 PRODUCTCODE(多个版本..因此可能有多个 PRODUCTCODE)。 然后可以使用此 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.
我已尝试对注册表查找进行硬编码(即将 [CLEARSCADADETECTED] 替换为 {2ACE38B2-F142-4EFE-9AC7-B25514E4930E} 的静态文本),没有任何更改。 对于检查内容的任何其他建议将不胜感激。
好的,令人困惑的是,如果我引用 Version DWORD 值(而不是 DisplayVersion 字符串值),那么它确实将其正确读取为 #105781730。
RegistrySearch 是否可能不适用于字符串值?
耶...它的工作。而且我想它现在也已经工作了一段时间。
当我输入 Value='6.78.6626.1' 时,我应该意识到,如果我测试它的版本已经是 '6.78.6626.1',那么它就不会表明属性更改。
贝文
【问题讨论】:
-
设置
Hidden属性可能会在日志文件中隐藏设置属性操作。请看下面我的回答。将测试它是否适用于指定的Value属性(我也取出了那个)。
标签: wix windows-installer registry version wix3.11