C#调用含正斜杠命令行参数的外部exe程序闪退问题求助
问题根本原因
你遇到的崩溃是因为未显式设置目标程序的工作目录导致的:
- 当
Process.StartInfo.UseShellExecute = false时,系统默认会将你当前C#程序的运行目录(也就是bin目录)作为新启动进程的工作目录,不会自动切换到GpuTest.exe所在的目录 - Geeks3D GPU Test运行时需要加载同目录下的依赖DLL、测试用资源文件,读取这些文件时程序默认从当前工作目录查找,而非自身exe文件所在目录
- 不带参数启动时程序运行的默认逻辑不需要加载额外的依赖资源,因此可以正常运行;传入测试参数后需要加载对应测试项的关联资源,在当前工作目录查找不到就会抛出异常退出
修复方案
给Process.StartInfo.WorkingDirectory显式赋值为GpuTest.exe所在的目录即可,修复后的代码如下:
private void BtnStartStress_Click(object sender, EventArgs e) { string gpuTestDir = @"C:\Users\Computer_User\source\repos\StressTool\GpuTest\"; Process GpuTest = new Process(); GpuTest.StartInfo.FileName = Path.Combine(gpuTestDir, "GpuTest.exe"); GpuTest.StartInfo.Arguments = "/test=fur"; GpuTest.StartInfo.UseShellExecute = false; GpuTest.StartInfo.CreateNoWindow = false; // 显式设置工作目录为GpuTest所在文件夹 GpuTest.StartInfo.WorkingDirectory = gpuTestDir; GpuTest.Start(); }
补充验证点
- 如果GpuTest的路径是动态读取的,确保提取路径时只取目录部分赋值给
WorkingDirectory即可 - 如果后续需要打包程序,建议将GpuTest的文件夹路径改为相对路径,避免硬编码绝对路径导致部署后出错
内容的提问来源于stack exchange,提问作者Ed Swafford
相关产品推荐
相关产品推荐

