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

标签 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

系统无法找到指定的对象。

这正是我想要显示在应用程序控制台(或最终是日志文件)中的内容的类型。

最佳答案

这可能是因为这不是标准输出,它是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/

相关文章:

javascript - Awesomium 如何单击 div 链接 - .click() 不起作用 (vb.net)

python - 我如何知道我的 Python 进程已绑定(bind)到哪个核心?

process - 监视进程是否已在 C 中终止

vb.net - 在VB.NET中从SQL数据库中删除记录

wpf - 当内容适合窗口时,如何在wpf中隐藏滚动条?

c# - 如何在不修改类的情况下添加XML序列化指令

ubuntu - docker daemon 没有在我的 ubuntu vm 中启动, "service start"ok by "ps"没有结果

c# - ProcessInfo 和 RedirectStandardOutput

powershell - PowerShell 标准错误输出中的随机换行符

c# - 捕获 python 程序的标准输出