Это немного больно, потому что у меня сейчас нет кода передо мной, но я попытаюсь объяснить.
У меня есть простое приложение на C #, которое запускает скрипт Ruby (он выполняет несколько других действий, поэтому он генерирует пакетный файл и выполняет его).
Я использую объект процесса C # и установил следующее
redirectstandardoutput = true
redirectstandarderror = true
UseShellExecute = false
CreateNoWindow = true (прекрасная часть обратной логики!)
Затем я создаю два потока и опрашиваю ReadLine () как для потока ошибок, так и для потоков вывода, ожидая их завершения, прежде чем я вызову WaitForExit ().
Теперь, независимо от того, что я делаю, мой скрипт Ruby не может вызвать системную ("xcopy ...") команду, когда я перенаправляю вывод (никаких ошибок не генерируется, он просто не копирует). Он также не копирует другие файлы, которые я прошу скопировать.
Это происходит, если я направляю оба потока в поток, один из них, перенаправляю только один из них и просто вызываю ReadToEnd ().
Это работает правильно, только если я установил redirectstandardoutput и redirectstandarderror в false.
Я в полной растерянности. Я подумал, что, возможно, поток вывода был заполнен, но я не представляю, почему, если я вызываю ReadLine (мне нужна строка чтения, чтобы я мог анализировать каждую строку и представлять только соответствующие конечному пользователю). Я также подумал, что, возможно, вызов команд dos из многопоточного процесса C # может вызвать проблемы.
Кто-нибудь знает, что здесь может происходить? Я должен сказать, что я нахожусь на VS .net 2005, который я считаю .Net Framework 2.0.