繁体   English   中英

使用 WMI:如何获取运行我的程序的用户帐户的名称?

[英]With WMI: How can I get the name of the user account who's running my program?

我需要将我的应用程序的访问权限限制为只有一个特定的用户帐户。 我在 WMI 下找到了一些类来查找用户帐户,但我不知道如何识别哪个正在运行我的应用程序。

有比使用 WMI 更简单的方法来获取当前用户名。

WindowsIdentity.GetCurrent() Name将为您提供当前 Windows 用户的名称。

Environment.Username将为您提供当前登录用户的名称。

这两者之间的区别在于WindowsIdentity.GetCurrent().Name还将包括域名和用户名(即MYDOMAIN\\adrian而不是adrian )。 如果您需要来自Environment的域名,您可以使用Environment.UserDomainName

编辑

如果你真的想用 WMI 来做,你可以这样做:

ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT UserName FROM Win32_ComputerSystem");
ManagementObjectCollection collection = searcher.Get();
string username = (string) collection.Cast<ManagementBaseObject>().First()["UserName"];

不幸的是, ManagementObjectCollection上没有索引器属性,因此您必须枚举它以获得第一个(也是唯一的)结果。

您不一定需要使用 WMI。 查看WindowsIdentity

var identity = WindowsIdentity.GetCurrent();
var username = identity.Name;

最简单的方法是通过 Environment 类:

string user = Environment.UserDomainName + "\\" + Environment.UserName;

还有几种方法可以限制特定用户(尽管检查角色更为常见)。

除了显而易见的

if (userName == "domain\\john") 
{  }

您还可以在整个类或特定方法上使用以下属性:

[PrincipalPermission(SecurityAction.Demand,  Name = "domain\\john", 
      Authenticated = true)] 
void MyMethod() 
{ 
}

对于低级、可重用的方法,这可能更可靠一些。

请注意,您可以同时使用两者,使用 if() 作为程序正常流程的一部分检查用户,并将属性作为关键方法的保护措施。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM