?
Solved

C# Redirect Console Output to log file

Posted on 2007-03-22
9
Medium Priority
?
2,423 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
  • 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
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 
LVL 16

Expert Comment

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

Accepted Solution

by:
bele04 earned 1000 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 1000 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

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

This article is for Object-Oriented Programming (OOP) beginners. An Interface contains declarations of events, indexers, methods and/or properties. Any class which implements the Interface should provide the concrete implementation for each Inter…
It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
Loops Section Overview
Screencast - Getting to Know the Pipeline
Suggested Courses

569 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