2011-04-08 160 views
1

好的,就像标题所暗示的那样,我遇到了一些麻烦......当我使用下面的代码时,它会运行,但我可以“吨甚至使用> output.txt中得到它怎么跑了一些状态....从Windows应用程序运行命令行可执行文件时重定向标准输出的问题

  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文件不存在。所以当我使用....

我究竟在做什么错在这里。这就像使用useshellexecute属性时不能设置工作目录属性,但从我读的情况来看,情况并非如此。发生什么了?为什么它可以在第一个示例中找到该文件并正确执行,而不是在第二个示例中执行?

回答

2

MSDN报价从http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.workingdirectory.aspx

当UseShellExecute是假的, WorkingDirectory属性不用于 找到可执行文件。相反,启动 的进程使用的是 ,并且仅在新进程的 上下文中具有含义。

+0

我是否需要为参数添加完整路径? – James 2011-04-08 22:00:27

+0

nvm,发现我只需要将路径添加到文件名属性。现在效果很好,谢谢。 – James 2011-04-09 00:47:50

0

如果任何人想知道它的工作方式....

 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,将解决这个问题。我想我会发布代码以防其他人需要它。

相关问题