将进程的标准输出(msxsl.exe)重定向到VB.NET中的字符串

时间:2010-11-24 14:17:45

标签: vb.net process redirectstandardoutput

我正在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”),它会在命令行上显示输出。我做错了什么?

编辑:我应该注意,由于格式错误的XML文件,msxsl进程当前失败。它显示以下错误消息:

  

执行样式表'test.xsl'时出错。   
  代码:0x800c0006   
  系统找不到指定的对象。

这正是我希望在我的应用程序的控制台中显示的类型(或者最终是一个日志文件。)

1 个答案:

答案 0 :(得分:1)

这可能是因为这不是标准输出StandardError您需要像StandardError那样重定向Process.StartInfo.RedirectStandardError = True,然后将其读入字符串。

Dim ErrorString As String = Process.StandardError.ReadToEnd()