【问题标题】:Batch Script to wait for program to close by user before applying msi update在应用 msi 更新之前等待程序由用户关闭的批处理脚本
【发布时间】:2014-04-11 09:02:06
【问题描述】:

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

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

希望有人可以提供帮助!

【问题讨论】:

    标签: batch-file wait


    【解决方案1】:
    @echo off
    
        start "" notepad.exe
    
    :loop
        (tasklist | find /i "notepad.exe" && ( ping -n 2 localhost & goto loop)) >nul 
    
        echo Notepad closed
    

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

    【讨论】:

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

    【讨论】:

      猜你喜欢
      • 2017-06-11
      • 1970-01-01
      • 2023-03-12
      • 2012-09-16
      • 2013-01-08
      • 1970-01-01
      • 2014-10-03
      • 1970-01-01
      • 2019-10-28
      相关资源
      最近更新 更多