2017-09-28 3 views
0

Je rencontre des problèmes pour trouver un service s'exécutant sur ma machine locale, mais uniquement lorsque j'utilise la chaîne de paramètres à la place d'une chaîne codée en dur (ajouté pour déboguer le problème).C# ServiceController ne trouve pas de service lorsque la recherche utilise un paramètre au lieu d'une chaîne codée en dur

Ma méthode ressemble à ceci:

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); 
    } 
} 

Les résultats de l'exécution de ce code avec le paramètre "MongoDB":

services = null

Test = System.ServiceProcess Objet .ServiceController avec le service MongoDB

Edit: En utilisant la comparaison suivante me dit les chaînes ne sont pas égaux:

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

avez-vous essayé avec string.Compare()? et finalement en ajoutant la culture invariante comparaison de chaîne? Il me semble la même chose .. Je me demande maintenant quelle peut être la différence .. [String.Compare, méthode (String, String, CultureInfo, CompareOptions)] (https://msdn.microsoft.com/fr-fr /library/cc190529(v=vs.110).aspx) – rmjoia

+0

Lorsque vous effectuez un serviceName.Equals() pour voir s'il correspond à "MongoDB" (avec la culture invariante) ce n'est pas égal. – Jeroen

+0

c'est gentil ..: D mais si vous venez de comparer ingnoring la culture va peut-être travailler? – rmjoia

Répondre

2

La méthode elle-même semble bien, il y a quelque chose de mal avec le paramètre que vous analysez, prenez un bon aperçu ce que vous mettez réellement dans la méthode. Essayez d'utiliser serviceName.Trim(), les chaînes peuvent être difficiles sur les caractères d'espaces avant et/ou après.

Vous pouvez également définir un point d'arrêt à l'intérieur d'une méthode et vérifier ce que contient exactement serviceName.

+0

'-.- Je ne peux pas croire que le problème était des espaces, parce que .. ce serait le premier endroit où je chercherais .. – rmjoia