2010-11-24 76 views
3

我正在VB.NET中编写命令行应用程序。此应用程序调用另一个msxsl.exe来运行XSL转换。我使用Process类来做到这一点:将标准输出从进程(msxsl.exe)重定向到VB.NET中的字符串

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

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

+0

好奇:你为什么不使用内置(.NET的XSLT能力又名[XsltCompiledTransform](http://msdn.microsoft.com/en-us/library/system.xml .xsl.xslcompiledtransform.aspx)? – Tomalak 2010-11-24 14:26:13

+0

Tomalak,我不知道有这样的课程,谢谢你的提示,我会看看我能否以这种方式实现它 – Jeremy 2010-11-24 14:30:20

回答

1

这可能是因为这不是标准输出是你StandardError将想重新定向StandardErrorProcess.StartInfo.RedirectStandardError = True,然后读取到一个字符串。

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

相关问题