C # .NET Получение имени пользователя машины с помощью службы Windows - PullRequest
3 голосов
/ 14 декабря 2010

У меня проблемы с получением имени пользователя, который вошел в систему с помощью службы Windows.

При использовании обоих System.Environment.UserName или WindowsIdentity.GetCurrent (). UserName я получаю NTAUTHORITY \ SYSTEM, но когда это приложение выдвигается, мне нужно иметь возможность сопоставить UserID человека, вошедшего в систему. Операционная система, на которой он будет использоваться, будет Windows XP.

Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

4 голосов
/ 14 декабря 2010

Попробуйте это:

var connectionOptions = new ConnectionOptions();
var scope = new System.Management.ManagementScope("\\\\localhost", connectionOptions);
var query = new System.Management.ObjectQuery("select * from Win32_ComputerSystem");
var searcher = new ManagementObjectSearcher(scope, query);
foreach (var row in searcher.Get()) 
{
    Console.WriteLine(row["UserName"].ToString().ToLower());
}
1 голос
/ 14 декабря 2010

Только для XP, этот совет должен применяться: Получить Window Station для неинтерактивного пользователя для процесса, пользователя или сеанса?

  • Позвоните OpenWindowStation, чтобы получитьдескриптор "winsta0"
  • Позвоните GetUserObjectInformation, чтобы узнать, кому принадлежит winsta0

Однако, этот подход сломается при обновлении приложения до VistaWindows 7 или выше, где службы работают в другом сеансе, чем интерактивные входы в систему.Вам нужно будет вызвать API служб терминалов, чтобы получить список зарегистрированных пользователей и выбрать свой «интерактивный».

0 голосов
/ 14 декабря 2010

Служба Windows всегда запускается под учетными данными, указанными на вкладке «Свойства» / «Вход в систему».Это не имеет ничего общего с учетными данными человека / людей, которые в настоящее время вошли в Windows в своих собственных сеансах.

Значение NTAUTHORITY \ SYSTEM является правильным, поскольку ваша служба работает под учетными данными «Локальная системная учетная запись».

Невозможно запустить службу Windows под учетной записью пользователя, вошедшего в систему. Это не то, для чего предназначена служба Windows.

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