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

3

我有一个WiX安装程序,用于安装x86应用程序。 但是,它需要为单个组件写入到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属性。如果有任何想法,感激不尽,谢谢!

1
我没有看到任何错误... 我有一个做同样事情的Wix安装程序,你在这里展示的代码部分和我的完全相同。你能发更多的代码吗? - Nate Hekman
<Feature Id='MyFeature' Level='0'> <ComponentRef Id='foo' /> <Condition Level='1'>VersionNT64</Condition> </Feature> - jquan
如果您启用了验证,您应该会看到一个ICE80错误。 - Christopher Painter
为了从x86安装程序写入x64区域,我故意抑制ICE80警告。 - jquan
这个回答:https://dev59.com/z3I-5IYBdhLWcg3wYnSQ#2577367 是我正在尝试的,并且在x64平台上运行x86安装程序时可以正常工作,但是在x86平台上无法工作。 - jquan
2个回答

4
Windows Installer不支持创建一个写入64位位置的x86包。您需要创建一个64位的包。这是一个古老的限制,每个人都感到不安。
相反,您需要为64位软件创建64位MSI包,然后将其与32位MSI包放在一个“Bundle”中。 “MsiPackage”元素可以具有一个“InstallCondition”,以确定何时安装64位包。

这就是我一直在阅读的内容,但在我彻底放弃之前,我想我不明白为什么似乎有些人成功地做到了我正在尝试做的事情?请参见上面的答案以及https://dev59.com/MlfUa4cB1Zd3GeqPLMQF#8229503。 - jquan
嗯,我发现我在创建注册表项以更改权限级别时使用了PermissionEx元素,这似乎导致调用SchedSecureObjectsRollback_x64操作。如果我删除该元素,则安装实际上可以正常工作。 - jquan

0

Feature 中删除 Condition 。 你已经在 Component 中有了那个条件。

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

说实话,我不确定这是否能解决问题,但在我的Wix设置中,我有一个几乎相同的代码,但我只将Condition放在Component中,而不是Feature中,它按照我的期望工作:仅在x64上安装该组件并写入注册表键,同时在x86或x64上安装其他所有内容。

谢谢您的建议,但很遗憾对我没有起作用。顺便说一下,在您的示例中,要启用该功能,Level必须等于1。 - jquan
好的观点。在我的项目中,它处于1级,所以我想这是另一个区别。很抱歉它没能解决你的问题。我已经没有更多的想法了。 :-( - Nate Hekman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接