【问题标题】:Check if a process is running or not?检查进程是否正在运行?
【发布时间】:2014-04-24 10:38:28
【问题描述】:

我想检查一个进程是否正在运行? 如果进程没有运行,那么我执行它(在这个例子中,我使用进程名称 = calc.exe 的计算器) 我启动了批处理脚本,但我相信我有语法问题!

@echo off
Set MyProcess=calc.exe
echo %MyProcess%
pause
for /f "tokens=1" %%i In ('tasklist /NH /FI "imagename eq %MyProcess%"') do set ff=%%i
echo %ff%
If /i %ff%==%MyProcess% (Echo %ff% est en cours d^'execution) Else (Start %MyProcess%)
pause

【问题讨论】:

标签: batch-file vbscript batch-processing


【解决方案1】:

这是另一种使用您的代码作为基础的方法:

@echo off
Set "MyProcess=calc.exe"
echo "%MyProcess%"
tasklist /NH /FI "imagename eq %MyProcess%" 2>nul |find /i "%MyProcess%" >nul
If not errorlevel 1 (Echo "%MyProcess%" est en cours d^'execution) else (start "" "%MyProcess%")
pause

【讨论】:

    【解决方案2】:

    你可以这样尝试:

    tasklist /FI "IMAGENAME eq calc.exe" 2>NUL | find /I /N "calc.exe">NUL
    if "%ERRORLEVEL%"=="0" 
    echo Running
    

    【讨论】:

    • 我试过了,但似乎没有用:find: '/I': No such file or directory | find: '/N': 没有这样的文件或目录 | find: 'hh.exe': 没有这样的文件或目录 |该命令的语法不正确。
    【解决方案3】:

    我在 Vbscript 中的解决方案 (°_^)

    Option Explicit
    Dim ws,MyApplication,MyProcess
    Set ws = CreateObject("WScript.Shell")
    MyApplication = "%Programfiles%\WinRAR\WinRAR.exe"
    MyProcess = "WinRAR.exe"
    Do
    'We check if the process is not running so we execute it
        If CheckProcess(MyProcess) = False then 
            Call Executer(DblQuote(MyApplication),0)'0 to Hide the console
    'We made ​​a one-minute break and continue in our loop to check 
    'whether or not our process exists(in our case = WinRAR.exe)
            Pause(1)
        End if
    Loop
    '***********************************************************************************************
    Function CheckProcess(MyProcess)
        Dim strComputer,objWMIService,colProcessList
        strComputer = "."
        Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
        Set colProcessList = objWMIService.ExecQuery _
        ("Select Name from Win32_Process WHERE Name LIKE '" & MyProcess & "%'")
            If colProcessList.count > 0 then
                CheckProcess = MyProcess & " is running"
                CheckProcess = True
            else
                CheckProcess = MyProcess & " is not running"
                CheckProcess = False
            End if
        Set objWMIService = Nothing
        Set colProcessList = Nothing
    End Function
    '***********************************************************************************************
        Sub Pause(NMins)
            Wscript.Sleep(NMins*1000*60)
        End Sub  
    '***********************************************************************************************
     Function Executer(StrCmd,Console)
        Dim ws,MyCmd,Resultat
        Set ws = CreateObject("wscript.Shell")
    'La valeur 0 pour cacher la console MS-DOS
        If Console = 0 Then
            MyCmd = "CMD /C " & StrCmd & " "
            Resultat = ws.run(MyCmd,Console,True)
            If Resultat = 0 Then
            Else
                MsgBox "Une erreur inconnue est survenue !",16,"Une erreur inconnue est survenue !"
            End If
        End If
    'La valeur 1 pour montrer la console MS-DOS
        If Console = 1 Then
            MyCmd = "CMD /K " & StrCmd & " "
            Resultat = ws.run(MyCmd,Console,False)
            If Resultat = 0 Then
            Else
                MsgBox "Une erreur inconnue est survenue !",16,"Une erreur inconnue est survenue !"
            End If
        End If
        Executer = Resultat
    End Function
    '**********************************************************************************************
    Function DblQuote(Str)
        DblQuote = Chr(34) & Str & Chr(34)
    End Function
    '**********************************************************************************************
    

    【讨论】:

      【解决方案4】:

      好吧,我还找到了另一种方法来实现不断检查(循环)进程“WinRAR.exe”的存在(作为应用程序检查的示例)所以我们当然可以更改路径和进程名称来检查.

      @echo off
      Set "MyApplication=%Programfiles%\WinRAR\WinRAR.exe"
      Set "MyProcess=WinRAR.exe"
      Color 9B
      Title Verification de l^'execution du processus "%MyProcess%" by Hackoo
      mode con cols=75 lines=2
      :start
      cls
      tasklist /nh /fi "imagename eq %MyProcess%" 2>nul |find /i "%MyProcess%" >nul
      If not errorlevel 1 (Echo "%MyProcess%" est en cours d^'execution) else (start "" "%MyApplication%")
      ping -n 60 127.0.0.1 >nul 
      goto start
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-28
        • 1970-01-01
        • 1970-01-01
        • 2020-05-03
        • 2017-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多