【问题标题】:Windows 7 task scheduler keeps returning operational code 2Windows 7 任务计划程序不断返回操作代码 2
【发布时间】:2012-10-09 12:31:38
【问题描述】:

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

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

即使我做了一些非常简单的事情,我也会得到 (2) 的操作代码。例如:

run program: cmd.exe

start in path: c:\windows\system32

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

我正在做的事情更现实:

<?
/* file in c:\php\test.php */
echo "hello";
?>

运行程序:php.exe

从路径开始:c:\php

参数:-f test.php

一切都在命令行中运行,但 Windows 计划任务不断返回操作代码 (2)。我应该看到 (0) 的操作代码,这意味着成功,对吗?

【问题讨论】:

标签: windows-7 scheduled-tasks


【解决方案1】:

您可能没有在“编辑操作”对话框的“开始于(可选)框中输入路径。

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

【讨论】:

  • 我在“开始于(可选)”字段中有程序的完整路径。事实上,没有它,我的脚本甚至都不会运行!
  • 这并没有真正为我解决,但它似乎是一个流行的解决方案。我相信我的问题在于 php.exe 如何退出其脚本以及它发送到 Windows 的返回码。我只是最终忽略了 Windows 返回代码 2。
  • 奇怪的是它在场上说“可选”......但填写它为我修复了它。谢谢!
  • 它说可选并不奇怪。你不必把它放进去,但如果你不这样做,你的脚本或可执行文件就不能依赖于当前目录被设置为你所期望的。
  • 我发现的另一件事,除了需要提供“开始”路径外,不要在该字段中使用引号!即使您要开始的目录包含空格,也不需要也不允许使用引号。只是调度程序的另一个问题。
【解决方案2】:

好的,我知道我在这里聚会迟到了,但我认为很多问题源于将 操作代码返回代码 混淆。我不是 Windows 编程或内部结构方面的专家(我以使用 Windows 系统编程为生,但我的编程不适用于 Windows 系统)。

如果我理解正确: 操作代码 由正在运行的例程设置为程序员决定设置的任何值。 返回码表示成功或失败。

从我的一项计划任务的历史记录中考虑以下(已编辑)示例: 事件 201,任务类别“操作已完成”显示 (2) 的操作代码。 在“常规”选项卡下方是消息:

任务计划程序成功完成任务“\My_task”,实例“{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}”,操作“C:.....\blahblah.exe”,返回码为0。

有成功的迹象。不同的返回码表示失败。 (2) 的操作代码 仅表示例程在报告时已完成(在这种情况下)。我不相信操作代码需要解释任何设定值。

【讨论】:

  • 一点帮助都没有,看看windows中的任务调度程序,你就会明白他对操作代码2的含义——单个任务不仅会返回一个操作码..如果有代码2你就知道有问题
  • 我不同意 roeb。我有几个使用 OpCode 2 退出的任务,但日志和结果表明一切正常(手动验证)。此外,流程中的不同步骤返回的操作代码也不同(“Action started (1), Task Completed (2))。
【解决方案3】:

我遇到了类似的问题,发现除了接受的答案及其 cmets 中的建议之外,我还必须做另一件事。我不得不重新创建任务并将其“配置”设置为 Windows Server 2003、Windows XP 或 Windows 2000 我不明白为什么,因为它不适用于任何这些操作系统,但在我我的任务确实奏效了。

如果它运行并且有效,但您仍然收到错误代码,请尝试在脚本末尾输入 exit 0

我花了很多时间在谷歌上搜索才找到它,所以希望这对某人有帮助。

【讨论】:

    【解决方案4】:

    在我刚刚删除并重新创建计划任务之前,我一直在罢工……现在它可以工作了。不知道为什么,但它就在那里。

    【讨论】:

    • 我也一样哈哈,奇怪
    【解决方案5】:

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


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

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

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

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

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

    将所有这些放在一起,我敢打赌,在启动计划任务时生成的事件被 Windows 硬编码为在写入事件日志时使用操作码 1,以及在完成任务时生成的事件(成功或不是 - 在最后运行结果中)被 Windows 硬编码为在写入事件日志时使用 2 的操作码。此操作码似乎是一条红鲱鱼,不会影响我们除了好奇之外需要担心的任何事情。

    【讨论】:

      【解决方案6】:

      @ojchase 是对的。
      操作码由事件提供者附加到事件上。操作码定义了一个数值,用于标识应用程序在引发事件时正在执行的活动或活动中的一个点。

      操作码 1 表示,当产生事件时,应用程序处于活动的开始。
      操作码 2 表示,当产生事件时,app.活动结束。

      所以操作码与成功或失败关系不大。

      来源:
      https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.eventing.reader.standardeventopcode?view=net-5.0
      https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.eventing.reader.eventopcode?view=net-5.0

      【讨论】:

      • 谢谢!我很烦我找不到实际值 2 的来源/含义。看到一些定义它的文档感觉好多了。
      猜你喜欢
      • 2018-01-11
      • 1970-01-01
      • 2012-03-26
      • 2011-02-18
      • 2012-02-26
      • 2013-04-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      相关资源
      最近更新 更多