This is to start an external executable AS A SEPARATE PROCESS
using System.Diagnostics;
///
/// Path dell'eseguibile da richiamare.
///
string exe_path = @"C:\ms4w\tools\mapserv\shp2img.exe";
///
/// Eventuali argomenti all'eseguibile.
///
string argument1 = "-argomento1";
string argument2 = @"C:\ms4w\Apache\htdocs\tmp.png";
// Prima di far partire il processo se ne indicano le proprietà
// Si indica l'eseguibile che si vuol far partire
ProcessStartInfo startInfo = new ProcessStartInfo(exe_path);
// Si indicano gli eventuali argomenti da passare all'eseguibile
startInfo.Arguments = argument1 + " \"" + argument2 + "\"";
// Queste proprietà evitano di mostrare la schermata del prompt durante l'esecuzione
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;
// Con queste istruzioni si fa effettivamente partire il processo
Process process = new Process();
process.StartInfo = startInfo;
process.Start();
// Con queste istruzioni ne attendiamo il completamento e lo chiudiamo
process.WaitForExit();
process.Close();