Windows Installer(MSI)套件很容易安裝在單一裝置上,但若要在數百台裝置上執行 Windows Installer 靜默安裝,就需要使用正確的命令。幸好,由於 Windows Installer 套件共用一組標準的 msiexec 選項,因此每個 MSI 的核心命令都相同。
考量到這一點,您可以在多台裝置上執行 msiexec 靜默安裝命令。不過,俗話說,魔鬼藏在細節裡。顯示層級、重新啟動行為、記錄,以及其他因素都可能影響 MSI 靜默安裝,並決定其成功或失敗。如果失敗,畫面上不會顯示任何內容,因此 exit code 和 log 就成了判斷問題出在哪裡的唯一記錄。
那麼,該如何正確執行 MSI 靜默安裝?接著來看看需要知道的參數、如何靜默安裝與解除安裝、如何修正常見錯誤等內容,讓您能輕鬆有效地執行 MSI 靜默安裝。
用於無訊息 MSI 安裝的 msiexec 安裝命令
首先,我們先來看看 msiexec 安裝命令,以及其中每個部分的意思。若要透過 cmd 安裝 MSI 套件,請開啟提升權限的命令提示字元,然後執行這個 msi 安裝 cmd:
msiexec /i "C:\Installers\App.msi" /qn /norestart /l*v "C:\Logs\App-install.log"
當然,如果看不懂命令列語法,這些內容對您來說就毫無意義。所以讓我們把它拆解成幾個更容易理解的部分:
/i 會安裝該套件。這是啟動流程的初始命令;請務必在後面以引號加上完整路徑,這樣資料夾名稱中的空格才不會導致命令中斷。
/qn 表示該命令應在沒有使用者介面的情況下執行。也可以使用 /quiet 作為對應的選項。
/norestart 會阻止 Windows Installer 在安裝完成後重新啟動裝置,即使套件要求重新啟動也一樣。這有助於避免安裝程序突然重新開機終端使用者的裝置,進而打斷工作。
/l*v 會將詳細記錄寫入指定的路徑。請記住,它所指向的資料夾必須已經存在。
請務必從提升權限的命令提示字元執行命令,這樣就不需要再要求權限。靜默安裝無法顯示 UAC 提示來要求系統管理員權限;否則就不算是靜默安裝。
如果是執行 PowerShell 呢?也有對應的類似指令碼,但有幾個關鍵差異:
$p = Start-Process msiexec.exe -ArgumentList '/i "C:\Installers\App.msi" /qn /norestart /l*v "C:\Logs\App-install.log"' -Wait -PassThru $p.ExitCode
在這種情況下,-Wait 參數會讓指令碼等待安裝完成,而 -PassThru 會傳回結束代碼。
用於無訊息安裝和主動安裝的 MSI 參數
接下來,我們來拆解無訊息安裝和主動安裝時需要了解的 MSI 參數。Microsoft 在其標準安裝程式命令列選項中記載了完整清單。請記住,msiexec 選項不區分大小寫,因此無論輸入 /QN 或 /qn,最終結果都相同。/quiet 參數就是大多數人所說的 msiexec quiet install,而 Microsoft 也將它視為與 /qn 相同。
我們可以將這些參數分成三組:顯示、重新啟動和記錄。每一項都是安裝流程中的重要部分,並決定該命令如何執行。
參數 | 群組 | 作用說明 |
/quiet 或 /qn | 顯示 | 完全沒有使用者介面 |
/qn+ | 顯示 | 沒有介面,安裝完成後會顯示對話方塊 |
/passive | 顯示 | 僅顯示進度列,不需要使用者輸入 |
/qb | 顯示 | 含進度列的基本介面 |
/qb! | 顯示 | 基本介面,並隱藏取消按鈕 |
/norestart | 重新啟動 | 安裝後絕不重新啟動 |
/promptrestart | 重新啟動 | 詢問使用者是否需要重新啟動 |
/forcerestart | 重新啟動 | 安裝後一律重新啟動 |
/l*v "path" | 記錄檔 | 所有內容的詳細記錄,並寫入該路徑 |
/log "path" | 記錄檔 | 與 /l* 相同(除 verbose 和額外偵錯資訊外的所有資訊) |
如果要跨大規模裝置群進行部署,常見的搭配方式是使用 /qn(或 /quiet)搭配 /norestart,而重新啟動則由部署工具處理。如果是需要讓使用者看見進度的安裝作業,也會想要使用 /passive。
請記住,msiexec 沒有 /s 或 /silent 參數,雖然 EXE 安裝程式有。EXE 安裝程式也缺乏共通的標準,因此處理起來會稍微複雜一些。
如何在靜默安裝中設定 MSI 屬性與轉換
當您想要自訂應用程式套件時,就需要了解如何設定 MSI 屬性和轉換。除非命令列已設定這些自訂項目,否則靜默安裝會使用套件預設值,因此了解該設定哪些項目相當重要。
設定屬性時,這些內容要接在參數後方,格式為 PROPERTY=VALUE。請記住,Windows Installer 會將屬性名稱視為大寫,但值會保留原本的大小寫;而且若值包含空格,則應以引號括起來。由於屬性名稱會因套件而異,建議查看製造商的部署文件來確認。
例如,設定 MSI 屬性時可能會像這樣:
msiexec /i "C:\Installers\App.msi" /qn INSTALLDIR="D:\Apps\App" /l*v "C:\Logs\App-install.log"
接著是轉換。轉換(.mst 檔案)會保存一組對套件所做的變更,因此可直接套用,而不必另外加到命令列。您可以使用 TRANSFORMS 屬性來加入它們,如下所示:
msiexec /i "C:\Installers\App.msi" TRANSFORMS="C:\Installers\App.mst" /qn /l*v "C:\Logs\App-install.log"
如何靜默解除安裝 MSI
當要以靜默方式解除安裝 MSI 時,這應該和安裝一樣簡單。IT 團隊經常需要移除套件,無論是為了替版本更新騰出空間、清理裝置,還是移除安裝失敗的套件。
/x 命令會移除套件,並接受與安裝命令相同的顯示、重新啟動和記錄切換參數。這可搭配原始 MSI 檔案或產品代碼使用,不過當裝置上已沒有原始 MSI 時,後者會更有幫助。
靜默解除安裝命令應如下所示:
msiexec /x "C:\Installers\App.msi" /qn /norestart /l*v "C:\Logs\App-uninstall.log"
要么:
msiexec /x {PRODUCT-CODE-GUID} /qn /norestart /l*v "C:\Logs\App-uninstall.log"
如何讀取 msiexec 結束代碼
使用 msiexec 時,會需要了解退出代碼。當 msiexec 完成一項工作時,會傳回退出代碼,讓指令碼和部署工具讀取,以判斷安裝程式是否正常運作、是否發生問題,或是否需要重新開機。Microsoft 在其MsiExec 錯誤訊息參考中列出了每個代碼。
msiexec 退出代碼如下:
結束代碼 | 意義 | 該怎麼做 |
0 | 成功 | 沒有 |
3010 | 成功,需重新啟動才能完成 | 排程重新啟動。視為成功 |
1641 | 成功,安裝程式已開始重新啟動 | 視為成功。預期裝置會重新啟動 |
1603 | 安裝期間發生嚴重錯誤 | 開啟詳細記錄檔以找出原因 |
1618 | 另一個安裝程序已在進行中 | 請稍候後重試 |
在某些情況下,指令碼會將任何非零代碼視為失敗。在這些情況下,即使應用程式已正確安裝完成,它仍會將 3010 和 1641 代碼標記為失敗。因此,在將安裝標記為失敗之前,請先檢查成功代碼;有時只需要重新啟動即可完成安裝。
無訊息 MSI 安裝失敗的原因與修正方式
有時候靜默安裝會失敗。發生這種情況時,會需要知道原因以及如何修正。雖然靜默安裝失敗時不會向使用者顯示任何內容,但可以調查以下項目以取得更多資訊:
1.安裝程式未以管理員權限執行
靜默安裝仍需要管理員權限才能執行,但如果缺少權限,它無法提示使用者。請務必從已提升權限的 Command Prompt,或使用具有管理員權限的部署工具執行安裝,這樣就不必擔心權限不足的問題。
在 Windows 10 上,錯誤 1925 可能表示缺少系統管理員權限。
2. 記錄檔資料夾不存在
Windows Installer 不會為記錄檔建立資料夾。如果 /l*v 中的路徑指向不存在的資料夾,記錄檔就會建立失敗。請確認記錄會寫入一定存在的資料夾,或在必要時先建立資料夾。
3. 另一個安裝程序已在執行中
Windows Installer 一次只能執行一個安裝程序。如果出現退出代碼 1618,表示安裝程式正在忙於處理另一個應用程式。幸好,這只表示您需要等待另一個安裝完成,然後再重試安裝。
4. 安裝發生嚴重錯誤
如果安裝過程發生錯誤,單看結束代碼並無法說明問題是什麼。在這種情況下,建議查看詳細記錄以取得更多詳細資料。這就是為什麼每個靜默安裝命令都應包含 /l*v,這樣一旦發生問題,就能查看記錄檔。
在多台裝置上執行 msiexec 靜默安裝
如果要在公司環境中管理多台遠端裝置,就需要有方法可在背景安裝應用程式和更新,而不打擾使用者。同一個應用程式可能需要部署到數百台裝置,因此在一台測試機器上可執行的命令,只是起點而已。
您可以透過多種方式在多台裝置上執行 msiexec 靜默安裝,包括:
透過 Microsoft Intune 部署 MSI
如果使用 Microsoft Intune,可透過兩種不同方式部署 MSI。
Intune 可以將 MSI 部署為企業營運單位 (LOB) 應用程式,而該應用程式只接受一個命令列引數。如果需要更多功能,則會需要使用 Win32 應用程式管理,將 MSI 封裝成 .intunewin檔案,而您的 msiexec 命令會成為應用程式的安裝命令。
請注意,在 Windows Autopilot 註冊期間混合安裝 Win32 與 LOB 應用程式,可能會導致安裝失敗,因為兩者會同時使用 Trusted Installer 服務。
使用指令碼或端點管理遠端執行安裝
如果未使用 Intune,可以透過 PowerShell、遠端存取連線或端點管理工具執行命令。例如,Splashtop AEM(Autonomous Endpoint Management)可在受管理端點上執行指令碼,並自動化修補程式管理,包括靜默安裝,以及安排在方便時段進行更新。如需完整操作說明,請參閱我們的指南:如何在遠端電腦上靜默安裝軟體。
工作堆積如山之處
執行命令是最簡單的部分。應用程式數量以及每個應用程式所需的工作,都可能讓這件事變得困難。
每個應用程式都需要各自的屬性和轉換,必須在乾淨的裝置上測試,還需要有方法確認安裝可正常運作,等等。每個新版本都必須重複這些步驟。如果沒有自動化,這就會持續產生大量手動工作,而未經測試的套件可能導致各裝置發生故障。
Splashtop Agentic Packr 可為每個應用程式與版本自動完成封裝與測試工作。
使用 Agentic Packr 建立經過測試的靜默安裝套件
建立、測試及無訊息安裝套件,不一定得是耗時的手動流程。透過 Splashtop Agentic Packr,可利用智慧自動化封裝與安裝,減輕 IT 團隊的負擔。
Splashtop Agentic Packr 是一款由 AI 驅動的應用程式封裝工具,可分析安裝程式、建立包含安裝邏輯的套件,並在乾淨的虛擬機器上進行測試。它也會撰寫用來確認每次安裝是否成功的偵測規則。每個套件都會經過檢查與安全掃描,以確保能正常運作,並附有 QA 評分卡和記錄檔,讓 IT 團隊可在發佈前審查所有內容。
每當有新更新推出時,Splashtop Agentic Packr 都能自動建立更新後的套件,讓 IT 團隊不必手動處理每一次發行版本。Splashtop Agentic Packr 可以建立 Intune 套件並發佈到 Intune,也能將安裝程式打包,以便透過 SCCM 執行,或在任何 Windows 裝置上手動執行,因此是用於無訊息安裝與更新的靈活工具。還能控制終端使用者會看到的內容,包括重新啟動提示、延後安裝,以及寬限期。
Splashtop Agentic Packr 會建置並測試套件,而 Splashtop AEM 則可在各端點上執行部署和指令碼。
了解 Splashtop Agentic Packr 如何為每個應用程式建立、測試並發佈無訊息安裝套件。



