2015-02-24 59 views
0

目前運行的過程中,我使用:檢查是否有從Windows服務

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

如果進程正在運行,這個布爾返回true。這在控制檯/ WinForms應用程序中正常工作,但當我試圖檢查某個進程是否從Windows服務運行時,它不起作用。衆所周知,Windows服務與其他應用程序在不同的SID上運行。那麼,有沒有人知道如何檢查應用程序是否在不同的Session上運行?

回答

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 2015-02-24 15:12:04

相關問題