`

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

    博客分类:
  • C#
 
阅读更多

1. 启动外部程序,不等待其退出。
2. 启动外部程序,等待其退出。
3. 启动外部程序,无限等待其退出。
4. 启动外部程序,通过事件监视其退出。

// using System.Diagnostics;
    private string appName = "calc.exe";

    /// <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);
    }

    /// <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);
        }
    }


    /// <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);
        }
    }


    /// <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);
    }

 

分享到:
评论

相关推荐

    C#启动外部程序的几种常用方法汇总

    本文汇总了C#启动外部程序的几种常用方法,非常具有实用价值,主要包括如下几种方法: 1. 启动外部程序,不等待其退出。 2. 启动外部程序,等待其退出。 3. 启动外部程序,无限等待其退出。 4. 启动外部程序,通过...

    C#启动外部程序的几种方法.rar_littlewoo_启动外部程序

    对C#编程过程中如何启动外部程序进行分类描述,由此对开发人员了解外部程序使用极有好处。

    winform窗体怎么来调用外部*.exe文件

    自己的窗体怎么来启动其他的应用程序呢?其实不难!

    C#微软培训资料

    第二部分 C#程序设计基础.28 第四章 数 据 类 型 .28 4.1 值 类 型 .28 4.2 引 用 类 型 .33 4.3 装箱和拆箱 .39 4.4 小 结 .42 第五章 变量和常量 .44 5.1 变 量 .44 5.2 常 量 .46 5.3 小 结 .47 ...

    c#学习笔记.txt

    如前所述,我是一个狮子座男人,一度我认为学习Java会使我看起来与众不同,可是几个月以后我放弃了这个选择,我看了论坛里关于这两种语言孰优孰劣的讨论,最终选择了C#,请不要问我为何做出这样的选择,很多人认为...

    C#开发实例大全(基础卷).软件开发技术联盟(带详细书签) PDF 下载

    实例006 设置Windows应用程序启动窗体 9 实例007 统一窗体中控件的字体设置 10 实例008 通过“格式”菜单布局窗体 10 1.3 快速开发项目必备 11 实例009 为项目添加DLL文件引用 11 实例010 为项目添加已有类 12 实例...

    java面试题

    多线程几种实现方法,同步? 答:多线程有两种实现方法,一种是继承Thread类或者实现Runnable接口。同步就是在方法返回类型后面加上synchronized。 c#中的委托,事件是不是委托? 答:委托就是将方法作为一个参数...

    亮剑.NET深入体验与实战精要2

    4.8 让程序只启动一次——单实例运行 184 4.9 实现系统托盘和热键呼出 185 4.10 进程与多线程的区别 190 4.11 创建多线程应用程序 191 4.12 WinForm开发常见问题 194 4.12.1 如何设置运行时窗体的起始位置 194 ...

    亮剑.NET深入体验与实战精要3

    4.8 让程序只启动一次——单实例运行 184 4.9 实现系统托盘和热键呼出 185 4.10 进程与多线程的区别 190 4.11 创建多线程应用程序 191 4.12 WinForm开发常见问题 194 4.12.1 如何设置运行时窗体的起始位置 194 ...

    Spring.net框架

    本部分代码仅仅提供一种功能演示,如果实际应用仍需进一步完善(建议使用一些成型的Ioc框架,例如Spring.net或Castle等)。经过改造后 的系统,组件间依赖关系如下图: 可以看出这次实现了真正的“针对接口编程”...

    Windows 7高级编程

    您必须安装能运行示例程序的C#语言。本书代码是使用Visual Studio 2010 Ultimate测试的,但这些代码在Visual Studio 2010 Professional和Visual Studio 2010 Premium下也应该能正常运行。这些示例程序一般在Express ...

Global site tag (gtag.js) - Google Analytics