С#.NET Получение имени пользователя с помощью службы Windows
Мне сложно получить имя пользователя, зарегистрированного на компьютере, с помощью службы Windows.
При использовании как System.Environment.UserName, так и WindowsIdentity.GetCurrent(). UserName Я получаю NTAUTHORITY\SYSTEM, но когда это приложение нажимается, мне нужно иметь возможность сопоставлять идентификатор пользователя пользователя, входящего в систему. Операционная система, на которой будет использоваться эта система, будет Windows XP.
Любая помощь будет очень оценена.
Ответы
Ответ 1
Только для XP этот совет должен применяться: Получить Window Station для неинтерактивного пользователя для каждого процесса, пользователя или сеанса?
- Вызовите
OpenWindowStation
, чтобы получить дескриптор "winsta0"
- Вызовите
GetUserObjectInformation
, чтобы узнать, кто владеет winsta0
Однако этот подход будет нарушен при обновлении вашего приложения до Vista, Windows 7 или выше, где службы запускаются в другом сеансе из интерактивных входов. Вам нужно будет вызвать API служб терминалов, чтобы получить список зарегистрированных пользователей и выбрать свой "интерактивный".
Ответ 2
Попробуйте следующее:
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());
}
Ответ 3
Служба Windows всегда запускается под учетными данными, указанными на вкладке Свойства/Вход в службу. Это не имеет никакого отношения к учетным данным человека/людей, которые в настоящее время вошли в Windows в свои собственные сеансы.
Значение NTAUTHORITY\SYSTEM корректно, потому что ваша служба работает под учетными данными "Локальная учетная запись системы".
Вы не можете запускать службу Windows из-за учетной записи пользователя "в настоящее время вошел в систему" - это не то, для чего предназначена служба Windows.