2017-09-28 23 views
0

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

回答

2

本身看起來不錯的方法,也有一些是錯誤的參數你解析,採取在一個良好的外觀你實際上在方法中加入了什麼。嘗試使用serviceName.Trim(),字符串可能會在前/後的空白字符中變得棘手。

您也可以在方法中設置斷點並檢查serviceName包含的內容。

+0

'-.-我不能相信問題是空格,因爲..這將是我會搜索的第一個地方.. – rmjoia

相關問題