C# 使用管理员身份启动应用程序源码

 

最近为公司做了一个项目,自动从网页上抓取数据,抓取时间是固定的,程序运行在服务器上,所以想要给程序写一段开机自动运行的代码。

运行下面代码,在CreateSubKey(..)函数时程序报错:不允许访问注册表。能打开但是不能写入,那么就是使用权限的问题了(Windows7权限系

统比较严厉,貌似window2003也是这样,但是没有测试过)。baidu一下,在csdn上找到了下面代码,用于确保程序运行时使用系统管理员权限,

这样就不需要修改windows外部设置,就可以修改注册表,完成开机自动启动功能。

现把代码贴上来备忘。

public void SetRunStart( string name, string path)
        {
            RegistryKey HKLM = Registry.LocalMachine;
            RegistryKey Run = null;            

            try
            {
                Run = HKLM.OpenSubKey(keypath);
            }
            catch
            {          }
            try
            {
                if (Run == null)
                {
                    Run = HKLM.CreateSubKey(keypath);
                }
                Run.SetValue(name, "\"" + path + "\"");
                HKLM.Flush();
                HKLM.Close();
            }
            catch (Exception Err)
            {
                ErrLog(Err.Message);
            }
            finally { HKLM.Close(); }       
        }


当前用户是管理员的时候,直接启动应用程序
 如果不是管理员,则使用启动对象启动程序,以确保使用管理员身份运行

static void Main(string[] Args) 
                {
		/**
                   * 当前用户是管理员的时候,直接启动应用程序
                   * 如果不是管理员,则使用启动对象启动程序,以确保使用管理员身份运行
                   */ //获得当前登录的Windows用户标示
                        System.Security.Principal.WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent();
                        //创建Windows用户主题
                        Application.EnableVisualStyles();

                        System.Security.Principal.WindowsPrincipal principal = new System.Security.Principal.WindowsPrincipal( identity );
                        //判断当前登录用户是否为管理员
                        if(  principal.IsInRole( System.Security.Principal.WindowsBuiltInRole.Administrator ) )
                        {
                                //如果是管理员,则直接运行
                                
                                Application.EnableVisualStyles();
                                Application.Run(new MainForm());
                        }
                        else
                        {
                                //创建启动对象
                                System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
                                //设置运行文件
                                startInfo.FileName = System.Windows.Forms.Application.ExecutablePath;
                                //设置启动参数
                                startInfo.Arguments = String.Join( " ", Args );
                                //设置启动动作,确保以管理员身份运行
                                startInfo.Verb = "runas";
                                //如果不是管理员,则启动UAC
                                System.Diagnostics.Process.Start( startInfo );
                                //退出
                                System.Windows.Forms.Application.Exit();
                        }
                } 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值