当前位置: 首页 > news >正文

C#程序调用cmd执行命令

https://www.cnblogs.com/babycool/p/3570648.html

对于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命令时如何以管理员身份运行。

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

/// <summary>/// 运行cmd命令/// 会显示命令窗口/// </summary>/// <param name="cmdExe">指定应用程序的完整路径</param>/// <param name="cmdStr">执行命令行参数</param>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;}/// <summary>/// 运行cmd命令/// 不显示命令窗口/// </summary>/// <param name="cmdExe">指定应用程序的完整路径</param>/// <param name="cmdStr">执行命令行参数</param>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;}

参考链接:https://www.cnblogs.com/babycool/p/3570648.html

http://www.xdnf.cn/news/1074835.html

相关文章:

  • 卡片跳转到应用页面(router事件)
  • 生成式人工智能实战 | 变分自编码器(Variational Auto-Encoder, VAE)
  • 基于STM32温湿度检测—串口显示
  • HTML5 实现的圣诞主题网站源码,使用了 HTML5 和 CSS3 技术,界面美观、节日氛围浓厚。
  • k8s pod深度解析
  • k8s创建定时的 Python 任务(CronJob)
  • 【c/c++1】数据类型/指针/结构体,static/extern/makefile/文件
  • 机器学习9——决策树
  • 新生代潜力股刘小北:演艺路上的璀璨新星
  • ROS常用的路径规划算法介绍
  • 面试复盘6.0
  • Java面试宝典:基础四
  • SpringSecurity6-oauth2-三方gitee授权-授权码模式
  • 详解快速排序
  • 宏任务与微任务和Dom渲染的关系
  • 左神算法之螺旋打印
  • Redis Cluster Gossip 协议
  • 在Linux系统中部署Java项目
  • 设计模式之装饰者模式
  • 2.安装Docker
  • 怎样学习STM32
  • 暴力风扇方案介绍
  • HarmonyOS实战:自定义表情键盘
  • FPGA实现CameraLink视频解码,基于Xilinx ISERDES2原语,提供4套工程源码和技术支持
  • llama.cpp学习笔记:后端加载
  • 图书管理系统练习项目源码-前后端分离-使用node.js来做后端开发
  • Conda 环境配置之 -- Mamba安装(causal-conv1d、mamba_ssm 最简单配置方法)-- 不需要重新配置CDUA
  • 领域驱动设计(DDD)【26】之CQRS模式初探
  • AlpineLinux安装部署elasticsearch
  • Kafka4.0初体验