2017-03-09 7 views
0

私は可能な限り簡単なWindowsサービスを持っています。Windowsサービスは、シャットダウン時にOnStop()メソッドを呼び出すことはありません

ローカルシステムのアカウントでサービスが必要です。

SCMからサービスを開始/停止すると、すべて正常に動作し、ログ・テキスト・ファイルには開始イベントと停止イベントがあり、開始イベントと停止イベントがイベント・ビューアーに自動的に表示されます。

しかし、私は再起動またはシャットダウン私のPC(勝利7と10勝で試してみました)サービスがローカルシステムアカウントとして実行する場合、OnStop()メソッドは、と呼ばれることはありません。ネットワークサービスやその他のローカル/ドメインアカウントにアカウントを変更すると、PCの再起動/シャットダウンの前にOnStop()メソッドが呼び出されます。

Windowsサービスコード:

using System.IO; 
using System.ServiceProcess; 

namespace SimplestService 
{ 
    class MyService : ServiceBase 
    { 
     private string path = "<pathtologfile>\\MyServiceLog.txt"; 

     public MyService() 
     { 
      this.ServiceName = "MyService"; 
      this.CanShutdown = true; 
     } 

     protected override void OnStart(string[] args) 
     { 
      using (StreamWriter sw = File.AppendText(path)) 
      { 
       sw.WriteLine("MyService Started."); 
      } 
     } 

     protected override void OnStop() 
     { 
      using (StreamWriter sw = File.AppendText(path)) 
      { 
       sw.WriteLine("MyService Stopped."); 
      } 
     } 

     protected override void OnShutdown() 
     { 
      OnStop(); 
     } 
    } 
} 

とメインエントリ:簡単にするために

using System.ServiceProcess; 

namespace SimplestService 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      ServiceBase.Run(new MyService()); 
     } 
    } 
} 

私は、私もセットアッププロジェクト(MSIインストーラ、としようとしたにも関わらず、サービスを作成するために、SCユーティリティを使用しました)、同じ結果を示しています。

sc create MyService binPath= "<pathtoexe>\SimplestService.exe" 
type= own start= auto DisplayName= Myservice 

答えて

1
私は、OnShutdownメソッドは、OSがシャットダウンされたときに呼び出される調査何から

が、そこに厳しい時間制限がありますが、私は、ローカルシステムサービスがさえているので、この時間制限前に終了していると考えているOSシャットダウン時間が速い。ドメインアカウントがなぜ遅くシャットダウンされるのかを説明します。 Windowsはこれを処理するPreShutdownイベントを導入しました。 下記のリンクを試すと、これに関するさらに詳しい情報があります https://www.atomia.com/2011/11/16/how-to-process-the-preshutdown-event-in-a-managed-windows-service/

関連する問題