我的任务计划程序为什么会出现错误代码2147942667而失败?

170

我已经安排了一个任务来启动一个批处理文件。当我使用选项

仅在用户登录时运行

运行该任务时,一切正常。

我想在后台运行此任务,因此我正在使用以下选项运行它

无论用户是否登录都运行

现在当我在该参数下运行该任务时,它不起作用。我收到以下两个错误:

  • 任务计划程序未能在任务“\stmm\Daemon”的实例“{2a7cc950-fad9-4633-9701-af75a0fd220d}”中启动操作“C:\Windows\SYSTEM32\cmd.exe”。附加数据:错误值:2147942667。
  • 任务计划程序未能为用户“GBLADHEDANI\N011940”启动任务“\stmm\Daemon”的实例“{2a7cc950-fad9-4633-9701-af75a0fd220d}”。附加数据:错误值:2147942667。

什么是错误值:2147942667?我该如何解决这些错误?


54
将错误代码转换为十六进制可得到0x8007010B。其中的7表示这是Windows错误。因此,010B错误代码对应的是267。意思是“目录名无效”。当然,这种情况偶尔会发生。 - Hans Passant
2
就我所知,我发现主任务计划程序UI中有一个“上次运行结果”或类似列,显示可读的“目录名称无效”错误消息。在我们的情况下,解决方法是jp2code下面提供的答案,即从要运行的命令中删除引号,因为我将其从带引号的命令中复制过来了。 - Neek
所以我的问题导致了2147942667,结果是由于映射的驱动器。当我将“程序/脚本”和“启动位置”路径设置为使用完整的UNC时,作业成功运行。 - jrobiii
1
为了配合@HansPassant的精彩评论:https://learn.microsoft.com/en-us/windows/win32/debug/system-error-codes - Ian Kemp
2
@Mark Berry https://learn.microsoft.com/en-us/windows/win32/com/structure-of-com-error-codes@Mark Berry https://learn.microsoft.com/zh-cn/windows/win32/com/structure-of-com-error-codes - R.J. Dunnill
从.NET中,有一个静态方法GetExceptionForHR,但你必须传递给它一个有符号的32位整数。例如,如果你打开PowerShell并输入[System.Runtime.InteropServices.Marshal]::GetExceptionForHR(0x8007010B),它会显示:目录名无效。(来自HRESULT的异常: 0x8007010B) - undefined
5个回答

335

获取相关错误信息的方法:

  1. 将2147942667转换为十六进制:8007010B
  2. 取后4位(010B)并转换为十进制:267
  3. 在命令提示符中运行net helpmsg 267
  4. 结果:“目录名称无效。”

命令提示符窗口

对于我来说,解决方法是因为“开始位置”字段中有引号。我在Microsoft KB文章2452723中找到了这些信息,Windows Vista及以后的计划任务如果路径中包含引号将无法运行

基本上,编辑您的计划任务并从“开始位置”字段中删除引号:

  1. 打开您的计划任务
  2. 切换到“操作”选项卡
  3. 打开您的操作
  4. 从“开始位置(可选)”字段中删除引号(“)
  5. 保存并关闭所有打开的对话框

编辑操作对话框

您还应该检查其他可能导致错误的原因,例如没有访问目录的权限,或者使用映射的驱动器字母仅在某些登录会话期间可用。


7
就我所知,我遇到了这个错误,但是我的“起始文件夹”设置没有引号,而是所引用的路径不存在。 - shufler
2
在我的情况下,在Server 2012 R2下,“启动位置”为空,但我正在运行的脚本期望在特定路径中。我更新了脚本,使其不依赖于特定目录(在脚本中添加显式路径以执行命令)。之后,计划任务就可以正常工作了。 - Mark Berry
1
在我的情况下,“开始位置”没有引号,但我仍然收到了消息。原来我是以管理员用户身份运行命令,而该文件夹属于标准用户。不确定为什么不允许这样做,但是一旦我将程序移动到D:\上,它就可以正常工作了。 - Morpork

13

对我来说,问题是“启动路径”——我从旧服务器复制了数值,并更新了新 .exe 位置的路径,但我忘记更新“启动路径”位置——如果不存在,则也会出现此错误。

引用 @hans-passant 在上面的评论,因为它对于调试此问题很有价值:

将错误代码转换为十六进制以获取 0x8007010B。7 表示这是 Windows 错误。这使得 010B 错误代码变成了 267。"目录名称无效"。当然,这种情况也会发生。


7

出现这种情况可能有多种原因。在我的情况下,这是由于权限问题引起的。该任务运行的用户没有写入日志目录的权限,因此出现了此错误。


3

4
嗨,Mike。我在程序员模式下使用Windows计算器将"2147942667"转换为十六进制:"0x8007010B"。这个值在你提供的链接中没有出现。当然,这只是提供信息而已。 - user153923
6
我刚刚谷歌了一下:2147942667转十六进制。现在谷歌也是一个计算器了。 - Baodad

2

我曾经遇到过同样的问题,当时我在使用Windows7系统。我遇到了2147942667错误和无法运行c:\windows\system32\CMD.EXE的报告。我尝试在脚本和启动路径中加入或不加双引号,但结果并没有什么改变。然后我尝试将所有引用映射网络驱动器的路径更改为UNC引用(\Server1\Sharexx\my_scripts\run_this.cmd),这对我有所帮助。 Pat.


这对我也起作用了。我不得不使用“Net Use”获取服务器名称,然后使用ping获取域名。最终是\machine.domain.local\app.exe。 \Machine\app.exe没有起作用。 - greg
这与上述问题相同;映射驱动器仅在登录会话期间可用,因此在某些用户未登录时运行任务将意味着无法使用这些映射驱动器。 - TylerH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接