程序作为计划任务不能正常运行

情况

我有一个批处理脚本准备一些文件,执行程序( .exe ),然后删除所述的文件。

这个任务应该每小时运行一次,所以我试图用Scheduled Tasks来configuration它。 问题是前面提到的程序在从任务调用时不能正常运行(既不是通过.bat脚本,也不是直接调用.exe ),但是在日志中没有任何警告或错误消息。

build立

该任务被configuration为以具有正确设置的所有特权的Windows服务帐户运行。 当使用这个账户通过RDPlogin时,我可以直接执行.bat.exe而没有问题,但是这个任务似乎什么都不做。 这很容易被观察到,因为程序总是修改一个文件, 修改的时间戳不会通过任务改变。

在计划的任务日志中,我得到启动进程,退出等任务的信息消息。然而,“结果代码”是111 (试图Google没有运气,我得到的唯一联系是“文件名也是长“,这是完全不相干的AFAIK)。 在应用程序日志中,我一无所获。

我怀疑是这个问题

该程序是一个古老的怪物,产生一些启animation面(这实际上是一个普通的窗口),即使不需要graphics用户界面,因为它不需要交互,并在操作后自行closures。 窗口显示约2秒钟。

我怀疑这个GUI的需求与任务失败有关,但我不确定。 当我通过RDP(通过RDP)运行任务的用户login时,启动计划任务时不会显示任何窗口。


编辑关于GUI

我已经构build了一个非常小的C#可执行文件,用于启动不带主窗口的程序(使用ProcessStartInfo.WindowStyle = ProcessWindowStyle.Hidden )。 即使这样,计划的任务仍然无法正确启动程序,但返回代码现在为0


更新

当我将任务configuration为说“运行用户是否已login”,并且未选中“ run with highest privileges ”选项时,错误值为2147943859


我能做些什么来排除故障?

OS = Windows Server 2008 R2 SP1

如果需要更多信息,请在评论中告诉我。

我相信您的问题与运行任务所用帐户的权限或帐户的上下文在尝试运行任务时存在关联

testing控制台会话要求

可能您的.EXE必须在计算机上的Console会话(又称会话0)中运行。 为了testing这个:

  1. 将任务configuration为仅在用户login时运行并指定将来2分钟的任务启动时间
  2. 使用用于运行任务的相同用户帐户login到计算机(最好login到控制台会话,通过物理位于控制台或使用访问控制台的远程访问程序来确认您正在使用控制台会话,从命令提示符运行QWINSTA ,观察SESSIONNAME列,并确认>指示符旁边的console ,换句话说它应该显示为>console
  3. 等待任务运行

如果任务正确运行,请尝试使用/IT参数使用SCHTASKS.EXE计划任务。 否则,您可能别无select,只能将计算机configuration为自动以您的服务用户帐户login并将该任务作为启动程序运行。

检查权限

另外,正如我已经build议的那样,请检查以下内容以确认用于运行任务的帐户已被正确授权:

  1. 将帐户授予作为批处理作业用户权限login (在Computer Configuration/Windows Settings/Security Settings/Local Policies/User Rights Assignments中的本地组策略中find)
  2. 确认任务已configuration为以最高权限运行
  3. 确认用户对所有必须与之交互的文件夹和文件具有完整的NTFS权限。 不要假设; 而是通过导航到这些文件位置并使用Security > Advanced的文件/文件夹属性中的“ Effective Permissions选项卡进行确认

额外的事情来检查/尝试

  • 任务是否需要访问networking资源? 当您使用用户帐户login时,映射驱动器等内容可能会存在,但是从“任务计划程序”执行时,根据服务器的configuration可能不存在于用户帐户的上下文中。
  • 添加一些日志到你的batch file。 每执行一行之后,让它将一些输出写入日志文件,以便知道卡在哪里。 例如:

     @echo off echo Line 1 >> "C:\MyLog.txt" "C:\My Folder\myOldProgram.exe" echo Line 2 >> "C:\MyLog.txt" DEL somefile.dat echo Line 3 >> "C:\MyLog.txt" 
  • 尝试使用START运行.EXE ,例如START "myTitle" "C:\full\path\to\my.EXE"

也许这有助于你?

https://stackoverflow.com/questions/6939548/a-workaround-for-the-fact-that-a-scheduled-task-in-windows-requires-a-user-to-be

我们有一个类似的问题,你唯一的解决scheme是,我们用自动login在服务器上做了一个特殊的帐户。 所以如果任务运行在已经有用户的情况下,我们的.exe运行良好。

我知道这不是一个很好的解决scheme,但对我们来说,这是唯一的工作。 我不知道这是否适合你…(但是,这个工作,你必须检查用户是否真的login了…)

运行我们客户服务器的公司的人说,GUI程序不会以任何方式通过计划的任务运行。

他们使用同样具有任务调度function的监控系统。 他们已经完成了它,它似乎工作。

对不起,我没有机会在这里评估更多的build议,但谢谢你试图帮助。 我希望将来可以帮助别人,我相信这肯定会。

我正在回复一个旧post,以防别人帮忙。 我遇到过同样的问题。 事件日志表示程序正常完成,但即使第一行代码也不会写入日志中。 它最终成为Task Scheduler中的“Start In”选项。 我想到当我在当前目录下时,程序从命令行运行正常。 清单文件和其他依赖项在同一个目录中。 因此,如果您告诉计划的作业在EXE的同一个目录中启动,您可能会得到满意的结果。 这是我的解决scheme。

我试图在Windows 2008 R2服务器上使用任务计划程序启动旧的VB6程序。 应用程序将从exe中运行,通过batch file或单击快捷方式运行,但不会从任务计划程序运行。 我发现当存储在C:\ program files(x86)目录中的应用程序文件夹中的应用程序的configuration文件被复制到c:\ programdata上的应用程序文件夹时。 调度程序工作。 看起来cmd.exe将configuration从不同的位置应用到任务调度程序使用的位置。 如果您的应用程序有configuration文件,您可以尝试将它们移动到c:\ programdata \ application文件夹。

您是否在脚本或程序中引用任何映射的networking驱动器 ? 我有一个类似的问题,我的计划任务不会运行,我不明白为什么。 改变path到UNCpath为我解决了它。

T:\Apps\MyProgram.exe更改为\\MyServer\MyShare\Apps\MyProgram.exe

当我将任务configuration为说“运行用户是否已login”,并且未选中“最高权限运行”选项时,错误值为2147943859。

2147943859转换为hex是800705b3,快速前往谷歌告诉我的意思是“无法在计算机上启动安装程序。此操作需要一个交互式窗口站。

现在,可能有一些方法可以使它不需要使用PSEXEC(从Sysinternals)交互式运行,但是因为我已经知道如何通过PSEXEC来完成这个工作。

PSExec: http ://technet.microsoft.com/en-us/sysinternals/bb897553.aspx

因此,改变你的行动,用psexec.exe -i(和-h,如果你需要提升的话)预先把所有的东西都写出来,它应该可以工作。

我已经在Windows Server 2008 R2 SP1上尝试了以下操作:

 c:\windows\system32\cmd.exe 

然后参数:

 /c psexec.exe -h -i notepad.exe 

当我手动运行任务(因为我没有它的时间表),我得到一个提升记事本运行在我当前的会话。

也许这个问题的答案会帮助别人阅读这个线程?

https://stackoverflow.com/questions/32589381/

摘要: Windows 2012计划任务对于任务设置为运行的帐户,看不到正确的环境variables(包括PATH

在研究上述内容之前,我读了相当长的一段时间。 (这是我自己的问题,导致与OP的问题一样。)

一旦你(终于!)知道这一点,这是很容易testing它(按照stackoverflow的答案),看到它发生,并解决它….