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");
}
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
Lorsque vous effectuez un serviceName.Equals() pour voir s'il correspond à "MongoDB" (avec la culture invariante) ce n'est pas égal. – Jeroen
c'est gentil ..: D mais si vous venez de comparer ingnoring la culture va peut-être travailler? – rmjoia