2014-02-06 151 views
1

我正在爲我開發的解決方案構建安裝程序。我的一個項目的輸出是需要註冊的dll。我使用Visual Studio生成MSI,然後使用InstallShield修改它。在Visual Studio中,我添加了需要執行管理員權限的自定義操作,並將dll的註冊屬性設置爲vsdrpCOMSelfReg。當我在沒有管理員權限的情況下運行msi時,會顯示一條消息,指出操作需要管理員角色,當我確認並更改用戶帳戶時,安裝完成時沒有任何錯誤,但是該dll不會被註冊。 我錯過了什麼嗎?如何正確註冊一個DLL? 任何幫助將不勝感激。Installshield MSI無法註冊dll

+0

你爲什麼要構建一個Visual Studio MSI,然後說InstallShield失敗? –

+0

'我用Visual Studio生成一個MSI,然後用InstallShield修改它。「這就是我所說的 – Kira

回答

4

SelfRegistration不是Windows安裝程序的最佳實踐。正確的方法是將COM元數據寫入MSI,並允許MSI複製文件並應用註冊表數據。在InstallShield中,通過爲您的DLL創建組件,將該DLL標記爲密鑰文件,然後右鍵單擊該文件並選擇Extract COM來實現此目的。然後,InstallShield將模擬註冊並將該信息創建爲正確的表格。在一臺乾淨的機器上構建和測試。不需要自定義操作,安裝程序將正確支持回滾場景。

2

沒有理由,甚至創建自定義操作要做到這一點,即使是Visual Studio中。將該文件標記爲vsdrfCOM,並將構建時將類註冊解壓縮到MSI的Class表中。即使你堅持自注冊,你也可以將它標記爲vsdrfComSelfReg,它將從MSI文件的SelfReg表中註冊。根本沒有自定義操作。無論如何,正如克里斯托弗所說的那樣,在安裝時進行自我註冊並不是一個好習慣,原因有很多,其中之一是缺少依賴關係。