C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: サービスにおいてシャットダウンイベントが発生しない


(過去ログ 178 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■101938 / inTopicNo.1)  サービスにおいてシャットダウンイベントが発生しない
  
□投稿者/ kiku (341回)-(2023/05/17(Wed) 10:21:38)

分類:[.NET 全般] 

下記の環境でWindowsサービスを作りました。
 VisualStudio2022
 C#
 .NETFrameWork4.8

デバックビルドをしてできたexeを下記コマンドでサービスに登録しました。
 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\installutil.exe C:\test\sss\WindowsService1.exe

サービスの開始でログ出力されることを確認。
サービスの停止でログ出力されることを確認。
サービスの一時停止でログ出力されることを確認。
サービスの再開でログ出力されることを確認。

手順
1.サービスを手動で開始。ログが出力されることを確認
2.シャットダウンを実施
3.電源ON
4.ログイン
5.ログを確認したところ、下記の状況でした。
  1.シャットダウンイベントが発生していない
  2.開始イベントが発生していない
  3.停止イベントが発生していない
  4.サービスマネージャで確認すると、開始になっている
  5.タイマーイベントは発生している

いろいろイベントが発生しないため、
問題になっているのですが
一番解決しないと困ることは、シャットダウンイベントが発生しないことです。
実はこのサービスは外部と通信する機能を持っていて
シャットダウン時に、外部に対して終了を通知したいのですが
これができなくて困っています。

ちなみに、開始時にスレッド(内部で無限ループ)を生成し、
シャットダウン時にはこのスレッドが強制終了されるはずで
スレッド内で何か例外が発生し、シャットダウンを検知することが
できないか試してみましたが、なぜか検知できませんでした。

どんな方法でも良いので何か手段はありませんでしょうか?


検証用サービスのソースは下記になります。

serviceProcessInstaller1のプロパティ
 Account=LocalSystem
serviceInstaller1のプロパティ
 StartType=Automatic
Service1のプロパティ
 CanPauseAndContinue=True
 CanShutdown=True

    public partial class Service1 : ServiceBase
    {
        private readonly Timer _WatchTimer = new Timer();

        public Service1()
        {
            InitializeComponent();

            _WatchTimer.Elapsed += new ElapsedEventHandler(OnTimer);
            _WatchTimer.Enabled = false;
            _WatchTimer.AutoReset = true;
            _WatchTimer.Interval = 1000;
            _WatchTimer.Enabled = true;
            _WatchTimer.Stop();
        }

        protected override void OnContinue()
        {
            LogWrite("OnContinue");
        }

        protected override void OnPause()
        {
            LogWrite("OnPause");
        }

        protected override void OnShutdown()
        {
            LogWrite("OnShutdown");
        }

        protected override void OnStart(string[] args)
        {
            LogWrite("OnStart");
            _WatchTimer.Start();
        }

        protected override void OnStop()
        {
            LogWrite("OnStop");
            _WatchTimer.Stop();
        }

        protected void OnTimer(object sender, EventArgs e)
        {
            LogWrite("OnTimer");
        }

        private void LogWrite(string message)
        {
            using (StreamWriter streamWriter = new StreamWriter("C:\\test\\A.txt", true))
            {
                streamWriter.WriteLine($"{DateTime.Now} - {message}");
            }
        }
    }




引用返信 編集キー/
■101939 / inTopicNo.2)  Re[1]: サービスにおいてシャットダウンイベントが発生しない
□投稿者/ 伝説のカレー (105回)-(2023/05/17(Wed) 11:51:11)
No101938 (kiku さん) に返信
https://stackoverflow.com/questions/14523192/windows-service-onstop-when-computer-shutdown

Windowsが高速スタートアップになってるとシャットダウン時にサービスのOnShutdownが呼ばれない的な情報がありました
引用返信 編集キー/
■101940 / inTopicNo.3)  Re[2]: サービスにおいてシャットダウンイベントが発生しない
□投稿者/ kiku (342回)-(2023/05/17(Wed) 12:03:23)
No101939 (伝説のカレー さん) に返信
> ■No101938 (kiku さん) に返信
> https://stackoverflow.com/questions/14523192/windows-service-onstop-when-computer-shutdown
>
> Windowsが高速スタートアップになってるとシャットダウン時にサービスのOnShutdownが呼ばれない的な情報がありました

ありがとうございます。
検証してみます。
引用返信 編集キー/
■101941 / inTopicNo.4)  Re[3]: サービスにおいてシャットダウンイベントが発生しない
□投稿者/ kiku (343回)-(2023/05/17(Wed) 12:22:31)
No101940 (kiku さん) に返信
> ■No101939 (伝説のカレー さん) に返信
>>■No101938 (kiku さん) に返信
>>https://stackoverflow.com/questions/14523192/windows-service-onstop-when-computer-shutdown
>>
>>Windowsが高速スタートアップになってるとシャットダウン時にサービスのOnShutdownが呼ばれない的な情報がありました
>
> ありがとうございます。
> 検証してみます。

高速スタートアップを無効にすることで、
シャットダウンイベント、開始イベント共に
発生することを確認しました。

解決とさせて頂きます。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -