C# 编写命令行交互工具——实时输出_获取执行结果
来源:互联网 发布:淘宝里什么是旺旺号 编辑:程序博客网 时间:2024/05/16 15:42
我们在写程序的时候通常会用到命令行工具。
如Ping 某个网段,写个注册表,启动项,或者感谢其他坏事。
在网上查了一下,多数都说用C# 做命令行交互需要做很多很多的逻辑处理。那么今天博主也来写一个简单一点的。
首先我们建一个CmdUtils类,然后编写我们需要的方法
那么在开始之前,我们先看下网上提供的方法。
那么开始,我们先新建一个类,然后编写方法
Process cmd = null; if (cmd == null) { cmd = new Process();//创建进程对象 ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = "cmd.exe";//设定需要执行的命令 startInfo.Arguments = "/C "+shell;//“/C”表示执行完命令后马上退出 startInfo.UseShellExecute = false;//不使用系统外壳程序启动 startInfo.RedirectStandardInput = true;//不重定向输入 startInfo.RedirectStandardOutput = true; //重定向输出 startInfo.CreateNoWindow = true;//不创建窗口 cmd.StartInfo = startInfo; // cmd.Start(); } if (cmd.Start())//开始进程 { string str = cmd.StandardOutput.ReadToEnd(); cmd.Close(); cmd = null; return str; } return null;
那么很明显,cmd 在执行完毕之后就被关闭了
Ok,修改一下,不加/c 也就是执行完毕之后不退出
Process cmd = null; if (cmd == null) { cmd = new Process();//创建进程对象 ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = "cmd.exe";//设定需要执行的命令 startInfo.Arguments = "";//“/C”表示执行完命令后马上退出 startInfo.UseShellExecute = false;//不使用系统外壳程序启动 startInfo.RedirectStandardInput = true;//不重定向输入 startInfo.RedirectStandardOutput = true; //重定向输出 startInfo.CreateNoWindow = true;//不创建窗口 cmd.StartInfo = startInfo; // cmd.Start(); }
这样子就可以打开之后不关闭了。
下面接着写怎样将前端显示的搞到执行的来。我们都知道string 属于引用数据类型,那么笨方法就从该变量下手。
我们在CmdUtils中定义一个shell 的string 变量,并设置访问权限为public ,方便调用。
public String shell = "";
那么界面上应该怎样显示呢。
public partial class Cmd : Form { public String isRun ="start"; CmdUtils cmd = new CmdUtils(); public Cmd() { InitializeComponent(); new Thread(new ThreadStart(init)).Start(); } private void init() { cmd.sendCmd(this); } private void sendBtn_Click(object sender, EventArgs e) { cmd.shell = comEdit.Text; } private void exitBtn_Click(object sender, EventArgs e) { cmd.shell = "exit"; } }
我们首先启动一个线程,然后通过改变shell 变量达到交互效果。
下面上CmdUtils 代码
public class CmdUtils { public String shell = ""; public void sendCmd(Cmd cmdoom) { Process cmd = null; if (cmd == null) { cmd = new Process();//创建进程对象 ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = "cmd.exe";//设定需要执行的命令 startInfo.Arguments = "";//“/C”表示执行完命令后马上退出 startInfo.UseShellExecute = false;//不使用系统外壳程序启动 startInfo.RedirectStandardInput = true;//不重定向输入 startInfo.RedirectStandardOutput = true; //重定向输出 startInfo.CreateNoWindow = true;//不创建窗口 cmd.StartInfo = startInfo; // cmd.Start(); } if (cmd.Start())//开始进程 { cmd.StandardOutput.ReadLine().Trim(); cmd.StandardOutput.ReadLine().Trim(); while (cmdoom.isRun.IndexOf("start") != -1) { if (shell.Length > 0) { cmd.StandardInput.WriteLine(shell); cmd.StandardOutput.ReadLine().Trim(); cmd.StandardInput.WriteLine("\n"); String log = cmd.StandardOutput.ReadLine().Trim(); String path = log.Substring(0, 2).ToUpper(); updateLog(cmdoom, log); log = ""; do { String logm = cmd.StandardOutput.ReadLine().Trim(); if (logm.IndexOf(path) != -1){ break; } updateLog(cmdoom, logm+"\n"); log+=logm; } while (true); shell = ""; } } cmd.Close(); cmd = null; return ; } return ; } private delegate void UpdateLog(); private void updateLog(Cmd cmd, String log) { UpdateLog set = delegate() { cmd.cmdLogTextArea.AppendText("\n" + log); }; cmd.Invoke(set); } }
那么最后的效果图为
0 0
- C# 编写命令行交互工具——实时输出_获取执行结果
- python获取命令行输出结果
- python获取命令行输出结果
- linux 执行命令行,获取结果
- c++ 执行命令行获取执行结果
- LINUX C获取命令行输出结果
- C#获取命令行输出内容
- Java调用命令行并获取执行结果
- Java调用命令行并获取执行结果
- Java调用命令行并获取执行结果
- C# Process执行cmd指令,实时获取输出并隐藏cmd窗口
- 用C#执行批处理并输出结果
- Python执行命令行命令并获取输出
- C#获取命令行输出内容的方法
- C#获取命令行输出内容的方法
- [Python]paramiko实时获取命令执行输出及sftp上传
- shell编程—— EOF 实现执行sql,输出结果
- VC执行批处理文件并获取结果输出到RichEdit控件
- 简易版停车管理系统(Android)
- Android Service 组件基础应用
- 用CSS截断字符串 实现文字自动截断隐藏溢出文本
- 山科交流赛-LIS2
- 64位linux上支持运行32位程序的方法
- C# 编写命令行交互工具——实时输出_获取执行结果
- 【收藏用】切勿转载--Android网络编程(二)HttpClient与HttpURLConnection
- ViewState 应该注意的
- .Net C#(类的静态成员/属性)——学习笔记
- Android 猜歌曲游戏开发
- 反思与改变
- 机器学习入门(一)
- java窗口,常用布局
- 北京大学互联网信息工程研发中心(深圳)