Home C# - Asp.NET Eseguire comandi di sistema con C#
Eseguire comandi di sistema con C#
Programmazione & Co.
Domenica 04 Dicembre 2011 10:33

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.

Ultimo aggiornamento Domenica 04 Dicembre 2011 10:56