C#.NET使用Windows服务获取计算机的用户名

我很难获得使用Windows服务登录到计算机的用户名。

当同时使用System.Environment.UserName或WindowsIdentity.GetCurrent()。UserName我得到NTAUTHORITY \ SYSTEM但是当这个应用程序被推送时,我需要能够映射到登录到系统的人的UserID。 将使用的操作系统将是Windows XP。

任何帮助将非常感激。

仅对于XP,此建议应适用: 为每个进程,用户或会话的非交互式用户获取Window Station?

  • 调用OpenWindowStation来获取“winsta0”的句柄
  • 调用GetUserObjectInformation以找出谁拥有winsta0

但是,当您将应用程序升级到Vista,Windows 7或更高版本时此方法将会中断,其中服务在与交互式登录不同的会话中运行。 您需要调用终端服务API以获取已登录用户的列表,然后选择“交互式”用户。

试试这个:

 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()); } 

Windows服务始终在服务“属性/登录”选项卡中提供的凭据下运行。 这与当前在其会话中登录到Windows的人员/人员的凭据无关。

NTAUTHORITY \ SYSTEM的值是正确的,因为您的服务在“本地系统帐户”凭据下运行。

您无法在“当前登录”用户的帐户下运行Windows服务 – 这不是Windows服务的用途。