博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#程序调用cmd执行命令
阅读量:5992 次
发布时间:2019-06-20

本文共 2445 字,大约阅读时间需要 8 分钟。

原文 C

 

对于C#通过程序来调用cmd命令的操作,网上有很多类似的文章,但很多都不行,竟是漫天的拷贝。我自己测试整理了一下。

代码:

string str = Console.ReadLine();System.Diagnostics.Process p = new System.Diagnostics.Process();p.StartInfo.FileName = "cmd.exe";p.StartInfo.UseShellExecute = false;    //是否使用操作系统shell启动p.StartInfo.RedirectStandardInput = true;//接受来自调用程序的输入信息p.StartInfo.RedirectStandardOutput = true;//由调用程序获取输出信息p.StartInfo.RedirectStandardError = true;//重定向标准错误输出p.StartInfo.CreateNoWindow = true;//不显示程序窗口p.Start();//启动程序//向cmd窗口发送输入信息p.StandardInput.WriteLine(str + "&exit");p.StandardInput.AutoFlush = true;//p.StandardInput.WriteLine("exit");//向标准输入写入要执行的命令。这里使用&是批处理命令的符号,表示前面一个命令不管是否执行成功都执行后面(exit)命令,如果不执行exit命令,后面调用ReadToEnd()方法会假死//同类的符号还有&&和||前者表示必须前一个命令执行成功才会执行后面的命令,后者表示必须前一个命令执行失败才会执行后面的命令//获取cmd窗口的输出信息string output = p.StandardOutput.ReadToEnd(); //StreamReader reader = p.StandardOutput;//string line=reader.ReadLine();//while (!reader.EndOfStream)//{//    str += line + "  ";//    line = reader.ReadLine();//} p.WaitForExit();//等待程序执行完退出进程p.Close();Console.WriteLine(output);

 

程序运行结果:

 

需要提醒注意的一个地方就是:在前面的命令执行完成后,要加exit命令,否则后面调用ReadtoEnd()命令会假死。

我在之前测试的时候没有加exit命令,输入其他命令后窗口就假死了,也没有输出内容。

对于执行cmd命令时如何以管理员身份运行,可以看我上一篇文章: 

 

2014-7-28 新增:

另一种C#调用cmd命令的方法,不过这种方法在执行时会“闪一下” 黑窗口,各位在使用时可以按喜好来调用。

/// /// 运行cmd命令/// 会显示命令窗口/// /// 指定应用程序的完整路径/// 执行命令行参数static bool RunCmd(string cmdExe, string cmdStr){    bool result = false;    try    {
  using (Process myPro = new Process())  { //指定启动进程是调用的应用程序和命令行参数 ProcessStartInfo psi = new ProcessStartInfo(cmdExe, cmdStr); myPro.StartInfo = psi; myPro.Start(); myPro.WaitForExit(); result = true;  } } catch { } return result;}/// /// 运行cmd命令/// 不显示命令窗口/// /// 指定应用程序的完整路径/// 执行命令行参数static bool RunCmd2(string cmdExe, string cmdStr){ bool result = false; try {  using (Process myPro = new Process())  { myPro.StartInfo.FileName = "cmd.exe"; myPro.StartInfo.UseShellExecute = false; myPro.StartInfo.RedirectStandardInput = true; myPro.StartInfo.RedirectStandardOutput = true; myPro.StartInfo.RedirectStandardError = true; myPro.StartInfo.CreateNoWindow = true; myPro.Start(); //如果调用程序路径中有空格时,cmd命令执行失败,可以用双引号括起来 ,在这里两个引号表示一个引号(转义) string str = string.Format(@"""{0}"" {1} {2}", cmdExe, cmdStr, "&exit"); myPro.StandardInput.WriteLine(str); myPro.StandardInput.AutoFlush = true; myPro.WaitForExit(); result = true;  } } catch { } return result;}

 

转载地址:http://ectlx.baihongyu.com/

你可能感兴趣的文章
rpm命令,yum命令大全
查看>>
发邮件
查看>>
iOS ASIHttpRequest 封装
查看>>
面试准备
查看>>
为什么“或命题"真假的判断是有真则真?
查看>>
Minor GC、Major GC和Full GC之间的区别(转)
查看>>
查看mysql当前表使用的存储引擎(转)
查看>>
Jenkins 部署
查看>>
关于Linux路由表的route命令(转)
查看>>
Codeforces Round #395 (Div. 2) - A
查看>>
网络基础相关知识内容
查看>>
Django使用MySQL笔记
查看>>
C++和C#实现剪切板数据交互
查看>>
Kafka深入理解-2:Kafka的Log存储解析
查看>>
python中split()进行多分割
查看>>
linux 压缩 解压zip 命令
查看>>
《汇编语言》实验五课程
查看>>
linux下防火墙iptables原理及使用
查看>>
springmvc简述
查看>>
DataTable 排序
查看>>