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

3

我正在使用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”时发生错误。
Code: 0x800c0006
系统找不到指定的对象。
这正是我希望在我的应用程序控制台上(或最终在日志文件中)显示的内容类型。

好奇:为什么你不使用 .NET 的内置 XSLT 能力(又称 XsltCompiledTransform)? - Tomalak
Tomalak,我不知道有一个类可以做到这一点。谢谢你的提示。我会看看能否用这种方式让它工作。 - Jeremy
1个回答

1
这可能是因为这不是标准输出,而是StandardError,你需要像这样重定向StandardErrorProcess.StartInfo.RedirectStandardError = True,然后将其读入字符串中。 Dim ErrorString As String = Process.StandardError.ReadToEnd()

没错,这确实是一个容易被忽视的简单问题。感谢您的回答。 - Jeremy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接