ProcessStartInfo psi = new ProcessStartInfo(BatchFile)
Process p = Process.Start(psi)
Почему p.ID
отличается от идентификатора процесса, видимого в WindowsTaskManager
(BatchFile
- это путь к внешней программе с соответствующими параметрами)
ProcessStartInfo psi = new ProcessStartInfo(BatchFile)
Process p = Process.Start(psi)
Почему p.ID
отличается от идентификатора процесса, видимого в WindowsTaskManager
(BatchFile
- это путь к внешней программе с соответствующими параметрами)
Идентификатор процесса имеет смысл, только пока процесс жив. Первое, что нужно проверить, это .HasExited
— если это так, игнорировать идентификатор процесса; это больше не имеет никакого значения.
Есть несколько способов запустить что-то, и у вас не останется процесса, даже если вы все еще видите его на экране:
Я предполагаю, что это связано с тем, что p.ID
– это идентификатор процесса, запускающего пакетный файл, а не идентификатор процесса, запущенного с помощью пакетного файла.
Вы можете запустить исполняемый файл непосредственно с помощью Process.Start
, используя правильную перегрузку
Я предполагаю, что BatchFile — это какой-то файл cmd или bat, который запускает другие процессы один за другим.
Таким образом, в диспетчере задач Windows вы фактически видите идентификаторы тех процессов, которые запускаются пакетным файлом.
Примеры
Если я сделаю это
var p = Process.Start("notepad.exe");
p.Id
будет соответствовать PID
из диспетчера задач.
Однако, если я сделаю это:
var p = Process.Start("test.cmd"); // test.cmd has notepad.exe call inside
p.Id
будет отличаться от PID
, отображаемого в диспетчере задач.
Process p = Process.Start(psi);
? - person Paolo Falabella   schedule 31.05.2011