Я считаю, что если вы это сделаете, менеджер службы подумает, что ваш сервис разбился, и если пользователь когда-либо настраивает его на автоматический перезапуск, он будет.
В .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;
}
}
}