【发布时间】:2019-12-12 16:33:41
【问题描述】:
我有一个自动化的 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 的库存模块部分。安装新模块不是一种选择。
【问题讨论】:
-
现在只是一个花絮:More info about how MSI custom actions work behind the scenes - msiexec.exe 将在每次部署操作后在任务列表中保留 10 分钟。
标签: python windows serialization multiprocessing windows-installer