Почему запланированная задача (notepad.exe) выполняется как процесс SYSTEM, но не отображается в графическом интерфейсе?

Я создал следующую запланированную задачу с помощью администратора cmd.exe:

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

Запланированная задача отлично работает на LOGON:

Тем не мение, notepad.exe нигде не видно в графическом интерфейсе.

Почему моя запланированная задача выполняется в фоновом режиме без какого-либо графического интерфейса? Как я могу это исправить?

1 ответ

Потому что у вас есть /RU SYSTEM, Системная учетная запись является специальной учетной записью и не имеет сеанса с графическим интерфейсом, как любая учетная запись, используемая для входа в систему. Он предназначен, например, для автоматических служб, которые должны работать, даже если пользователи не вошли в систему. Вы не можете войти как SYSTEM,

Использование Блокнота в качестве примера полностью маскирует ваши истинные потребности, но, возможно, (основываясь на комментариях) вы пытаетесь создать что-то, что фактически потребовало бы архитектуры интерактивной службы с отдельным клиентом GUI:

  1. Служба запускается без графического интерфейса при запуске системы.
  2. Скрытый клиент GUI запускается отдельно для каждого сеанса пользователя во время входа в систему.
  3. Сервис связывается с клиентом, заставляя его отображать графический интерфейс всякий раз, когда это необходимо.

Создайте отдельное скрытое приложение с графическим интерфейсом и используйте функцию CreateProcessAsUser для запуска приложения в контексте интерактивного пользователя. Разработайте приложение с графическим интерфейсом для связи со службой через некоторый метод межпроцессного взаимодействия (IPC), например, именованные каналы. Служба связывается с приложением GUI, чтобы сообщить ему, когда отображать GUI. Приложение передает результаты взаимодействия пользователя обратно в службу, чтобы служба могла предпринять соответствующие действия. Обратите внимание, что IPC может предоставлять ваши сервисные интерфейсы по сети, если вы не используете соответствующий список контроля доступа (ACL).

Если эта служба работает в многопользовательской системе, добавьте приложение в следующий ключ, чтобы оно запускалось в каждом сеансе: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run, Если приложение использует именованные каналы для IPC, сервер может различать несколько пользовательских процессов, назначая каждому каналу уникальное имя на основе идентификатора сеанса.

Не пытайтесь использовать Windows Task Scheduler для этой цели, но лучше разрабатывайте свое программное обеспечение.

Другие вопросы по тегам