Если программе .net не удается явно установить код выхода до завершения (вызывая Environment.Exit()
/Appliation.Current.Shutdown()
/...), каков код выхода для этого процесса?
Нормальное завершение всегда приводит к нулю кода выхода, и каковы другие возможные случаи?
В соответствии с этим ответом к соответствующему вопросу Получение ExitCode из обработчика исключений от Hans Passant: "if программа умирает при исключении, тогда ее код выхода обычно совпадает с исходным кодом ошибки исключения".
Таким образом, исключение uncaugth может сжать код выхода. Является ли этот всегда случай, и является ли исходный код ошибки исключения всегда отличным от нуля и в определенном диапазоне?
Существуют ли другие обстоятельства, в которых инфраструктура .net или Windows могут автоматически устанавливать другой код выхода, например, какой-либо связанный с исключениями сбой (возможно ли это?) или принудительная задача убить?
Иными словами, могу ли я определить по коду выхода, прекращена ли программа каким-либо ненормальным способом или нет?
Или если код выхода из нуля может произойти и в некоторых аномальных случаях, могу ли я включить Environment.Exit(somevalue)
во все обычные пути завершения для программы и убедиться, что этот код выхода никогда не может произойти в случае сбоя?
Мотивация:
Поскольку не все исключения являются захватывающими без серьезных обходных решений, и поскольку могут возникнуть другие причины внезапного прекращения программы, отличные от неперехваченных исключений, убедитесь, что все пути кода вызвали Environment.Exit() не является возможным. Вот почему меня интересует определение того, можно ли использовать код выхода, чтобы достоверно определить, нормально ли вышла программа.