控制台与Windows窗体上的Process.WaitForExit()

时间:2009-12-15 21:38:26

标签: c# winforms console

我有一个控制台应用程序和一个win表单应用程序,它们都需要调用远程服务器获取某些数据,他们调用Putty的命令行部分plink.exe来通过SSH运行远程命令

我创建了一个小类库,供两者共享,运行以下内容:

public static string RunCommand(string command, string arguments) {
  ProcessStartInfo startInfo = new ProcessStartInfo {
      FileName = command,
      Arguments = arguments,
      UseShellExecute = false,
      CreateNoWindow = true,
      RedirectStandardOutput = true
  };
  string output = null;
  using (Process p = new Process()) {
      p.StartInfo = processStartInfo;
      p.Start();
      output = p.StandardOutput.ReadToEnd();
      p.WaitForExit();
  }
  return output;
}

在控制台应用程序下一切正常,在win表单下它没有错误,似乎WaitForExit()只是不等待。我得到一个空字符串输出。我已经从远程服务器确认用户已登录,因此命令似乎已运行。

有什么想法吗?

1 个答案:

答案 0 :(得分:5)

在Windows控制台下,应用程序有STDIN,STDOUT和STDERR。窗口应用程序没有。在Console应用程序下创建进程时,子应用程序将继承STDIN等。在Windowed应用程序中不会发生这种情况。

RedirectStandardInput=true有效,因为它使系统为STDIN创建一个Writer,可用于将输入发送到子进程。在您的情况下,孩子不需要输入,只需要输入的存在。 YMMV。