[vb.net] come eseguire un'istruzione DOS e riversarne l'output in un t...

venerdì 31 agosto 2007 - 09.53

Cyber-Bix Profilo | Newbie

Ciao a tutti,
questo è il mio primo post. Mi chiamo Matteo e sono un programmatore principiante di VB.net

Ecco il mio problema:
sto creando un programma che consenta di monitorare lo stato dei sistemi della mia azienda. Per monitorare le linee di comunicazione con l'esterno mi è stato suggerito di utilizzare l'istruzione DOS "TRACERT". Il fatto è che questa istruzione non è presente in .net come invece lo è invece "Ping".
Ho provato ad eseguirla tramite la classe process.start ma non riesco ad ottenere nessun parametro utile (restituisce solo l'ID del processo). Allora ho cercato di aggiungere il parametro ">C:\Tracert.txt" per cercare di riversare l'output del tracert in un TXT, ma il comando non funziona più. Ecco come l'ho scritta:

System.Diagnostics.Process.Start("c:\windows\system32\tracert.exe", Controllo.Item("IndirizzoIP") + " >C:\Tracert.txt")

Controllo.Item("IndirizzoIP") contiene l'indirizzo IP da tracciare

Potete aiutarmi a creare un'istruzione che lanci il comando tracert e che riversi il risultato in un txt? Cioè in pratica quello che si otterrebbe in DOS facendo "tracert (indirizzo IP) >C:\Tracert.txt.

Grazie in anticipo per l'aiuto.

Ciciu Profilo | Senior Member

Ciao.
Purtroppo non sono molto ferrato in VB, ma Ti posso postare un esempio di PING in c# :


string tArguments = "servername";
ProcessStartInfo ProcInfo = new ProcessStartInfo("ping", tArguments);
ProcInfo.RedirectStandardOutput = true;
ProcInfo.UseShellExecute = false;

Process p = Process.Start(ProcInfo);
TextReader tr = p.StandardOutput;
string tOutput = tr.ReadToEnd();
tr.Close();

Console.WriteLine(tOutput);
Console.ReadKey();

Questo codice esegue il ping di servername e Ti restituisce l'output nella stringa tOutput. E' facilmente adattabile a qualunque esigenza, e non credo avrai problemi a convertirlo in VB.

Ciao - FabioG
Fabio G

mrstock Profilo | Newbie

>Allora ho cercato di aggiungere il parametro ">C:\Tracert.txt"
>per cercare di riversare l'output del tracert in un TXT, ma il
>comando non funziona più. Ecco come l'ho scritta:
>
>System.Diagnostics.Process.Start("c:\windows\system32\tracert.exe", Controllo.Item("IndirizzoIP") + " >C:\Tracert.txt")

System.Diagnostics.Process.Start("c:\windows\system32\tracert.exe " & Controllo.Item("IndirizzoIP") &" > C:\Tracert.txt")

Presta attenzione agli spazi e all' "&" al posto della virgola e del "+". ( sinceramente così su due piedi non ricordo se va usato "&" o "+" )

Ciao
_______________________________________________________________________

Immaginate il numero dei messaggi di marcovivio ... se scrivesse solo quello che sa.

Cyber-Bix Profilo | Newbie

la stringa che hai inviato non funziona, da "file non trovato". La virgola va usata per separare il comando dagli argomenti infatti se scrivo:

System.Diagnostics.Process.Start("c:\windows\system32\tracert.exe", Controllo.Item("IndirizzoIP"))

esegue l'istruzione correttamente




P.S.: ho creato due Threads per errore, discutiamo in uno solo...

mrstock Profilo | Newbie

>La virgola va usata per separare il comando dagli argomenti ...

Su questo siamo d'accordo, ma passando un'unica stringa completa di argomenti e relativi spazi dovrebbe funzionare ( almeno in C funziona ).

Ad ogni modo appena riesco a mettere le mani su un pc con VB installato faccio due prove e poi ti dico.

Edito ... questo fa al caso tuo :

Dim p As New Process, str As String
p.StartInfo.UseShellExecute = False
p.StartInfo.FileName = "c:\windows\system32\tracert.exe"
p.StartInfo.Arguments = Controllo.Item("IndirizzoIP")
p.StartInfo.RedirectStandardOutput = True
p.Start()
str = p.StandardOutput.ReadToEnd()
p.WaitForExit()

In questo modo avrai il redirect dell'output del comando tracert all'interno della variabile str.

In alternativa puoi creare un file batch che effettua il tracert su file di testo e che accetta come argomento l'ip, in questo modo potresti utilizzare la tua prima versione di codice.

Ciao

_______________________________________________________________________

Immaginate il numero dei messaggi di marcovivio ... se scrivesse solo quello che sa.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5