enum StartServiceResult
{
Success = 0,
AccessDenied = 2,
ServiceAlreadyRunning = 10,
ServiceDisabled = 14
}
/// <returns>error message, if any</returns>
static string StartService(string serviceName)
{
string errMsg = string.Format("Unable to open '{0}' service", serviceName);
string query = string.Format("select * from Win32_Service where Name='{0}'", serviceName);
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
foreach(ManagementObject obj in searcher.Get())
{
uint result = (uint)obj.InvokeMethod("StartService", null);
switch ((StartServiceResult)result)
{
case StartServiceResult.Success:
case StartServiceResult.ServiceAlreadyRunning:
errMsg = null;
break;
case StartServiceResult.ServiceDisabled:
result = (uint)obj.InvokeMethod("ChangeStartMode", new string[] { "Automatic" });
if ((StartServiceResult)result == StartServiceResult.Success)
{
errMsg = StartService( serviceName );
}
else
{
errMsg = string.Format("Error Changing Service Start Mode: ({0})", result);
}
break;
default:
errMsg = string.Format("Error Starting Service: ({0})", result);
break;
}
break;
}
if( errMsg != null )
{
// wait until service's status is Running or time-out
}
return errMsg;
}
{
Success = 0,
AccessDenied = 2,
ServiceAlreadyRunning = 10,
ServiceDisabled = 14
}
/// <returns>error message, if any</returns>
static string StartService(string serviceName)
{
string errMsg = string.Format("Unable to open '{0}' service", serviceName);
string query = string.Format("select * from Win32_Service where Name='{0}'", serviceName);
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
foreach(ManagementObject obj in searcher.Get())
{
uint result = (uint)obj.InvokeMethod("StartService", null);
switch ((StartServiceResult)result)
{
case StartServiceResult.Success:
case StartServiceResult.ServiceAlreadyRunning:
errMsg = null;
break;
case StartServiceResult.ServiceDisabled:
result = (uint)obj.InvokeMethod("ChangeStartMode", new string[] { "Automatic" });
if ((StartServiceResult)result == StartServiceResult.Success)
{
errMsg = StartService( serviceName );
}
else
{
errMsg = string.Format("Error Changing Service Start Mode: ({0})", result);
}
break;
default:
errMsg = string.Format("Error Starting Service: ({0})", result);
break;
}
break;
}
if( errMsg != null )
{
// wait until service's status is Running or time-out
}
return errMsg;
}