私は可能な限り簡単な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