2012-02-24 21:39:03|?次阅读|上传:wustguangh【已有?条评论】发表评论
C#项目有时候需要启动外部应用程序,在C#程序中,对外部程序进行启动/关闭需要使用Process类。Process 类提供对本地和远程进程的访问并使您能够启动和停止本地系统进程。提供对正在计算机上运行的进程的访问。用最简短的话来说,进程就是当前运行的应用程序。线程是操作系统向其分配处理器时间的基本单位。线程可执行进程的任何一部分代码,包括当前由另一线程执行的部分。
命名空间: System.Diagnostics
程序集: System(在 System.dll 中)
1、首先定义外部应用程序的文件名:
private string appName = "calc.exe";
2、最简单的启动外部应用程序,不等待其退出。
示例:
/// <summary> /// 1. 启动外部程序,不等待其退出 /// </summary> private void button1_Click(object sender, EventArgs e) { Process.Start(appName); MessageBox.Show(String.Format("外部程序 {0} 启动完成!", this.appName), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); }
3、启动外部程序,并等待其退出。
示例:
/// <summary> /// 2. 启动外部程序,等待其退出 /// </summary> private void button2_Click(object sender, EventArgs e) { try { Process proc = Process.Start(appName); if (proc != null) { proc.WaitForExit(3000); if (proc.HasExited) MessageBox.Show(String.Format("外部程序 {0} 已经退出!", this.appName), this.Text,MessageBoxButtons.OK, MessageBoxIcon.Information); else { // 如果外部程序没有结束运行则强行终止之。 proc.Kill(); MessageBox.Show(String.Format("外部程序 {0} 被强行终止!", this.appName), this.Text,MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } } catch (ArgumentException ex) { MessageBox.Show(ex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error); } }
4、启动外部程序,无限等待直到退出
示例:
/// <summary> /// 3. 启动外部程序,无限等待其退出 /// </summary> private void button3_Click(object sender, EventArgs e) { try { Process proc = Process.Start(appName); if (proc != null) { proc.WaitForExit(); MessageBox.Show(String.Format("外部程序 {0} 已经退出!", this.appName), this.Text,MessageBoxButtons.OK, MessageBoxIcon.Information); } } catch (ArgumentException ex) { MessageBox.Show(ex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error); } }
5、启动外部程序,通过事件监视其退出
示例:
/// <summary> /// 4. 启动外部程序,通过事件监视其退出 /// </summary> private void button4_Click(object sender, EventArgs e) { try { // 启动外部程序 Process proc = Process.Start(appName); if (proc != null) { // 监视进程退出 proc.EnableRaisingEvents = true; // 指定退出事件方法 proc.Exited += new EventHandler(proc_Exited); } } catch (ArgumentException ex) { MessageBox.Show(ex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error); } } /// <summary> /// 外部程序退出事件 /// </summary> void proc_Exited(object sender, EventArgs e) { MessageBox.Show(String.Format("外部程序 {0} 已经退出!", this.appName), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); }