2010-03-29 2 views
6

Допустим, что я пытаюсь создать новый процесс с помощью следующего кода:Получение PID процесса, созданного в C#

System.Diagnostics.Process p = new System.Diagnostics.Process(); 
p.StartInfo.WorkingDirectory = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase); 
p.StartInfo.FileName = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + "\\AwesomeFile.exe"; 
p.StartInfo.Arguments = "parameter1 parameter2"; 
p.StartInfo.CreateNoWindow = true; 
p.Start(); 

и справа в следующей строке, я постараюсь, чтобы получить PID этого процесса с помощью следующей строки:

MessageBox.Show(p.Id); 

Эта линия не дает мне «нет процесс связан с этим объектом.» ошибка. Любая идея о том, почему эта ошибка возникает?

ответ

3

Сделайте это System.Diagnostics.Process.GetProcessesByName ("processname") [0] .Id.

+0

Благодарим за отзыв. Есть ли способ идентифицировать разные процессы с тем же именем? Допустим, что у меня два процесса iexplore, оба изначально выполнялись с разными URL-адресами в качестве параметров. Как я узнаю, какой из них в массиве? – screenshot345

+0

Я заметил эту команду: System.Diagnostics.Process.GetProcessesByName («ProcessName») [0] .StartInfo , который включает параметр аргумент, который был бы большим, но это оказывается пустой на файл, который не был выполненный C#. Есть ли способ исправить это? – screenshot345

10

Проверьте возвращаемое значение Process.Start. В некоторых случаях Process.Start может возвращать false, и в этом случае идентификатор не будет связан с ним.

Смежные вопросы