Вы можете отловить ошибку времени выполнения как нарушение прав доступа, если переопределите обработчик исключений по умолчанию, вызывающий SetUnhandledExceptionFilter (это функция win32 и, как таковая, не зависит от эмуляции библиотеки C). Этот метод может использоваться для предоставления «мини-дампов» при сбое программы.
Но этот обработчик исключений не будет вызываться, когда вы обычно закрываете свое приложение или когда ваше приложение закрывается из диспетчера задач. В последнем случае Windows вызывает TerminateProcess, это не чистое завершение работы, а принудительное завершение вашей программы.
Я не знаю, какая реализация используется в Firefox, но для сохранения текущих открытых вкладок, скорее всего, будет запущен таймер, и каждый раз, когда он запускается, он сохраняет историю в файл и что-то грязное. знак.
Другими более сложными решениями, позволяющими определить, когда программа закрыта (реализована антивирусом и аналогичными программами), является запуск двух не связанных между собой программ, каждая из которых проверяет, запущена ли другая, и если одна обнаруживает, что другая была закрыта, запустите ее. еще раз.