在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属性时不能设置工作目录属性一样,但从我读到的情况来看,情况并非如此。那么这是怎么回事呢?为什么它能在第一个例子中找到文件并正确执行它,而在第二个例子中却不能?
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将解决这个问题。我想我应该把代码贴出来,以防有人需要。