我需要将对我的应用程序的访问权限仅限于一个特定的用户帐户。我在WMI下找到了用于查找用户帐户的课程,但我不知道如何识别哪个人正在运行我的应用程序。
提前感谢您的anserws。
答案 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()作为程序正常流程的一部分,并将属性作为关键方法的安全措施。