程序以管理员权限运行 方法2


 如果要以管理员身份开机自启执行程序。注册表实现不了,启动菜单目录也实现不了。因为即使设置了程序的兼容性以管理员身份运行,但弹出的那个UAC确认框谁来点呢?据我所知,用计划任务是目前唯一可以实现以管理员身份启动并且不需要UAC确认的。

 
-------win7中使用runas命令
在win7中,由于账户控制,使用cmd就不太方便,因为权限问题,比方说最简单的,输入“net start mssqlserver”(开启sql server服务),就会提示“拒绝访问”。最简单的解决办法就是右键选择“以管理员身份运行”,获取权限就够了。
现在发现这样也不方便,就想着是不是有什么命令可以达到这样的效果。查了下,就是“runas”。
    在cmd里输入“runas /?”查看帮助,其实我要的只是以管理员账号运行就够了,输入“runas /user:administrator cmd”(用administrator运行cmd),之后会让输入密码,输入密码后报错了 “RUNAS 错误: 无法运行 - cmd 1058: 无法启动服务,原因可能是已被禁用或与其相关联的设备没有启动。”
     这个是因为 “Secondary Logo”服务没有启动,这个服务是“在不同凭据下启用启动过程”。直接在cmd中输入services.msc,将服务从禁用改为手动就好了,之后再次输入runas命令,就会弹出新的cmd窗口,且是以administrator账号运行的,权限问题搞定。


在Vista 和 Windows 7 及更新版本的操作系统,增加了 UAC(用户账户控制) 的安全机制,如果 UAC 被打开,用户即使以管理员权限登录,其应用程序默认情况下也无法对系统目录、系统注册表等可能影响系统正常运行的设置进行写操作。这个机制大大增强了系统的安全性。
 

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Security.Principal;
using System.Diagnostics;

namespace ConsoleApp4
{
    class Program
    {
        public static bool IsAdministrator()
        {
            bool result;
            try
            {
                WindowsIdentity identity = WindowsIdentity.GetCurrent();
                WindowsPrincipal principal = new WindowsPrincipal(identity);
                result = principal.IsInRole(WindowsBuiltInRole.Administrator);

                
            }
            catch
            {
                result = false;
            }
            return result;
        }

        static void Main(string[] args)
        {
            if (IsAdministrator())
            {
                Process.Start("cmd.exe");
                Console.WriteLine("管理员");
            }
            else {
                System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
               startInfo.UseShellExecute = true;
               startInfo.WorkingDirectory = Environment.CurrentDirectory;
                startInfo.FileName = "cmd.exe";
                   //设置启动动作,确保以管理员身份运行
                startInfo.Verb = "runas";
                           try
               {
                                      System.Diagnostics.Process.Start(startInfo);
                                  }
                     catch
                {
                                      return;
                                  }
                          
               
                Console.WriteLine("非管理员");
            }
            Console.ReadLine();
        }
    }
}
 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值