Example 1. Running a command line application, without concern for the results:
private void simpleRun_Click(object sender, System.EventArgs e){
System.Diagnostics.Process.Start(@"C:\listfiles.bat");
}
Example 2. Retrieving the results and waiting until the process stops (running the process synchronously):
private void runSyncAndGetResults_Click(object sender, System.EventArgs e){
System.Diagnostics.ProcessStartInfo psi =
new System.Diagnostics.ProcessStartInfo(@"C:\listfiles.bat");
psi.RedirectStandardOutput = true;
psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
psi.UseShellExecute = false;
System.Diagnostics.Process listFiles;
listFiles = System.Diagnostics.Process.Start(psi);
System.IO.StreamReader myOutput = listFiles.StandardOutput;
listFiles.WaitForExit(2000);
if (listFiles.HasExited)
{
string output = myOutput.ReadToEnd();
this.processResults.Text = output;
}
}
Example 3. Displaying a URL using the default browser on the user's machine:
private void launchURL_Click(object sender, System.EventArgs e){
string targetURL = @http://www.duncanmackenzie.net;
System.Diagnostics.Process.Start(targetURL);
}
Using the Code
The code given below creates a process i.e. a command process and then invokes the command that we want to execute. The result of the command is stored in a string
variable, which can then be used for further reference. The command execution can happen in two ways, synchronously and asynchronously. In the asynchronous command execution, we just invoke the command execution using a thread that runs independently. The code has enough comments, hence making it self-explanatory.
Below is the code to execute the command synchronously:
Collapse public void ExecuteCommandSync(
object command) {
try { System.Diagnostics.ProcessStartInfo procStartInfo =
new System.Diagnostics.ProcessStartInfo(
"cmd",
"/c " + command); procStartInfo.RedirectStandardOutput =
true; procStartInfo.UseShellExecute =
false; procStartInfo.CreateNoWindow =
true; System.Diagnostics.Process proc =
new System.Diagnostics.Process(); proc.StartInfo = procStartInfo; proc.Start();
string result = proc.StandardOutput.ReadToEnd(); Console.WriteLine(result); }
catch (Exception objException) { } }
The above code invokes the cmd
process specifying the command to be executed. The option procStartInfo.RedirectStandardOutput
is set to true
, since we want the output to be redirected to the StreamReader
. The procStartInfo.CreateNoWindow
property is set to true
, as we don't want the standard black window to appear. This will execute the command silently.
Below is the code to execute the command asynchronously:
Collapse public void ExecuteCommandAsync(
string command) {
try { Thread objThread =
new Thread(
new ParameterizedThreadStart(ExecuteCommandSync)); objThread.IsBackground =
true; objThread.Priority = ThreadPriority.AboveNormal; objThread.Start(command); }
catch (ThreadStartException objException) { }
catch (ThreadAbortException objException) { }
catch (Exception objException) { } }