簡體   English   中英

如何通過 python 腳本使用多處理或任何其他模塊序列化 msiexec.exe 安裝?

[英]How do I serialize msiexec.exe installation using multiprocessing or any other module via python scripting?

我有一個自動 jenkins 作業,它從 python 腳本運行 msiexec.exe 安裝。 可以在同一台機器上使用不同的參數啟動同一腳本的多個實例。 由於 msiexec.exe 一次只能處理 1 個安裝,因此啟動的任何並行安裝都會引發錯誤並且 jenkins 作業掛起!

為了避免並行安裝,我添加了一個 while 循環來檢查是否有任何 msiexec 任務正在運行並等待它完成。 但這仍然不是萬無一失的,因為我看到了一些競爭條件問題。

需要序列化的步驟:

subprocess.check_call('msiexec /a 'install.msi')

while 循環已經實現:

while "msiexec.exe" in os.popen('tasklist /FI "IMAGENAME eq msiexec.exe"').read().strip():

我相信在檢查 msiexec 任務是否已完成時,創建進程鎖會產生比 while 循環更好的結果。 關於如何實現它的任何想法? 請注意,它必須使用 python 2.7.3 的庫存模塊部分。 安裝新模塊不是一種選擇。

任務列表延遲:有關 MSI 自定義操作如何在幕后工作的更多信息 - 在每次部署操作后, msiexec.exe 將在任務列表中保留 10 分鍾


互斥體msiexec.exe在運行 MSI 的InstallExecuteSequence 設置互斥體什么是互斥體? )。 這是為了允許在出現錯誤時回滾安裝。 因此,有必要防止其他 MSI 文件的更改 - 有點像處理應用程序中的多線程。 你鎖東西。

QueryServiceStatusEx :我的這個舊答案雖然凌亂,但可能包含可以幫助您的鏈接: 其他安裝正在進行中掛我的 Wix 安裝

Painter-FactorChris Painter - MSI and .NET expert - 在這里有一個我從未嘗試過的答案,但它看起來很棒: 檢查 Windows 安裝程序互斥鎖的可用性

Github.com 掠奪? :我發現github.com 有時會提供很多信息(多么有趣的詞 - “糖果店里的孩子”) - 也許有一個快速的掠奪會議? 快速樣品 不確定這是否可以在 VBScript 或 Python 中完成,但我看到了一些 Powershell 的東西。


鏈接

想到的一個想法:為 msiexec.exe 編寫一個自定義包裝器,它使用命名互斥鎖進行阻塞,直到包裝器的前一個實例完成

暫無
暫無

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

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