Не срабатывают события на закрытие консольного приложения

Не срабатывает

AppDomain.CurrentDomain.ProcessExit += (s, e) =>
{
   File.WriteAllText("test.txt", "ddasdasdada");
};

Консольное приложение Net Framework 4.0
Пробовал так же остальные от сюда


Так же попробовал так:

private const int WM_CLOSE = 0x0010;
protected override void WndProc(ref Message m)
{
   if (m.Msg == WM_CLOSE)
   {
      File.WriteAllText(Path.Combine(Environment.CurrentDirectory, "xxx.txt"), "work");
   }
   base.WndProc(ref m);
}

К сожалению не дало результата


Ответы (1 шт):

Автор решения: GooliveR

Решено при помощи SetConsoleCtrlHandler


class Program
{
    // https://docs.microsoft.com/en-us/windows/console/setconsolectrlhandler?WT.mc_id=DT-MVP-5003978
    [DllImport("Kernel32")]
    private static extern bool SetConsoleCtrlHandler(SetConsoleCtrlEventHandler handler, bool add);

    // https://docs.microsoft.com/en-us/windows/console/handlerroutine?WT.mc_id=DT-MVP-5003978
    private delegate bool SetConsoleCtrlEventHandler(CtrlType sig);

    private enum CtrlType
    {
        CTRL_C_EVENT = 0,
        CTRL_BREAK_EVENT = 1,
        CTRL_CLOSE_EVENT = 2,
        CTRL_LOGOFF_EVENT = 5,
        CTRL_SHUTDOWN_EVENT = 6
    }

    static void Main(string[] args)
    {
        // Register the handler
        SetConsoleCtrlHandler(Handler, true);

        // Wait for the event
        while (true)
        {
            Thread.Sleep(50);
        }
    }

    private static bool Handler(CtrlType signal)
    {
        switch (signal)
        {
            case CtrlType.CTRL_BREAK_EVENT:
            case CtrlType.CTRL_C_EVENT:
            case CtrlType.CTRL_LOGOFF_EVENT:
            case CtrlType.CTRL_SHUTDOWN_EVENT:
            case CtrlType.CTRL_CLOSE_EVENT:
                Console.WriteLine("Closing");
                File.WriteAllText(Path.Combine(Environment.CurrentDirectory, "xxx.txt"), "work");
                Environment.Exit(0);
                return false;

            default:
                return false;
        }
    }
}
→ Ссылка