Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

C# Redirect Console Output to log file

Posted on 2007-03-22
9
Medium Priority
?
2,380 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
Free learning courses: Active Directory Deep Dive

Get a firm grasp on your IT environment when you learn Active Directory best practices with Veeam! Watch all, or choose any amount, of this three-part webinar series to improve your skills. From the basics to virtualization and backup, we got you covered.

 
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

Hire Technology Freelancers with Gigs

Work with freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely, and get projects done right.

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…
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…
In this video, Percona Solutions Engineer Barrett Chambers discusses some of the basic syntax differences between MySQL and MongoDB. To learn more check out our webinar on MongoDB administration for MySQL DBA: https://www.percona.com/resources/we…
Is your data getting by on basic protection measures? In today’s climate of debilitating malware and ransomware—like WannaCry—that may not be enough. You need to establish more than basics, like a recovery plan that protects both data and endpoints.…

618 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