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

时间:2009-08-17 17:47:52

标签: c# wmi

我需要将对我的应用程序的访问权限仅限于一个特定的用户帐户。我在WMI下找到了用于查找用户帐户的课程,但我不知道如何识别哪个人正在运行我的应用程序。

提前感谢您的anserws。

3 个答案:

答案 0 :(得分:6)

获取当前用户名比使用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上没有索引器属性,所以你必须枚举它以获得第一个(也是唯一的)结果。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

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

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

除了显而易见的

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

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

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

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

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