Process.WaitForExit () в консоли и Windows Forms - PullRequest
2 голосов
/ 16 декабря 2009

У меня есть консольное приложение и приложение 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 () просто не ждет. Я получаю пустую строку для вывода. С удаленного сервера я подтвердил, что пользователь вошел в систему, поэтому, похоже, команда выполнила.

Есть идеи?

1 Ответ

5 голосов
/ 17 декабря 2009

Под консольными приложениями Windows есть STDIN, STDOUT и STDERR. Оконных приложений нет. Когда вы создаете процесс в консольном приложении, STDIN и т. Д. Наследуются дочерним приложением. Это не происходит в оконном приложении.

RedirectStandardInput=true работает, потому что заставляет систему создавать Writer для STDIN, который вы можете использовать для отправки ввода в дочерний процесс. В вашем случае ребенок не нуждается во вводе, ему просто нужно присутствие ввода. YMMV.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...