当查找使用参数而不是硬编码字符串时,C# ServiceController 找不到服务

C# ServiceController not finding service when lookup uses parameter instead of hardcoded string

我在本地计算机上查找服务 运行 时遇到了一些问题,但只有当我使用参数字符串而不是硬编码字符串(我添加它来调试问题)时才会出现问题。

我的方法是这样的:

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”的此代码的结果:

service = null

test = System.ServiceProcess.ServiceController object with the MongoDB service

编辑: 使用以下比较告诉我字符串不相等:

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

方法本身看起来没问题,你解析的参数有问题,好好看看你到底在方法中放了什么。尝试使用 serviceName.Trim(),字符串可能会对 and/or 之前的空白字符变得棘手。

您还可以在方法内设置断点并检查 serviceName 包含的内容。