Почему приложение работает как системная учетная запись в Windows при выходе

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

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

6 ответов

Решение

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

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

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

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

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

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

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

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