C#以管理员(Run as Administrator)的权限打开cmd.exe程指定序并执行命令
来源:互联网 发布:印度人 知乎 编辑:程序博客网 时间:2024/06/04 00:27
项目需要用wix#(wix sharp)打包程序,使用wix中的ServiceInstaller安装一个WINDOWS SERVICE ,服务可以正常启动,但是使用的时候有问题(目前还不清楚原因),但是服务如果使用原来的CMD安装方式是可以正常工作的。 所以我就改变方向在WIX#打包代码里面修改以ADMINISTARTOR权限调出CMD并运行安装服务。
路漫漫其修远兮,吾将上下而求索。在网络上搜了一堆资料,基本的方法都是如下(参考文章:http://www.yishimei.cn/network/296.html):
VS以管理员模式启动
注意一定要用管理员(Run as Administrator)权限打开VS,这样才能以管理员的权限启动应用程序(从而调出来的CMD才是Administrator权限的) 必须这么做:
右键VS的快捷方式->“以管理员方式运行
以管理员身份运行程序
其实要以管理员的身份运行cmd命令提示符,我们只需要让c#开发的程序自身以管理员身份运行就可以了,我们打开visual studio - 解决方案资源管理器 -右键项目名称 - 属性 ,弹出下面的窗口:
点击选择左侧的“安全性”,我们在“启用ClickOnce安全设置”前面打勾,然后再返回解决方案资源管理器界面,这时,在项目名称里的“Properties”下面会多出一个“app.manifest”的文件,如下图所示:
我们点击选中它,看左侧窗口中代码,如下:
我们找到代码段: <requestedExecutionLevel level="asInvoker" uiAccess="false" />,将其改为:<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />,
改过后,不要急于重新编译生成,我们重新返回上图那个界面,将“启用ClickOnce安全设置”前面的勾去掉后再编译运行,不然程序会报错无法运行。
C#程序程序中调用CMD的代码
public class RunCmd
{
public RunCmd()
{
}
private static string CmdPath = @"C:\Windows\System32\cmd.exe";
/// <summary>
/// 执行cmd命令
/// 多命令请使用批处理命令连接符:
/// <![CDATA[
/// &:同时执行两个命令
/// |:将上一个命令的输出,作为下一个命令的输入
/// &&:当&&前的命令成功时,才执行&&后的命令
/// ||:当||前的命令失败时,才执行||后的命令]]>
/// 其他请百度
/// </summary>
/// <param name="cmd"></param>
/// <param name="output"></param>
public static void run(string cmd, out string output)
{
cmd = cmd.Trim().TrimEnd('&') + "&exit";//说明:不管命令是否成功均执行exit命令,否则当调用ReadToEnd()方法时,会处于假死状态
using (Process p = new Process())
{
p.StartInfo.FileName = CmdPath;
p.StartInfo.UseShellExecute = false; //是否使用操作系统shell启动
p.StartInfo.RedirectStandardInput = true; //接受来自调用程序的输入信息
p.StartInfo.RedirectStandardOutput = true; //由调用程序获取输出信息
p.StartInfo.RedirectStandardError = true; //重定向标准错误输出
p.StartInfo.CreateNoWindow = false; //不显示程序窗口
p.Start();//启动程序
//向cmd窗口写入命令
p.StandardInput.WriteLine(cmd);
p.StandardInput.AutoFlush = true;
//p.StandardInput.WriteLine("exit");
//向标准输入写入要执行的命令。这里使用&是批处理命令的符号,表示前面一个命令不管是否执行成功都执行后面(exit)命令,如果不执行exit命令,后面调用ReadToEnd()方法会假死
//同类的符号还有&&和||前者表示必须前一个命令执行成功才会执行后面的命令,后者表示必须前一个命令执行失败才会执行后面的命令
//获取cmd窗口的输出信息
output = p.StandardOutput.ReadToEnd();
p.WaitForExit();//等待程序执行完退出进程
p.Close();
}
}
}
调用命令如下:
string commond, output;
commond = "\""+ @"C:\Program Files\XXX\" + @"xxx.exe" + "\"" + @" --install";
RunCmd.run(commond, out output);
MessageBox.Show("output=" + output);
这几个步骤下来,成功以管理员的权限调出CMD执行了命令。
- C#以管理员(Run as Administrator)的权限打开cmd.exe程指定序并执行命令
- How to stop cmd.exe run in administrator mode cmd.exe总是以管理员账户运行的解决办法
- 关于c#调出cmd.exe并执行cmd命令
- C#代码打开CMD.EXE 执行 DIR命令,并接收返回值
- C#打开cmd,并在命令窗口执行相应的命令
- Win10以管理员身份打开命令提示符CMD的3种方法
- C#程序调用cmd.exe执行命令
- C#如何调用以管理员身份运行的cmd命令提示符
- C#如何调用以管理员身份运行的cmd命令提示符
- C#如何调用以管理员身份运行的cmd命令提示符
- C#如何调用以管理员身份运行的cmd命令提示符
- C#如何调用以管理员身份运行的cmd命令提示符
- Win7以管理员方式运行cmd.exe
- C#执行CMD命令并返回结果
- C#调用CMD对话框并执行命令
- Windows7 以管理员方式运行CMD命令的快捷方式
- excel使用技巧,激活Administrator用户方法, 创建"以管理员身份打开"的命令行快捷方式
- C# 003 C#调用cmd.exe执行命令
- 深入浅出JSONP--解决ajax跨域问题
- UE4里用【蓝图】实现物体在场景中 旋转
- 如何正确的存储和饮用蜂蜜?
- 加载动图的实现及属性动画的使用
- Soong
- C#以管理员(Run as Administrator)的权限打开cmd.exe程指定序并执行命令
- 设计模式之Builder模式
- 前端常见跨域解决方案
- AngularJs 后台 纯异步nodejs文件夹(目录)复制
- 08:字符替换
- 直接转的一篇译文,非原创
- 广*达秋招
- 欢迎使用CSDN-markdown编辑器
- wireshark 抓包ICMP 出现 no response seen