Обновление: похоже, что это действительно ограничение WiX - Невозможно добавить 64-битный компонент com + (3.0.3907.0)
У меня есть приложение .NET с установщиком MSI, созданное с использованием WiX 2.0. Установщик создает приложение COM + (среди прочего) и устанавливает сборку .NET в качестве компонента в это приложение. Эта DLL-библиотека является чисто управляемой, однако она вызывает смешанную библиотеку DLL, которая может быть 32-разрядной или 64-разрядной. На 32-битной платформе все работает отлично. Однако в 64-разрядной версии процесс COM + dllhost.exe выполняется как 32-разрядный и впоследствии не может загрузить собственную DLL. Когда я просматриваю реестр, я вижу, что DLL-библиотека компонента COM + зарегистрирована под ключом Wow6432Node, и я предполагаю, что именно поэтому dllhost работает как 32-разрядный.
Если я использую оснастку «Службы компонентов» для удаления и повторного добавления библиотеки DLL, она все правильно регистрируется в «реальном» реестре, и dllhost запускается как 64-разрядный. Как заставить установщик сделать то же самое, т.е. правильно зарегистрировать его как 64-битную DLL? Я уже установил атрибут Package Platform на «x64» и установил атрибут Win64 = «yes» для каждого компонента, но, похоже, это не помогло.
Источник WiX для компонента COM + выглядит следующим образом:
<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>