Почему приложение, работающее под системной учетной записью Windows, при выходе из системы

StackOverflow https://stackoverflow.com/questions/970765

  •  13-09-2019
  •  | 
  •  

Вопрос

У меня есть приложение С#, которое запускается под учетной записью System на компьютере и отображает пользователю некоторые диалоговые окна.Когда обычный пользователь выходит из системы, приложение также закрывается.Я бы подумал, что, поскольку он работает под системной учетной записью, он продолжит работать, несмотря на то, что пользователь не вошел в систему.

Любая информация о том, почему это происходит, будет оценена по достоинству.

Это было полезно?

Решение

Если вы хотите, чтобы ваше приложение продолжало работать после выхода пользователя из системы (например,для поддержания состояния до тех пор, пока компьютер работает), вам нужна служба.Однако службам настоятельно не рекомендуется отображать пользовательский интерфейс.Если вам нужны как долговременная работа, так и пользовательский интерфейс, рассмотрите возможность написания службы для хранения ваших данных и приложения, которое запускается каждый раз, когда пользователь входит в систему, которое отображает пользовательский интерфейс и взаимодействует со службой.

Другие советы

Является ли ваше приложение услугой?Похоже, вам нужна услуга.Обратите внимание, что вы можете запустить любой процесс от имени любого пользователя, но это не делает его службой.Если ваш процесс реализован как служба, он продолжит работать даже без входа в систему пользователей.

Это функция безопасности, когда сеанс пользователя завершается, приложения, которые они вызвали, закрываются.Если вам нужно, чтобы приложение запускалось вне сеанса пользователя, вам нужна служба, поскольку его собственные службы сеанса не могут «достучаться» до сеанса пользователя с сообщениями и тому подобным.

Вам необходимо запустить приложение как службу Windows.

Вам нужно будет создать свое приложение как службу Windows.Если ваше приложение отображает диалоговые окна, вам необходимо установить флажок «Разрешить службе взаимодействовать с рабочим столом» и запустить его под учетной записью локальной системы.

Однако лучшим подходом было бы предоставить доступный к запросам интерфейс из вашего приложения с помощью WCF или Remoting, который вы можете отобразить пользователям с помощью отдельного приложения.Если вам нужны уведомления от вашего приложения, когда никто не вошел в систему, вы можете рассмотреть возможность отправки электронных писем или публикации событий в отдельную конечную точку WCF/веб-служб/удаленного взаимодействия.

Поскольку процесс был запущен explorer.exe, он будет завершен, когда пользователь выйдет из системы, независимо от того, под какой учетной записью он запущен.Просто так работает Windows.Чтобы процесс мог продолжать работу, он должен быть службой или, возможно, запускаться планировщиком задач.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top