Home / Programmazione / C# - Asp.NET / Eseguire comandi di sistema con C#
Mattepuffo

Eseguire comandi di sistema con C#

Eseguire comandi di sistema con C#

Mi stavo creando una interfaccia su misura per NMap che fosse multipiattoforma.

Mi è venuto in mente di usare Monodevelop e C# visto che Java non è molto adatto alla scopo.

Crea una GUI per NMap in sostanza vuol dire lanciare il comando che faresti direttamente da shell e rappresentare il risultato nella finestra.

Vediamo quindi come eseguire, in generale, comandi DOS/Bash o altri simili direttamente da codice.

Il codice qua sotto funziona sia su Linux che su Windows (su Mac OS X non ho ancoa provato).

Per eseguire semplici comandi basta la classe Process e il metodo Start(); vediamo qualche esempio:

System.Diagnostics.Process.Start("kwrite");

System.Diagnostics.Process.Start("nmap", "192.168.1.1/24");

System.Diagnostics.Process.Start("iexplorer.exe");

Tanto per farvi capire la potenza di Mono vi ho fatto tre esempi; il primo eseguito su Linux, il secondo eseguito su Linux e Windows, il terzo solo per Windows.

Infatti il primo lancia l'editor di KDE, il secondo lancia NMap indicando cosa scennerizzare, il terzo lancia IE.

Altre differenza tra i comandi è il numero di argomenti.

Nel caso di NMap il primo argomento lancia il programma, il secondo imposta le opzioni.

Possiamo anche usare IE con per aprire direttamente una pagina:

System.Diagnostics.Process.Start("iexplorer.exe", "www.facebook.com");

Se invece vogliamo qualcosa di più concreto dobbiamo usare la classe ProcessStartInfo.

static void LaunchCommandLineApp() { const string ex1 = "C:\\"; const string ex2 = "C:\\Dir"; ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.CreateNoWindow = false; // indica se avviare il processo in una nuova finestra startInfo.UseShellExecute = false; // indica se utilizzare la shell del sistema operativo per avviare il processo startInfo.FileName = "file.exe"; // applicazione o documento da avviare. startInfo.WindowStyle = ProcessWindowStyle.Hidden; startInfo.Arguments = "-f j -o \"" + ex1 + "\" -z 1.0 -s y " + ex2; try { using (Process exeProcess = Process.Start(startInfo)) { exeProcess.WaitForExit(); } } catch { } }

L'esempio è un pò più complesso ma permette di eseguire le operazioni in maniera più personalizzata.