2015-02-24 3 views
0

В настоящее время я использую:Проверьте, есть ли процесс, запущенный из службы Windows

private bool IsProcessRunning(string ProcessName) 
{ 
    foreach(Process clsProcess in Process.GetProcesses()) 
    { 
     if(clsProcess.ProcessName.Contains(ProcessName)) 
     { 
      return true; 
     } 
    } 
    return false; 
} 

Этот BOOL возвращает true, если процесс запущен. Это отлично работает в приложении Console/WinForms, но оно не работает, когда я пытаюсь проверить, запущен ли процесс из службы Windows. Как мы все знаем, службы Windows работают на разных SID, чем другие приложения. Итак, кто-нибудь знает, как я могу проверить, работает ли приложение на другом сеансе?

ответ

1

Возможно, вы захотите изучить ServiceController. Я не знаю, может ли это помочь вам?

Ниже приведен пример того, как использовать его

using System.ServiceProcess; 

ServiceController sc = new ServiceController(SERVICENAME); 

switch (sc.Status) 
{ 
    case ServiceControllerStatus.Running: 
    return "Running"; 
    case ServiceControllerStatus.Stopped: 
    return "Stopped"; 
    case ServiceControllerStatus.Paused: 
    return "Paused"; 
    case ServiceControllerStatus.StopPending: 
    return "Stopping"; 
    case ServiceControllerStatus.StartPending: 
    return "Starting"; 
    default: 
    return "Status Changing"; 
} 

Если у вас есть, чтобы получить статус снова, вам придется обновить статус, прежде чем снова проверить

sc.Refresh() 
+0

У меня уже есть код что мне это не нужно. Мне нужно проверить, работает ли другой процесс (любой процесс), а не служба. – TheNeosrb

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