6

我正在为使用 Wix 的产品编写安装程序包,整个内容都在 x86 中,但现在我需要向注册表的 x64 部分添加一个密钥。我环顾四周,发现了这个堆栈答案,我认为它可以解决我的问题。但是我收到一个 ICE80 错误(不是警告),它告诉我我基本上需要将我的 Package Platform 属性更改为 x64。

然而,我宁愿避免这种情况,因为正如我所提到的,它只是一个需要在 x64 中的注册表项。

所以我的问题是:是否有另一种方法来解决 ICE80 错误,或者我是否需要构建两个 msi 包,一个用于 x86,一个用于 x64。

这是我的一些代码,以进一步说明我正在尝试做的事情:

        <Component Id="Foo" Guid="{GUID}" Win64="yes">
    <RegistryKey Root="HKLM" Key="Software\Microsoft\Windows NT\CurrentVersion\Terminal Server\Compatibility\IniFiles">
      <RegistryValue Type="integer" Name="Hello" Value="1"/>
    </RegistryKey>
    <Condition><![CDATA[VersionNT64]]></Condition>
  </Component>

  <Component Id="Bar" Guid="{GUID}">
    <RegistryKey Root="HKLM" Key="Software\Microsoft\Windows NT\CurrentVersion\Terminal Server\Compatibility\IniFiles">
      <RegistryValue Type="integer" Name="Hello" Value="1"/>
    </RegistryKey>
  </Component>

任何帮助表示赞赏!

4

3 回答 3

6

Windows Installer 不支持将 32 位程序包写入 64 位注册表(或文件系统)。64 位包可以写入 32 位和 64 位部分。

于 2012-10-02T15:35:12.600 回答
1

或许当时没用。我正在使用 Wix v10 和我的 x86 WIX 项目,并添加Win64="yes"最初生成的 ICE80 错误。一旦我抑制了该警告(在 Visual Studio 中,“工具设置”->“抑制特定验证:”列),我不再收到该错误。当我在 Windows 2012 R2 上运行 x86 安装程序时,会创建那些 x64 注册表项。

于 2016-05-20T14:48:43.533 回答
0

添加Win64="yes"到要放入注册表中的 64 位注册表项中。..:) 我自己的条件中没有包含该条件,它仅与 Win64 属性完美配合。

于 2012-10-02T08:29:17.620 回答