Windows 7任务调度程序保持返回操作代码2

use*_*179 11 scheduled-tasks windows-7

我设置了一个在我的帐户下运行的计划任务.它运行的所有内容,即使成功,也会返回(2)的操作代码.我在下面的链接中看了这个错误代码,并声称它找不到特定的文件.

http://www.hiteksoftware.com/knowledge/articles/049.htm

即使我做一些非常简单的事情,我也会找回(2)的操作代码.例如:

run program: cmd.exe

start in path: c:\windows\system32
Run Code Online (Sandbox Code Playgroud)

我启动任务,我看到进程在我的任务管理器中运行,所以我终止了任务.然后我检查计划任务的历史记录,它显示为(2).

对我正在做的事情更加现实:

<?
/* file in c:\php\test.php */
echo "hello";
?>
Run Code Online (Sandbox Code Playgroud)

运行程序: php.exe

从路径开始: c:\php

参数: -f test.php

一切都在命令行中工作,但Windows计划任务保持返回操作代码(2).我应该看到(0)的操作代码,这意味着成功,正确吗?

小智 22

您可能没有在"编辑操作"对话框的"开始(可选)"框中放置路径.

即使您在程序中有一条正在执行的路径,Windows 7仍然希望您告诉它在哪里运行该程序.

  • 我在"开始(可选)"字段中有完整的程序路径.事实上,没有它,我的剧本甚至都不会运行! (2认同)
  • 这对我来说并没有真正解决它,但它似乎是一种流行的解决方案.我相信我的问题是php.exe如何退出其脚本以及它发送给Windows的返回代码.我最后忽略了Windows返回码2. (2认同)

ojc*_*ase 7

TL/DR:不用担心。这仅意味着任务已完成,但没有告诉您它是否成功或如何失败。查看“上次运行结果”以获取该信息。


这个问题和最重要的答案混淆了“返回代码”的概念,它在任务计划程序中显示为“上次运行结果”,与任务历史记录中显示的“OpCode”/“操作代码”。

如果我创建一个简单的 Python 程序,它只执行sys.exit(7),并通过任务调度程序运行它,我会得到 0x7 的上次运行结果和 2 的操作码。如果我让它什么都不做,或者sys.exit(0),我会得到 0x7 的上次运行结果“操作成功完成 (0x0)”,操作码仍然为 2。换句话说,执行程序的返回码决定了上次运行结果。OpCode 似乎是一个常量 2。这也表明操作码 2 与返回码 2 无关,这可能意味着未找到该文件。我们知道该文件是在执行时找到的,并根据所包含的代码返回不同的上次运行结果。

此外,Windows 论坛帖子指出,此历史记录视图确实来自事件日志。果然,我可以在事件日志中找到相同的事件(始终值为 2)。这意味着 OpCode 的定义将与用于事件的定义相同,并且与其说是任务调度程序概念,不如说是 Windows 事件概念。

什么是事件的操作码?我一直在努力寻找明确的答案,但据我所知,它似乎最终是由写入事件日志的程序控制的。有一些文档可用于在程序中定义操作码。在这种情况下,写入事件日志的内容可能是任务计划程序本身或 Windows 中的其他内容。

最后的观察:如果我转到事件查看器并查找Log: Microsoft-Windows-TaskScheduler/OperationalSource: Microsoft-Windows-TaskSchedulerEvent ID: 102,201,添加操作代码列并排序,我会发现它始终为2。事件 100 和 200始终为 1。这不仅适用于我的手动实验,但也包括使用计划任务的所有其他随机程序,例如据我所知正在运行的 Dropbox 和 Google 更新程序。

将所有这些放在一起,我强烈打赌启动计划任务时生成的事件由 Windows 硬编码为在写入事件日志时使用操作码 1,以及完成任务时生成的事件(成功与否 - 其中进入上次运行结果)由 Windows 硬编码为在写入事件日志时使用操作码 2。这个操作码似乎是一个转移注意力的东西,它不会影响我们除了好奇之外需要担心的任何事情。