2010-11-24 73 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()

相關問題