ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-08-10 16:35:58  阅读:253  来源: 互联网

标签:C# System 管理员 startInfo Security 权限 Principal


最近在开发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();方法。

标签:C#,System,管理员,startInfo,Security,权限,Principal
来源: https://www.cnblogs.com/motion/p/15124454.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有