【发布时间】:2018-06-22 13:54:36
【问题描述】:
我的 wix 代码如下所示:
<!-- CC 2017 = Version 110.0 -->
<Property Id="ISCC2017EXISTX64">
<RegistrySearch Id="IsCC2017Existx64" Root="HKLM" Key="Software\Adobe\Photoshop\110.0" Name="ApplicationPath" Win64="yes" Type="raw" />
</Property>
<Property Id="ISCC2017EXISTX32">
<RegistrySearch Id="IsCC2017Existx32" Root="HKLM" Key="Software\Adobe\Photoshop\110.0" Name="ApplicationPath" Win64="no" Type="raw" />
</Property>
<!-- CC 2018 = Version 120.0 -->
<Property Id="ISCC2018EXISTX64">
<RegistrySearch Id="IsCC2018Existx64" Root="HKLM" Key="Software\Adobe\Photoshop\120.0" Name="ApplicationPath" Win64="yes" Type="raw" />
</Property>
<Property Id="ISCC2018EXISTX32">
<RegistrySearch Id="IsCC2018Existx32" Root="HKLM" Key="Software\Adobe\Photoshop\120.0" Name="ApplicationPath" Win64="no" Type="raw" />
</Property>
我在哪里搜索以了解计算机上是否安装了 Photoshop CC 2017 或 CC 2018。如果是这样,我可以安装以下功能:
<Feature Id="FEATURE_EXTENSION_CC2017" Title="CC 2017" Description="Install KEY36 for CC 2017" Level="0">
<Condition Level="1">ISCC2017EXISTX64</Condition>
<ComponentGroupRef Id="CG_CC2017" />
</Feature>
<Feature Id="FEATURE_EXTENSION_CC2018" Title="CC 2018" Description="Install KEY36 for CC 2018" Level="0">
<Condition Level="1">ISCC2018EXISTX64</Condition>
<ComponentGroupRef Id="CG_CC2018" />
</Feature>
所以明年 Photoshop 将发布 Photoshop CC 2019,我不想专门为这个版本创建安装程序。我想搜索 Registry : Software\Adobe\Photoshop 并遍历每个可能的版本(如上例中的 110.0 和 120.0)。
所以我的问题是:
1) 有没有办法使用<?foreach?> 循环所有子注册表项?
2) 有没有办法让一个 ComponentGroupRef 指向同一个文件,但我希望它们被复制到不同的目录中?因为现在我为每个版本定义了两次相同的组件。
如果使用 Wix 语言无法做到这一点,有没有办法使用自定义操作来做到这一点? (如果有人能指出我应该如何做这样的事情,我从来没有做过任何自定义操作。
【问题讨论】:
-
看来你想寄希望于未来的形状。你可以像过去一样硬核它。更多的条目会让你领先几年。如果你不喜欢编写重复的代码,你可以生成它。 (另一方面,每个新版本都是与您的用户建立联系的机会。)
标签: installation wix windows-installer registry