c# - 我应该在 ServiceController 上调用 Close() 吗?

标签 c# .net

目前我有这样的方法:

    private bool IsMyServiceRunning(string serviceName)
    {
        if (String.IsNullOrEmpty(serviceName))
            throw new InvalidOperationException("ServiceName cannot be null or empty");

        using (var service = new ServiceController(serviceName))
        {
            if (service.Status == ServiceControllerStatus.Running)
                return true;
            else
                return false;
        }
    }

这是使用 ServiceController 类的正确方法吗?

我问的原因是我看到的所有示例在完成使用后都不会调用 Close() 方法。是那些不好的例子还是我遗漏了什么?

最佳答案

您正在使用带有 using 语句的 ServiceController。这将在 ServiceController 上调用 Dispose,这与显式调用 Close() 相同。

因此在您的情况下,无需再次调用 Close。

如果没有 using 语句,则需要在 ServiceController 上调用 Close() 或 Dispose(),因为它使用了需要释放的非托管资源。否则你会发生内存泄漏。

ServiceController service = null;

try {
  service = new ServiceController(serviceName);

  if (service.Status == ServiceControllerStatus.Running) {
    return true;
  }
  else {
    return false;
  }
}
finally{
  if (service != null) {
    service.Close(); // or service.Dispose();
  }
}

关于c# - 我应该在 ServiceController 上调用 Close() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15158734/

相关文章:

.net - .NET 4.0 不包含 .NET 2.0 吗?

c# - 当配置中存在配置行时,Nhibernate.Util 导致 ProxyFactoryFactoryNotConfiguredException

c# - 运行 child_process.execFile 后 uglify 崩溃

关闭表单时出现 C# ArgumentOutOfRangeException

c# - AutoMapper DynamicMap 不工作

c# - 使用扩展方法中定义的查询进行单元测试

c# - C# 和 JavaScript 正则表达式之间的区别?

c# - 注册定时器流逝事件

使用 Visual Studio 2012 创建的 C# Windows 窗体应用程序无法在 Windows XP 上运行

c# - 仅在“编辑并继续”中出现错误 CS7038(无法发出模块)