本文提供了一个解决方案来修复运行大量计划任务时发生的错误0x80041323。

适用于: Windows 7 Service Pack 1,Windows Server 2012 R2
原始 KB 编号: 2696472

请考虑以下方案:

  • 你有一台 Windows 计算机,该计算机在一个用户帐户下运行大量计划任务。

  • 任务断断续续地失败,在“LastRun”选项下,你可能会看到以下错误消息

    任务计划程序服务太忙0x80041323

  • 在任务计划程序操作日志下,可能会看到记录的以下事件:

    日志名称:Microsoft-Windows-TaskScheduler/Operational
    来源:Microsoft-Windows-TaskScheduler
    事件 ID:706
    任务类别:兼容性模块任务状态更新失败
    说明:任务兼容性模块无法将任务“<task.job>”更新为所需的状态 0。 其他数据:错误值:2147942405。
    此错误进一步意味着:

    对于十进制 -2147216605/十六进制0x80041323 SCHED_E_SERVICE_TOO_BUSY

    任务计划程序服务太忙,无法处理

  • 此外,如果超过任务队列配额或引擎配额,则可能还会注意到任务计划程序操作日志中记录的以下事件:

  • 如果超过任务队列配额:

    事件 ID 131
    说明:任务计划程序无法启动任务“<Task_Name>”;因为任务队列中超过当前配置为 <Task_Queue_Limit>的配额的任务数。
    用户操作:减少正在运行的任务数或增加配置的队列配额。
    事件 ID 132
    说明:任务计划程序任务启动队列配额正在接近其当前配置 <为Task_Limit>的任务的预设限制。
    用户操作:减少正在运行的任务数或增加配置的队列配额。

  • 如果引擎配额超出:

    事件 ID 133
    说明:任务计划程序无法在 TaskEngine <Engine_Name中为用户<User_Name>>启动任务<Task_Name>。
    用户操作:减少在指定用户上下文中运行的数字任务。
    事件 ID 134
    说明:用户<User_Name>的任务引擎<Engine_Name>正在接近其任务的预设限制。
    用户操作:减少正在运行的任务数或增加配置的队列配额。

    事件 ID 132 和事件 ID 134 只是问题即将出现的指示器,而不是问题本身。 此问题可能在这些事件之后发生,也可能不发生。

    根据代码 SCHED_E_SERVICE_TOO_BUSY ,当队列已满时将记录此信息。 如果有以下情况,则会出现上述问题:

  • 超过任务队列配额。
  • 超出引擎配额。
  • 若要解决此特定问题,请将配额键的值增加到最大值。

    本部分包含说明如何修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,请务必严格按照这些步骤操作。 为了加强保护,应先备份注册表,再进行修改。 如果出现问题,可以还原注册表。

  • 单击 “开始” ,键 入 regedit ,然后按 Enter。
  • 找到并单击以下注册表项: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Schedule\Configuration
  • 右键单击 TasksInMemoryQueue ,单击 “编辑 ”,然后单击 “修改 ”。
  • “值”数据 框中,键入 1000 (小数) 。
  • 右键单击 TasksPerHighestPrivEngine ,单击 “编辑 ”,然后单击“ 修改 ”。
  • “值”数据 框中,键入 1000 (小数) 。
  • 右键单击 TasksPerLeastPrivEngine ,单击 “编辑 ”,然后单击“ 修改 ”。
  • “值”数据 框中,键入 1000 (小数) 。
  • 退出 注册表编辑器 并重新启动计算机。
  • 作业队列配额通过“TasksInMemoryQueue”值进行控制,而引擎配额通过位于以下注册表项下的“TasksPerHighestPrivEngine”和“TasksPerLeastPrivEngine”注册表值进行控制:

    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Schedule\Configuration

  • TasksInMemoryQueue [Default = 75, Max = 1000]
    • 确定允许在会话管理器中排队的最大任务数。 超出此限制后,计划执行的任何新任务实例都将被放弃,你将获得事件 ID 131。
    • 此队列由所有任务共享。
    • TasksPerHighestPrivEngine [Default = 100, Max = 1000]
      • 确定“提升”任务引擎 (taskeng.exe) 在任何给定时间点允许处于运行状态的最大任务实例数。
      • 每个用户会话 (存在一个任务引擎,例如 SYSTEM、LOCAL SERVICE、Administrator、USER1、USER2 等)
      • 此处的“提升”对应于选择“使用最高特权运行”选项的任务。
      • TasksPerLeastPrivEngine [Default = 50, Max = 1000]
  •