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