我需要在进程停止时(自动、用户、任务管理器等)执行一部分代码(状态保存)。
这是否可能?
try {} finally {}
、AppDomain.ProcessExit
、IDisposable
、析构函数,下一步该尝试什么?
我需要在进程停止时(自动、用户、任务管理器等)执行一部分代码(状态保存)。
这是否可能?
try {} finally {}
、AppDomain.ProcessExit
、IDisposable
、析构函数,下一步该尝试什么?
正如其他人所指出的,当应用程序被操作系统或用户“杀死”时,你无法在应用程序中执行任何代码。这就是为什么它被称为“Killing”的原因。
如果保存状态是你的应用程序的重要部分,你应该采取类似于数据库系统的方法。实现“事务日志”,创建“检查点”等。这是你能够接近的最近的方法。
在这种情况下,当你的应用程序恢复(在被“杀死”后重新运行)时,它可以检查这些“事务日志”以获取任何未完成的更新或最后状态更改。
除此之外,这真的取决于你想做什么。还有你为什么想到这个想法?我们能否获得更多细节?也许这里有更好的替代方案。
进程被非正常终止的整个意义在于它会突然停止正在进行的操作。我无法想到任何避免这种情况的方法。
你需要思考为什么程序会退出。如果是由于错误引起的,那么可以使用try/catch。在unix术语中,当进程管理器停止进程时,会发出一个kill命令(即发送SIGKILL信号),在进程退出之前不允许程序执行任何操作。许多病毒所做的是有两个进程(可能具有共享内存以避免常量数据同步),每个进程监视另一个进程的状态,当一个进程关闭时,另一个进程重新启动它。也许第二个进程可以以类似的方式监视和保存状态来处理你的情况。然而,另一种信号是SIGTERM。当您告诉计算机重新启动但有正在运行的进程时,将发送此信号。内核允许程序尝试自己退出,但最终会询问用户是否可以杀死该程序。如果要处理SIGTERM,请查找处理信号。最终,我知道的解决SIGKILL的唯一方法是使用两个进程的方案。