2010-09-11 70 views
1

我有一个vanilla .net类库,其中包含一些类型[ComVisible],程序集本身标记为“注册COM Interop”。我正在尝试为应用程序构建一个WIX安装程序,该安装程序不仅需要将.net程序集复制到目标机器上的INSTALLATIONDIR,还需要注册该对象以便一些传统的VB6应用程序可以使用.net程序集。使用wix注册.Net程序集标记为COM interop

我一直在使用heat.exe(更准确地说是加热文件任务)收集我通过componentGroupRef包含在我的主wix文件中的片段。我的问题是,heat.exe正在收获的文件应该是我的类库或dll本身输出的.tlb文件吗?如果我在.tlb上使用heat.exe,我没有在片段中获取任何注册表元素,但是我使用的是dll。如果我应该使用dll,那么.tlb在这个过程中扮演什么角色?

进出口使用下面的散热任务的MSBuild

<HeatFile 
    NoLogo="true" 
    ToolPath="$(WixToolPath)" 
    TreatWarningsAsErrors="false" 
    AutogenerateGuids="true" 
    GenerateGuidsNow="true" 
    OutputFile="$(MSBuildProjectDirectory)\fragments\DemoTypeLib.wxs" 
    File="$(SolutionDir)DemoClassLibrary1\bin\Debug\DemoClassLibrary1.dll" 
    ComponentGroupName="DemoTypeLibComponent" 
    PreprocessorVariable="var.DemoClassLibrary1.TargetDir" 
    SuppressCom="false" 
    DirectoryRefId="INSTALLLOCATION" 
    SuppressRegistry="false" 
    SuppressRootDirectory="true" /> 

回答

1

只是附带的DLL和它的COM的片段。你不需要TLB。

+0

嗨克里斯托弗。从你的答案我接受它我需要利用热量来收获dll而不是tlb?我只是将生成的片段添加到我的主wix文件中? – 2010-09-12 09:27:49

+0

正确。几个小心点要注意。有时Heat(以及来自其他供应商的工具)将无法提取一些所需的COM注册表值。基于.NET程序集中有多少元数据,这看起来几乎是不可能的,但这是由于当您执行gacutil/regfiles时,类中的任何用户代码都不会被调用。有关这方面的证据,请参阅MSDN gacutil帮助主题。 – 2010-09-12 13:34:20

+0

如果它在目标机器上无法正常工作,请使用像InstallWatch这样的程序来快照注册表;运行gacutil并执行另一个快照/差异报告以查看所做的任何更改。如果您发现任何相关的手动创作到您的片段并重建/重新部署。 COM是一种痛苦,有时很棘手,但一旦稳定下来,你应该没问题。 – 2010-09-12 13:35:24

2

您应该收获.tlb和.dll文件。一些工具只能使用DLL注册,但其他工具(如脚本语言)也需要类型库。简单地加热他们两个,并将两个输出都包含在您的最终项目中。例如,python的win32com和Perl的Win32 :: OLE库都需要注册才能运行的类型库。

+1

我可以添加动态导航(又名Navision到这个列表) – forki23 2011-12-19 10:46:05

相关问题