【发布时间】:2017-08-06 22:51:53
【问题描述】:
我正在尝试设置计划任务来运行应用程序 (.exe)。如果手动运行该应用程序(通过双击),它将检查文件夹中的新文件、处理它们并退出。
但是,如果应用程序被设置为计划任务中的“操作”,那么当您运行计划任务时,您所看到的只是应用程序启动并在任务管理器中显示为进程,但实际上并没有发生其他任何事情.文件夹中的文件根本不处理,进程会卡在任务管理器中,应该自行关闭。
知道那里发生了什么吗?如何获取有关后台可能发生的事情的更多详细信息?
计划任务设置为运行“无论用户是否登录”,具有管理权限。
我正在运行 Windows 7 Professional SP1。
更新: 这是 Process Explorer 的堆栈输出:
ntoskrnl.exe!memset+0x61a
ntoskrnl.exe!KeWaitForMultipleObjects+0xd52
ntoskrnl.exe!KeWaitForSingleObject+0x19f
ntoskrnl.exe!__misaligned_access+0xbd0
ntoskrnl.exe!__misaligned_access+0x186d
ntoskrnl.exe!KeWaitForMultipleObjects+0xf5d
ntoskrnl.exe!KeWaitForSingleObject+0x19f
ntoskrnl.exe!NtWaitForSingleObject+0xde
ntoskrnl.exe!KeSynchronizeExecution+0x3a23
wow64cpu.dll!TurboDispatchJumpAddressEnd+0x6c0
wow64cpu.dll!TurboDispatchJumpAddressEnd+0x4a8
wow64.dll!Wow64SystemServiceEx+0x1ce
wow64.dll!Wow64LdrpInitialize+0x42a
ntdll.dll!RtlUniform+0x6e6
ntdll.dll!EtwEventSetInformation+0x1da09
ntdll.dll!LdrInitializeThunk+0xe
ntdll.dll!ZwWaitForSingleObject+0x15
kernel32.dll!WaitForSingleObjectEx+0x43
kernel32.dll!WaitForSingleObject+0x12
jvm.dll!_JVM_FindSignal@4+0x4e1df
jvm.dll!_JVM_FindSignal@4+0x8c1b1
jvm.dll!_JVM_FindSignal@4+0x8c5e6
jvm.dll!_JVM_MonitorWait@16+0xac
【问题讨论】:
-
运行“无论用户是否登录”的选项在服务会话(即会话 0)中使用用户服务 (S4U) 登录。此会话中的进程不能直接创建与交互式控制台会话交互的窗口,因此它可以挂在某些与 GUI 相关的功能中。使用 Process Explorer 显示进程中每个线程的堆栈跟踪,这将提供有关其挂起原因的提示。
-
谢谢。我已经用 Process Explorer 的堆栈输出更新了我的问题。你是对的,它似乎一直在等待一些 GUI 反馈。有什么办法可以使这项工作吗?
-
这只是告诉我们它正在通过
JVM_MonitorWait等待某个对象,这与显示“监视器”无关,而是监视等待。尝试安排它以交互方式运行——即没有 S4U 登录并使用当前控制台会话的用户帐户。如果它仍然不起作用,请尝试安排它在没有最高权限的情况下运行。 -
尝试“仅在用户登录时运行”,检查和不检查“以最高权限运行”,在这两种情况下我得到完全相同的结果,即它启动,没有任何反应,然后继续运行。
-
在进程资源管理器中,将“会话”和“用户名”列添加到显示在上部窗格中的每个进程信息中。确保它与 Explorer 在同一帐户下运行,并且在同一会话而不是会话 0 中运行。