靜默安裝參數總整理:MSI、NSIS、Inno Setup
大多數Windows安裝檔都能在不顯示任何視窗的情況下執行。要用哪個參數取決於製作安裝檔的工具,所以第一步是弄清楚安裝檔的類型。
判斷安裝檔類型
ExeAtlas每個軟體頁面都標示了各個檔案的安裝檔類型(MSI、NSIS、Inno Setup、WiX、MSIX等)。另外,「winget show」會輸出類型,檔案的「內容」→「詳細資料」中常能看到製作工具,很多安裝檔在命令提示字元中加上/?執行時也會列出支援的參數。
winget show --id VideoLAN.VLC.\setup.exe /?MSI(Windows Installer)
MSI套件用msiexec安裝。/qn完全不顯示介面,/norestart避免自動重新開機,/l*v寫入詳細記錄檔。如果安裝檔支援,INSTALLDIR等屬性也可以寫在同一行。解除安裝時使用安裝檔的ProductCode,這是一組GUID,每個軟體的靜默安裝頁面上都有列出。
msiexec /i app.msi /qn /norestart /l*v "%TEMP%\app-install.log"msiexec /x {PRODUCT-CODE-GUID} /qn /norestartNSIS
以NSIS(Nullsoft)製作的安裝檔使用/S參數,有區分大小寫。/D用來指定安裝資料夾,必須放在最後,而且即使路徑中有空格也不加引號。解除安裝程式(通常是程式資料夾中的uninstall.exe)同樣支援/S。
setup.exe /Ssetup.exe /S /D=C:\Program Files\App"C:\Program Files\App\uninstall.exe" /SInno Setup
/VERYSILENT隱藏所有視窗,/SUPPRESSMSGBOXES讓訊息方塊自動採用預設選項,/NORESTART避免重新開機,/SP-略過「即將安裝……」的提示。/DIR指定安裝資料夾,/LOG寫入記錄檔。Inno的解除安裝程式(unins000.exe)同樣使用/VERYSILENT。
setup.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-setup.exe /VERYSILENT /DIR="C:\Apps\App" /LOG="%TEMP%\app.log""C:\Program Files\App\unins000.exe" /VERYSILENT /NORESTARTWiX Burn套件組合與InstallShield
以WiX工具組(Burn)製作的套件組合支援/quiet、/norestart與/log。包裝了MSI的InstallShield安裝程式透過/v把MSI參數傳進去,其中的引號是語法的一部分。
setup.exe /quiet /norestart /log "%TEMP%\bundle.log"setup.exe /s /v"/qn /norestart"MSIX與APPX
MSIX與APPX套件可以透過PowerShell為目前使用者無提示安裝。解除安裝使用Remove-AppxPackage,需要完整的套件名稱。
Add-AppxPackage -Path .\App.msixGet-AppxPackage *AppName* | Remove-AppxPackage檢查安裝結果
靜默安裝會傳回結束代碼:0表示成功,3010表示成功但需要重新開機,1641表示安裝程式已啟動重新開機。在PowerShell中用-Wait啟動安裝程式,再讀取結束代碼。
$p = Start-Process .\setup.exe -ArgumentList "/S" -Wait -PassThru$p.ExitCode常見問題
為什麼加了參數還是跳出視窗?
參數屬於另一種安裝檔類型,或是程式另外啟動了一個有自己參數的安裝程式(例如執行階段元件)。請先確認類型;如果是包裝了MSI的EXE,需要把MSI參數傳遞進去。
靜默安裝需要系統管理員權限嗎?
會寫入Program Files或HKLM的安裝檔需要。請在以系統管理員身分執行的命令提示字元中執行,或用Intune、Configuration Manager等以SYSTEM身分執行的工具部署。