C# 检查程序是否已管理员身份运行

2014年12月16日 3169点热度 0人点赞 0条评论

代码

    /// <summary>
    /// 判断程序是否是以管理员身份运行。
    /// </summary>
    public static bool IsRunAsAdmin()
    {
        System.Security.Principal.WindowsIdentity id = System.Security.Principal.WindowsIdentity.GetCurrent();
        System.Security.Principal.WindowsPrincipal principal = new System.Security.Principal.WindowsPrincipal(id);
        return principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator);
    }


    //不是以管理员身份开启,则自动以管理员身份重新打开程序
    //写在构造里比较省资源
        public LoginFrm()
     {
         try
         {
             //判断是否以管理员身份运行,不是则提示
             if (!PublicUtil.IsRunAsAdmin())
             {
                    System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo();
                    psi.WorkingDirectory = Environment.CurrentDirectory;
                    psi.FileName = Application.ExecutablePath;
                    psi.UseShellExecute = true;
                    psi.Verb = "runas";
                    System.Diagnostics.Process p = new System.Diagnostics.Process();
                    p.StartInfo = psi;
                    p.Start();
                    System.Diagnostics.Process.GetCurrentProcess().Kill();
             }
         }
         catch (Exception ex)
         {
             ExceptionScheduler.ExceptionScheduler exceptionScheduler = new ExceptionScheduler.ExceptionScheduler(ex);
             ShowMessageOnUI.ShowErrorMessage("程序无法获取Windows管理员身份运行,\n请手动使用Windows管理员身份运行");
         }
         InitializeComponent();
     }

Sollyu

保持饥渴的专注,追求最佳的品质