C#之调用别的程序或调用命令行程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C#之调用别的程序或调用命令行程序
C#中调用其他程序是很简单的,这需要用到System.Diagnostics.Process类,针对不同的情况,有不同的用法。
1、在当前程序目录下有一个可执行程序叫abc.exe,那我们可以在用
System.Diagnostics.Process.Start("abc.exe")来调用之。也可以用来打开文本文档,例如
System.Diagnostics.Process.Start("abc.txt"),会调用该扩展名关联的程序来打开它。
2、需要调用命令行时,可以直接调用System.Diagnostics.Process.Start("cmd.exe")打开命令行,或者System.Diagnostics.Process.Start("cmd.exe", "/kdir")直接运行dir命令。不过这样用的话就会打开命令提示符的黑框,如果不想显示这个黑框,可以使用System.Diagnostics.Process.Start("cmd.exe", "/cdir")[自动用了dir函数本身的/C命令窗体]。但是即使这样做,黑框也只是一闪即逝,看着也不舒服。那么有没有办法在后台运行命令,然后我们接收返回的运行结果,再以其他的方式显示给用户呢?当然是可以的,下面是代码:
string strCmd = textBox1.Text; //获取输入框的文本
System.Diagnostics.ProcessStartInfo psi = new
System.Diagnostics.ProcessStartInfo("cmd.exe", strCmd); //ProcessStartInfo类为程序配置类,主要用来配置要启动的应用程序的属性
psi.RedirectStandardOutput = true; //重定向输出。设置为TRUE,这样我们就可以接收返回结果了。
psi.CreateNoWindow = true; //不创建窗口,相当于后台运行
eShellExecute = false; //不使用系统Shell来启动程序
System.Diagnostics.Process listFiles;
listFiles = System.Diagnostics.Process.Start(psi);
System.IO.StreamReader myOutput = listFiles.StandardOutput;
listFiles.WaitForExit(); //等待被调用程序结束。该函数有一个重载可以设置等待时间,如果被调用的程序在指定的时间无返回值,则自动向下执行,否则就一直等待。
if (listFiles.HasExited)
{
output = myOutput.ReadToEnd(); //output为全局变量,用于保存返回结果。
this.Refresh(); //强制窗体刷新。因为本程序没有使用控件来显示结果,而是直接写在窗体上,故需要强制刷新窗口来显示结果。显示的工作由窗体的paint事件函数来完成,之所以保存结果来刷新,是因为如果直接在该处调用g.DrawString来写结果,一旦窗口被遮挡住,再次打开的时候,原本写上去的文字会被擦掉。
}
//paint函数,输出结果
Graphics g = e.Graphics;
g.Clear(this.BackColor);
g.DrawString(output, this.Font, new SolidBrush(Color.Green), 0, 50);
结果截图:
3、该类还可以打开Email地址和网址。调用方法:
System.Diagnostics.Process.Start("mailto:abc@"),或者
System.Diagnostics.Process.Start(""),会调用默认的Email程序或默认浏览器打开。