使用x86安装程序安装x64组件的WIX?

时间:2013-03-05 18:29:08

标签: installer wix registry windows-installer

我有一个用于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属性。

任何想法都会受到赞赏,谢谢!

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

Condition中删除Feature。您已在Component

中拥有该条件
<Feature Id='MyFeature' Level='1'>
    <ComponentRef Id='foo' />
</Feature>

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