C#隐式运行CMD命令(隐藏命令窗口)
程序员文章站
2024-01-27 21:29:34
本文实现了c#隐式运行cmd命令的功能。下图是实例程序的主画面。在命令文本框输入dos命令,点击“run”按钮,在下面的文本框中输出运行结果。
下面是程序的完整代码。...
本文实现了c#隐式运行cmd命令的功能。下图是实例程序的主画面。在命令文本框输入dos命令,点击“run”按钮,在下面的文本框中输出运行结果。
下面是程序的完整代码。本程序没有使用p.standardoutput.readtoend()和p.standardoutput.readline()方法来获得输出,因为这些方法执行后画面容易卡死。而是通过调用异步方法beginoutputreadline来获取输出,并在事件p.outputdatareceived的事件处理方法中来处理结果。
using system; using system.diagnostics; using system.io; using system.windows.forms; namespace rundoscommandform { publicpartialclassform1 : form { publicform1() { initializecomponent(); } privatevoidbutton1_click(object sender, eventargse) { excutedoscommand(textbox1.text); } privatevoidexcutedoscommand(string cmd) { try { process p = newprocess(); p.startinfo.filename = "cmd"; p.startinfo.useshellexecute = false; p.startinfo.redirectstandardinput = true; p.startinfo.redirectstandardoutput = true; p.startinfo.redirectstandarderror = true; p.startinfo.createnowindow = true; p.outputdatareceived += newdatareceivedeventhandler(sortprocess_outputdatareceived); p.start(); streamwriter cmdwriter = p.standardinput; p.beginoutputreadline(); if (!string.isnullorempty(cmd)) { cmdwriter.writeline(cmd); } cmdwriter.close(); p.waitforexit(); p.close(); } catch(exception ex) { messagebox.show("执行命令失败,请检查输入的命令是否正确!"); } } privatevoidsortprocess_outputdatareceived(object sender,datareceivedeventargs e) { if(!string.isnullorempty(e.data)) { this.begininvoke(newaction(() => { this.listbox1.items.add(e.data);})); } } } }
我们还可以将需要运行的cmd命令保存为bat文件,再使用process类来执行。
process p = new process();//设定调用的程序名,不是系统目录的需要完整路径 p.startinfo.filename = "cmd.bat";//传入执行参数 p.startinfo.arguments = ""; p.startinfo.useshellexecute = false;//是否重定向标准输入 p.startinfo.redirectstandardinput = false;//是否重定向标准转出 p.startinfo.redirectstandardoutput = false;//是否重定向错误 p.startinfo.redirectstandarderror = false;//执行时是不是显示窗口 p.startinfo.createnowindow = true;//启动 p.start(); p.waitforexit(); p.close();
上一篇: C#解码base64编码二进制数据的方法