为啥我的程序在发布模式下运行良好,但在调试模式下失败? [关闭]

Posted

技术标签:

【中文标题】为啥我的程序在发布模式下运行良好,但在调试模式下失败? [关闭]【英文标题】:Why is my program running fine in release mode, but failing in debug mode? [closed]为什么我的程序在发布模式下运行良好,但在调试模式下失败? [关闭] 【发布时间】:2016-09-20 15:19:40 【问题描述】:

我的程序在 RELEASE 模式下运行良好,但是当我在 DEBUG 模式下运行它时,它在这些代码行上失败:

string l_strFileDir = @"C:\Program Files\Sil\Q 5.2\";

Process scriptProc = new Process();
scriptProc.StartInfo.FileName = @"USB_VID_PID.exe";
scriptProc.StartInfo.WorkingDirectory = l_strFileDir;
scriptProc.StartInfo.UseShellExecute = false;
scriptProc.StartInfo.CreateNoWindow = true;

scriptProc.Start();

string l_strFilePath =  l_strFileDir + @"\out.txt";

错误是:

异常:系统找不到指定的文件

它给了我那个堆栈跟踪。

编辑: .exe 文件不需要在调试文件夹中,因为我写了一个完整的路径。

当程序在异常中中断时,它写道在另一个路径中找不到文件 - 而不是我在代码中写的路径。

异常发生在 Start 命令所在的行中。

我的路径中没有双反斜杠

this is the exception

【问题讨论】:

当您中断异常时,您的应用程序试图“查找”的文件是什么?这应该很容易弄清楚。 您检查过 BIN 文件夹的内容吗?一个有“USB_VID_PID.exe”而另一个没有? l_strFilePath 将是无效的文件路径。 这可能是真的@musefan ...但我们没有完整的应用程序,我们不知道导致异常的行号。 项目 > 属性 > 调试选项卡。您需要取消选中“调试”和“发布”配置的“首选 32 位”选项。有关将 c:\program 文件重定向到 this MSDN page 中的 c:\program files (x86) 的文件系统重定向器的更多信息。 【参考方案1】:

问题是USB_VID_PID.exe 不在您的调试文件夹中。将整个路径添加到 .StartInfo.FileName 或将 EXE 添加到调试文件夹。

scriptProc.StartInfo.FileName = Path.Combine(l_strFileDir, @"USB_VID_PID.exe");

From MSDN

当 UseShellExecute 为 false 时,WorkingDirectory 属性不 用于查找可执行文件。相反,它的价值适用于流程 那是开始的,只有在新的语境中才有意义 过程。

【讨论】:

我怀疑 OP 是否会确认,但我会说这个答案清楚地表明了问题所在以及发生的原因。 大声笑......投了正确的答案:)【参考方案2】:

DEBUG 和 RELEASE 编译导致代码输出到不同的目录。您可能尝试在一个文件上创建一个 Process 对象,但它根本不存在。确保您的文件位于正确的目标目录中或改进文件的路径信息。

【讨论】:

某人的日子不好过...过去几天无缘无故投了很多票。

以上是关于为啥我的程序在发布模式下运行良好,但在调试模式下失败? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的应用程序在发布模式下崩溃但在调试模式下不崩溃?

为啥消息处理程序在调试模式下不起作用?

UWP XAMARIN 在 RELEASE 模式下崩溃(但在调试中工作良好)

VBA Excel 在调试中运行良好,但在安全更新 KB4022174 后无法在正常模式下运行

应用程序在发布时崩溃,但在调试模式下工作正常

广告未在发布模式下展示