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
相关产品推荐
相关产品推荐

