Ответ ZeroKelvin работает в консольном приложении Windows 10 x64, .NET 4.6. Для тех, кому не нужно иметь дело с перечислением CtrlType, вот действительно простой способ подключиться к завершению работы фреймворка:
class Program
{
private delegate bool ConsoleCtrlHandlerDelegate(int sig);
[DllImport("Kernel32")]
private static extern bool SetConsoleCtrlHandler(ConsoleCtrlHandlerDelegate handler, bool add);
static ConsoleCtrlHandlerDelegate _consoleCtrlHandler;
static void Main(string[] args)
{
_consoleCtrlHandler += s =>
{
//DoCustomShutdownStuff();
return false;
};
SetConsoleCtrlHandler(_consoleCtrlHandler, true);
}
}
Возвращение FALSE из обработчика говорит платформе, что мы не "обрабатываем" управляющий сигнал, и используется следующая функция обработчика в списке обработчиков для этого процесса. Если ни один из обработчиков не возвращает TRUE, вызывается обработчик по умолчанию.
Обратите внимание, что когда пользователь выполняет выход из системы или завершение работы, обратный вызов не вызывается Windows, а вместо этого немедленно завершается.