2012-02-15 2 views
0

Есть ли способ узнать, что последний код выхода приложения при последнем запуске?Получение предыдущего кода выхода приложения на Windows

Я хочу проверить, не было ли приложение с выходом с кодом возврата в последний раз (что означает ненормальное завершение в моем случае). И если да, выполните некоторые проверки и, возможно, исправьте/очистите ранее сгенерированные данные.

Поскольку некоторые приложения делают это (они дают предупреждение и спрашивают, хотите ли вы на сей раз работать в безопасном режиме) Я думаю, что Windows может сказать мне это.

А если нет, то в чем лучшая практика этого? Установка флага в файл или что-то, когда приложение завершено правильно и проверьте, что в следующий раз он будет выполнен?

ответ

1

Нет, нет постоянной записи кода выхода. Он существует только до тех пор, пока дескриптор процесса остается открытым. И возвращается GetExitCodeProcess(), ему нужен этот дескриптор. Как только последний дескриптор закрыт, этот код выхода ушел навсегда. Один из методов - это небольшое загрузочное приложение, которое запускает процесс и удерживает дескриптор. Затем он может также делать другие полезные вещи, такие как отправка предупреждений, ведение журнала, очистка частичных файлов или запись мини-аварий аварий. Используйте WaitForSingleObject(), чтобы обнаружить выход из процесса.

К тому же, вы определенно хотите выйти из кода, чтобы обозначить противоположную вещь. Нуль всегда является значением «нормального выхода». Это поможет вам обнаружить жесткие сбои. Код выхода всегда отличен от нуля, когда Windows принудительно завершает приложение, устанавливает код исключения.

Есть и другие способы: вы действительно можете создать файл или раздел реестра, который указывает, что процесс запущен, и проверить это, когда он начнет резервное копирование. Единственное реальное осложнение заключается в том, что вам нужно сделать что-то значимое, когда пользователь дважды запускает программу. Это сложная проблема для решения, такие приложения обычно являются приложениями с одним экземпляром. Вы используете именованный мьютекс, чтобы обнаружить, что экземпляр программы уже запущен. Отпечаток свидетельств с идентификатором процесса и временем начала работы.

1

Нет стандартного способа сделать это на платформе Windows.

Самый простой способ справиться с этим делом - это ввести значение в реестр и очистить его, когда программа выйдет.

Если значение все еще присутствует при запуске программы, оно неожиданно завершается. Поместите значение в HKCU/Software //, чтобы убедиться, что у вас есть достаточные права (в этом случае значение будет для каждого пользователя).

Смежные вопросы