You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何修改批处理脚本使schtasks创建的登录触发计划任务无限运行?

解决计划任务默认3天超时的问题

嘿,这个情况我太熟悉了——任务计划程序默认给登录触发的任务加了3天的运行时长限制,确实会打断需要持续运行的程序。要让你的应用无限运行,我们得手动禁用这个超时设置,因为schtasks的基础创建命令里没有直接控制这个选项的参数,不过有两种靠谱的批处理实现方式:

方法一:使用XML模板创建任务(推荐)

这种方法能直接定义所有任务设置,包括禁用超时。

  1. 首先创建一个XML模板文件(比如命名为MyTaskTemplate.xml),内容如下:
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2024-05-20T00:00:00</Date>
    <Description>MyDescription</Description>
  </RegistrationInfo>
  <Triggers>
    <LogonTrigger>
      <Enabled>true</Enabled>
    </LogonTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <RunLevel>HighestAvailable</RunLevel>
      <LogonType>InteractiveToken</LogonType>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>PT0S</ExecutionTimeLimit> <!-- 核心设置:无限运行,PT0S表示无时间限制 -->
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>C:\MyFile.exe</Command>
    </Exec>
  </Actions>
</Task>

这里的关键是<ExecutionTimeLimit>PT0S</ExecutionTimeLimit>,它告诉任务计划程序不要限制任务的运行时长。

  1. 然后在批处理脚本里用这个XML创建任务:
schtasks /Create /F /TN "MyDescription" /XML "MyTaskTemplate.xml"

如果XML文件不在批处理的同一目录,记得写完整路径,比如C:\Scripts\MyTaskTemplate.xml

方法二:先创建任务,再用PowerShell修改超时

如果你不想用XML,也可以先运行你原来的schtasks命令创建任务,然后用PowerShell命令修改超时设置。批处理脚本可以这样写:

@echo off
:: 先创建原始任务
schtasks /Create /F /RL highest /SC onlogon /TR "C:\MyFile.exe" /TN "MyDescription"
:: 用PowerShell修改任务的ExecutionTimeLimit为无限
powershell -Command "$task = Get-ScheduledTask -TaskName 'MyDescription'; $task.Settings.ExecutionTimeLimit = 'PT0S'; Set-ScheduledTask -InputObject $task"

这个方法依赖PowerShell(Windows 7及以上系统默认都有),它直接修改任务的设置属性,把运行时长限制改成无限制。

两种方法都能解决问题,个人更推荐第一种XML的方式,因为它能一次性定义所有任务属性,避免后续修改可能出现的权限问题。

内容的提问来源于stack exchange,提问作者Xel Naga

火山引擎 最新活动