如何检查管理员权限c#
本文关键字:管理员 权限 检查 何检查 | 更新日期: 2023-09-27 18:09:56
如何检查我的应用程序是否具有管理员权限?我现在使用下面的代码:
public static bool IsUserAdministrator()
{
//bool value to hold our return value
bool isAdmin;
try
{
//get the currently logged in user
WindowsIdentity user = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(user);
isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);
}
catch (UnauthorizedAccessException ex)
{
isAdmin = false;
}
catch (Exception ex)
{
isAdmin = false;
}
return isAdmin;
}
这段代码检查用户权限,我需要检查应用程序拥有的权限。例如,我不是管理员,但是当应用程序以管理员权限启动时,此代码返回false。谢谢!
这是执行检查的正确方法,我自己在PowerShell配置文件中使用它来区分提升的会话。
我怀疑你没有考虑到用户访问控制(UAC)的影响。当用户登录时,他们会获得分配的安全令牌对象。这包含他们自己的安全id (SID)、他们所属组的SID和他们拥有的特权列表(以及这些特权是否被启用)。
启用UAC后,当您进行交互式登录时,如果您具有某些特权或是本地管理员的成员,您将获得两个令牌:一个具有所有内容,另一个具有删除的管理访问sid和特权。后一个令牌用于每个启动的进程,除非在使用前一个令牌时启动了升级。
因此,如果没有额外的步骤,管理员就无法行使其全部权力-这有助于防止恶意软件在完全控制系统的情况下启动。
查看此操作的最佳工具是Process Explorer。流程属性对话框的Security选项卡显示了流程安全令牌的内容(并添加了"完整性级别")。列将显示被提升的进程)-运行进程资源管理器以查看提升的完整信息。
因此,您的代码将只对管理员运行的进程返回true,该进程也是提升的(以管理员身份运行)。