Перенаправление стандартного вывода из процесса (msxsl.exe) в строку в VB.NET - PullRequest
3 голосов
/ 24 ноября 2010

Я пишу приложение командной строки в VB.NET.Это приложение вызывает другой файл msxsl.exe для запуска XSL-преобразования.Я использую класс Process для этого:

Dim process = New Process()
process.StartInfo.FileName = "msxsl.exe"
process.StartInfo.Arguments = "base.xml test.xsl -o styled.xml"
process.StartInfo.UseShellExecute = False
process.StartInfo.CreateNoWindow = True
process.StartInfo.RedirectStandardOutput = True
process.Start()

Эта часть прекрасно работает.Что бы я хотел, чтобы он мог отображать вывод этого процесса на консоль моего приложения.Я прочитал несколько постов, объясняющих этот метод, но в этом случае он не работает.На выходе получается пустая строка.

Dim output As String = process.StandardOutput.ReadToEnd()
process.WaitForExit()
Console.WriteLine(output)

Я проверил, что если я запускаю исполняемый файл msxsl самостоятельно (т. Е. Запускаю "msxsl.exe base.xml test.xsl -o styled.xml"), он отображает вывод в командной строке,Что я делаю не так?

РЕДАКТИРОВАТЬ: я должен отметить, что процесс msxsl в настоящее время терпит неудачу из-за неправильно сформированного файла XML.Отображается это сообщение об ошибке:

Произошла ошибка при выполнении таблицы стилей 'test.xsl'.Код: 0x800c0006Система не может найти указанный объект.

Это именно тот тип вещей, который я хочу отобразить в консоли моего приложения (или, в конечном итоге, в файле журнала).

1 Ответ

1 голос
/ 24 ноября 2010

Вероятно, это потому, что это не стандартный вывод, это StandardError, вы захотите перенаправить StandardError, например, Process.StartInfo.RedirectStandardError = True и затем прочитать это в строку.*

...