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

标签 c# winforms console

我有一个控制台应用程序和一个 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 创建一个 Writer,您可以使用它向子进程发送输入。在您的情况下, child 不需要输入,它只需要输入的存在。 YMMV。

关于c# - 控制台与 Windows 窗体上的 Process.WaitForExit(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1910592/

相关文章:

c# - 在 Windows Vista 上使用 C# .Net 获取我连接的无线网络的 SSID

c# - 如何使用 x/y 坐标而不是索引访问 Grid 中的子节点?

c# - 将 HTML 抓取到对象,然后使用 AutoMapper 进行建模

.net - 鼠标移动时如何检测shift键按下状态

c# - 如何在 winform 中显示 html 格式的内容(无图像)?

linux - 无法从 Linux 控制台运行 C++ 应用程序 - "not found"错误

可以从控制台运行但不创建窗口的 C# 应用程序

c# - 将列表转换为小字符串

c# - 图片框 图片框

c++ - 写入控制台的最有效方法?