Solved

C# Redirect Console Output to log file

Posted on 2007-03-22
9
2,335 Views
Last Modified: 2007-12-19
I would like to run an executable program that takes an argument and then redirect the console output to a file. The following is how I normally do it from command line (runs nunit-console.exe, passes it MyTest.dll as an argument, and redirects the console output to outfile.log):

nunit-console.exe MyTest.dll > outfile.log 2>&1

I would like to be able to do this strictly from my C# code. The following is the code I have, but it does not work. Can you please help me (this is very urgent)???? Thank you so much!!!

           Process myprocess  = new Process();
            myprocess.StartInfo.FileName = @"c:\nunit-console.exe";
            myprocess.StartInfo.WorkingDirectory = @"c:\" ;
            myprocess.StartInfo.Arguments= "MyTest.dll -s -m";
            myprocess.StartInfo.UseShellExecute = false;
            myprocess.StartInfo.RedirectStandardOutput = true;
            myprocess.StartInfo.CreateNoWindow = true;
            StreamWriter sw = new StreamWriter(@"c:\outfile.log");
            myprocess.Start();
            sw.WriteLine(myprocess.StandardOutput.ReadToEnd());
            sw.Close();
0
Comment
Question by:jrwalker2
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 6
  • 2
9 Comments
 
LVL 16

Expert Comment

by:AlexNek
ID: 18769655
I remember that setting RedirectStandardOutput to true is not enough. In addition you must set
UseShellExecute = false;
http://msdn2.microsoft.com/en-us/library/system.diagnostics.processstartinfo.redirectstandardoutput.aspx
0
 
LVL 16

Expert Comment

by:AlexNek
ID: 18769656
Ohh you you have it already, sorry.
0
 
LVL 16

Expert Comment

by:AlexNek
ID: 18769658
Try to remove myprocess.StartInfo.CreateNoWindow = true;
0
DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

 
LVL 16

Expert Comment

by:AlexNek
ID: 18769664
myprocess.WaitForExit(); can be useful too.
0
 
LVL 9

Accepted Solution

by:
bele04 earned 250 total points
ID: 18769697
you should read the stream being returned by the process before calling the WaitForExit:

Process myprocess  = new Process();
            myprocess.StartInfo.FileName = @"c:\nunit-console.exe";
            myprocess.StartInfo.WorkingDirectory = @"c:\" ;
            myprocess.StartInfo.Arguments= "MyTest.dll -s -m";
            myprocess.StartInfo.UseShellExecute = false;
            myprocess.StartInfo.RedirectStandardOutput = true;
            myprocess.StartInfo.CreateNoWindow = true;
            StreamWriter sw = new StreamWriter(@"c:\outfile.log");
            myprocess.Start();
            string strOutput = myprocess.StandardOutput.ReadToEnd();
            myprocess.WaitForExit();
            sw.WriteLine(strOutput);
            sw.Close();

more info at the msdn site:
http://msdn2.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspx
0
 
LVL 1

Author Comment

by:jrwalker2
ID: 18772793
I tried the above code, but it is not working for me yet. It prints to the oufile.log what seems to be rules on how to run nunit-console.exe with arguments, but I do not know how to apply it. The MyTest.dll is a library of NUnit tests that I am trying to run. I also saw on the following website an example of running an .exe file and passing args to it it the way I think I want to, but I'm not sure how to apply it (compiler.StartInfo.Arguments = "/r:System.dll /out:sample.exe stdstr.cs") .
http://msdn2.microsoft.com/en-us/library/system.diagnostics.processstartinfo.redirectstandardoutput.aspx 

Can you please provide code? Thank you



Below is what printed in the outfile.log:
-------------------------------------------
NUnit version 2.2.2
Copyright (C) 2002-2003 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov, Charlie Poole.
Copyright (C) 2000-2003 Philip Craig.
All Rights Reserved.

OS Version: Microsoft Windows NT 5.1.2600 Service Pack 2    .NET Version: 2.0.50727.42


NUNIT-CONSOLE [inputfiles] [options]

Runs a set of NUnit tests from the console.

You may specify one or more assemblies or a single
project file of type .nunit.

Options:
/fixture=STR         Fixture to test
/config=STR          Project configuration to load
/xml=STR             Name of XML output file
/transform=STR       Name of transform file
/xmlConsole          Display XML to the console
/output=STR          File to receive test output (Short format: /out=STR)
/err=STR             File to receive test error output
/labels              Label each test in stdOut
/include=STR         List of categories to include
/exclude=STR         List of categories to exclude
/noshadow            Disable shadow copy
/thread              Run tests on a separate thread
/wait                Wait for input before closing console window
/nologo              Do not display the logo
/help                Display help (Short format: /?)


Options that take values may use an equal sign, a colon
or a space to separate the option from its value.


0
 
LVL 16

Assisted Solution

by:AlexNek
AlexNek earned 250 total points
ID: 18774443
It is correct
myprocess.StartInfo.Arguments= "MyTest.dll -s -m";
you can try to write
myprocess.StartInfo.Arguments= "\"MyTest.dll -s -m\"";

0
 
LVL 1

Author Comment

by:jrwalker2
ID: 18775965
Thank you all
0
 
LVL 16

Expert Comment

by:AlexNek
ID: 18776248
Dont mention it. Thank you too.
0

Featured Post

MIM Survival Guide for Service Desk Managers

Major incidents can send mastered service desk processes into disorder. Systems and tools produce the data needed to resolve these incidents, but your challenge is getting that information to the right people fast. Check out the Survival Guide and begin bringing order to chaos.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

We all know that functional code is the leg that any good program stands on when it comes right down to it, however, if your program lacks a good user interface your product may not have the appeal needed to keep your customers happy. This issue can…
Many of us here at EE write code. Many of us write exceptional code; just as many of us write exception-prone code. As we all should know, exceptions are a mechanism for handling errors which are typically out of our control. From database errors, t…
Although Jacob Bernoulli (1654-1705) has been credited as the creator of "Binomial Distribution Table", Gottfried Leibniz (1646-1716) did his dissertation on the subject in 1666; Leibniz you may recall is the co-inventor of "Calculus" and beat Isaac…

749 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question