2012-07-23 128 views
0

我正在創建一個安裝程序,它將爲我們的Access應用程序使用.NET COM組件。當我安裝COM DLL到INSTALLDIR時,它工作正常。我把它留給WIX來做COM註冊,通過運行熱量來收穫dll和tlb。但是現在我們想要將dll安裝到GAC,並且只有tlb文件將被安裝在INSTALLDIR中。我們的目標是我們的軟件的不同版本(可以在同一臺機器上安裝它們)可以使用相同的COM版本,並且在卸載我們的軟件的一個版本後,其他版本仍然可以工作(當我們安裝DLL到INSTALLDIR,對嗎?如果我的方式錯了,請糾正我)。安裝到GAC的COM DLL時WIX安裝失敗

問題出在這裏:爲了將它安裝到GAC中,我想我應該在dll文件聲明中添加一個Assembly =「。net」。但是,在安裝過程中,出現此錯誤: 「錯誤處理程序遇到問題:自動化錯誤系統找不到指定的文件。」當我在提交階段調用一個COM方法(我們創建的訪問參考)時,即在註冊COM之後。顯然我的COM沒有成功註冊。但我不知道爲什麼會發生這種情況。正如我所提到的,我做的唯一改變是添加這個Assembly =「。net」。在此之前,COM註冊是可以的,我正在成功地調用它。

任何幫助,將不勝感激。謝謝!

回答

1

這不會工作,因爲GAC是基於.net的dll的,並且不會接受COM dll的。要親自查看並將該DLL下載到文件夾C:\ Windows \ assembly中,您將收到一條錯誤消息,指出它沒有程序集清單。

你應該做的是保持組件的GUID相同的所有版本的安裝程序對於特定的COM DLL。通過這種方式,Windows安裝程序將記錄哪些應用程序正在使用它,並且只有在最後一個應用程序被移除後才能將其卸載。我也會把它放到它自己的安裝文件夾中,否則當第一個安裝的版本被卸載時,你會得到一個應用程序安裝文件夾。

另一種選擇是將它分離到它自己的安裝程序中並使用引導程序將它們安裝在一起。

+0

再次感謝。關於COM註冊,爲了使Windows安裝程序跟蹤COM組件,我應該維護什麼Guid以及我應該讓WIX分配哪些內容?正如你所提到的,COM DLL的Component Guid應該總是一樣的。但還有一些其他的:我的COM接口類的ClassInterface的一個(我認爲我應該保持它們對於不同版本相同)。 tlb接口的名稱與dll接口具有相同的接口名稱,並帶有前面的下劃線(_)。我應該讓它們保持一樣嗎? – tete 2012-07-25 08:49:00

+0

有關與COM + lib相關的任何內容應保持不變。當你使用熱量來收穫dll時,你可以使用「-gg」開關,這會爲你生成所有需要的GUID。 – 2012-07-25 09:31:18

+0

是的,我知道-gg開關,它實際上就是我問的原因:它每次運行熱量時都會生成一個新的GUID,我認爲這與「保持GUID相同」相反。目前,我每次安裝我的安裝程序項目時都會發熱。我記得有人說散熱應該只運行一次,或者至少靜態運行一次,但是他們確實創建了我正在使用的MSBuild任務HeatFile,所以每次安裝程序生成時都會運行散熱。在這種情況下是否需要生成新的GUID? – tete 2012-07-25 10:04:35