更新:看起来这确实是一个 WiX 限制 -无法添加 64 位 com+ 组件 (3.0.3907.0)
我有一个使用 WiX 2.0 创建的带有 MSI 安装程序的 .NET 应用程序。安装程序创建一个 COM+ 应用程序(除其他外)并将一个 .NET 程序集作为组件安装到该应用程序中。此 DLL 是纯托管的,但它调用可能是 32 位或 64 位的混合 DLL。在 32 位平台上一切正常。然而,在 64 位上,COM+ dllhost.exe 进程作为 32 位运行,随后无法加载本机 DLL。当我查看注册表时,我可以看到 COM+ 组件 DLL 已在 Wow6432Node 键下注册,我认为这就是 dllhost 以 32 位运行的原因。
如果我使用组件服务管理单元来删除和重新添加 DLL,它会在“真实”注册表中正确注册,并且 dllhost 以 64 位启动。我如何让安装程序做同样的事情,即。将其正确注册为 64 位 DLL?我已经将 Package Platform 属性设置为“x64”,并为每个组件设置了 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>