gpt4 book ai didi

c# - 当不使用 Environment.Exit() 时,.net 程序可以有哪些退出代码?

转载 作者:可可西里 更新时间:2023-11-01 07:58:11 26 4
gpt4 key购买 nike

如果 .net 程序未能在终止前明确设置退出代码(通过调用 Environment.Exit()/Appliation.Current.Shutdown()/.. .),该进程的退出代码是什么?

正常终止是否总是导致退出代码为零,其他可能的情况是什么?

根据 this answer相关问题Getting ExitCode From Exception Handler作者 Hans Passant:“如果一个程序因异常而死,那么它的退出代码通常与底层异常错误代码相同”。

所以一个未被发现的异常可以改变退出代码。这种情况是否总是,底层异常错误代码是否始终保证不为零,并且在特定范围内?

在其他情况下,.net 框架或 Windows 是否可以自动设置另一个退出代码,例如一些非异常相关的崩溃(这可能吗?),或强制任务终止?

换句话说,是否可以通过退出码判断程序是否异常终止?
或者,如果在某些异常情况下也可能发生零退出代码,我是否可以在程序的所有正常终止路径中包含 Environment.Exit(somevalue),并确保此退出代码可以永远不会在崩溃的情况下发生?


动机:
not all exeptions are catchable没有严格的解决方法,并且由于除了未捕获的异常之外可能还有其他原因导致程序突然终止,因此确保所有代码路径调用 Environment.Exit() 并非总是可能的。这就是为什么我有兴趣确定是否可以使用退出代码来可靠地判断程序是否正常退出。

最佳答案

then its exit code is normally the same as the underlying exception error code

6 个月后,您应该对正常适用有了一定的信心。可能工作得很好,你只是不能在这里获得保修。导致进程终止的不仅仅是未处理的异常,而且您永远无法确定当进程因异常而死亡时运行的代码始终是相同的。

有太多的东西想要参与其中,而且并不总是质量最好的。排在首位的肯定是反恶意软件,那里有很多 cr*pware,您永远不知道会遇到什么。最近的 Avast 灾难让我们有充分的理由对此感到担忧。远未结束,取代 WER 的实用程序已经足够普遍了。

对于认为 TerminateProcess() 是解决文件锁定问题的好方法的乡巴佬,您完全没有防御能力。或者有人被电源线绊倒并拔掉了机器。

稍微关注为什么您想知道退出代码。接下来你应该做一些事情来使用程序的结果继续执行。验证结果。

关于c# - 当不使用 Environment.Exit() 时,.net 程序可以有哪些退出代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32536145/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com