2013-01-03 53 views
0

我使用WIX工具集中的heat util來生成一個dll的COM註冊。所有工作正常,直到只有一個產品使用該DLL。如何用Heat生成可重用的COM註冊組件?

但是,當該DLL已被其他產品註冊或被稍後安裝的產品使用時,卸載我的產品會刪除DLL註冊並中斷其他應用程序。

有沒有辦法解決這個問題?我有一個想法,使生成的組件永久,但看起來像沒有簡單的方法來實現它。這不是理想的情況,因爲如果我們的應用程序是使用該dll的opny應用程序,那麼刪除DLL註冊會更好。

另一個問題是註冊DLL改變了以前的註冊,即使它有更新的版本。它將再次破壞其他應用程序。如果已經安裝,我們希望使用從不版本。

任何人都可以推薦一個簡單的解決方案來克服所描述的問題嗎?

回答

1

添加共享DLL時,應該將DLL封裝在兩個產品中具有相同ID的組件中。組件尚未安裝時將安裝。當使用它的最後一個產品被卸載時,它將被刪除。使用WiX庫來處理共享組件。您將不得不爲該共享DLL找到安裝位置。卸載產品A時,您會期望產品的安裝文件夾被刪除,產品B也顯示相同的內容。因此,共享DLL應該位於「公用文件」樹中。

由於COM註冊始終是COM服務器DLL的絕對路徑,因此它始終與相應產品中的DLL綁定。如果產品安裝人員不共享有關共享DLL的知識,則應避免共享DLL。您可以使用Registration Free COM來實現此目的。

+0

但是這個組件並不僅僅用在我的安裝程序中。 「產品A」是第三方。我會嘗試得到它的組件ID,但沒有很大的希望它會起作用=(。 –

+0

問題的標題提到了一個'可重用的COM註冊組件'。當你有第三方安裝程序時,它們將不會重用你的安裝程序組件 – harper

+0

是的,可能標題沒有詳細描述問題......對不起,但實際上我需要讓我的組件在我的產品中可重用,而其他一些產品已經使用該DLL並執行COM註冊。將dll放入共享文件夾並在卸載時將其刪除,理想情況是將我的dll從「their」中分離出來,但據我所知,由於共享的COM對象是不可能的,否則我不會問在這種情況下,你有任何解決方法的想法嗎? –