我无法使用Windows服务获取登录计算机的用户名。
同时使用System.Environment.UserName或WindowsIdentity.GetCurrent()。UserName我得到NTAUTHORITY \ SYSTEM但是当这个应用程序被推送时,我需要能够映射到登录到系统的人的UserID。将使用的操作系统将是Windows XP。
非常感谢任何帮助。
答案 0 :(得分:4)
试试这个:
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 :(得分:1)
仅限XP,此建议应适用:Get Window Station for a non-interactive user per process, user or session?
OpenWindowStation
以获取“winsta0”GetUserObjectInformation
,了解谁拥有winsta0 然而,当您将应用升级到Vista,Windows 7或更高版本时,此方法会中断,其中服务在与交互式登录不同的会话中运行。您需要调用终端服务API以获取已登录用户的列表,然后选择“交互式”用户。
答案 2 :(得分:-2)
Windows服务始终在服务“属性/登录”选项卡中提供的凭据下运行。这与当前在自己的会话中登录Windows的人/人的凭据无关。
NTAUTHORITY \ SYSTEM的值是正确的,因为您的服务是在“本地系统帐户”凭据下运行。
您无法在“当前登录”用户的帐户下运行Windows服务 - 这不是Windows服务的用途。