C# 中启动进程的几种常见方式

26 阅读3分钟

前言

在 C# 开发过程中,我们经常需要通过程序来启动外部进程,例如运行可执行文件、批处理脚本、打开网页等。.NET 提供了 System.Diagnostics.Process 类来实现对进程的控制与管理。

本文将详细介绍 C# 中启动进程的几种常用方式,并结合代码示例进行说明,帮助开大家更好地掌握这一基础但非常实用的技术。

一、启动子进程,不等待结束

这是最简单的启动方式,适用于只需要调用外部程序或脚本,而不需要获取其执行结果的场景。

示例代码

private void simpleRun_Click(object sender, System.EventArgs e)
{
    System.Diagnostics.Process.Start(@"C:\listfiles.bat");
}

说明

  • 调用了 Process.Start() 方法,直接运行指定路径的 .bat 批处理脚本。

  • 该方法不会阻塞当前线程,也不会等待脚本执行完毕。

二、启动子进程并等待结束,同时获取输出结果

当需要获取子进程执行后的输出信息时,可以通过重定向标准输出流的方式实现。

示例代码

private void runSyncAndGetResults_Click(object sender, System.EventArgs e)
{
    System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(@"C:\listfiles.bat");

    psi.RedirectStandardOutput = true;
    psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
    psi.UseShellExecute = false;

    System.Diagnostics.Process listFiles;
    listFiles = System.Diagnostics.Process.Start(psi);

    System.IO.StreamReader myOutput = listFiles.StandardOutput;

    listFiles.WaitForExit(2000); // 最多等待2秒

    if (listFiles.HasExited) 
    { 
        string output = myOutput.ReadToEnd(); 
        this.processResults.Text = output;
    }
}

说明

  • 设置 RedirectStandardOutput = true 来捕获命令行输出。

  • 使用 StreamReader 读取输出内容。

  • 通过 WaitForExit() 等待进程完成(可设置超时时间)。

  • 适用于需要获取脚本或命令行工具执行结果的场景。

三、使用默认浏览器打开 URL

除了运行本地程序,还可以使用 Process.Start() 打开网页链接,系统会自动使用默认浏览器访问指定网址。

示例代码

private void launchURL_Click(object sender, System.EventArgs e)
{
    string targetURL = "http://www.jb51.net";
    System.Diagnostics.Process.Start(targetURL);
}

说明

  • 直接传入 URL 地址即可。

  • 不需要任何额外配置,适用于快速打开帮助文档、官网、API 接口页面等。

总结

通过 System.Diagnostics.Process 类,C# 开发者可以灵活地控制和启动外部进程,从而实现与操作系统的深度交互。

本文介绍了三种常见的进程启动方式:

1、简单启动:无需等待,适合执行后台任务;

2、同步启动并获取输出:适合需要与子进程通信、获取执行结果;

3、打开网页链接:便捷地引导用户访问外部资源。

这些方法在开发桌面应用、自动化脚本工具、运维管理系统等领域具有广泛的应用价值。

关键词

C#、启动进程、Process、批处理、重定向输出、打开网页、同步执行、Windows 应用开发

最后

如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。

也可以加入微信公众号 [DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!

优秀是一种习惯,欢迎大家留言学习!