[英]Wix RegistryValue that references installer property always empty
[英]How do you conditionally set a property or RegistryValue in WiX?
我有一个 Wix 工具集项目,其中包含如下组件,其中 MYLANGUAGE 是可以在安装产品时设置的公共属性:
<Component Id='language_reg' Guid='*' Permanent='yes'>
<Condition>MYLANGUAGE</Condition>
<RegistryValue Type='string' Root='HKLM' Key='Software\MyCompany\MyProduct' Name='language'
Value='[MYLANGUAGE]' KeyPath='yes' />
</Component>
现在我正在从 32 位 64 位升级这个软件 package。 由于 WOW64,我的软件现有 32 位版本的上述密钥存储在 HKLM\Software\WOW6432Node\MyCompany\MyProduct 下。
升级到 package 的新 64 位版本后,我希望在 HKLM\Software\MyCompany\MyProduct 键中设置值。 该值应设置如下:
如何使用 WIX 工具集做到这一点?
这是 WiX 记住的属性模式,但有点复杂。
使用 MYLANGAUGE 的默认值定义属性 MyLanguageDefault
使用 AppSearch/Reglocator (Property/RegistrySearch) 将 64 位值读入 64 位临时属性。
使用 AppSearch/Reglocator (Property/RegistrySearch) 将 32 位值读入 32 位临时属性。 如果 MYLANGUAGE 是 null(也许他们在命令行中传递了它)并且 64 位临时属性不是 null,则使用 SetProperty 自定义操作将 64 位临时属性分配给 MYLANGUAGE
如果 MYLANGUAGE 是 null(也许他们在命令行中传递了它)并且 32 位临时属性不是 null,则使用 SetProperty 自定义操作将 32 位临时属性分配给 MYLANGUAGE
如果 MYLANGUAGE 为 null,则使用 SetProperty 自定义操作将 MyLanguageDefault 分配给 MYLANAGUGE(在命令行中未传递任何内容,在 32 位或 64 位中未找到任何内容,然后使用默认值)
如果您希望他们能够编辑它,请在对话框中显示 MYLANGUAGE。
在 Component/RegistryValue 中使用 MYLANAGUAGE 将值写入 64 位注册表。 该组件需要将 Win64 属性设置为 yes。
请注意,MYLANGUAGE 还需要使用 Secure="yes" 属性标记为安全自定义公共属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.