更新:看起来确实是WiX限制 - Cannot add 64bit com+ component (3.0.3907.0)
我有一个带有使用WiX 2.0创建的MSI安装程序的.NET应用程序。安装程序创建COM +应用程序(以及其他内容)并将.NET程序集作为组件安装到此应用程序中。此DLL是纯托管的,但它调用混合DLL,可能是32位或64位。在32位平台上一切正常。但是,在64位上,COM + dllhost.exe进程以32位运行,随后无法加载本机DLL。当我查看注册表时,我可以看到COM +组件DLL已在Wow6432Node键下注册,我认为这就是为什么dllhost以32位运行。
如果我使用“组件服务”管理单元删除并重新添加DLL,则它们都会在“真实”注册表中正确注册,而dllhost将以64位开头。如何让安装程序执行相同操作,即。将其正确注册为64位DLL?我已经将Package Platform属性设置为“x64”并为每个Component设置Win64 =“yes”属性,但这些似乎没有帮助。
COM +组件的WiX源代码如下:
<Component Id="C_My.Server.dll_ComPlus" Guid="0117c6c5-387a-4b67-9a7f-273d5db3affd" Win64="yes">
<File Id="F_My.Server.dll_ComPlus" Name="SERVER.DLL" LongName="My.Server.dll" Vital="yes" KeyPath="yes"
Assembly="no" DiskId="1" Source="..\Server\bin\$(var.Configuration)\" />
<pca:ComPlusApplication Id="MyServerComPlusApp" Name="My Server" RunForever="yes"
ApplicationDirectory="[INSTALLDIR]ComPlusConfig" ApplicationAccessChecksEnabled="no"
Identity="[ComPlusUserName]" Password="[ComPlusPassword]">
<pca:ComPlusAssembly Id="MyServerComPlusAssembly" DllPath="[#F_My.Server.dll_ComPlus]"
TlbPath="[#F_My.Server.tlb_ComPlus]" Type=".net" RegisterInCommit="yes">
<pca:ComPlusComponent Id="CheckInterface" CLSID="d4cf3da5-83ad-4436-b174-eccdb121a9ea" />
</pca:ComPlusAssembly>
</pca:ComPlusApplication>
</Component>
答案 0 :(得分:1)
这很可能是COM + CustomAction的缺陷。它现在可能只支持32位代码。