RISOLTO Restart networking da programma in C#

Aperto da luciano53, Mercoledì 14 Febbraio 2018, 15:46:12

Discussione precedente - Discussione successiva

luciano53

Salve ho un problema.
Ho fatto un' applicazione con SharpDevelop nella quale devo inserire Retsart Networking da terminale.
Ho creato un file sh con ' sudo /etc/init.d/networking restart' e lanciandolo da terminale va tutto bene.
Provo a richiamarlo da codice con 'System.Diagnostics.Process.Start("/home/user/Scrivania/NetRestart.sh" nessun errore ma non mi esegue quanto voluto.
Ho provato con System.Diagnostics.Process.Start("gnome-terminal");
Mi apre il terminale ma non riesco a inviargli il comando per eseguire il file.
Qualcuno ha un suggerimento da darmi?

nessuno

Non sono affatto sicuro di capire di cosa parli, ma se il comando deve essere eseguito  nel terminale forse hai bisogno di aggiungere una opzione. Tipo -x per esempio.

Se ho detto una scicchezza perdonami... :)

https://www.systutorials.com/docs/linux/man/1-gnome-terminal/

luciano53

Salve e grazie della risposta.
Durante l' esecuzione di un programma compilato in C# mi succede che perdo la connessione alla rete e l' unico modo per ripristinarla è Restart Networking.
Ho creato un file sh che se lo eseguo dal terminale mi funziona benissimo.
Soluzione però non pratica.
Quindi nel mio programma, una volta riconosciuta la mancanza di rete, vorrei eseguire, sempre dal mio codice il Restart.
Non so se ho mirato giusto, ma visto che con System.diagnostic.ProcessStart non mi funzionava, ho iniziato a provare con gnome-terminal il codice che ho inserito è
Process Proc= new Process();
Proc.StartInfo.FilName = "gnome-terminal";
proc.StartInfo.Arguments = "/Home/Scrivania/NetRestart.sh";
proc.StartInfo.UseShellExecute = true;
Proc.Start();

Mi si apre il terminale con il prompt senza esguire niente.
Dove sbaglio?
Stasera proverò ad inserire quanto mi dici -x  o -e che penso debbano essereinseriti negli Arguments.
Comunque grazie



Tony

Citazione di: luciano53 il Giovedì 15 Febbraio 2018, 15:23:22
proc.StartInfo.Arguments = "/Home/Scrivania/NetRestart.sh";
Un appunto.
Sicuro che l'indirizzo /Home/Scrivania/NetRestart.sh sia esatto?
dovrebbe essere, caso mai, /home/utente/Scrivania/NetRestart.sh
Controlla bene il percorso e anche NetRestart.sh
controlla che sia scritto esattamente così.
Cioè, le maiuscole/minuscole non sono indifferenti.
Per il resto quoto nessuno, prova con -x o -e aggiunto al tuo programma di terminale.

Linux non è solo un sistema operativo ma...
"È uno stato mentale, dove prima ti perdi e poi ti ritrovi"
(cit. Point Break).
Il mio pc.

luciano53

Grazie Tony era quello.
Ora mi apre il file ma logicamente mi chiede la password per eseguirlo.
Come posso inserilrla nel Comando?

Tony

Lo script dovrebbe essere modificato così
echo la-tua-password | sudo -S /etc/init.d/networking restart

Linux non è solo un sistema operativo ma...
"È uno stato mentale, dove prima ti perdi e poi ti ritrovi"
(cit. Point Break).
Il mio pc.

luciano53

Non ci sto capendo nulla!
Ho scritto

Process Proc = new Process();
Proc.StartInfo.FileName = "gnome-terminal";
Proc.StartInfo.Arguments = "echo 0000 | sudo -S /etc/init.d/networking restart";
Proc.StartInfo.UseShellExecute = true;
Proc.StartInfo.RedirectStandardOutput = false;
Proc.Start();

Cosi apre il terminale ma mi risponde che impossibile fare analisi -S non riconosciuto.
Cosa sbaglio.

Tony

No. Non ci siamo capiti.
Nel primo post hai detto che hai creato un file sh con 'sudo /etc/init.d/networking restart'
È quello che devi modificare con
echo 0000 | sudo -S /etc/init.d/networking restart

Linux non è solo un sistema operativo ma...
"È uno stato mentale, dove prima ti perdi e poi ti ritrovi"
(cit. Point Break).
Il mio pc.

luciano53

Grazie Tony. Funziona!
Scusa ma dopo tante ore di prove sarebbe meglio staccare un po e riprendere a mente fresca.