Se un programma .net non riesce a impostare esplicitamente il codice di uscita prima di terminare (chiamando Environment.Exit()
/Appliation.Current.Shutdown()
/...), qual è il codice di uscita per tale processo?Quali codici di uscita possono avere un programma .net quando Environment.Exit() non viene utilizzato?
Una terminazione normale risulta sempre in codice di uscita zero e quali sono gli altri casi possibili?
Secondo this answer alla relativa domanda Getting ExitCode From Exception Handler di Hans Passant: "se un programma muore un'eccezione quindi il codice di uscita è normalmente uguale al codice di errore eccezione sottostante".
Quindi un'eccezione uncaugth può fondere il codice di uscita. È questo il sempre il caso e il codice di errore di eccezione di sottostanti è sempre garantito per essere diverso da zero e in un intervallo specifico?
Ci sono altre circostanze in cui il framework .net o Windows possono impostare automaticamente un altro codice di uscita, come ad esempio un arresto anomalo non relativo alle eccezioni (è possibile?) O un arresto forzato?
Per dirla in altro modo, è possibile determinare in base al codice di uscita se il programma è terminato in modo anomalo o no?
Oppure, se in alcuni casi anormali si verifica un codice di uscita pari a zero, è possibile includere uno Environment.Exit(somevalue)
in tutti i normali percorsi di terminazione per un programma e accertarsi che questo codice di uscita non possa mai verificarsi in caso di arresto anomalo?
Motivazione:
Dal not all exeptions are catchable senza soluzioni alternative gravi, e dal momento che ci possono essere altre cause di cessazione improvvisa programma diverso da excpetions non gestite fanno, facendo in modo che tutti i percorsi di codice di chiamata Environment.Exit() non è alwas possibile. Questo è il motivo per cui sono interessato a determinare se il codice di uscita può essere usato per determinare in modo affidabile se un programma è uscito normalmente.
Ho aggiunto le differenze tra la mia domanda e il duplicato proposto. Mentre la seconda risposta aiuta anche con una parte della mia domanda, non risponde completamente, e la domanda stessa è completamente diversa. – HugoRune
Suggerimento tangenziale: abilita Segnalazione errori di Windows, con l'opzione per creare minidump abilitati. In questo modo non hai solo un codice di uscita, ma anche i record delle eccezioni e gli stack parziali che puoi passare attraverso un debugger. (Come WinDBG che utilizza il debugger SOS.) Anche senza minidump WER riceve alcune informazioni sul messaggio di errore stesso. Per un'applicazione interna, è anche possibile configurare un server per l'invio automatico dei rapporti di arresto anomalo. Questa [pagina] (https://technet.microsoft.com/en-us/library/cc709644.aspx) su TechNet offre una buona panoramica. – theB
Il codice di uscita è piuttosto inutile IMHO. Maggiori informazioni qui: http://stackoverflow.com/questions/4344923/processo-exit-code-when-process-is-killed-forcibly –