为什么(notepad.exe)计划任务作为系统进程运行,但未显示在 GUI 中?

为什么(notepad.exe)计划任务作为系统进程运行,但未显示在 GUI 中?

我已经使用管理员创建了以下计划任务cmd.exe

schtasks /CREATE /RU SYSTEM /SC ONLOGON /TN SYSTEM_notepad /TR C:\Windows\System32\notepad.exe

计划任务在 LOGON 上运行良好:

在此处输入图片描述

然而,notepad.exe在 GUI 中却无处可见。

为什么我的计划任务在没有任何 GUI 的情况下在“后台”运行?我该如何解决这个问题?

答案1

因为您有/RU SYSTEM。系统帐户是特别帐户并且不像任何用于登录的帐户那样具有 GUI 会话。它是为无人值守服务设计的,即使用户未登录也需要运行。您不能以 身份登录SYSTEM

使用记事本作为示例完全掩盖了您的真实需求,但也许(基于评论)您正在尝试构建实际上需要以下架构的东西互动服务使用单独的 GUI 客户端:

  1. 系统启动时,服务无需 GUI 即可启动。
  2. 隐藏的 GUI 客户端在登录期间为每个用户会话单独启动。
  3. 该服务与客户端通信,使其在需要时显示 GUI。

创建一个单独的隐藏 GUI 应用程序并使用 创建进程作为用户函数在交互式用户的上下文中运行应用程序。设计 GUI 应用程序以通过某种进程间通信 (IPC) 方法(例如命名管道)与服务进行通信。服务与 GUI 应用程序进行通信以告知其何时显示 GUI。应用程序将用户交互的结果传回服务,以便服务可以采取适当的操作。请注意,除非您使用适当的访问控制列表 (ACL),否则 IPC 可以通过网络公开您的服务接口。

如果此服务在多用户系统上运行,请将应用程序添加到以下注册表项,以便它在每个会话中运行: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run。如果应用程序使用命名管道进行 IPC,则服务器可以通过根据会话 ID 为每个管道赋予唯一名称来区分多个用户进程。

不要尝试使用 Windows 任务计划程序来实现此目的,而是更好地设计您的软件。

相关内容