繁体   English   中英

如何有条件地设置 WiX 中的属性或 RegistryValue?

[英]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 键中设置值。 该值应设置如下:

  • 如果安装时设置了公共属性 MYLANGUAGE,则该属性的值应存储在 HKLM\Software\MyCompany\MyProduct 语言中
  • 如果未设置公共属性 MYLANGUAGE并且HKLM\Software\MyCompany\MyProduct 键不存在并且 HKLM\Software\WOW6432Node\MyCompany\MyProduct 语言值已设置,那么我想要从 HKLM\Software\WOW6432Node\MyCompany\ 复制的值我的产品语言到 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM