我在C#中使用Process对象来启动我的C ++二进制文件来执行某些操作。 以前我使用文件名作为" cmd.exe"使用" \ c my_arguments> file.txt的"作为论点。
它显示了一些问题,例如退出非零退出代码。 我发现崩溃后cmd.exe仍在运行。 (来自任务经理)。
我在参数中使用重定向来获取文件中的所有文本。从命令提示符手动调用时,C ++二进制文件工作正常。
注意: - 1)我的二进制文件在控制台上打印大约200-300行文本数据 2)我的二进制文件调用另一个二进制文件来验证结果。
方法1: - 文件名为" Cmd.exe" 观察: - 有时,在后台运行cmd.exe时,进程将以非零退出代码退出。 (很惊讶地看到这一点)
Process p = new Process();
p.StartInfo.FileName = "cmd";
p.StartInfo.Arguments = "/C " + test.testExeName + " " + argument + " > " + test.testLogFileName;
p.StartInfo.WorkingDirectory = demoDest;
p.Start();
方法2: - 使用文件名: - "我的C ++二进制" 观察: - 即使任务管理器显示其运行,该过程也不会退出。它在我调用它时执行它的操作但是在验证部分它被卡在我调用另一个EXE文件的地方(不确定,但我怀疑这一步,因为在调用另一个EXE之前我的测试正确完成了所有步骤)。
Process p = new Process();
p.StartInfo.FileName = test.testExeName;
p.StartInfo.Arguments = argument;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.UseShellExecute = false;
//p.EnableRaisingEvents = true;
p.StartInfo.WorkingDirectory = demoDest;
p.Start();
我怀疑这个问题是因为输出的重定向。因此计划通过登录文件来删除所有控制台输出。如果有人在过去遇到过此问题,请发表评论
答案 0 :(得分:0)
我更新了原始的C ++ EXE,将所需的结果直接记录到文件而不是控制台日志重定向。 现在,上述两种方法都开始正常工作。
由于巨大的数据重定向,cmd进程陷入困境。 现在问题已解决。