在Wix安装期间注册.NET COM DLL

在Wix安装期间注册.NET COM DLL,wix,Wix,背景: 我们的应用程序是一个更大应用程序的插件。我们创建的所有东西都是大型应用程序挂钩的DLL文件。因此,必须为COM接口注册DLL文件 我们有一个正在工作的项目,但由于许多原因,我不想在这里详细介绍,我们希望将其迁移到。安装程序要做的唯一一件事就是为COM注册我们的DLL文件 问题 下面是一个带有单个DLL文件的示例组件 <Component Id="MyComponent" Guid="COMPONENT-GUID" SharedDllRefCount="yes" > &

背景:

我们的应用程序是一个更大应用程序的插件。我们创建的所有东西都是大型应用程序挂钩的DLL文件。因此,必须为COM接口注册DLL文件

我们有一个正在工作的项目,但由于许多原因,我不想在这里详细介绍,我们希望将其迁移到。安装程序要做的唯一一件事就是为COM注册我们的DLL文件

问题

下面是一个带有单个DLL文件的示例组件

<Component Id="MyComponent" Guid="COMPONENT-GUID" SharedDllRefCount="yes" >
    <File Id="MyDLL.dll" Name="MyDLL.dll" KeyPath="yes" Assembly=".net" 
          AssemblyManifest="MyDLL.dll" AssemblyApplication="MyDLL.dll" />
</Component>
我有点搞不清楚该如何输入CLSID ID。我输入了生成的GUID并安装了它。它安装得很好,但较大的应用程序找不到DLL文件。(我使用了从
heat.exe
生成的接口标记)

在同一问题中发现的另一种方法(Adan Tegen)建议使用 heat.exe文件myDll.dll-out my.wxs

使用输出,我将其添加到文件标记中:

<TypeLib Id="Another Guid" Language="0" MagorVersion="1">
    <!--Interfaces generated from heat.exe-->
</TypeLib>

我尝试注册.NET for COM的每一个方法都失败了,在阅读了这么多关于这个主题的问题后,我几乎不知道正确的注册方法。我该怎么办?为什么这是一项如此困难的任务,而WiX中的其他一切都相当简单

我应该提到,原始项目创建了一个自定义操作,该操作将调用
regasm.exe
。如果其他一切都失败了,这可能是一种可能性,但我宁愿把事情做好

我刚刚发现
heat.exe文件myDll.dll-scom-omydll.wxs
输出的注册表值与我需要的类似。现在,如何在DLL组件中引用新创建的组件

我刚刚发现
heat.exe文件myDll.dll-scom-omydll.wxs
输出的注册表值与我需要的类似

你确定那里有
-scom
吗?好了,这个选项实际上会禁止COM注册

现在如何在DLL组件中引用新创建的组件

heat.exe
生成的组件已包含DLL的
文件
元素。因此,它实际上包含安装和注册DLL文件所需的所有内容。您不需要原始的“DLL组件”

如果需要将文件及其COM注册放在单独的组件中,则必须从heat.exe生成的组件中删除
文件
元素

此外,组件不能引用其他组件。不过,您可以在s之间使用引用,这是我们在wixlibs中大量使用的东西,但这是一个相当高级的用例。

所以在我的示例中,我只添加了?我的heat.exe命令应该是什么?这个-scom来自我在谷歌搜索时发现的一个建议。我觉得它很奇怪,但它给了我我所期望的CSLIDs。heat.exe文件myDll.dll-o myDll.wxs?我使用了“heat.exe文件myDll.dll-o myDll.wxs”的输出。谢谢
<TypeLib Id="Another Guid" Language="0" MagorVersion="1">
    <!--Interfaces generated from heat.exe-->
</TypeLib>