3

我有一个用于 x86 应用程序的 WiX 安装程序。但是,它需要为单个组件写入注册表的 x64 区域。为此,我有以下内容

<Component Id=foo"..." Win64="yes">
  <Condition>VersionNT64</Condition>
  <RegistryValue
    Root="HKLM" Key="SOFTWARE\Microsoft\...."
    ....
</Component>

.....

<Feature Id='MyFeature' Level='0'> 
    <ComponentRef Id='foo' /> 
<Condition Level='1'>VersionNT64</Condition> 
</Feature>

当我尝试在 x64 系统上运行安装程序时,这工作正常。当我在 x86 系统上运行时(即使由于这种情况我不希望安装此组件),我收到以下错误:

SchedSecureObjectsRollback_x64 3: SchedSecureObjectsRollback 4: C:\Windows\Installer\MSIA98C.tmp 
MSI (c) (84:80) [20:31:05:701]: Font created.  Charset: Req=0, Ret=0, Font: Req=MS Shell Dlg, Ret=MS Shell Dlg

Error 1723. There is a problem with this Windows Installer package. A DLL required for this install to complete could not be run. Contact your support personnel or package vendor. ............

如果我取出 Win64 属性,一切正常。但是,我确实需要 x64 系统的 Win64 属性。

任何想法将不胜感激,谢谢!

4

2 回答 2

4

Windows 安装程序不支持创建写入 64 位位置的 x86 包。您必须制作一个 64 位软件包。这是一个古老的限制,每个人都会对此感到不安。

相反,您需要为 64 位内容创建一个 64 位 MSI 包,然后您可以将其放入Bundle一个 32 位 MSI 包中。该MsiPackage元素可以有一个InstallCondition确定何时安装 64 位软件包。

于 2013-03-05T22:02:51.587 回答
0

从. Condition_ Feature您已经在Component.

<Feature Id='MyFeature' Level='1'>
    <ComponentRef Id='foo' />
</Feature>

老实说,我不确定这是否会解决问题,但在我自己的 Wix 设置中,我的代码几乎相同,但我将Condition唯一的代码放在 中Component,而不是放在 中Feature,并且它按我的预期工作:安装该组件& 仅在 x64 上写入注册表项,而在 x86 或 x64 上安装其他所有内容。

于 2013-03-05T20:45:24.737 回答