如何确定你的WinForms C#应用程序是否具有管理员权限

在上一篇文章中, 我们了解了如何使用管理员权限强制启动基于WinForms C#的应用程序。当我们不关心应用程序的当前状态(无论有无管理员权限)时, 此功能非常有用。但是, 当你的应用程序需要同时在两种情况下运行时, 你应该根据情况检查何时运行某些代码。通过Windows的System.Security.Principal类可以轻松完成此操作。
System.Security.Principal命名空间定义了一个主体对象, 该主体对象表示在其下运行代码的安全上下文。导入此类时, 可以访问名称空间的WindowsIdentity类。此类表示运行应用程序的当前用户。
使用此对象, 你可以检查当前身份是否与Windows用户的Windows组成员身份(在本例中为Administrator角色)匹配。提供WindowsPrincipal类的新实例的第一个参数。从此对象, 可以调用IsInRole方法来验证是否为管理员:

using System.Security.Principal; // Store boolean flagbool isAdmin; using (WindowsIdentity identity = WindowsIdentity.GetCurrent()){WindowsPrincipal principal = new WindowsPrincipal(identity); // If is administrator, the variable updates from False to TrueisAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator); }// Check with a simple condition whether you are admin or notif (isAdmin){MessageBox.Show("You have administrator rights !"); }else{MessageBox.Show("You don't have administrator rights :C !"); }

通过这种简单的逻辑, 你可以轻松地检查当前用户是否为管理员。值得一提的是, 对于Linux环境, 这在Windows和Mono中也能完美运行。
建立方法【如何确定你的WinForms C#应用程序是否具有管理员权限】你可以轻松地在你的类中创建一个方法来很快验证以下逻辑:
using System.Security.Principal; /// < summary> /// Boolean method that verifies if the current user has administrator rights./// < /summary> /// < returns> < /returns> public bool IsAdministrator(){bool isAdmin; using (WindowsIdentity identity = WindowsIdentity.GetCurrent()){WindowsPrincipal principal = new WindowsPrincipal(identity); isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator); }return isAdmin; }

你可以在有条件的情况下使用它:
if (this.IsAdministrator()){MessageBox.Show("You have administrator rights !"); }else{MessageBox.Show("You don't have administrator rights :C !"); }

编码愉快!

    推荐阅读