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;
}