Вы можете добиться того же в .NET, используя Process.GetProcessesByName
и затем выводя процесс Id
:
foreach (var p in Process.GetProcessesByName("notepad"))
{
Console.WriteLine(p.Id);
}
В качестве альтернативы, если вы действительно хотите использовать окно cmd и захватить вывод, вы можете создать процесс, который будет запускать cmd.exe
и передать ему командную строку, которую вы хотите выполнить (добавьте /C
в начале, который говорит cmd.exe
закрыть окно cmd после запуска). Вы также хотите RedirectStandardOutput
, что позволяет вам захватывать выходные данные команды, которая была выполнена. Затем вы можете использовать proc.StandardOutput.ReadLine()
для получения каждой строки, которая была возвращена:
var proc = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "cmd.exe",
Arguments = "/C for /f \"tokens=1,2\" %a in " +
"('Tasklist /fi \"imagename eq notepad.exe\" /nh') do @echo %b",
RedirectStandardOutput = true,
UseShellExecute = false,
}
};
proc.Start();
proc.WaitForExit();
while (!proc.StandardOutput.EndOfStream)
{
Console.WriteLine(proc.StandardOutput.ReadLine());
}