总结一下进程的新建和终止的操作过程。代码如下:

本文介绍了一个使用 C# 实现的进程控制方法,通过创建进程并设置其属性来控制进程的执行,并利用输出重定向来捕获进程的输出。此外,还介绍了如何监听进程退出事件及异常终止进程。
  1.     public int CallPhoneExe(string arg) //arg为进程的命令行参数  
  2.      { WaitHandle[] waits =new WaitHandle[2]; //定义两个WaitHandle值,用以控制进程的执行过程  
  3.            waits[0] = HSTOP; //AutoResetEvent HSTOP = new AutoResetEvent(false);  
  4.            waits[1] = GlobalStop;//AutoResetEvent GlobalStop = new AutoResetEvent(false);  
  5.             int iReturn=0;  
  6.             Process p = new Process();//新建一个进程  
  7.            p.StartInfo.Arguments = arg; //进程的命令行参数  
  8.            p.StartInfo.FileName = filepath;//进程启动路径  
  9.              
  10.            p.StartInfo.CreateNoWindow = true;//不显示新进程的窗口  
  11.            p.StartInfo.RedirectStandardOutput = true;//输出重定向  
  12.            p.StartInfo.RedirectStandardError = true;   //Redirect the error ouput!  
  13.            p.StartInfo.UseShellExecute = false;   
  14.            p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;  
  15.   
  16.            p.EnableRaisingEvents = true;   
  17.            p.Exited += new EventHandler(p_Exited); //进程自然结束后启动p—Exited事件  
  18.            p.OutputDataReceived += new DataReceivedEventHandler(ChangeOutput);//进程有输出时,启动ChangeOutPut函数         
  19.   
  20.            p.Start();//进程启动  
  21.            p.BeginOutputReadLine();  
  22.   
  23.            int hstop = WaitHandle.WaitAny(waits);//启动线程暂停,知道WaitHandle中传来有效信号  
  24.            switch (hstop)//判断信号是又哪个  
  25.            {  
  26.                case 0: //进程自然结束  
  27.                    if (p.WaitForExit(2000))  
  28.                        iReturn = p.ExitCode; //获取进程的返回值  
  29.                    else  
  30.                    {  
  31.                        CloseProcess();  
  32.                        iReturn = -2;  
  33.                    }  
  34.                    break;  
  35.                case 1: //进程被迫结束  
  36.                    p.Kill();//杀掉进程  
  37.                    if (!p.HasExited)  
  38.                    {                          
  39.                        p.Kill();  
  40.                    }                      
  41.                    iReturn = -3;  
  42.                    break;  
  43.            }  
  44.            HSTOP.Reset(); //HSTOP复位,这个变量指示进程自然结束,每次结束后都得自然复位             
  45.            p.Close(); //创建的p关闭  
  46.            return iReturn;            
  47.        }  
  48.   
  49.   
  50.        private void p_Exited(object sender, EventArgs e)  
  51.        {  
  52.            HSTOP.Set();  
  53.        }  
  54.   
  55. /输出重定向函数  
  56. private void ChangeOutput(object sendingProcess, DataReceivedEventArgs outLine)  
  57.        {  
  58.            if (!String.IsNullOrEmpty(outLine.Data)) //字符串不为空时  
  59.                MainForm.FireWriteText(outLine.Data,false);//将进程的输出信息转移  
  60.        }  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值