目前我有这样的方法:
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()方法.那些不好的例子还是我错过了什么?
您使用的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)