Installation

如何加快 MSI 軟體包的安裝和解除安裝速度?

  • January 23, 2019

安裝和解除安裝Windows Installer 包或稱為 MSI 文件時,安裝進度似乎比其他安裝包慢得多。

為什麼會這樣,我該怎麼做才能加快速度

快速總結

  • 需要調整的速度屬性:

    • MSIFASTINSTALL(試試看,也許是37
    • FASTOEM(三思而後行,必須閱讀文件)
    • DISABLEROLLBACK(理解它的意思,可能會導致 MSI 包中的自定義操作無法執行!這取決於 MSI 設計 - 查找送出回滾自定義操作
  • 可以暫停安全軟體以加快安裝速度。

  • 嘗試從管理映像替代資訊)執行(無需文件提取)。

    • 從本地管理映像執行將是最快的。

    • 如果您使用網路管理映像,高延遲網路可能會減慢安裝速度?

      • 每個文件(小文件)的潛在成本很高。
      • 下載單個 CAB 可能會更快(病毒檢查可能需要很長時間)?
  • 可以在機器上全域禁用系統還原(不僅僅是通過 MSIFASTINSTALL)。

背景資料

Windows Installer 會話的緩慢主要是由於它的回滾功能。首先,它會在安裝或解除安裝之前創建一個還原點(前提是系統還原未被禁用)。然後它將在解除安裝和安裝過程中備份所有受影響的文件和系統資料庫項,以確保系統在發生錯誤時可以恢復到其原始狀態。更高版本的 Windows Installer 提供了一些方法來禁用這種複雜性並加快速度。請參閱下面的技術資訊。

另一個速度因素是MSI 中的所有組件和功能都將在系統資料庫中註冊。這涉及相當多的成本,但對於實現重要的公司部署和系統管理優勢是必要的。沒有其他部署技術具有這種級別的控制。

帶有嵌入式源文件的大型 MSI 文件可能需要大量時間才能將其安裝程序文件提取到臨時文件夾。這有時可能是最大的瓶頸。建議執行管理員安裝以從此類包中提取源文件,以便它們與 MSI 文件本身並排顯示,從而無需在每台電腦上本地提取文件,從而節省部署時間。這是另一篇簡單描述從 MSI 包中提取文件的文章。


技術資訊


更新(2018 年 2 月):您可以在非常特殊的情況下設置名為FASTOEM的屬性(請參閱連結內容)以加快部署速度。我從未嘗試過,但值得一讀。我懷疑你會成功有效地使用它,但它可能值得一試。


在撰寫本文時,Windows Installer 的最新更新Windows Installer 5(適用於 Windows Server 2012、Windows 8、Windows Server 2008 R2 或 Windows 7)具有一個新屬性MSIFASTINSTALL,可用於加快安裝一個大的 MSI 包。有關有效值,請參見上面的連結。我建議3****沒有還原點,只有FileCosting(確定磁碟空間要求的過程)。或7以減少進度消息的頻率。

正常的“成本核算”具有大量功能、組件、磁碟和系統資料庫比較以及系統上存在的內容與正在安裝的內容之間的計算。在我看來,大部分都很少需要(客戶端 PC 上的磁碟空間通常很充足——而在 2018 年的現實中,由於 SD 磁碟較小,空間問題可能已經重新浮出水面……),但讓完整的磁碟空間顯然更安全成本核算。

msiexec.exe /I “D:\winzip112.msi” /QN MSIFASTINSTALL=3

也可以設置DISABLEROLLBACK屬性以禁用 MSI 安裝程序中的回滾支持。**我強烈建議您不要使用它,除非您準備新的 PC。**這是一種特殊情況,如果出現故障,您可以重新開始。對於實際使用的電腦,我不建議啟用此屬性。

具有諷刺意味的是,如果您正在執行替換大量文件的大型更新包或任何大型解除安裝(因為解除安裝會將所有已刪除的文件移動到回滾區域),禁用回滾將加快速度。它可能非常重要,但不安全。您只需在命令行中設置此屬性: msiexec.exe /I “D:\winzip112.msi” /QN MSIFASTINSTALL=3 DISABLEROLLBACK=1

行政安裝

最後,如上面在背景資訊中所述,執行 MSI 文件的管理安裝以提取文件,以便提取不會在每台電腦上本地進行。這假設您在一個相當快的網路上,並且文件複製發生時沒有太多延遲。我想高延遲的無線網路可能會使提取的小文件變得更慢,這些文件必須一個一個地複制。您只需將 /a 傳遞給安裝文件即可執行管理員安裝:

安裝程序.exe /a

或者

msiexec /a “D:\winzip112.msi”

然後,您需要按照提示選擇文件的提取位置。有關討論此功能的執行緒,請參見superuser.com


一些連結

速度:

引用自:https://serverfault.com/questions/594660