我在找到在本地機器上運行的服務時遇到了一些問題,但只有當我使用參數字符串而不是硬編碼字符串時(我添加到調試問題)。當查找使用參數而不是硬編碼字符串時,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");
}
你試過用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