[No0000BF]C# 启动外部程序的几种方法

using System;
using System.Diagnostics;

//1. 启动外部程序,不等待其退出。
//2. 启动外部程序,等待其退出。
//3. 启动外部程序,无限等待其退出。
//4. 启动外部程序,通过事件监视其退出。
public class StartOutsideApp
{
    private readonly string appName = "notepad.exe";//注意:win10 的 calc.exe 只是一个壳。

    #region  Methods

    /// <summary>
    ///     1. 启动外部程序,不等待其退出
    /// </summary>
    public void Start1()
    {
        Process.Start(appName);
        Console.WriteLine($"1.外部程序 {appName} 启动完成!");
    }

    /// <summary>
    ///     2. 启动外部程序,等待其退出
    /// </summary>
    public void Start2()
    {
        try
        {
            var proc = Process.Start(appName);
            if (proc != null)
            {
                proc.WaitForExit(3000);
                if (proc.HasExited)
                {
                    Console.WriteLine($"2.外部程序 {appName} 已经退出!");
                }
                else
                {
                    proc.Kill(); // 如果外部程序没有结束运行则强行终止之。
                    Console.WriteLine("2.外部程序 {0} 被强行终止!", appName);
                }
            }
        }
        catch (ArgumentException ex)
        {
            Console.WriteLine(ex.Message);
        }
    }

    /// <summary>
    ///     3. 启动外部程序,无限等待其退出
    /// </summary>
    public void Start3()
    {
        try
        {
            var proc = Process.Start(appName);
            if (proc != null)
            {
                proc.WaitForExit();
                Console.WriteLine($"3.外部程序 {appName} 已经退出!");
            }
        }
        catch (ArgumentException ex)
        {
            Console.WriteLine(ex.Message);
        }
    }

    /// <summary>
    ///     4. 启动外部程序,通过事件监视其退出
    /// </summary>
    public void Start4()
    {
        try
        {
            var proc = Process.Start(appName); //启动外部程序
            if (proc != null)
            {
                proc.EnableRaisingEvents = true; //监视进程退出
                proc.Exited += proc_Exited; //指定退出事件方法
            }
        }
        catch (ArgumentException ex)
        {
            Console.WriteLine(ex.Message);
        }
    }

    /// <summary>
    ///     启动外部程序退出事件
    /// </summary>
    private void proc_Exited(object sender, EventArgs e)
    {
        Console.WriteLine($"4.外部程序 {appName} 已经退出!");
    }

    #endregion
}

 

posted @ 2017-02-28 16:57  CharyGao  阅读(224)  评论(0编辑  收藏  举报