2017-02-01 17 views
1

Как получить текущий вошел в систему Пользователь Windows? моя проблема: я бег процесс с правами администратора и все это:Получить текущий пользователь Windows - не текущий рабочий процесс пользователя

Console.WriteLine(System.Security.Principal.WindowsIdentity.GetCurrent().Name); 
Console.WriteLine(Environment.UserName); 
Console.WriteLine(System.Security.Principal.WindowsIdentity.GetCurrent().User); //GUID 
Console.WriteLine(Environment.GetEnvironmentVariable("USERNAME")); 

... пытается вернуть мне текущий пользователь, который запускает процесс , в моем случае Administrator - но я» d хотел бы иметь текущего пользователя, который зарегистрирован в.

Любые идеи или предложения?

+0

Возможный дубликат https://stackoverflow.com/questions/10666685/c-sharp-net-how-to-detect-if-a -process-is-running-for-the-current-log-in-use? rq = 1 –

+0

@UweKeim Не уверен, как это дубликат – MickyD

+0

_ «Я запускаю процесс с правами администратора» _ - вы имеете в виду процесс запущен _elevated_? Что такое ОС, потому что, когда я добавляю ** app.manifest ** и включаю '' для моего тестового приложения, он запускается с повышенным и все же отображает _my name_ правильно и не «администратор» или аналогичный – MickyD

ответ

2

Я нашел этот метод давным-давно. Я использую WMI query

ManagementObjectSearcher searcher = 
    new ManagementObjectSearcher("SELECT UserName FROM Win32_ComputerSystem"); 

ManagementObjectCollection collection = searcher.Get(); 
string username = (string)collection.Cast<ManagementBaseObject>().First()["UserName"]; 
+1

Как это работает, если два пользователя вошли в систему? – MickyD

+0

Я никогда не использовал этот метод для 2 пользователей. Но вопрос не для 2 пользователей? –

+1

Возможно, но это не дурацкий метод. _ "[В сеансе служб терминалов UserName возвращает имя пользователя, который вошел в систему, а не пользователя, вошедшего в систему во время сеанса службы терминалов] (https://msdn.microsoft.com/en-us/ библиотека/aa394102 (v = vs.85) .aspx) "_ – MickyD

1

Правильный путь, я считаю, будет исполнять WTSQuerySessionInformation, что-то вдоль линий:

WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE,WTS_CURRENT_SESSION, 
          WTSUserName,buffer, out byteCount); 

PInvoke страницу для этой функции.


тангенциально связаны между собой, но могут быть интересны - How can I launch an unelevated process from my elevated process and vice versa?