Windows Server 2016 任务计划程序:任务返回错误 0xC0000142

Windows Server 2016 任务计划程序:任务返回错误 0xC0000142

我在 Windows Server 2016 下的任务计划程序中遇到了一个奇怪的问题。

我创建了一个每天凌晨 3 点触发的任务。此任务仅启动一个简单的批处理文件,该文件会删除本地驱动器上的某些文件。所以没什么特别的。

运行此任务的结果是 0xC0000142。无论我手动启动此任务还是它在凌晨 3 点由 Windows 启动。

但如果我重新启动整个服务器并手动启动任务,它就会正常工作。结果是 0x0。我尝试通过注册表增加“Windows SharedSection”并重新启动,但什么也没发生。第二天早上我得到了 0xC0000142 的结果。

我在 XML 中的任务:

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.4" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2018-11-29T11:46:43.174076</Date>
    <Author>ECB189B\Administrator</Author>
    <URI>\Delete temp</URI>
  </RegistrationInfo>
  <Triggers>
    <CalendarTrigger>
      <StartBoundary>2018-11-29T03:00:00</StartBoundary>
      <Enabled>true</Enabled>
      <ScheduleByDay>
        <DaysInterval>1</DaysInterval>
      </ScheduleByDay>
    </CalendarTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <UserId>S-1-5-21-3460449123-1791338768-3707012617-500</UserId>
      <LogonType>S4U</LogonType>
      <RunLevel>HighestAvailable</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</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>
    <DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
    <UseUnifiedSchedulingEngine>true</UseUnifiedSchedulingEngine>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>C:\mybatch.bat</Command>
    </Exec>
  </Actions>
</Task>

我的批次:

@ECHO OFF
del /Q /S C:\temp\*.*

该问题仅影响一台服务器。所有其他执行相同任务的服务器均不存在此问题。


/EDIT
好的,我尝试了一下。我将“无论用户是否登录都运行”更改为“仅当用户登录时运行”。这有效。我在凌晨 3 点运行此任务时没有收到更多错误消息,但这不是解决方案。为什么“无论用户是否登录都运行”模式不起作用?我尝试了管理员和系统用户。

答案1

根据http://blog.ylnotes.com/winfix-error-0xc0000142-windows-task-scheduler-fails-to-run-in-batch-mode/

当计算机的非交互式桌面堆空间用尽时,Windows 任务计划程序无法以批处理模式运行。重新启动服务器可能会纠正这个暂时的问题,直到桌面堆再次耗尽。调整非交互式桌面堆的大小已知可以永久解决此错误。

桌面堆信息默认桌面堆设置:Windows 32 位服务器:SharedSection=1024,3072,512 Windows 64 位服务器:SharedSection=1024,20480,768

对于 Windows NT:

SharedSection 使用以下格式指定系统和桌面堆:

SharedSection=xxxx,yyyy 对于 Windows 2000 及更高版本:

SharedSection 使用以下格式来指定系统和桌面堆:

共享部分=xxxx,yyyy,zzzz

修理:

  1. 运行注册表编辑器 regedit.exe

  2. 在注册表编辑器中浏览到以下项:HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems

  3. 单击修改 SubSystems\Windows 值。%SystemRoot%\system32\csrss.exe ObjectDirectory=\Windows SharedSection=1024,20480,768 Windows=On SubSystemType=Windows ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2 ServerDll=sxssrv,4 ProfileControl=Off MaxRequestThreads=16

  4. 在此值的数据中找到 SharedSection 参数。此参数将有 3 或 4 个值。

  5. 将第三个 SharedSection 值逐步增加 256 或 512,直到问题解决

  6. 可能需要重新启动才能生效。

相关内容