如何从c#中的窗口服务获取登录用户(交互式用户)和计算机名称。当我尝试环境和其他类来登录用户名时,它只是从窗口服务返回NT AUTHORITY \ SYSTEM。
答案 0 :(得分:2)
该服务在SYSTEM帐户下执行,以便您在Environment
类中看到的内容。机器名称应该不是问题(参见Gmoliv的评论)。服务独立于可能登录的任何人执行:这是拥有它们的主要原因之一。
如果您想了解哪些用户(是的,可能有多个用户)可能已登录到您的计算机,则必须使用原始Windows API的AFAIK。如果您真的想要这个,可以选择iterate through desktops,open the named desktop,获取关联的user of each desktop和look 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);
这将产生计算机或机器的名称