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