开发者

Command line program/app + C# class method

When working with a command line program, via a c# class method.

How do you determine if the commandline program was successfully executed and the operation it has performed is ok or h开发者_开发技巧as failed?

Also how do you get the screen commandline output into the c# class method?


You can use the Process class to execute a command line command.

The following code captures the standard output to output, and assigns the processes exit code to exitCode.

using (Process p = new Process())
{
    p.StartInfo.FileName = exeName;
    p.StartInfo.Arguments = args;
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.RedirectStandardOutput = true;
    p.Start();
    string output = p.StandardOutput.ReadToEnd();
    p.WaitForExit();
    int exitCode = p.ExitCode;
}


Something like:

Process mycommand = new Process();
mycommand.StartInfo.FileName = "myexe.exe";
mycommand.StartInfo.Arguments = "param1";
mycommand.StartInfo.UseShellExecute = false;
mycommand.StartInfo.RedirectStandardOutput = true;
mycommand.Start();    
Console.WriteLine(mycommand.StandardOutput.ReadToEnd());
mycommand.WaitForExit();

You usually determine an exe's state wether the exit code is 0, but that is arguably down to the writer of the exe


I assume you're using the Process class to call the command line app.

You can find the exit code of the process using Process.ExitCode. You can redirect its standard output by setting ProcessStartInfo.RedirectStandardOutput before starting it, and then either using Process.StandardOutput or the Process.OutputDataReceived event.


Take a look at this questionenter link description here.

The additional information you might need is process.ExitCode to see if it was sucessful. Of course, the Main method of the console app must return an exit code when it is unsuccessful, which many do not.


For this, you use the Process.Start method. You can control how the process runs with the passed in ProcessStartInfo:

var myProcess = Process.Start(new ProcessStartInfo {
  FileName = "process.exe",
  UseShellExecute = false,
  RedirectStandardOutput = true,
  CreateNoWindow = true
});
if (!myProcess.WaitForExit(5000)) { // give it 5 seconds to exit
  myProcess.Kill();
}
if (myProcess.ExitCode != 0) {
  // error!
}
var output = myProcess.StandardOutput.ReadToEnd(); // access output
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜