更新:これは確かにWiXの制限のようです-64ビットcom +コンポーネントを追加できません(3.0.3907.0)
WiX2.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として正しく登録しますか?PackagePlatform属性を"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>