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

CMD中全路径/PATH运行.exe报错,C#调用该程序遇相同问题

解决C#启动外部EXE时找不到配置文件的问题

这问题我之前也碰到过,核心原因是工作目录(Working Directory)不匹配:

  • 你直接用完整路径运行EXE时,程序的工作目录是当前CMD所在的目录(比如你的用户目录或系统盘根目录),而程序是通过相对路径data/program.cfg查找配置文件,自然找不到;
  • 但先cd到EXE所在目录再运行时,工作目录就变成了EXE的目录,程序就能正确定位到配置文件了。

至于你说的把目录加到系统PATH没用——PATH只是让系统能找到EXE文件的位置,并不会改变程序启动时的工作目录,所以问题依然存在。

下面给你两种C#里的解决方案:

方法1:设置ProcessStartInfo的WorkingDirectory(推荐)

这是最直接的解决方式,强制让程序在它自己的目录下运行:

using System.Diagnostics;
using System.IO;

// 你的EXE完整路径
string exeFullPath = @"C:\Users\User\Program\program.exe";
// 提取EXE所在的目录
string exeDirectory = Path.GetDirectoryName(exeFullPath);

var startInfo = new ProcessStartInfo(exeFullPath)
{
    // 设置工作目录为EXE所在文件夹
    WorkingDirectory = exeDirectory,
    // 如果不需要显示CMD窗口,可以设为false;需要显示则设为true
    UseShellExecute = false
};

// 启动程序
Process.Start(startInfo);

方法2:使用ShellExecute模拟双击启动

如果你需要像双击文件那样启动程序(比如要关联打开某个文件),可以把UseShellExecute设为true,同样要设置WorkingDirectory:

using System.Diagnostics;
using System.IO;

string exeFullPath = @"C:\Users\User\Program\program.exe";
string exeDirectory = Path.GetDirectoryName(exeFullPath);

var startInfo = new ProcessStartInfo(exeFullPath)
{
    WorkingDirectory = exeDirectory,
    UseShellExecute = true
};

Process.Start(startInfo);

这样设置后,程序启动时的工作目录就是它自己所在的文件夹,就能正常读取data/program.cfg配置文件了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:24:56