目前,我正在使用:
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上。那么,有谁知道如何检查应用程序是否在不同的会话上运行?
答案 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()