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

时间:2010-12-14 18:04:59

标签: c# windows-services

我无法使用Windows服务获取登录计算机的用户名。

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

非常感谢任何帮助。

3 个答案:

答案 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服务的用途。