protected bool RestartServer()
{
try
{
if (ServiceMachineName.Length == 0) { return false; }
LogProvider.WarnFormat("Attempting to restart server monitored by '{0}'.", Name);
var server = new ManagementScope
{
Path = new ManagementPath(FormatServerName(ServiceMachineName)),
Options = {Impersonation = ImpersonationLevel.Impersonate, EnablePrivileges = true}
};
var oQuery = new ObjectQuery("select name from Win32_OperatingSystem");
using (var search = new ManagementObjectSearcher(server, oQuery))
{
using (var items = search.Get())
{
ManagementBaseObject rebootParams;
foreach (ManagementObject item in items)
{
using (rebootParams = item.GetMethodParameters("Win32Shutdown"))
{
rebootParams["Flags"] = REBOOT + FORCE;
rebootParams["Reserved"] = 0;
item.InvokeMethod("Win32Shutdown", rebootParams, null);
}
}
}
}
LogProvider.WarnFormat("Restarted server monitored by '{0}'.", Name);
return true;
}
catch (Exception ex)
{
LogProvider.FatalFormat("Failed to restart server monitored by '{0}'.", ex, Name);
return false;
}
}