Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批处理脚本,用于在应用msi更新之前等待用户关闭程序_Batch File_Wait - Fatal编程技术网

Batch file 批处理脚本,用于在应用msi更新之前等待用户关闭程序

Batch file 批处理脚本,用于在应用msi更新之前等待用户关闭程序,batch-file,wait,Batch File,Wait,我正在使用网络管理工具将更新应用于软件,我遇到了一个问题,即如果用户已经在使用您想要更新的程序,那么更新将如您所预期的那样失败。 我一直在尝试编写一个批处理脚本,该脚本将检测程序是否正在运行,如果正在运行,脚本将等待,直到用户关闭程序并应用msi更新 我已经搜索过谷歌了,但在继续之前,我只能找到之前先杀死程序的脚本,我不希望这种情况发生,因为用户可能会失去工作 希望有人能帮忙 `tasklist |find "programname"` 将告诉您程序是否正在运行: if %errorleve

我正在使用网络管理工具将更新应用于软件,我遇到了一个问题,即如果用户已经在使用您想要更新的程序,那么更新将如您所预期的那样失败。 我一直在尝试编写一个批处理脚本,该脚本将检测程序是否正在运行,如果正在运行,脚本将等待,直到用户关闭程序并应用msi更新

我已经搜索过谷歌了,但在继续之前,我只能找到之前先杀死程序的脚本,我不希望这种情况发生,因为用户可能会失去工作

希望有人能帮忙

`tasklist |find "programname"` 
将告诉您程序是否正在运行:

if %errorlevel%==0 echo running
在它周围绕一圈:

:loop
tasklist |find "programname" >nul
if %errorlevel%==0 (
  echo prgram running
  timeout 2>nul
  goto loop
)
echo program not running

这只是启动notepad.exe(正在运行的程序)并等待它关闭。根据您的需要进行调整

这是一种享受,虽然我不需要“开始”“notepad.exe”位,因为它只是运行程序,但循环效果很好。谢谢为了清楚起见,这就是我最后使用的@echo off:loop tasklist | find/i“notepad.exe”>nul&&(ping-n2 localhost&goto循环)>nul echo notepad closed msiexec/i更新。msi@Jamman,我使用记事本作为处于运行状态的程序的示例,以等待一些信息,而不是启动程序然后启动批处理文件来监视它是否正在运行,我刚从同一批开始。因此,
start…
不应该出现在代码中,但您必须做的是将
find
命令使用的字符串更改为您的程序所使用的字符串。是的,我也只是使用notpad.exe作为测试,真正的exe是revit.exe,所以我将用revit.exe替换find notepad.exe,谢谢。
@echo off

    start "" notepad.exe

:loop
    (tasklist | find /i "notepad.exe" && ( ping -n 2 localhost & goto loop)) >nul 

    echo Notepad closed