如何检查管理员权限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。谢谢!

如何检查管理员权限c#

这是执行检查的正确方法,我自己在PowerShell配置文件中使用它来区分提升的会话。

我怀疑你没有考虑到用户访问控制(UAC)的影响。当用户登录时,他们会获得分配的安全令牌对象。这包含他们自己的安全id (SID)、他们所属组的SID和他们拥有的特权列表(以及这些特权是否被启用)。

启用UAC后,当您进行交互式登录时,如果您具有某些特权或是本地管理员的成员,您将获得两个令牌:一个具有所有内容,另一个具有删除的管理访问sid和特权。后一个令牌用于每个启动的进程,除非在使用前一个令牌时启动了升级。

因此,如果没有额外的步骤,管理员就无法行使其全部权力-这有助于防止恶意软件在完全控制系统的情况下启动。

查看此操作的最佳工具是Process Explorer。流程属性对话框的Security选项卡显示了流程安全令牌的内容(并添加了"完整性级别")。列将显示被提升的进程)-运行进程资源管理器以查看提升的完整信息。

因此,您的代码将只对管理员运行的进程返回true,该进程也是提升的(以管理员身份运行)。