15

我设置了一个计划任务以在我的帐户下运行。它运行的所有东西,即使它成功,也会返回一个操作代码(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) 的操作代码,这意味着成功,对吗?

4

6 回答 6

25

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

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

于 2012-11-07T21:01:52.020 回答
3

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

于 2019-05-09T21:36:00.077 回答
2

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-TaskSchedulerEvent ID: 102,201

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

于 2020-08-18T07:51:22.077 回答
1

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

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

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

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

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

于 2014-10-17T20:42:50.927 回答
1

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

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

我用谷歌搜索了很多,所以希望这对某人有帮助。

于 2016-04-18T16:08:35.767 回答
1

@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.eventtopcode?view=net-5.0

于 2021-08-20T06:14:48.343 回答