C#怎么启动外部程序 C# Process.Start调用exe方法

来源:Java编程网作者:新加坡程序员头衔:程序员
导读:本期聚焦于小伙伴创作的《C#怎么启动外部程序 C# Process.Start调用exe方法》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C#怎么启动外部程序 C# Process.Start调用exe方法》有用,将其分享出去将是对创作者最好的鼓励。

在C#开发中,启动外部程序或者调用exe文件是常见需求,比如需要调用系统自带的计算器、打开第三方软件,或者执行自己编写的其他exe程序,都可以使用Process类提供的Start方法实现。

Process.Start基础调用方式

Process类位于System.Diagnostics命名空间下,使用前需要先引入该命名空间。最简单的启动外部exe的方式就是直接传入exe的路径作为参数调用Start方法。

using System.Diagnostics;

class Program
{
    static void Main()
    {
        // 启动系统计算器
        Process.Start("calc.exe");
        
        // 启动指定路径的exe程序
        Process.Start(@"D:Testmyapp.exe");
    }
}

如果exe程序在系统环境变量配置的目录中,直接写文件名即可,否则需要写完整的绝对路径或者相对路径。

传递参数给外部程序

很多exe程序支持接收命令行参数,我们可以在启动的时候把参数传递进去,有两种常用的方式。

方式一:使用ProcessStartInfo传递参数

ProcessStartInfo可以配置启动的详细信息,包括要传递的参数、工作目录等。

using System.Diagnostics;

class Program
{
    static void Main()
    {
        ProcessStartInfo startInfo = new ProcessStartInfo();
        // 设置要启动的exe路径
        startInfo.FileName = @"D:Testmyapp.exe";
        // 设置传递给exe的参数,多个参数用空格分隔
        startInfo.Arguments = "param1 param2";
        // 设置工作目录,exe会从该目录加载依赖文件
        startInfo.WorkingDirectory = @"D:Test";
        // 启动程序
        Process.Start(startInfo);
    }
}

方式二:直接在路径后拼接参数

也可以把参数直接跟在exe路径后面,用空格分隔,这种方式适合参数比较简单的情况。

using System.Diagnostics;

class Program
{
    static void Main()
    {
        // 直接拼接路径和参数
        Process.Start(@"D:Testmyapp.exe", "param1 param2");
    }
}

配置启动选项

有时候我们需要配置外部程序的启动样式,比如是否显示窗口、窗口状态等,这些都可以通过ProcessStartInfo来设置。

属性名说明可选值
CreateNoWindow是否创建新窗口true/false
WindowStyle窗口显示样式Normal、Hidden、Minimized、Maximized
UseShellExecute是否使用系统shell启动true/false,默认true

下面是一个隐藏窗口启动程序的示例:

using System.Diagnostics;

class Program
{
    static void Main()
    {
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.FileName = @"D:Testmyapp.exe";
        // 不创建新窗口
        startInfo.CreateNoWindow = true;
        // 窗口样式设置为隐藏
        startInfo.WindowStyle = ProcessWindowStyle.Hidden;
        // 不使用shell启动
        startInfo.UseShellExecute = false;
        Process.Start(startInfo);
    }
}

处理启动异常

调用Process.Start的时候可能会出现异常,比如exe路径不存在、没有权限启动程序等,需要做好异常处理。

using System;
using System.Diagnostics;

class Program
{
    static void Main()
    {
        try
        {
            Process.Start(@"D:Testnotexist.exe");
        }
        catch (System.ComponentModel.Win32Exception ex)
        {
            Console.WriteLine("启动程序失败:" + ex.Message);
        }
        catch (Exception ex)
        {
            Console.WriteLine("发生其他异常:" + ex.Message);
        }
    }
}

常见的异常类型包括Win32Exception,一般是系统层面的错误,比如文件不存在、权限不足,还有InvalidOperationException,通常是启动参数配置错误导致的。

等待外部程序执行完成

如果需要在外部程序执行完成之后再执行后续代码,可以调用WaitForExit方法,还可以获取程序的退出码。

using System.Diagnostics;

class Program
{
    static void Main()
    {
        Process process = Process.Start(@"D:Testmyapp.exe");
        // 等待程序执行完成,无限等待
        process.WaitForExit();
        // 获取程序的退出码,0通常表示执行成功
        int exitCode = process.ExitCode;
        Console.WriteLine("程序退出码:" + exitCode);
    }
}

如果不需要无限等待,可以给WaitForExit传入超时时间,单位是毫秒,比如WaitForExit(5000)就是最多等待5秒。

C#Process.Startexe启动外部程序调用修改时间:2026-06-18 20:27:38

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。