在windows应用程序中运行命令行可执行文件时,重定向标准输出时出现问题

本文关键字:重定向 标准输出 问题 可执行文件 应用程序 windows 运行 命令行 | 更新日期: 2023-09-27 17:49:24

好的,正如标题所暗示的那样,我在这个....上遇到了一些麻烦当我使用以下代码时,它将运行,但我甚至不能使用> output.txt来获取运行状态....

            ProcessStartInfo x = new ProcessStartInfo();
            x.FileName = "somefile.exe";
            x.Arguments = arg1 + " " + arg2 + " " + arg3 + " " + arg4;
            x.WorkingDirectory = workDir;
            x.WindowStyle = ProcessWindowStyle.Hidden;
            Process mde = Process.Start(x);
            mde.WaitForExit();

现在,让我感到困惑的是,当我添加用于捕获输入的代码时,我抛出了一个异常,说明我试图运行的exe文件不存在。所以当我使用....

            ProcessStartInfo x = new ProcessStartInfo();
            x.FileName = "somefile.exe";
            x.Arguments = arg1 + " " + arg2 + " " + arg3 + " " + arg4;
            x.WorkingDirectory = workDir;
            x.WindowStyle = ProcessWindowStyle.Hidden;
            modelf.UseShellExecute = false;
            modelf.RedirectStandardOutput = true;
            Process mde = Process.Start(x);
            mde.WaitForExit();

我到底做错了什么?这就像在使用useshellexecute属性时不能设置工作目录属性一样,但从我读到的情况来看,情况并非如此。那么这是怎么回事呢?为什么它能在第一个例子中找到文件并正确执行它,而在第二个例子中却不能?

在windows应用程序中运行命令行可执行文件时,重定向标准输出时出现问题

MSDN Quote from http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.workingdirectory.aspx

当UseShellExecute为false时未使用WorkingDirectory属性查找可执行文件。相反,它是由已启动的进程使用只有在里面才有意义新工艺的上下文。

如果有人想知道它是如何工作的....

        Process x = new Process
        {
            StartInfo =
            {
                FileName = fullPathToExe,
                Arguments = arg1 + " " + arg2 + " " + arg3 + " " + arg4,
                WorkingDirectory = outDir,
                WindowStyle = ProcessWindowStyle.Hidden,
                UseShellExecute = false,
                RedirectStandardOutput = true
            }
        };
        x.Start();
        string output = x.StandardOutput.ReadToEnd();
        x.WaitForExit();

它仍然闪烁一个窗口,但我认为createnowindow= true将解决这个问题。我想我应该把代码贴出来,以防有人需要。