Redirecting Standard Output from a Process (msxsl.exe) to a string in VB.NET

3

I am writing a command line application in VB.NET. This application is calling another one, msxsl.exe, to run an XSL transform. I am using the Process class to do this:

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()

This part works great. What I want it to be able to display the output from this process to the console of my application. I have read several posts explaining this method, but it does not seem to work in this case. The output is an empty string.

Dim output As String = process.StandardOutput.ReadToEnd()
process.WaitForExit()
Console.WriteLine(output)

I have verified that if I run the msxsl executable on its own (i.e. running "msxsl.exe base.xml test.xsl -o styled.xml"), it displays output on the command line. What am I doing wrong?

EDIT: I should note that the msxsl process is currently failing due to a malformed XML file. It is displaying this error message:

Error occurred while executing stylesheet 'test.xsl'.
Code: 0x800c0006
The system cannot locate the object specified.

This is exactly the type of thing I want displayed in the console of my application (or, eventually, a log file.)

vb.net
process
redirectstandardoutput
asked on Stack Overflow Nov 24, 2010 by Jeremy • edited Nov 24, 2010 by Jeremy

1 Answer

1

This is probably because this isn't standard output it is StandardError you will want to redirect StandardError like so Process.StartInfo.RedirectStandardError = True and then read that into a string.

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

answered on Stack Overflow Nov 24, 2010 by msarchet

User contributions licensed under CC BY-SA 3.0