从脚本安装.msi,检测安装完成

我试图做一个安装脚本。 我想安装.msi文件,Python,然后在安装Python之后安装其他东西。 我已经看到了如何进行命令行安装 。 但是,即使安装仍在运行, msiexec也会立即返回。 我将如何检测从批处理脚本完成msi安装?

不知道Python如何将传递命令处理为Windows / DOS,但是使用纯batch file和start /wait命令,batch file将停止并等待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将显示进程,但parsing输出可能会非常棘手。 PowerShell可以通过get-process cmdlet访问.NET API来执行进程监视。

这些方法仅监视进程的存在,不能检查退出代码,因此不能知道进程是否正常退出或处于错误状态。 为此,您必须处理您指定生成的任何MSI日志,或者在Windows偶数日志中查找错误事件。

成功安装将返回3个代码中的任何一个:0,1641,3010,具体取决于重启选项。 请尝试修改您的脚本,以便它会返回代码。