Quiero usar C# para llamar al comando netstat -a para mostrarlo en un formulario. ¿Puedes darme el código fuente completo?
delegado público void DelReadErrOutput(resultado de cadena);
clase parcial pública Form1: Formulario
{
// 2. Definir eventos delegados
evento público DelReadStdOutput ReadStdOutput;
evento público DelReadErrOutput ReadErrOutput;
form1 público()
{
InicializarComponente();
Init()
}
Init privado vacío()
{
//3. Registra la función correspondiente para el evento delegado
ReadStdOutput = new DelReadStdOutput(ReadStdOutputAction);
ReadErrOutput = new DelReadErrOutput(ReadErrOutputAction) );
}
botón de anulación privada1_Click(remitente del objeto, EventArgs e)
{
// Inicia el proceso para ejecutar el comando correspondiente, en este caso ping.
// No pude obtener el resultado con -a, pero probé -an
RealAction("NETSTAT", "-an");
}
private void RealAction(string StartFileName, string StartFileArg);
{
// Inicia el proceso para ejecutar el comando correspondiente, en este caso ping .
CmdProcess.StartInfo.FileName = StartFileName; // Comando
CmdProcess.StartInfo.Arguments = StartFileArg; // Parámetros
CmdProcess.StartInfo.CreateNoWindow = true ; // No crear una nueva ventana
CmdProcess.StartInfo.UseShellFile = @"C:\indows\System32";
CmdProcess.StartInfo.FileName = StartFileName; p>
CmdProcess.StartInfo.Arguments = StartFileArg; // Parámetro WindowStyle = ProcessWindowStyle.Hidden;
CmdProcess.OutputDataReceived = new DataReceivedEventHandler(p_OutputDataReceived); ErrorDataReceived = new DataReceivedEventHandler(p_ErrorDataReceived);
CmdProcess.StartInfo.RedirectStandardError = true; // Salida de error de redirección.
CmdProcess.BeginOutputReadLine();
CmdProcess.BeginErrorReadLine();
// Si los comentarios están activados, el comando se ejecutará de forma sincrónica, en este caso. Por ejemplo, ejecute el comando de forma asincrónica con el evento Exited.
// CmdProcess.WaitForExit();
}
private void p_OutputDataReceived(remitente del objeto, DataReceivedEventArgs e)
{ p> p>
if (e.Data ! = null)
{
// 4. Llamada asincrónica, es necesario llamar
a esto. Invocar(ReadStdOutputEventArgs )Invocar(ReadStdOutput, nuevo objeto[] { e.Data "ss " e.Data.Length}
}
}
}
p>private void p_ErrorDataReceived(objeto remitente, DataReceivedEventArgs e)
{
if (e.Data !Data ! = null)
{
this.Invoke(ReadErrOutput, nuevo objeto[] { e.Data }
}
}
}
private void ReadStdOutputAction(resultado de cadena)
{
this.Invoke(ReadErrOutput, new object[] { e.Data }); p>
}
datos !textBoxShowStdRet.AppendText(resultado "\r\n");
}
}
privado void ReadErrOutputAction(resultado de cadena)
{
this.textBoxShowStdRet.AppendText(resultado "\r\n");
}