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

C# 使用WMI:如何获取运行我的程序的用户帐户的名称?,c#,wmi,C#,Wmi,我需要限制对我的应用程序的访问仅限于一个特定的用户帐户。我在WMI下找到了用于查找用户帐户的类,但我不知道如何识别哪个类正在运行我的应用。您不一定需要使用WMI。退房 有比使用WMI更简单的方法获取当前用户名 。将为您获取当前Windows用户的名称 将为您获取当前登录用户的名称 这两者之间的区别在于WindowsIdentity.GetCurrent.Name还将包括域名和用户名,即.MYDOMAIN\adrian而不是adrian。如果您需要环境中的域名,可以使用 编辑 如果确实要使用WMI

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

您不一定需要使用WMI。退房


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

。将为您获取当前Windows用户的名称

将为您获取当前登录用户的名称

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

编辑

如果确实要使用WMI执行此操作,可以执行以下操作:

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

遗憾的是,ManagementObjectCollection上没有indexer属性,因此您必须枚举它以获得第一个也是唯一的结果。

最简单的方法是通过环境类:

string user = Environment.UserDomainName + "\\" + Environment.UserName;
虽然检查角色更为常见,但也有几种方法限制特定用户

除了显而易见的

if (userName == "domain\\john") 
{  }
还可以对整个类或特定方法使用以下属性:

[PrincipalPermission(SecurityAction.Demand,  Name = "domain\\john", 
      Authenticated = true)] 
void MyMethod() 
{ 
}
对于低级别、可重用的方法来说,这可能更可靠一些


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

谢谢,这更简单,我将使用它,但是有没有办法使用WMI来执行此操作?
[PrincipalPermission(SecurityAction.Demand,  Name = "domain\\john", 
      Authenticated = true)] 
void MyMethod() 
{ 
}