如何从.NET中的Windows服务获取当前记录的用户名?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (17)

我有一个需要当前登录用户名的Windows服务。我尝试了System.Environment.UserNameWindows身份验证和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手动添加到引用下。

扫码关注云+社区