Windows 如何在WiX中有条件地设置属性或注册表值?
我有一个Wix工具集项目,其中包含如下组件,其中MYLANGUAGE是一个公共属性,可以在安装产品时进行设置:Windows 如何在WiX中有条件地设置属性或注册表值?,windows,installation,wix,wix3,Windows,Installation,Wix,Wix3,我有一个Wix工具集项目,其中包含如下组件,其中MYLANGUAGE是一个公共属性,可以在安装产品时进行设置: <Component Id='language_reg' Guid='*' Permanent='yes'> <Condition>MYLANGUAGE</Condition> <RegistryValue Type='string' Root='HKLM' Key='Software\MyCompa
<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位升级这个软件包。由于WOW64,我的软件现有32位版本的上述密钥存储在HKLM\software\WOW6432Node\MyCompany\MyProduct下
升级到软件包的新64位版本后,我希望在HKLM\Software\MyCompany\MyProduct密钥中也设置该值。该值应设置如下:
- 如果在安装时设置了公共属性MYLANGUAGE,则该属性的值应存储在HKLM\Software\MyCompany\MyProduct language中
- 如果未设置公共属性MYLANGUAGE,并且HKLM\Software\MyCompany\MyProduct密钥不存在,并且设置了HKLM\Software\WOW6432Node\MyCompany\MyProduct语言值,则我希望将该值从HKLM\Software\WOW6432Node\MyCompany\MyProduct语言复制到HKLM\Software\MyCompany\MyProduct语言
如何使用WIX工具集实现这一点?这是WIX记忆属性模式,但有点复杂 使用MyLanguage的默认值定义属性MyLanguageDefault 使用AppSearch/Reglocator(属性/RegistrySearch)将64位值读入64位临时属性 使用AppSearch/Reglocator(属性/RegistrySearch)将32位值读入32位临时属性。 如果MYLANGUAGE为null(可能是在命令行中传递的),并且64位temp属性不为null,则使用SetProperty自定义操作将64位temp属性分配给MYLANGUAGE 如果MYLANGUAGE为null(可能是在命令行中传递的),并且32位temp属性不为null,则使用SetProperty自定义操作将32位temp属性分配给MYLANGUAGE 如果MYLANGUAGE为null,则使用SetProperty自定义操作将MyLanguageDefault分配给MyLanguageDefault(在命令行中未传递任何内容,在32位或64位中未找到任何内容,然后使用默认值) 如果您希望他们能够编辑我的语言,请在对话框中显示我的语言 在组件/注册表值中使用MyLanguage将值写入64位注册表。组件需要将Win64属性设置为yes
请注意,还需要使用Secure=“yes”属性将MYLANGUAGE标记为安全的自定义公共属性。就在我脑海中,您的WiX代码看起来是正确的。你有没有在没有升级的独立MSI中尝试过?我怀疑的一点是组件本身存在升级问题。您没有说您是在进行小升级还是大升级,但在小升级中需要遵循某些组件规则。