これを行うと、サービス マネージャーはサービスがクラッシュしたと見なし、ユーザーがサービスを自動再起動するように設定した場合は、サービスがクラッシュすると思います。
.NET では、ServiceController を使用して、サービスをシャットダウンするように通知します。.NET のこのようなもののほとんどは単なるラッパーであるため、Win32 でも似ていると思います。申し訳ありませんが、サービスをシャットダウンするための 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;
}
}
}