在上一篇文章中, 我们了解了如何使用管理员权限强制启动基于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 !");
}
编码愉快!
推荐阅读
- MVP(任何移动应用程序成功的关键)
- 无声视频趋势(增加视频的可访问性)
- 如何在路由器上更改Wi-Fi频道
- 如何使用C#在WinForms中检索系统上可用的RAM量
- 安全编码的最佳做法
- Android Twitter登录按钮不起作用
- 使用友好URL传递参数 - MapPageRoute和Page.Route.Values不起作用 - C#
- Android(如何将参数传递给AsyncTask的onPreExecute()())
- 我应该如何在stylesheet_link_tag之前加载application.scss( - Rails5中的最佳实践是什么?)