检查是否有从Windows服务运行的进程

时间:2015-02-24 03:53:05

标签: c# windows service

目前,我正在使用:

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 个答案:

答案 0 :(得分: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()