2010-09-11 113 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

相關問題