我正在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
系统无法找到指定的对象。
这正是我想要显示在应用程序控制台(或最终是日志文件)中的内容的类型。
最佳答案
这可能是因为这不是标准输出,它是StandardError
,您将需要像这样StandardError
重定向Process.StartInfo.RedirectStandardError = True
,然后将其读取为字符串。Dim ErrorString As String = Process.StandardError.ReadToEnd()
关于vb.net - 将标准输出从进程(msxsl.exe)重定向到VB.NET中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4267771/