当查找使用参数而不是硬编码字符串时,C#ServiceController找不到服务

问题描述:

我在找到在本地机器上运行的服务时遇到了一些问题,但只有当我使用参数字符串而不是硬编码字符串时(我添加到调试问题)。当查找使用参数而不是硬编码字符串时,C#ServiceController找不到服务

我的方法是这样的:

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的” 运行此代码的结果:

服务 = NULL

测试 = System.ServiceProcess .ServiceController对象与MongoDB服务

编辑: 使用下面的对比告诉我的字符串不相等:

if (string.Compare(serviceName, "MongoDB", StringComparison.Ordinal) == 0) 
{ 
    Console.WriteLine("same string"); 
} 
+0

你试过用string.Compare()吗?并最终添加字符串比较不变文化?这似乎是我一样..我现在想知道可以有什么区别.. [String.Compare方法(字符串,字符串,CultureInfo,CompareOptions)](https://msdn.microsoft.com/en-us /library/cc190529(v=vs.110).aspx) – rmjoia

+0

当做一个serviceName.Equals()来查看它是否与“MongoDB”(使用不变的文化)相匹配时。 – Jeroen

+0

这是很好..:D但如果你只是比较ingnoring文化可能会工作? – rmjoia

本身看起来不错的方法,也有一些是错误的参数你解析,采取在一个良好的外观你实际上在方法中加入了什么。尝试使用serviceName.Trim(),字符串可能会在前/后的空白字符中变得棘手。

您也可以在方法中设置断点并检查serviceName包含的内容。

+0

'-.-我不能相信问题是空格,因为..这将是我会搜索的第一个地方.. – rmjoia