当查找使用参数而不是硬编码字符串时,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");
}
答
本身看起来不错的方法,也有一些是错误的参数你解析,采取在一个良好的外观你实际上在方法中加入了什么。尝试使用serviceName.Trim()
,字符串可能会在前/后的空白字符中变得棘手。
您也可以在方法中设置断点并检查serviceName
包含的内容。
+0
'-.-我不能相信问题是空格,因为..这将是我会搜索的第一个地方.. – rmjoia
你试过用string.Compare()吗?并最终添加字符串比较不变文化?这似乎是我一样..我现在想知道可以有什么区别.. [String.Compare方法(字符串,字符串,CultureInfo,CompareOptions)](https://msdn.microsoft.com/en-us /library/cc190529(v=vs.110).aspx) – rmjoia
当做一个serviceName.Equals()来查看它是否与“MongoDB”(使用不变的文化)相匹配时。 – Jeroen
这是很好..:D但如果你只是比较ingnoring文化可能会工作? – rmjoia