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

Gav*_*vin 2 c# console winforms

我有一个控制台应用程序和一个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;
}
Run Code Online (Sandbox Code Playgroud)

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

有任何想法吗?

Jam*_*sey 5

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

RedirectStandardInput=true,因为它使系统的工作原理创建标准输入,你可以用发送输入到子处理的作家.在您的情况下,孩子不需要输入,只需要输入的存在.因人而异.