C#调用管理员身份运行程序

C#运行ps1文件命令,一般都直接启动进程,以管理员身份调用powershell。
有两种方式,一种直接在ps1文件中指定管理员身份,比如ps1文件为:
Start-Process powershell -ArgumentList 'get-windowsoptionalfeature -online' -verb RunAs,然后使用process调用即可,但是这种方法无法捕获用户不同意管理员权限的信息。
第二种方法,在代码中指定管理员权限,加上try catch可以捕获用户不同意的信息,需要注意的是,
(1)UseShellExecute属性是获取或设置指示是否使用操作系统 shell 启动进程的值,需要以管理员身份执行命令或执行的命令不是可执行文件时,此值必须为true。
(2)UseShellExecute属性设置为true,重定向输入、输出和错误流属性均无效,所以也不需要设置,由此,无法获取到执行结果。
(3)如果 UseShellExecute 属性为 true,则将忽略 CreateNoWindow 属性值并创建一个新窗口,所以设置窗口不可见属性也是没有用的,必将创建窗口。
(4)Arguments 属性可以是一个文件,也可以是一个命令,但是我如果设置它是一个文件,文件中输入命令,执行时在win10的电脑可以正常执行,但是在win11的电脑,允许管理员权限之后,powershell窗口会闪退,不知道原因是什么,所以还是直接把命令以字符串形式赋予Arguments 属性,或者如果命令在文件中,直接使用ReadAllText属性以字符串读取出来。
代码如下:

try{
	Process proc = new Process();
	ProcessStartInfo startInfo = new ProcessStartInfo();
	proc.StartInfo.FileName = "powershell.exe";
	proc.StartInfo.Arguments = "get-windowsoptionalfeature -online";
	proc.StartInfo.UseShellExecute = true;
	proc.StartInfo.Verb = "runas"; // 请求以管理员权限运行
	proc.Start();
	proc.WaitForExit();
}
catch{
	//弹出UAC窗口时用户点了不同意
	 textBlock1.Text += ("获取管理员权限失败!");
}

关于以管理员身份执行命令这一块,这段时间总算是搞明白了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值