C# 使用管理员权限运行程序

最近在开发OPCServer组件过程中,在注册opcServer是总是返回false,后来查找原因得知在本地主机注册opcServer时,需要使用管理员权限。

OPCServer在一台机器上部署时只需注册一次即可。下面代码介绍如何在 .net 程序中调用管理员权限运行方法。

首先理清思路,将需要管理员权限执行的代码块提取出来 写成方法。

  private void btnStartRegister_Click(object sender, EventArgs e)
        {
            try
            {
                /**
                  * 当前用户是管理员的时候,直接启动应用程序
                  * 如果不是管理员,则使用启动对象启动程序,以确保使用管理员身份运行
                  */
                //获得当前登录的Windows用户标示
                System.Security.Principal.WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent();
                System.Security.Principal.WindowsPrincipal principal = new System.Security.Principal.WindowsPrincipal(identity);
                //判断当前登录用户是否为管理员
                if (principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator))
                {
                    //如果是管理员,则直接运行
                    RegisterOpc();//在这个方法里写入你自己需要调用管理员权限执行的内容
                }
                else
                {
                    //创建启动对象
                    System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
                    startInfo.UseShellExecute = true;
                    startInfo.WorkingDirectory = Environment.CurrentDirectory;
                    startInfo.FileName = Application.ExecutablePath;
                    //设置启动动作,确保以管理员身份运行
                    startInfo.Verb = "runas";
                    try
                    {
                        System.Diagnostics.Process.Start(startInfo);
                    }
                    catch
                    {
                        return;
                    }
                    //退出
                    Application.Exit();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

注意这里  RegisterOpc();是我封装的方法,方法里的内容就是需要管理员权限执行的操作。

        public void RegisterOpc()
        {
            string path = System.Windows.Forms.Application.ExecutablePath; //exe的路径
            bool isSuccess = OPCSrvHelper.RegisterOPCSrv(path, UUID, opcServerName);//注册OPC服务器
            if (isSuccess)
            {
                MessageBox.Show("注册成功!");
            }
        }

当用户第一次打开程序时,他可能并不知道需要管理员权限来执行,所以当他注册opc时,程序会弹出对话框,要求赋予管理员权限,当用户确定后。此时

System.Diagnostics.Process.Start(startInfo);

使用管理员权限重启启动进程,此时程序已有管理员权限,直接运行 RegisterOpc();方法。

上一篇:学英语 – 基础句型


下一篇:(1)大数据管理:kerberos安全认证了解