TL/DR:别担心。这只是意味着任务已完成,但不会告诉您它是否成功或如何失败。查看“上次运行结果”以获取该信息。
问题和最佳答案混淆了“返回码”的概念,它在任务计划程序中显示为“上次运行结果”和“操作码”/“操作码”,显示在任务的历史记录中。
如果我创建一个简单的 Python 程序,sys.exit(7)
它只做 ,并通过任务调度程序运行它,我会得到一个 0x7 的 Last Run Result 和一个 2 的操作码。如果我让它什么都不做,或者sys.exit(0)
,我得到一个 Last Run Result的“操作成功完成(0x0)”,仍然是操作码2。换句话说,执行程序的返回码决定了上次运行结果。OpCode 似乎是一个常量 2。这也确定了 opcode 2 与返回码 2 无关,这可能意味着文件未找到。我们知道该文件在执行时被发现,并根据包含的代码返回不同的上次运行结果。
此外,Windows 论坛帖子指出,此历史视图确实来自事件日志。果然,我可以在事件日志中找到相同的事件(值始终为 2)。这意味着 OpCode 的定义将与用于事件的定义相同,并且与其说是任务调度程序概念,不如说是 Windows 事件概念。
什么是事件的操作码?我一直在努力得到一个明确的答案,但据我所知,它似乎最终由写入事件日志的程序控制。有用于在程序中定义操作码的文档。在这种情况下,写入事件日志的内容将是任务计划程序本身或 Windows 中的其他内容。
最后的观察:如果我转到事件查看器并查找和Log: Microsoft-Windows-TaskScheduler/Operational
,添加 Operational Code 列并排序,我看到它始终为 2。事件 100 和 200始终为 1。这不仅适用于我的手动实验,但也包括使用计划任务的所有其他随机程序,例如据我所知正在工作的 Dropbox 和 Google 更新程序。Source: Microsoft-Windows-TaskScheduler
Event ID: 102,201
将所有这些放在一起,我敢打赌,在启动计划任务时生成的事件被 Windows 硬编码为在写入事件日志时使用操作码 1,以及在完成任务时生成的事件(成功与否 - 哪个进入最后运行结果)被 Windows 硬编码为在写入事件日志时使用操作码 2。这个操作码似乎是一条红鲱鱼,它不会影响我们除了好奇之外需要担心的任何事情。