2014-02-27 112 views
1

我有一個COM庫,我想在Wix安裝期間在COM中註冊。將.dll註冊到COM時出錯

起初,我試圖使用heat命令收集信息,但沒有收集到該.dll文件。然後,我認爲我的圖書館是錯誤的,並試圖安裝使用手動regsvr32命令是這樣的:

regsvr32.exe /s "RouteToMyLibrary/MyLibrary.dll" 

而且它沒有正確安裝......

然後,我決定使用CustomAction,而不是安裝該.dll因爲它看起來對我來說是一個解決方案。

所以我寫了下面CustomAction

<CustomAction Id="RegisterCOMLibrary" 
       Directory"DirIdOfWhereMyComLibraryIsLocated" 
       ExeCommand='regsvr32.exe /s "[DirIdOfWhereMyComLibraryIsLocated]MyLibrary.dll"'></CustomAction> 

<InstallExecuteSequence> 
    <Custom Action="RegisterCOMLibrary" After="InstallFinalize">NOT Installed</Custom> 
</InstallExecuteSequence> 

但是,當我運行安裝程序,就啓動1722錯誤。

我運行安裝程序編寫一個log.txt這樣的:

msiexec /i MyInstaller.msi /l*v log.txt 

而且我可以看到1722的錯誤。 注:

  • 的目錄路徑指向正確的地方
  • 如果我從日誌exctract的regsvr32命令,並嘗試執行它,它REGISTER COM庫。

任何想法,我在做什麼錯了,爲什麼我不能註冊我的.dll使用自動化的CustomAction從維克斯?

注意:當我做heat file mylibrary.dll -out mylibrary.wxs它說:

Could not harvest data from a file that was expected to be a SelfReg DLL... 

回答

1

看起來像是你的COM DLL有問題,或者它缺少依賴,阻止它通過heat.exe加載。兩個工具,可以幫助:依賴學步車和regspy:

RegSpy(免費菲爾·威爾遜等人,從斯特凡·克魯格的http://installsite.org/tools page下載。):

Dependency Walker(免費軟件從史蒂夫·米勒):

首先嚐試RegSpy以確定它是否可以提取COM數據從DLL。如果這不起作用,請使用Dependency Walker來檢查是否缺少阻止加載dll的依賴項。這些可能是其他的DLL或甚至資源文件,如圖像或語言的DLL只是資源(有時與圖像)。

根據運行這兩個工具的結果,您可能需要修復dll中的某些內容,或者只是在所有依賴關係都正確的情況下執行com數據提取。

請注意,一些COM文件真的瘋狂註冊過程中的事情 - 如更改TCP/IP的網絡參數或上帝知道還有什麼。很少見,但COM組件的設計錯誤嚴重。 RegSpy可以揭示這一點,但如果您重新打包應用程序,通常會發現它。

2

錯誤1722年僅僅意味着程序意外結束,impying這不是一個路徑問題。根據Dll或regsvr32的版本是64位還是32位,「正確路徑」的想法可能是一個問題。在32位Dll上運行64位regsvr32可能會導致該問題。這對我來說也不是很明顯(在自定義操作的情況下),Windows會自動知道您想要的regsvr32的位數和位置。

簡短的回答是你應該修復熱量收穫問題。它是一個64位的Dll嗎?

+0

菲爾,我還沒有在64位上試過你的RegSpy工具。它仍然有效嗎?它是我發現的唯一能夠正確地從EXE文件中提取COM的工具。 –

+0

我不知道它是否仍然有效,對不起。在installsite.org上有一個更新版本,可能仍然會保留。 – PhilDW