You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Process.Start启动两个相同应用时第二个闪退如何解决

问题根因

你遇到的问题90%以上是工作目录(WorkingDirectory)配置错误导致的:

  • 手动双击exe启动时,系统会自动将进程的工作目录设置为exe文件所在的文件夹,程序可以正常读取同目录下的配置、依赖资源
  • 直接调用Process.Start(文件路径)时,新进程的工作目录默认继承自你的调用程序的工作目录,不是exe自身所在的目录。两个同款程序如果都读取工作目录下的同名配置文件,要么出现资源冲突,要么第二个程序找不到自己目录下的专属配置,启动后直接崩溃退出。

正确实现方式

不要直接传路径给Process.Start,而是显式构造ProcessStartInfo对象,为每个进程单独指定工作目录:

// 启动第一个程序
var startInfo1 = new ProcessStartInfo
{
    FileName = @"D:\Clients\Client1\program.exe",
    WorkingDirectory = @"D:\Clients\Client1\", // 必须和exe所在目录保持一致
    UseShellExecute = true // 适配不同.NET版本的行为,和手动启动效果完全一致
};
Process.Start(startInfo1);

// 启动第二个程序
var startInfo2 = new ProcessStartInfo
{
    FileName = @"D:\Clients\Client2\program.exe",
    WorkingDirectory = @"D:\Clients\Client2\", // 单独指定第二个程序的工作目录
    UseShellExecute = true
};
Process.Start(startInfo2);

其他排查点

如果上面的方案未解决问题,可以按以下方向进一步定位:

  • 捕获进程退出代码:启动进程后保留Process实例,等待进程退出后查看ExitCode值,对照程序的错误码规则定位原因
  • 捕获进程输出:如果目标程序会输出标准错误/标准日志,可以在ProcessStartInfo中开启RedirectStandardError = true、RedirectStandardOutput = true,读取输出内容获取具体报错信息
  • 如果你手动可以正常启动两个实例,可直接排除程序单实例限制的问题

内容的提问来源于stack exchange,提问作者PetruTofan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 00:06:02