簡體   English   中英

msi 安裝程序中修復選項的用途是什么,它到底有什么作用(內部)?

[英]What is the use of Repair option in a msi installer and what does it really do (internally)?

我有一個使用 WIX 部署的軟件包。 當我安裝后再次運行安裝程序時,它提供了修復選項,它到底是做什么的?

修復:如果問題是修復做什么,那么它會檢查已安裝產品的所有組件關鍵路徑,並安裝任何可能丟失的組件 - 出於某種原因。 從本質上講,您的產品只是檢查是否已完全安裝,然后修復錯誤。

您應該注意修復意外重置注冊表值的一些問題。 此處描述了此問題以及 MSI 的許多其他常見問題(非常混亂的概述,但如果您看到任何您認識到的相關問題,則可能略過): 如何避免 WiX / MSI 部署解決方案中的常見設計缺陷?


自我修復:您可能還因為 WiX 源文件/MSI 輸出文件中的設計錯誤而觸發了Windows Installer 自我修復

這是一種自行修復,無需您自己再次運行安裝程序 - 或者從Add/Remove programs 相反,它是通過某些“ 廣告入口點”自動調用的,這些入口點會自動觸發密鑰路徑檢查。 例如,啟動廣告快捷方式或調用 COM 類的行為以及其他一些類型的操作(請參閱鏈接內容)。

我已經寫了太多次關於自我修復的文章,我只會鏈接到現有的答案。 請先嘗試最后一個(如何在您自己的包中避免它):

  1. 自我修復 - 解釋
  2. 自我修復——尋找現實世界的解決方案
  3. 自我修復 - 如何在自己的包裹中避免它

如果問題不是自我修復,那么您應該知道,當您再次運行安裝程序時,出現修改/修復對話框是正常的,因為該產品已經安裝。 這是正確的行為。


鏈接

@Stein Asmul 的鏈接深入解釋了很多事情,對我來說,用簡單的話來說,這就是 MSI 修復/自我修復的作用。 如果您編寫過 MSI,您就會知道它由多個功能組成,而每個功能又由多個組件組成 簡單來說,修復選項將每個組件的 ID/主密鑰與運行它的工作站的 ID/主密鑰進行比較。 如果工作站上缺少組件 ID/主密鑰之一,它將重新安裝該組件。

例如,如果我們有 2 個組件,組件一安裝 abc.txt,組件二安裝 xyz.txt。 修復將去檢查組件 1 和組件 2 的 ID/主鍵,以確保它們存在於工作站/服務器。 如果它不存在,它將重新安裝它。 @Stein Asmul 的鏈接應該有更多細節,這是一個非常簡單的簡短回答。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM