如何从c#中的窗口服务登录用户名和机器名?

时间:2010-10-27 11:17:16

标签: windows-services wcf

如何从c#中的窗口服务获取登录用户(交互式用户)和计算机名称。当我尝试环境和其他类来登录用户名时,它只是从窗口服务返回NT AUTHORITY \ SYSTEM。

3 个答案:

答案 0 :(得分:2)

该服务在SYSTEM帐户下执行,以便您在Environment类中看到的内容。机器名称应该不是问题(参见Gmoliv的评论)。服务独立于可能登录的任何人执行:这是拥有它们的主要原因之一。

如果您想了解哪些用户(是的,可能有多个用户)可能已登录到您的计算机,则必须使用原始Windows API的AFAIK。如果您真的想要这个,可以选择iterate through desktopsopen the named desktop,获取关联的user of each desktoplook up the account name of the user(在本地计算机上返回帐户名称)。如果您只想要可能在屏幕上看到某些内容的用户,请使用OpenInputDesktop来获取句柄,而不是遍历所有这些内容。

请注意,这要求您的服务具有比平时更高的访问权限。我自己对这样的服务有点怀疑。

答案 1 :(得分:1)

试试此代码段

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

答案 2 :(得分:1)

最简单的方法(至少使用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);   这将产生计算机机器名称