После долгих поисков в intellisense, отладчике и документации мы не смогли найти ничего строго надежного. Может быть возможно получить текущий идентификатор процесса и попытаться выяснить, зарегистрирован ли этот процесс в SCM, но, хотя .NET предоставляет способ получения набора всех служб, их идентификаторы процессов не входят в число доступной информации. Сравнение имени процесса с именами служб возможно, но не обязательно надежно.
Тем не менее, есть две вещи, которые относительно легко проверить и которые могут быть достаточными для разницы, которая вам нужна, если не совсем «Этот код работает как служба?»
<a href="http://msdn.microsoft.com/en-us/library/system.environment.userinteractive.aspx" rel="nofollow noreferrer">System.Environment.UserInteractive</a>
: (как заметил Стивен Мартин) Если это правда, это не может быть услуга. Большинство процессов, которые не являются службой (и не драйвером устройства), скажут true. Некоторые консольные приложения могут показывать false при запуске в неинтерактивных условиях, таких как часть процесса сборки.
<a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.process.getcurrentprocess.aspx" rel="nofollow noreferrer">System.Diagnostics.Process.GetCurrentProcess</a>().<a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.process.sessionid.aspx" rel="nofollow noreferrer">SessionId</a>
: (я думаю, это то же самое, что и Пьер). Если это не 0, он не был запущен как сервис. Большинство нормальных приложений не будет в сеансе 0 (с некоторыми необычными исключениями, как отмечают Пьер и Стивен). Самый большой вопрос заключается в том, как это ведет себя в более старых ОС, таких как XP или раньше. XP и Windows 2000, очевидно, имеют службы, работающие в сеансе 0, но обычные приложения также будут в сеансе 0. Некоторые конфигурации XP (например, не в домене) допускают одновременное использование нескольких пользовательских сеансов, и каждый из них получает свой идентификатор сеанса, но первый получает сеанс 0. Таким образом, проверка до Vista не так эффективна.
Таким образом, в зависимости от того, что вам действительно нужно различать, одна или обе эти проверки могут работать для вас.