user3725365
user3725365

Reputation: 41

How to send commands to cmd in C#

I am coding a program in C# and I need to open cmd.exe, send my commands and get its answers. I searched around and found some answers to take diagnostics.process in use.

Now, I have two problems:

  1. When I get the output of process, the output is not shown on the cmd consoule itself.
  2. I need to call g95 compiler on the system. When I call it from cmd manually, it is invoked and does well, but when I call it programmatically, I have the this error: "g95 is not recognized as an internal or external ..."

On the other hand, I only found how to send my commands to cmd.exe via arguments and process.standardInput.writeline(). Is there any more convenient method to use. I need to send commands when the cmd.exe is open.

I am sending a part of my code which may help:

System.Diagnostics.Process myProcess = new System.Diagnostics.Process();
myProcess.StartInfo = new System.Diagnostics.ProcessStartInfo("cmd.exe");

//myProcess.StartInfo.Arguments = "/c g95";
myProcess.StartInfo.UseShellExecute = true;
myProcess.StartInfo.RedirectStandardInput = true;
myProcess.StartInfo.RedirectStandardOutput = true;
myProcess.StartInfo.RedirectStandardError = true;
myProcess.OutputDataReceived += new System.Diagnostics.DataReceivedEventHandler(myProcess_OutputDataReceived);
myProcess.ErrorDataReceived += new System.Diagnostics.DataReceivedEventHandler(myProcess_ErrorDataReceived);

myProcess.Start();
myProcess.BeginOutputReadLine();
myProcess.BeginErrorReadLine();
myProcess.StandardInput.WriteLine("g95 c:\\1_2.f -o c:\\1_2.exe");

Upvotes: 4

Views: 3362

Answers (2)

Markus Safar
Markus Safar

Reputation: 6580

You can specify the g95 directly and pass the desired command line parameters to it. You don't need to execute cmd first. The command may not be regognized because the settings from the user profile are not loaded. Try setting the property LoadUserProfile in StartInfo to true.

myProcess.StartInfo.LoadUserProfile = true;

This should also set the path variables correctly. Your code would look something like this:

Process myProcess = new Process();
myProcess.StartInfo = new ProcessStartInfo("g95");

myProcess.StartInfo.Arguments = "c:\\1_2.f -o c:\\1_2.exe"
myProcess.StartInfo.UseShellExecute = true;
myProcess.StartInfo.LoadUserProfile = true;
myProcess.StartInfo.RedirectStandardInput = true;
myProcess.StartInfo.RedirectStandardOutput = true;
myProcess.StartInfo.RedirectStandardError = true;
myProcess.OutputDataReceived += myProcess_OutputDataReceived;
myProcess.ErrorDataReceived += myProcess_ErrorDataReceived;

myProcess.Start();
myProcess.BeginOutputReadLine();
myProcess.BeginErrorReadLine();

Upvotes: 3

yavor87
yavor87

Reputation: 5929

You are getting the error

"g95 is not recognized as an internal or external ..."

because you haven't added the path to g95.exe in your PATH environment variable. You will get similar result if you open up command prompt and type g95. Here is a link to G95 Windows FAQ page that explains it.

Upvotes: 0

Related Questions