首頁 > 後端開發 > C++ > 如何使用 Wix MSI 安裝程式將 CPP DLL 正確註冊到 COM 中?

如何使用 Wix MSI 安裝程式將 CPP DLL 正確註冊到 COM 中?

Susan Sarandon
發布: 2024-11-19 03:00:03
原創
574 人瀏覽過

How to Properly Register a CPP DLL into COM Using Wix MSI Installer?

使用Wix Msi 安裝程式安裝後將CPP dll 註冊到COM

簡短的總結答案

您需要停止🎜>您需要停止使用批次檔和自訂作業進行COM 註冊(不可靠),而是使用heat.exe 工具擷取COM 註冊資訊從WiX 工具包在編譯時將COM 註冊新增至您的MSI 資料庫。

64 位元二進位檔案有一些複雜性,請參閱下面的詳細資訊。幸運的是,根據上面顯示的安裝目錄,您似乎正在處理 32 位元元件。

在這種特殊情況下,當所有依賴項都「在」時,它有助於在部署後在COM 檔案上運行heat.exe place」以便正確載入COM 檔案。這些答案中有很多“調試通信” - 我會將其保留在將來,但首先嘗試這個簡單的解決方案。詳細的答案

在我嘗試回答這個問題之前(這似乎圍繞缺少依賴項或批處理文件中發生了一些奇怪的事情),我想為您澄清一些有關COM 最佳實踐的事情

自我註冊被認為是有害的

自我註冊不應用於註冊COM 檔案。 - 自我註冊被認為有害](https://stackoverflow.com/questions/2736641/com-registration-where-did-the-idea-of-no -自我註冊-來自/2737548#2737548)。好消息,一旦正確設置,透過內建MSI 機制按預期執行操作將變得更容易、更可靠。提取- 換句話說,當您從WiX 原始檔編譯MSI 檔案時。 。提供了「heat.exe」工具。 WiX 原始文件,可以安裝遍歷過程中遇到的文件。

因此我們確定您應該花時間學習如何使用 heat.exe 產生正確註冊 COM 檔案所需的 WiX 來源。但是,還有一個問題:缺少依賴項。

為了讓 COM 檔案能夠自行註冊,或者讓您能夠使用 heat.exe 成功提取 COM 註冊表資料 - COM檔案必須能夠正確載入。為此,所有 dll 依賴項必須在相關係統上的可存取位置可用。

取得 Dependency Walker 的副本,並使用它掃描您的 COM 檔案以查找它所依賴的檔案。以下是因為找不到MMUtilities.dll 而無法載入的COM 檔案的範例:

[Dependency Walker 輸出的影像顯示缺少依賴項]

您很可能會發現類似的錯誤當當它從您的安裝程式的安裝位置執行時,與您的dll(或任何檔案類型,例如OCX)一起使用。 regsvr32.exe 找不到所需的依賴文件,註冊過程失敗。

有一些報告缺失的依賴項並不重要 - 我猜這與年齡有關Dependency Walker 工具的版本 - 據我所知,它最近還沒有更新。尋找您認為是您自己的依賴文件或核心系統文件的文件,而不是您從未聽說過的非常長的 dll 名稱文件。請記住,某些 dll 具有載入所需的依賴語言 dll。例如,MMUtilities.dll 需要 MmUtilitiesEnglish.dll 或同一資料夾中存在的其他語言 dll 才能正確載入。

上述文件的一些範例誤報依賴項:API-MS -WIN-CORE-RTLSUPPORT-L1-1-0.DLL,API-MS-WIN-CORE-PROCESSTHREADS- L1-1-0.DLL, API-MS-WIN-CORE-REGISTRY-L1-1-0.DLL等...有很多。我相信,但我不確定,這些誤報的根本原因集中在安裝到

的並行組件的問題上

以上是如何使用 Wix MSI 安裝程式將 CPP DLL 正確註冊到 COM 中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板