C#之调用别的程序或调用命令行程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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程序或默认浏览器打开。

相关文档
最新文档