【问题标题】:Redirecting Standard Output from a Process (msxsl.exe) to a string in VB.NET将来自进程 (msxsl.exe) 的标准输出重定向到 VB.NET 中的字符串
【发布时间】:2011-05-15 03:27:20
【问题描述】:

我正在用 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
系统找不到指定的对象。

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

【问题讨论】:

  • 好奇:为什么不使用 .NET 的内置 XSLT 功能(又名XsltCompiledTransform
  • Tomalak,我不知道有这样的课程。谢谢你的提示。我会看看我能不能让它这样工作。

标签: vb.net process redirectstandardoutput


【解决方案1】:

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

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

【讨论】:

  • 完全正确。这么容易被忽视的事情。感谢您的回答。
猜你喜欢
  • 2011-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-14
  • 2013-07-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多