2010-05-14 72 views
1

我一直堅持這一段時間。我會盡我最大的努力盡我所能解釋。我會尊重任何幫助。使用C#安裝項目取消註冊COM DLL

我有一個C#項目,它使用了我不斷更新的VB6編譯的ActiveX DLL。 我編譯安裝項目,發送給客戶端,他們運行安裝程序。在構建更新的安裝項目時,我會增加安裝項目的'版本',以免它'已安裝另一個版本'。

幾個更新後開始發生什麼我開始注意到DLL不會更新到安裝程序中的新版本。客戶端計算機安裝並註冊了原始DLL。第一個症狀:方法找不到客戶端C#代碼的異常。

這不是一個共享的DLL,只有這個應用程序需要它。

我注意到,卸載應用程序(通過通常的過程)時,DLL也不會從應用程序文件夾中刪除,雖然我將該文件的屬性'永久'設置爲false。註冊表中的註冊條目也得到了遵守。

在構建它之前,我會在VS6.0中更新DLL的版本(通常會增加內部版本號)。然後在VS2008中,我將它從引用中移除,然後從「瀏覽選項卡」中再次添加它,而無需在我的開發機器上重新註冊並從COM選項卡添加它。

我想到了這些選項。在安裝項目

  • 定製步驟的regsvr32.exe/U「我的DLL的硬編碼路徑」,在卸載(醜陋的)
  • 不知怎的,找出如何在「隔離」屬性可以爲我工作,而無需註冊
  • 瞭解如何執行安裝項目「條件」,以便實際檢查庫的版本並在每次安裝時相應地更新文件)

任何幫助都將非常受歡迎。

+0

爲什麼你用來創建安裝程序? ClickOnce的?的InstallShield?自定義安裝程序? – 2010-05-14 04:06:17

+0

這不是一個大產品,我也想獲得一些經驗。我也相信我想要做的是基本的。我將來會尋找一種產品,但現在這是我的選擇。感謝您的評論。 – 2010-05-14 04:30:01

+0

我試過設置'Isolated'的引用屬性,並將設置項目中的Register屬性設置爲registerRelativePath(類似的東西)。我在構建安裝項目時收到警告,但似乎沒有註冊DLL並正在工作。儘管如此,仍然不會在卸載時將其刪除。 – 2010-05-14 05:08:57

回答

0

出於好奇?爲什麼不嘗試使用WiX? http://wixtoolset.org/

這是偉大的建築安裝,你可以很容易地爲做到這一點的東西是:當它被卸載

<File Id="guifreak3" Name="Guifreaks.NavigationBar.XmlSerializers.dll" Source="$(var.Plex.MobileHub.Client.Interface.TargetDir)Guifreaks.NavigationBar.XmlSerializers.dll"/> 

維克斯將自動刪除該DLL。