【发布时间】:2017-09-28 07:44:55
【问题描述】:
我在查找在本地计算机上运行的服务时遇到了一些问题,但只有当我使用参数字符串而不是硬编码字符串(我添加它以调试问题)时。
我的方法是这样的:
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
test = System.ServiceProcess.ServiceController 对象与 MongoDB 服务
编辑: 使用以下比较告诉我字符串不相等:
if (string.Compare(serviceName, "MongoDB", StringComparison.Ordinal) == 0)
{
Console.WriteLine("same string");
}
【问题讨论】:
-
你试过 string.Compare() 吗?并最终添加字符串比较不变的文化?对我来说似乎一样..我现在想知道有什么区别..String.Compare Method (String, String, CultureInfo, CompareOptions)
-
在执行 serviceName.Equals() 以查看它是否匹配“MongoDB”(具有不变的文化)时,它不相等。
-
那很好.. :D 但是如果你只是比较忽略文化也许会起作用?
-
也可以参考Difference between InvariantCulture and Ordinal string comparison这是为了安全起见我通常比较字符串的方式
-
也许可以尝试使用 serviceName.Trim()。您解析的参数有问题,请仔细查看您在方法中实际放入的内容。该方法本身看起来不错。在方法中设置断点并检查字符串方法获取的内容。
标签: c# .net service servicecontroller