“Al salir” para una aplicación de consola

Estoy buscando una manera de activar un fragmento de código cuando una aplicación de consola se cierra manualmente (los usuarios cierran la ventana). He estado intentando con:

AppDomain.CurrentDomain.ProcessExit += new EventHandler(CurrentDomain_ProcessExit); 

pero lo anterior no funciona si se cierra manualmente.

¿Hay alguna forma de usar una llamada .Net para esto o necesito importar el dll Kernel y hacerlo de esa manera?

Necesita enlazar al evento de salida de la consola y no a su proceso.

http://geekswithblogs.net/mrnat/archive/2004/09/23/11594.aspx

Captura la salida de la consola C #

Este código funciona para atrapar al usuario que cierra la ventana de la consola:

 using System; using System.Runtime.InteropServices; class Program { static void Main(string[] args) { handler = new ConsoleEventDelegate(ConsoleEventCallback); SetConsoleCtrlHandler(handler, true); Console.ReadLine(); } static bool ConsoleEventCallback(int eventType) { if (eventType == 2) { Console.WriteLine("Console window closing, death imminent"); } return false; } static ConsoleEventDelegate handler; // Keeps it from getting garbage collected // Pinvoke private delegate bool ConsoleEventDelegate(int eventType); [DllImport("kernel32.dll", SetLastError = true)] private static extern bool SetConsoleCtrlHandler(ConsoleEventDelegate callback, bool add); } 

Cuidado con las restricciones. Debe responder rápidamente a esta notificación, tiene 5 segundos para completar la tarea. Tómate más tiempo y Windows matará tu código sin ceremonias. Y su método se llama asíncronamente en un hilo de trabajo, el estado del progtwig es completamente impredecible, por lo que es probable que sea necesario bloquearlo. Asegúrese de que un aborto no cause problemas. Por ejemplo, al guardar el estado en un archivo, asegúrese de guardar primero en un archivo temporal y use File.Replace ().