是否有一个工具可以不断检查另一个进程是否正在运行,如果没有,则启动它?适用于 Windows 7-10。
我有一个后台进程正在运行,这是我需要的一款免费软件。尽管它大多数时候运行良好,但有时它会崩溃并消失,没有任何进一步的通知。只需重新启动此软件即可解决我的问题。
答案1
使用来自这个问题在 Stack Overflow 上,你可以创建一个.bat
如下文件(我使用 Powerpoint 作为示例):
tasklist /FI "IMAGENAME eq POWERPNT.EXE" 2>NUL | find /I /N "POWERPNT.EXE">NUL
if NOT "%ERRORLEVEL%" == "0" start "" "C:\Program Files\Microsoft Office\root\Office16\POWERPNT.EXE"
然后,您可以创建一个计划任务,每分钟运行一次,或者在不运行进程的情况下运行多长时间
或者,您可以无限循环启动该应用程序:
@echo off
:1
"C:\Program Files\Microsoft Office\root\Office16\POWERPNT.EXE"
goto :1
一旦程序关闭,这将重新打开它。
答案2
这是你可以做的事情之一自动识别。
创建一个定期执行检查的小脚本。简单来说就是...
While True
If (ProcessExists("prog.exe") = 0) Then
Run("prog.exe")
EndIf
Sleep(1000)
Wend
...甚至...
While True
RunWait("prog.exe")
Wend
...或者如果你愿意的话可以更复杂一些。
该脚本可以编译为 exe 并在后台静默运行。
答案3
您可以在 Windows 上使用此 PowerShell 代码:
(Get-Process).ProcessName | %{ if ($_ -imatch 'NOTEPAD') { Write-Host $_ 'is running' } }
答案4
我喜欢 @Jonno 的答案,但它对我不起作用。所以我创建了自己的通用答案,可以重复使用。(可以改进。)
- 第一个参数是进程名称(如果在 FIND 命令中包含 .exe,FIND 将失败,因此此参数末尾不应该有 .exe,并且 CMD 假定它需要重新启动 .EXE)。
- 第二个参数是 .EXE 的路径,以防需要重新启动。如果 EXE 在 PATH 上,则可以删除第二个参数。
SET SEARCH_FILE=search-%RANDOM%.log
TASKLIST /FI "IMAGENAME eq %~1.exe" 1>%SEARCH_FILE%
FIND /I /N "%~1" %SEARCH_FILE% >NUL
IF NOT "%ERRORLEVEL%" == "0" ( start /D "%~2" %1.exe )
DEL %SEARCH_FILE%
这会考虑带或不带“”的参数作为输入。
另外,我在任务计划程序上的多个计划任务中运行此操作,并且 TASKLIST 将转到单个文件 (search.log),因此我对其进行了更新,以便输出到随后被删除的随机文件中。
在 Windows 任务计划程序中添加一个新任务,该任务使用参数运行 cmd.exe/C <name_of_the_cmd_file>
并从保存此 CMD 的位置启动(例如 RestartProcess.cmd)。