お世話になります。

前回、dllでのフォームが閉じないという内容で投げた質問の続きになります。
その時は、はっきりと原因を突き止めずに質問をしてしまい、大変申し訳ありませんでした。

やろうとしていることは、前回と同じです。
アプリのフォームが立ち上がっているときに、Windowsのシャットダウン、あるいは
再起動をかけるると、アプリの子供のフォームが消えずに残ってしまい、SDや再起動を
妨げてしまうのを解決する方法です。

前回は自分でdllだからかと思ってしまいましたが、回答者様が指摘していただいたとおり、
dll云々は関係ありませんでした。

メインのフォームでやっていることは、タスクトレイ常駐型のアプリを作ろうとしているため、
クローズボタンでは閉じず、タスクトレイのアイコンを右クリックで表示されるコンテキスト
メニューの『閉じる』選択で、Application.Exit()で終了させています。
しかし、SD、及び再起動時に、メインのフォームは最小化するだけ、子供として呼び出した
フォームは閉じずに残り、再起動などを妨げます。また、一度再起動をキャンセルし、
もう一度シャットダウンをしても、やはり同じように残り続けます。
メインフォームは閉じられませんが、再起動を妨げたりしません。

下記に、必要と思われる全コードを掲示します。

再度お手数をおかけすることになると思いますが、何卒ご助力をお願いいたします。


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 ResidentForm
{
    public partial class Form1 : Form
    {
        // 問題の閉じないフォーム。ただ単純なフォームです。
        private Form3 f = new Form3();

        public Form1()
        {
            InitializeComponent();
            SystemEvents.SessionEnding +=
                new SessionEndingEventHandler(SystemEvents_SessionEnding);
        }



        private void tsmiQuit_Click(object sender, EventArgs e)
        {
            notifyIcon1.Visible = false; // アイコンをトレイから取り除く
            Application.Exit(); // アプリケーションの終了
        }

        private void notifyIcon1_DoubleClick(object sender, EventArgs e)
        {
            this.Visible = true; // フォームの表示
            if (this.WindowState == FormWindowState.Minimized)
            {
                this.WindowState = FormWindowState.Normal; // 最小化をやめる
            }
            this.Activate(); // フォームをアクティブにする
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (e.CloseReason != CloseReason.ApplicationExitCall
              // 追記しました
              || e.CloseReason != CloseReason != CloseReason.WindowsShutDown
            )
            {
                e.Cancel = true; // フォームが閉じるのをキャンセル
                this.Visible = false; // フォームの非表示
            }
        }

        //ログオフ、シャットダウンしようとしているとき
        private void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e)
        {
            if (e.Reason == SessionEndReasons.Logoff || e.Reason == SessionEndReasons.SystemShutdown)
            {
                this.f.Hide();
                Application.Exit();
            }
        }

        private void SlideshowBackForm_FormClosed(object sender, FormClosedEventArgs e)
        {
            //イベントを解放する
            SystemEvents.SessionEnding -=
                new SessionEndingEventHandler(SystemEvents_SessionEnding);
        }

        private void Form1_Shown(object sender, EventArgs e)
        {
            this.f.Visible = true;
        }
    }
}

namespace ResidentForm
{
    partial class Form1
    {
        /// <summary>
        /// 必要なデザイナー変数です。
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// 使用中のリソースをすべてクリーンアップします。
        /// </summary>
        /// <param name="disposing">マネージ リソースが破棄される場合 true、破棄されない場合は false です。</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows フォーム デザイナーで生成されたコード

        /// <summary>
        /// デザイナー サポートに必要なメソッドです。このメソッドの内容を
        /// コード エディターで変更しないでください。
        /// </summary>
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
            this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components);
            this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
            this.tsmiQuit = new System.Windows.Forms.ToolStripMenuItem();
            this.contextMenuStrip1.SuspendLayout();
            this.SuspendLayout();
            // 
            // notifyIcon1
            // 
            this.notifyIcon1.ContextMenuStrip = this.contextMenuStrip1;
            this.notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon")));
            this.notifyIcon1.Visible = true;
            this.notifyIcon1.DoubleClick += new System.EventHandler(this.notifyIcon1_DoubleClick);
            // 
            // contextMenuStrip1
            // 
            this.contextMenuStrip1.ImageScalingSize = new System.Drawing.Size(20, 20);
            this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
            this.tsmiQuit});
            this.contextMenuStrip1.Name = "contextMenuStrip1";
            this.contextMenuStrip1.Size = new System.Drawing.Size(115, 30);
            // 
            // tsmiQuit
            // 
            this.tsmiQuit.Name = "tsmiQuit";
            this.tsmiQuit.Size = new System.Drawing.Size(114, 26);
            this.tsmiQuit.Text = "終了";
            this.tsmiQuit.Click += new System.EventHandler(this.tsmiQuit_Click);
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;
            this.ClientSize = new System.Drawing.Size(282, 253);
            this.KeyPreview = true;
            this.Name = "Form1";
            this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);
            this.Shown += new System.EventHandler(this.Form1_Shown);
            this.contextMenuStrip1.ResumeLayout(false);
            this.ResumeLayout(false);

        }

        #endregion
        private System.Windows.Forms.NotifyIcon notifyIcon1;
        private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
        private System.Windows.Forms.ToolStripMenuItem tsmiQuit;
    }
}