获取Windows上应用程序的以前退出代码

获取Windows上应用程序的以前退出代码,windows,exit-code,Windows,Exit Code,有没有办法找出应用程序上次运行时的最后退出代码 我想检查应用程序上次是否没有以零退出代码退出(在我的情况下,这意味着异常终止),如果是,请进行一些检查,并可能修复/清理以前生成的数据 由于一些应用程序会这样做(它们会发出警告并询问您是否希望在安全模式下运行),我想Windows可能会告诉我这一点 如果没有,那么这样做的最佳实践是什么?当应用程序正确终止时,在文件或某物上设置一个标志,并检查下一次是否执行该标志?在Windows平台上没有标准的方法来执行此操作 处理这种情况最简单的方法是在注册表上

有没有办法找出应用程序上次运行时的最后退出代码

我想检查应用程序上次是否没有以零退出代码退出(在我的情况下,这意味着异常终止),如果是,请进行一些检查,并可能修复/清理以前生成的数据

由于一些应用程序会这样做(它们会发出警告并询问您是否希望在安全模式下运行),我想Windows可能会告诉我这一点


如果没有,那么这样做的最佳实践是什么?当应用程序正确终止时,在文件或某物上设置一个标志,并检查下一次是否执行该标志?

在Windows平台上没有标准的方法来执行此操作

处理这种情况最简单的方法是在注册表上放置一个值,并在程序退出时清除它

如果该值在程序启动时仍然存在,则它会意外终止。
在HKCU/Software//中输入一个值,以确保您拥有足够的权限(在这种情况下,该值将针对每个用户)。

否,没有退出代码的永久记录。只有当进程的句柄保持打开时,它才会存在。由GetExitCodeProcess()返回,它需要该句柄。一旦最后一个句柄关闭,那么退出代码就永远消失了。一种技术是一个启动进程并保持句柄的小型引导程序应用程序。然后,它还可以做其他方便的事情,如发送警报、保存日志、清理部分文件或记录崩溃的小转储。使用WaitForSingleObject()检测进程退出

顺便说一句,你肯定想退出代码编号意味着相反的事情。零始终是“正常退出”值。这有助于检测硬崩溃。当Windows强制终止应用程序时,退出代码始终为非零,设置为异常代码

还有其他方法,您确实可以创建一个文件或注册表项来指示进程正在运行,并在启动备份时进行检查。唯一真正复杂的是,当用户启动程序两次时,您需要做一些有意义的事情。这是一个很难解决的问题,这类应用通常是单实例应用。您可以使用命名互斥来检测程序实例是否已在运行。用过程ID和开始时间压印证据是可行的