如何使用MSI(WiX)将.NET DLL安装到COM +应用程序中

时间:2008-12-17 01:54:57

标签: .net 64-bit wix windows-installer com+

更新:看起来确实是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>

1 个答案:

答案 0 :(得分:1)

这很可能是COM + CustomAction的缺陷。它现在可能只支持32位代码。