Как войти в систему, имя пользователя и машины из окна службы в C #? - PullRequest
2 голосов
/ 27 октября 2010

Как получить зарегистрированного пользователя (интерактивный пользователь) и имя машины из службы окон в c #.Когда я пытаюсь использовать Environment и другой класс для входа в систему под именем пользователя, он просто возвращает NT AUTHORITY \ SYSTEM из службы окон.

Ответы [ 3 ]

2 голосов
/ 27 октября 2010

Служба выполняется под учетной записью SYSTEM, так что вы видите в классе Environment.Имя машины не должно быть проблемой (см. Комментарий Гмолива).Службы выполняются независимо от того, кто вошел в систему: это одна из основных причин их наличия.

Если вы хотите выяснить, какие пользователи (да, их может быть больше одного) могут войти в систему на вашем компьютере, вам придется использовать AFAIK необработанного Windows API.Если вы действительно этого хотите, одним из способов может быть итерация по рабочим столам , , открытие именованного рабочего стола , получение соответствующего пользователя каждого рабочего стола и найдите имя учетной записи пользователя (которое возвращает имя учетной записи на локальном компьютере).Если вам нужен только пользователь, который может видеть что-то на экране, используйте OpenInputDesktop , чтобы получить дескриптор, а не перебирать все из них.

Обратите внимание, что для этого требуется, чтобы ваша служба имела более высокие права доступа, чем обычно.Я бы сам немного с подозрением отнесся к такой услуге.

1 голос
/ 16 декабря 2017

Самый простой подход (по крайней мере, с использованием Visual Studio 2017 Community Edition и .Net Framework 4.7) -

Пространство имен: System.Security.Principal

Код:

Console.WriteLine(WindowsIdentity.GetCurrent().Name);

Вышедаст вам:

COMPUTERNAME\username

ОБНОВЛЕНИЕ

Еще один подход будет использовать Environment как в -

Console.WriteLine(Environment.UserName);, что даст зарегистрированному пользователю имя пользователя

и

Console.WriteLine(Environment.MachineName);, что даст компьютер или машина имя

1 голос
/ 20 июня 2016

Попробуйте этот фрагмент кода

ManagementScope ms = new ManagementScope(@"\\.\root\cimv2");
ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_ComputerSystem");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(ms, query);
foreach(ManagementObject mo in searcher.Get())
{
    Console.WriteLine(mo["UserName"].ToString());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...