在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