Я полагаю, что если вы сделаете это, то менеджер сервисов подумает, что ваш сервис вышел из строя, и если пользователь когда-либо настроит его на автоматический перезапуск, он будет.
В .NET вы используете ServiceController для подачи сигнала на завершение работы вашей службы. Я ожидаю, что это похоже на Win32, так как большая часть этого материала в .NET - просто обертки. Извините, у меня нет кода C ++, удобного для выключения службы, но вот код .NET. Надеемся, что это поможет вам найти необходимую информацию в Google или найти документы в MSDN.
Это из некоторого кода набора тестов, таким образом, стиль проверки ошибок;) Вам нужно поместить этот код в поток, чтобы обработать сообщение о завершении работы.
private void stopPLService( bool close )
{
if ( m_serviceController == null )
{
m_serviceController = new ServiceController( "PLService" );
}
WriteLine( "StopPLService" );
if ( m_serviceController != null )
{
try
{
m_serviceController.Stop();
}
catch
{
// Probably just means that it wasn't running or installed, ignore
}
// Wait up to 30 seconds for the service to stop
try
{
m_serviceController.WaitForStatus( ServiceControllerStatus.Stopped, new TimeSpan( 0, 0, 30 ) );
}
catch ( System.ServiceProcess.TimeoutException )
{
Assert.Fail( "Timeout waiting for PLService to stop" );
}
catch
{
// Not installed, we only care in the start
}
if ( close )
{
m_serviceController.Close();
m_serviceController = null;
}
}
}