四联光电智能照明论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2638|回复: 0
打印 上一主题 下一主题

C#使用Process类调用外部程序分解

[复制链接]
  • TA的每日心情
    开心
    2022-6-10 09:59
  • 366

    主题

    741

    帖子

    9649

    积分

    超级版主

    Rank: 8Rank: 8

    积分
    9649
    跳转到指定楼层
    楼主
    发表于 2016-11-3 13:56:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    在程序开发中,一个程序经常需要去调用其他的程序,C#中Process类正好提供了这样的功能。它提供对本地和远程进程的访问并使您能够启动和停止本地系统进程。

    一、启动进程实例

    1. Process myProcess = new Process();   
    2. try  
    3. {   
    4.     myProcess.StartInfo.UseShellExecute = false;   
    5.     myProcess.StartInfo.FileName = "test.exe";   
    6.     myProcess.StartInfo.CreateNoWindow = true;   
    7.     myProcess.Start();   
    8. }   
    9. catch (Exception e)   
    10. {   
    11.     Console.WriteLine(e.Message);   
    12. }
    复制代码

    Process.Start 方法,启动(或重用)此 Process 组件的 StartInfo 属性指定的进程资源,并将其与该组件关联。如果启动了进程资源,则为 true;如果没有启动新的进程资源(例如,如果重用了现有进程),则为 false。
    Process.StartInfo 属性,获取或设置要传递给 Process 的 Start 方法的属性。StartInfo 表示用于启动进程的一组参数。 调用 Start 时,StartInfo 用于指定要启动的进程。 唯一必须设置的 StartInfo 成员是 FileName 属性。
    ProcessStartInfo.FileName 属性,获取或设置要启动的应用程序或文档。FileName 属性不需要表示可执行文件。 它可以是其扩展名已经与系统上安装的应用程序关联的任何文件类型。
    ProcessStartInfo.CreateNoWindow属性,获取或设置指示是否在新窗口中启动该进程的值。

    二、关掉启动进程
    Process.Kill 方法,立即停止关联的进程。Kill 强制终止进程,Kill 方法将异步执行。 在调用 Kill 方法后,请调用 WaitForExit 方法等待进程退出,或者检查 HasExited 属性以确定进程是否已经退出。

    三、进程结束后调用其他方法
    在调用某个进程结束后,我们通常需要执行其他的方法,比如,在做安装程序时,需要先判断.Net Framework环境是否安装,若未安装,则先调用.NET Framework安装程序后,继续运行安装程序方法。
    通常这种情况下,有两种方法:
    方法一:WaitForExit()方法。这种方法会阻塞当前进程,直到运行的外部程序退出。

    1. System.Diagnostics.Process exep = System.Diagnostics.Process.Start(@"C:\Windows\Notepad.exe");   
    2. exep.WaitForExit();//关键,等待外部程序退出后才能往下执行   
    3. MessageBox.Show("Notepad.exe运行完毕");
    复制代码

    上述代码在Notepad.exe记事本结束之后,弹出对话框。
    方法二:Exited 事件。为外部进程添加一个事件监视器,当退出后,获取通知,这种方法时不会阻塞当前进程,你可以处理其它事情。

    1. System.Diagnostics.Process exep = new System.Diagnostics.Process();   
    2. exep.StartInfo.FileName = @"C:\Windows\Notepad.exe";   
    3. exep.EnableRaisingEvents = true;   
    4. exep.Exited += new EventHandler(exep_Exited);   
    5. exep.Start();   
    6.   
    7. void exep_Exited(object sender, EventArgs e)   
    8. {   
    9. MessageBox.Show("Notepad.exe运行完毕");   
    10. }
    复制代码

    在事件结束之后,调用Exited 事件方法。
    对于在C#程序开发中调用外部程序的操作,要判断这个被调用的EXE文件是否执行结束其实最跟本的是 System.Diagnostics.Process类的应用,其中有一个方法,就是WaitForExit();和HasExited属性,这两个也 都是为判断外部程序exe文件的执行状态而设计的,HasExited=ture时表示执行结束.
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|Silian Lighting+ ( 蜀ICP备14004521号-1 )

    GMT+8, 2024-5-19 11:14 , Processed in 1.109375 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表