Je crois que si vous faites cela, alors le gestionnaire de services pensera que votre service a planté et si l'utilisateur le configure pour un redémarrage automatique, il le fera.
Dans .NET, vous utilisez le ServiceController pour signaler à votre service de s'éteindre. Je m'attends à ce qu'il soit similaire dans Win32 car la plupart de ces choses dans .NET sont juste des wrappers. Désolé, je n'ai pas le code C++ à portée de main pour fermer le service, mais voici le code .NET. Cela vous aidera à trouver les informations dont vous avez besoin, ou trouver les documents dans MSDN.
Ceci provient d'un code de suite de tests, donc le style de vérification d'erreur;) Vous devrez mettre ce code dans un thread afin que le message d'arrêt soit traité.
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;
}
}
}