Можно ли определить, работает ли основной поток приложения как служба Windows, не используя директиву компиляции? - PullRequest
2 голосов
/ 23 августа 2010

Мне нужно выполнить проверку в методе, содержащемся в общей библиотеке, на которую ссылаются приложение Windows Form и служба Windows.

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

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

Спасибо

Ответы [ 2 ]

3 голосов
/ 23 августа 2010

Вы можете проверить Environment.UserInteractive свойство, которое вернет false, если ваше приложение работает как служба Windows.

1 голос
/ 23 августа 2010

Да, это так.Во время выполнения вы можете проверить, является ли родительский процесс services.exe или текущий процесс svchost.exe.Или вы можете запросить диспетчер управления службами с помощью WinApi, запущена ли ваша служба, а идентификатор текущего процесса равен идентификатору запущенной службы.

В этом ответе есть пример кода на C #:

Как определить, запускается ли приложение C ++ в качестве службы Windows?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...