Я пропустил тег, указывающий на то, что вы создали службу Windows.Это совсем другой тип животных, чем обычное приложение, и совет, который вы получаете для одного, не обязательно подлежит передаче другому.
В частности, я заметил, что вы пометили этот вопрос windows-7
.Если вы пытаетесь запустить эту службу под Windows 7, вам нужно понять несколько вещей о том, как модель Windows Services была существенно изменена, начиная с Windows Vista.В частности, теперь они работают в изолированном сеансе и им запрещено напрямую взаимодействовать с пользователем.Также см. мой ответ здесь для лучшего объяснения.
Фундаментальный момент заключается в том, что, с точки зрения службы Windows, не существует такого понятия, как текущий вход в систему.пользователь .Служба Windows работает в своем собственном изолированном сеансе и не связана с каким-либо конкретным пользователем.Вот почему код , который вы нашли для определения пользователя, связанного с конкретным процессом, не работает так, как вы ожидаете от службы Windows.Обычному пользователю не принадлежит процесс, выполняющий службу.(И замена вашей службы приложением также не является жизнеспособным вариантом, учитывая то, как я понимаю ваши требования. Как я объясняю здесь , приложения пользовательского режима запускаются, когда конкретный пользователь входит в систему, и будут закрываться всякий раз, когдаэтот пользователь выходит из системы.)
Другая проблема заключается в том, что на одном рабочем месте одновременно могут быть зарегистрированы нескольких пользователей .Windows является полностью многопользовательской операционной системой, поэтому лучшее, на что вы можете надеяться, это перечислить всех зарегистрированных в данный момент пользователей.Функция NetWkstaUserEnum
поможет вам получить этот список, но учтите, что он включает в себя все типы входов в систему, в том числе интерактивные пользователи, службы и пакетный вход.Чтобы вызвать эту функцию из C #, вам потребуется P / Invoke - вы можете найти информацию об этом в pinvoke.net .