Search code examples
c#commandsystem.diagnostics

Executing netstat from C# app returns "File Not Found" error


I am trying to execute netstat command from my C# code and get "File Not Found" error. Do I have to specify where "netstat.exe" is?

If so, how would I do it if (hypothetically) netstat and findstr are in two different folders?

    Process cmd = new Process();
    cmd.StartInfo.FileName = "netstat -a | findstr 5840";
    cmd.StartInfo.RedirectStandardInput = true;
    cmd.StartInfo.RedirectStandardOutput = true;
    cmd.StartInfo.CreateNoWindow = true;
    cmd.StartInfo.UseShellExecute = false;

    try
    {
        cmd.Start();
    }
    catch (System.ComponentModel.Win32Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
    cmd.StandardInput.Flush();
    cmd.StandardInput.Close();
    cmd.WaitForExit();
    StreamReader reader = cmd.StandardOutput;
    string output = reader.ReadToEnd();
    Console.WriteLine(output);

This is what fixed the problem:

// create the ProcessStartInfo using "cmd" as the program to be run and "/c " as the parameters.
// /c tells cmd that we want it to execute the command that follows and then exit.
string command = "netstat -a | findstr " + sTCPPort;
ProcessStartInfo procStartInfo =  new ProcessStartInfo("cmd", "/c " + command);

// The following commands are needed to redirect the standard output.
// This means that it will be redirected to the Process.StandardOutput StreamReader.
procStartInfo.RedirectStandardOutput = true;
procStartInfo.UseShellExecute = false;
// Do not create the black window.
procStartInfo.CreateNoWindow = true;
// Now we create a process, assign its ProcessStartInfo and start it
Process proc = new Process();
proc.StartInfo = procStartInfo;
proc.Start();
// Get the output into a string
result = proc.StandardOutput.ReadToEnd();

Solution

  • Without seeing the exact it is hard to know the exact issue, but it looks like you may need to cmd.exe and pass your command to it as an argument.