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

Ste*_* S. 3 .net c#

目前我有这样的方法:

    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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

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

我问的原因是我看到的所有示例都没有在使用它时调用Close()方法.那些不好的例子还是我错过了什么?

Jeh*_*hof 6

您使用的ServiceController是a using-statement.这将调用DisposeServiceController,这与显式调用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();
  }
}
Run Code Online (Sandbox Code Playgroud)