如何防止 MSI 错误:正在安装另一个程序?

3 powershell windows-installer

我编写了一个小 PowerShell 脚本,它调用不同的 MSI 文件来安装软件。有时我从 Windows Installer 中收到以下错误:

正在安装另一个程序。请等待安装完成,然后再次尝试安装该软件。

在调用 MSI 文件之前如何防止此错误?我尝试将其与 TrustedInstaller 进程关联起来。我认为当电脑正在安装阻止我安装的东西时,该进程就会出现。但不幸的是,有时我的安装工作正常,尽管进程正在运行。有没有可以用 PS 捕获的明确指示?

Chr*_*ter 6

您想查看_MSIExecute Mutex是否已设置。

仅检查正在运行的 msiexec.exe 不会告诉您,因为 a) msiexec 可能正在处理不会阻止您的 UI 序列,或者 b) msiexec 可能已完成安装并等待 10 分钟才能停止其服务。

try
{
    $Mutex = [System.Threading.Mutex]::OpenExisting("Global\_MSIExecute");
    $Mutex.Dispose();
    Write-Host "An installer is currently running."
}
catch
{
    Write-Host "An installer is not currently runnning."
}
Run Code Online (Sandbox Code Playgroud)