ManagementObjectSearcher («ВЫБЕРИТЕ имя пользователя из Win32_ComputerSystem») работало нормально для меня.НО это не работает, если служба запускается через подключение к удаленному рабочему столу.Чтобы обойти это, мы можем запросить имя пользователя владельца интерактивного процесса, который всегда выполняется на ПК: explorer.exe.Таким образом, мы всегда получаем имя пользователя, выполнившего вход в Windows, из нашей службы Windows:
foreach (System.Management.ManagementObject Process in Processes.Get())
{
if (Process["ExecutablePath"] != null &&
System.IO.Path.GetFileName(Process["ExecutablePath"].ToString()).ToLower() == "explorer.exe" )
{
string[] OwnerInfo = new string[2];
Process.InvokeMethod("GetOwner", (object[])OwnerInfo);
Console.WriteLine(string.Format("Windows Logged-in Interactive UserName={0}", OwnerInfo[0]));
break;
}
}