我有一個用於32位應用程序(使用MakeMsi構建,最初用於Windows XP,並自此之後進行簡單維護)的安裝程序包,無法註冊COM服務器在現代(64位)Windows系統上(7,8,10)。這是我看到想正常安裝MSI我時:避免將MSI帶入兼容模式「以前的Windows版本」
應用程序錯誤
異常EOleSysError模塊XYZ在000F0B01。訪問OLE註冊表時出錯。
如果我把MSI在兼容模式以前的Windows的版本中,COM服務器註冊成功。由於「它正在工作」不知何故,我沒有花費太多時間探索迄今的原因。但最後,我已經精疲力竭地記住我們的客戶(有時候也是我)在這個先決條件中的一次又一次,所以我想解決這個問題。
登記(並且註銷)經由CustomAction S DONE,在我尋找到它使用奧卡:
"[INSTALLDIR.MYAPP]\placeholder.exe" -regserver
"[INSTALLDIR.MYAPP]\placeholder.exe" -unregserver
對於每個那些條目,Type
是1122
和Source
是INSTALLDIR.MYAPP
。
我可以想象,COM服務器在安裝過程中啓動時權限不足,但不是安裝程序自動運行的管理員權限?我的意思是,當我(作爲標準用戶)通過雙擊啓動安裝程序時,它會在之前顯示UAC提示進行實際安裝。爲什麼COM服務器不能以提升的註冊和註銷權利運行?它令人困惑...
我應該如何更改我的MSI以使Windows安裝程序成功處理它?
事實上,自我註冊在MSI軟件包中非常不受歡迎,原因如下(請閱讀https://msdn.microsoft.com/en-us/library/windows/desktop/aa371608.aspx)。我只在沒有其他選擇時才使用它(幾個極其古老的第三方OCX控件,它們極力阻止我確定他們在註冊表中寫入的密鑰) –
寫完問題後,我偶然發現這篇文章正是這樣說的:[*'使用自注冊是非常強烈的不鼓勵微軟,應該不惜一切代價避免。* *(https://www.firegiant.com/wix/tutorial/com-expression-syntax- miscellanea/components-of-a-different-color /)現在我確定這是我的問題。你有沒有想過如何獲得不屬於VS解決方案的COM服務器(exe)的註冊表項?我的意思是,除了在體外自我註冊之前和之後對註冊表進行區分? – Wolf
關於*問題出現在可執行文件中*:我認爲這個可執行文件最有可能是正確的,但是權限並不適合。如果我開始自我註冊的exe文件,我必須使用管理員權限來執行此操作。 (當然,我認爲自行註冊並不是安裝時的正確選擇。) – Wolf