我有一个用于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属性。
任何想法都会受到赞赏,谢谢!
答案 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上安装其他所有内容。