2013-04-10 6 views
3

Я пытаюсь использовать программу для проверки процесса, если он существует.Почему Process.GetProcessesByName() всегда имеет значение null?

using System; 
using System.Diagnostics; 
using System.ServiceProcess; 

namespace ServProInfo 
{ 
    class Program 
    { 
     public static int IfProcessExist(string processName) 
     { 
      try 
      { 
       Process[] targetProcess = Process.GetProcessesByName(processName); 
       int proLen = targetProcess.Length; 
       if (proLen == 0) 
       { 
        Console.WriteLine("The process does NOT exist or has exited..."); 
        return 0; 
       } 
       Console.WriteLine("The process status is: Running"); 
       return 1; 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex.Message + "\r\n" + ex.StackTrace + "\r\n" + ex.Source); 
       return -1; 
      } 
     } 

     static void Main(string[] args) 
     { 
      string type = args[0]; 
      string name = args[1]; 
      switch (type) 
      { 
       case "p": 
        IfProcessExist(name); 
        break; 
      } 
     } 
    } 
} 

Тем не менее, процесс [] TargetProcess является нулевым во все дни, даже когда я установил ProcessName как имя процесса существуют в.

Как я могу исправить программу?

+0

Можете ли вы привести пример того, как запустить программу? Например: параметры, которые вы передаете программе? –

+0

Я предполагаю, что процесс не найден. Является ли ваш процесс 32-битным процессом, а другой - 64-битным? Это самый распространенный режим отказа. –

+1

Если вы попытаетесь получить процесс с расширением, удалите его, например, попробуйте получить «svchost», а не «svchost.exe» – ilansch

ответ

17

Вы можете попробовать следующее: (отлично работает для меня)

Process[] targetProcess = Process.GetProcessesByName(Path.GetFileNameWithoutExtension(processName)); 
+4

Итак, вы говорите, что вам нужно удалить расширение, чтобы использовать 'GetProcessesByName'? –

+1

Я думаю, что ответ на этот вопрос - да. Если я делаю Process.GetProcessesByName («explorer»), я получаю все экземпляры проводника Windows. – 2013-04-10 10:53:32

1

попробовать это

System.Diagnostics.Process[] p1 = System.Diagnostics.Process.GetProcesses(); 
foreach (System.Diagnostics.Process pro in p1) 
{ 
    if ((pro.ProcessName.ToUpper().Contains("Application Nanme") 
    { 
     //U r Operations 
    } 
} 
Смежные вопросы