Windows
從腳本安裝 .msi,檢測何時安裝完成
我正在嘗試製作安裝腳本。我想安裝一個 .msi 文件,Python,然後在安裝 Python 後安裝其他東西。我已經看到瞭如何進行命令行安裝。但是,
msiexec
即使安裝仍在執行,也會立即返回。如何從批處理腳本中檢測到 msi 安裝的完成?
不知道 Python 如何處理將命令傳遞到 Windows/DOS,但使用普通批處理文件和
start /wait
命令批處理文件停止並等待 MSI 完成,然後再繼續下一步。例如,要安裝一個主應用程序,僅在完成後才安裝更新檔,然後在完成後安裝最終程序,請將這些行放入 .cmd 文件中:
start /wait msiexec /i O12Conv.msi /qb start /wait msiexec /p O12Convsp1-en-us.msp /qb start /wait msiexec /i mpsetupedp.msi
這很棘手,而且不可靠,但是有一些方法可以監視程序列表中是否存在特定程序。您在等待該過程不再存在時將循環寫入 NOOP,然後執行下一步。有幾種處理方法。
SysInternals 工具
pslist
將顯示程序,儘管解析輸出可能很棘手。PowerShell 可以訪問 .NET API 以通過get-process
cmdlet 進行程序監控。這些方法只是監視程序的存在,它們無法檢查退出程式碼,因此無法知道程序是正常退出還是處於錯誤狀態。為此,您必須處理您指定生成的任何 MSI 日誌,或者可能在 Windows 偶數日誌中探勘錯誤事件。