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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.101938 の関連記事表示

<< 0 >>
■101938  サービスにおいてシャットダウンイベントが発生しない
□投稿者/ kiku -(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}");
    }
    }
    }



親記事 /過去ログ178より / 関連記事表示
削除チェック/

■101939  Re[1]: サービスにおいてシャットダウンイベントが発生しない
□投稿者/ 伝説のカレー -(2023/05/17(Wed) 11:51:11)
記事No.101938 のレス /過去ログ178より / 関連記事表示
削除チェック/

■101940  Re[2]: サービスにおいてシャットダウンイベントが発生しない
□投稿者/ kiku -(2023/05/17(Wed) 12:03:23)
記事No.101938 のレス /過去ログ178より / 関連記事表示
削除チェック/

■101941  Re[3]: サービスにおいてシャットダウンイベントが発生しない
□投稿者/ kiku -(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が呼ばれない的な情報がありました
    >
    > ありがとうございます。
    > 検証してみます。

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

    解決とさせて頂きます。
記事No.101938 のレス / END /過去ログ178より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -