C#でシャットダウンのイベントを受け取って処理を実行する


スポンサーリンク

シャットダウンする直前に処理を走らせる作業を実行したいと考えています。

ProエディションならGroup Policyに記述を追加すればシャットダウンに引っかけてスクリプトを実行することができるのですが、Home Editionだとうまくいきません。
なので、自作スクリプトでなんとかするしかなさそうです。

こんな感じで.NETのプログラムを作ります。
これで出力したexeを走らせておけば大丈夫です。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Win32;

namespace folder_backup
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.Hide();
        }
        private void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e)
        {
            string s = "";
            if (e.Reason == SessionEndReasons.Logoff)
            {
                s = "ログオフしようとしています。";
            }
            else if (e.Reason == SessionEndReasons.SystemShutdown)
            {
                s = "シャットダウンしようとしています。";
            }
            if (MessageBox.Show(s + "\n\nキャンセルしますか?",
                "質問", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                //キャンセルする
                e.Cancel = true;
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            SystemEvents.SessionEnding +=
            new SessionEndingEventHandler(SystemEvents_SessionEnding);
        }
    }

}