我有一个控制台应用程序和一个 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/