内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用
我有一个需要当前登录用户名的Windows服务。我尝试了System.Environment.UserName
Windows身份验证和Windows窗体身份验证,但是,由于我的服务在系统特权中运行,所有用户都返回“ 系统 ”作为用户。有没有办法在不改变我的服务帐户类型的情况下获取当前登录的用户名?
如果在用户网络中,则用户名将会不同:
Environment.UserName
将显示格式:'用户名',而不是
System.Security.Principal.WindowsIdentity.GetCurrent().Name
将显示格式:'NetworkName \ Username'
选择你想要的格式。
这是一个WMI查询来获取用户名称:
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT UserName FROM Win32_ComputerSystem");
ManagementObjectCollection collection = searcher.Get();
string username = (string)collection.Cast<ManagementBaseObject>().First()["UserName"];
需要System.Management
手动添加到引用下。