Получение предыдущего кода выхода приложения в Windows - PullRequest
0 голосов
/ 15 февраля 2012

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

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

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

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

Ответы [ 2 ]

1 голос
/ 15 февраля 2012

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

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

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

1 голос
/ 15 февраля 2012

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

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

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

...