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

Mar*_*oDS 13 troubleshooting scheduled-task batch windows-server-2008-r2

情况

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

此任务应每小时运行一次,因此我尝试使用计划任务进行配置。问题是前面提到的程序在从任务中调用时无法正常运行(无论是通过.bat脚本还是.exe直接调用),但我在日志中没有收到任何警告或错误消息。

设置

该任务被配置为作为具有正确设置的所有权限的 Windows 服务帐户运行。使用此帐户通过 RDP 登录时,我可以直接执行.bat.exe没有问题,但该任务似乎仍然没有执行任何操作。这很容易观察到,因为程序总是修改文件,并且修改的时间戳不会通过任务改变。

在计划任务日志中,我得到了任务启动进程、退出等的信息消息。然而,“结果代码”是111(尝试谷歌这个没有运气,我得到的唯一关联是“文件名太长",这与 AFAIK 完全无关)。在应用程序日志中,我一无所获。

我怀疑是问题所在

该程序是一个古老的怪物,它产生某种启动画面(它实际上是一个普通窗口),即使不需要 GUI,因为它不需要交互并在操作后自行关闭。窗口出现约 2 秒钟。

我怀疑 GUI 的这一要求与任务失败有关,但我不确定。当我使用运行任务的用户(通过 RDP)登录时,启动计划任务时没有窗口出现。


编辑关于 GUI

我构建了一个非常小的 C# 可执行文件,它在没有主窗口的情况下启动程序(使用ProcessStartInfo.WindowStyle = ProcessWindowStyle.Hidden)。即使这样,计划任务仍然没有成功正确启动程序,但返回码现在是0


更新

当我将任务配置为“无论用户是否登录都运行”并且未选中run with highest privileges选项时,错误值为.2147943859


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

操作系统 = Windows Server 2008 R2 SP1

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

I s*_*ica 7

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

测试控制台会话要求

您的.EXE可能必须Console在计算机上的会话(又名会话 0)中运行。对此进行测试:

  1. 将任务配置为仅在用户登录时运行,并指定未来 2 分钟的任务开始时间
  2. 使用用于运行任务的相同用户帐户登录到计算机(最好登录到控制台会话,无论是通过实际访问控制台还是使用允许访问控制台的远程访问程序。确认您正在使用控制台会话,从命令提示符运行QWINSTA,观察SESSIONNAME列,并确认>指示器在 旁边console,换句话说,它应该显示为>console)
  3. 等待任务运行

如果任务运行正常,请尝试SCHTASKS.EXE使用/IT参数调度任务。否则,您可能别无选择,只能将计算机配置为以您的服务用户帐户自动登录并将任务作为启动程序运行。

检查权限

此外,正如我已经建议的那样,请检查以下内容以确认用于运行任务的帐户已获得正确许可:

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

要检查/尝试的其他事项

  • 任务是否需要访问网络资源?当您使用用户帐户登录时,可能会出现映射驱动器之类的内容,但根据服务器的配置,从任务计划程序执行时,用户帐户的上下文中可能不存在。
  • 添加一些日志记录到您的批处理文件。在它执行的每一行之后,让它将一些输出写入日志文件,这样你就知道它在哪里卡住了。例如:

    @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"
    
    Run Code Online (Sandbox Code Playgroud)
  • 尝试运行你的.EXESTART,例如START "myTitle" "C:\full\path\to\my.EXE"


Mar*_*oDS 1

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

他们使用还具有任务调度功能的监控系统。他们已经通过这个设置了它并且看起来有效。

抱歉,我没有机会在这里评估更多建议,但还是感谢您尝试提供帮助。我希望它将来可以帮助其他人,我认为它肯定会的。