当查找使用参数而不是硬编码字符串时,C# ServiceController 找不到服务
C# ServiceController not finding service when lookup uses parameter instead of hardcoded string
我在本地计算机上查找服务 运行 时遇到了一些问题,但只有当我使用参数字符串而不是硬编码字符串(我添加它来调试问题)时才会出现问题。
我的方法是这样的:
public bool CheckIfServiceIsRunning(string serviceName)
{
try
{
var services = ServiceController.GetServices();
var service = services.FirstOrDefault(s => s.DisplayName == serviceName);
var test = services.FirstOrDefault(s => s.DisplayName == "MongoDB");
if (service == null)
{
return false;
}
return service.Status.Equals(ServiceControllerStatus.Running);
}
catch (InvalidOperationException ex)
{
Log.Info(ex.Message);
throw new InvalidOperationException(ex.Message);
}
}
运行 带有参数“MongoDB”的此代码的结果:
service = null
test = System.ServiceProcess.ServiceController object with the MongoDB service
编辑:
使用以下比较告诉我字符串不相等:
if (string.Compare(serviceName, "MongoDB", StringComparison.Ordinal) == 0)
{
Console.WriteLine("same string");
}
方法本身看起来没问题,你解析的参数有问题,好好看看你到底在方法中放了什么。尝试使用 serviceName.Trim()
,字符串可能会对 and/or 之前的空白字符变得棘手。
您还可以在方法内设置断点并检查 serviceName
包含的内容。
我在本地计算机上查找服务 运行 时遇到了一些问题,但只有当我使用参数字符串而不是硬编码字符串(我添加它来调试问题)时才会出现问题。
我的方法是这样的:
public bool CheckIfServiceIsRunning(string serviceName)
{
try
{
var services = ServiceController.GetServices();
var service = services.FirstOrDefault(s => s.DisplayName == serviceName);
var test = services.FirstOrDefault(s => s.DisplayName == "MongoDB");
if (service == null)
{
return false;
}
return service.Status.Equals(ServiceControllerStatus.Running);
}
catch (InvalidOperationException ex)
{
Log.Info(ex.Message);
throw new InvalidOperationException(ex.Message);
}
}
运行 带有参数“MongoDB”的此代码的结果:
service = null
test = System.ServiceProcess.ServiceController object with the MongoDB service
编辑: 使用以下比较告诉我字符串不相等:
if (string.Compare(serviceName, "MongoDB", StringComparison.Ordinal) == 0)
{
Console.WriteLine("same string");
}
方法本身看起来没问题,你解析的参数有问题,好好看看你到底在方法中放了什么。尝试使用 serviceName.Trim()
,字符串可能会对 and/or 之前的空白字符变得棘手。
您还可以在方法内设置断点并检查 serviceName
包含的内容。