Windows 任务计划程序,如果任务未运行则运行任务?

Windows 任务计划程序,如果任务未运行则运行任务?

如何确保任务一直在运行?

我使用 speedfan 来控制风扇,有时它会崩溃或需要重新启动。如果我因为 speedfan 无法正常工作而手动退出它,它不会自动重新打开。

如何使用任务计划程序来确保它始终运行,即使它没有运行?

目前,它设置为每次我登录时运行,并设置为在任务失败时重新启动,但它仍然没有重新打开。

谢谢

答案1

任务计划程序 - 如果任务未运行,则运行该任务

您可以使用类似于下面的批处理脚本并使用任务列表查找字符串检查 SpeedFan 的 EXE 名称是否正在内存中运行。使用以下逻辑,它将开始如果未发现 EXE 在内存中运行。


批处理脚本示例

确保将该SpeedFan.exe值替换为启动应用程序时运行的 EXE 文件的实际名称,并且如果该值有所不同,则表示该文件正常运行SET EXEName=SpeedFan.exe

您需要确保 EXE 的完整显式路径也符合下面的实际逻辑,因此只需将其(在中SET EXEFullPath=C:\Program Files\SpeedFan\SpeedFan.exe)替换为应用程序 EXE 的真实路径;在=符号之后您就可以更改它。

只需安排它每 1 分钟、30 秒使用任务计划程序运行一次,或者按照您希望的频率检查此过程是否正在运行,如果没有运行,则启动它。

@ECHO OFF

SET EXEName=SpeedFan.exe
SET EXEFullPath=C:\Program Files\SpeedFan\SpeedFan.exe

TASKLIST | FINDSTR /I "%EXEName%"
IF ERRORLEVEL 1 GOTO :StartSpeedFan
GOTO :EOF

:StartSpeedFan
START "" "%EXEFullPath%"
GOTO :EOF

答案2

是的,但你首先需要安装系统监视这些类型的事件,因为并非所有程序都这样做。据我所知。

这将使您能够重新启动它在ProcessTerminate事件中收集的任何应用程序,并在您想要的任何时间重新启动。您不会像使用批处理脚本那样被限制在 30 秒内。

  1. 喝杯咖啡然后从上面的链接下载。
  2. 安装Sysmon.exe -iDOS或者PowerShell
  3. 不需要重新启动。

它的作用是找到这里

总结

系统监视器 (Sysmon) 是一种 Windows 系统服务和设备驱动程序,一旦安装在系统上,就会在系统重启后驻留,以监视系统活动并将其记录到 Windows 事件日志中


现在已安装完毕,您可以在Event Viewer

  • 在 Vista 及更高版本事件存储在Applications and Services Logs/Microsoft/Windows/Sysmon/Operational

  • 在旧系统上事件被写入System event log


在此示例中,我将使用胶粘物Windows 10 专业版

注意:在使用任务计划程序中的代码之前,最好先进行测试Event Viewer

  1. 打开Event Viewer
  2. 右击Event Viewer (Local)
  3. Create Custom View...
  4. 点击XML tab
  5. 勾选复选框Edit query manually
  6. 这是胶粘物程序。只需简单修改C:\Program Files (x86)\Stickies\stickies.exe即可满足您的需求。我将在下面尽我所能解释每个部分的作用Sysmon

    查询示例:

    <QueryList>
      <Query Id="0" Path="Microsoft-Windows-Sysmon/Operational">
        <Select Path="Microsoft-Windows-Sysmon/Operational">
          *[EventData[Data[@Name='Image'] = 'C:\Program Files (x86)\Stickies\stickies.exe']]
          and
          *[System[(EventID=5)]]
        </Select>
      </Query>
    </QueryList>
    

    (1)[EventData[Data[@Name='Image'] = 'validFullPath.exe']]是路径查询。它的作用是搜索程序文件的位置.exe这必须是完整路径因为无法使用诸如 之类的通配符*

    (2)and和声明也匹配...

    (3)*[System[(EventID=5)是 的事件 ID ProcessTerminate

    (4) 如果操作正确,您应该会在主 GUI 中看到该特定程序上次终止时的进程。如果没有,请打开应用程序并关闭它,您应该会Number of events:... New event available在事件查看器 UI 的最顶部看到,按 F5 刷新,现在您应该会在顶部看到一个新的事件条目,一切顺利。

    • 更多详细信息请参阅活动事件过滤条目部分系统页。
    • 要了解有关事件过滤的更多信息,请参阅维基百科使用 XPath 1.0 进行过滤
    • 如果您犯了错误,您将收到此警告信息The Event Log query specified is invalid
    • 不用担心,它不会造成任何伤害。再试一次

现在您已对查询进行了排序。您所要做的就是设置任务计划程序。请参阅下面附图中的步骤。

任务进度表步骤 1-8

任务计划步骤图 1-8

最后说明一下,关于图表的第 4 步:

  1. 根据您的要求设置延迟很重要,例如2 seconds就我的情况而言。
  2. 然后设置Repeat task...为 TS 允许的最小值,然后将持续时间稍微延长 2 秒。(按应用测试)
  3. 不要使用Stop all running...复选框,因为这会导致令人讨厌的停止/启动循环。

我花了一段时间才弄清楚,但我很高兴我做到了!希望你觉得这有用

相关内容