Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 控制台与Windows窗体上的Process.WaitForExit()_C#_Winforms_Console - Fatal编程技术网

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

C# 控制台与Windows窗体上的Process.WaitForExit(),c#,winforms,console,C#,Winforms,Console,我有一个控制台应用程序和一个win forms应用程序,它们都需要调用远程服务器获取一些数据,它们调用Putty的命令行部分plink.exe,通过SSH运行远程命令 我创建了一个小型类库,供两者共享,运行以下程序: public static string RunCommand(string command, string arguments) { ProcessStartInfo startInfo = new ProcessStartInfo { FileName = co

我有一个控制台应用程序和一个win forms应用程序,它们都需要调用远程服务器获取一些数据,它们调用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()并不等待。我得到一个空字符串作为输出。我已从远程服务器确认用户已登录,因此命令似乎已运行


有什么想法吗?

在Windows控制台下,应用程序有STDIN、STDOUT和STDERR。窗口化的应用程序不会。在控制台应用程序下创建进程时,子应用程序将继承STDIN等。这在窗口应用程序中不会发生


RedirectStandardInput=true
之所以有效,是因为它使系统为STDIN创建了一个编写器,您可以使用它向子进程发送输入。在您的情况下,孩子不需要输入,只需要输入的存在。YMMV.

在哪里调用函数?我在Program.Main()中尝试了这两种方法主窗体的cTor具有相同的结果。考虑阅读<代码> Pr.StRealDror ——即使只是确保命令确实按您预期的那样完成。看起来像标准输入的一些问题,而作为WiFrm运行时,不会发生在控制台应用程序中。Plink返回以下错误:“无法读取标准输入:句柄无效。”。添加RedirectStandardInput=true可以修复问题。奇怪。也许你应该把它作为你自己问题的答案,这样别人会认为你的问题是“已回答的”。