即使在进程终止时也保证代码执行

我需要在进程停止时执行一部分代码(状态保存) – 由用户,任务管理器等执行。

可能吗?

try {} finally {}AppDomain.ProcessExitIDisposable ,析构函数,..接下来要尝试什么?

正如其他人所指出的那样,当应用程序被Operating SystemUser Killed时,您无法在应用程序中执行任何代码。 这就是为什么它被称为Killing

如果保存状态是应用程序的重要部分,则应采用类似于数据库系统的方法。 实现transaction log ,创建checkpoints等。这是您可以获得的最接近的。

在这种情况下,当您的应用程序恢复(在killed重新运行)时,它可以检查这些transaction logs是否有任何挂起的更新或上次状态更改。

除此之外,它实际上取决于你想做什么。 还有为什么你提出这个想法? 我们可以获得更多细节吗? 可能是这里有人有更好的选择。

一个过程被杀死的过程的全部意义在于它只是停止它正在做的事情。 我无法真正看到这种方式。

你需要考虑你的程序退出的原因。 如果是因为错误,那么你可以使用try / catch。 在unix术语中,当进程管理器暂停进程时发生的事情是kill(即发送SIGKILL信号),该进程在退出进程之前不允许程序执行任何操作。 许多病毒做的是有两个进程(可能有共享内存以避免持续的数据同步),每个进程监视另一个进程的状态,当一个进程发生故障时,另一个进程重新生成它。 也许第二个过程可以以类似的方式监控和保存状态。 另一种信号是SIGTERM。 当您告诉计算机重新启动但有进程正在运行时,会发送此信号。 内核允许程序自己尝试退出,但最终会询问用户是否可以杀死该程序。 如果要处理SIGTERM查找处理信号。 最终,我知道SIGKILL的唯一解决方案是两个流程解决方案。

我正在寻找与发布内容有些不同的原因,但我为自己想出了一个非常好的解决方案,在这里陈述可能有用:

注意:对于那些知道它是什么的人来说,这基本上就是“心跳”设计模式。

1)除了运行“死”(即被杀死)的代码之外,还要在此项目中添加代码,以便在初始化时生成一个线程(或者可能是另一个方法?),并且所有线程都运行一个从不 – 以循环结束(但确保它在迭代之间至少hibernate几秒甚至1分钟)并在while循环中,记录一个指示器以指示您的应用程序是“活着的”(即“心跳”)。 我个人建议在数据库或文件中设置一个值,即当前时间戳(即DateTime.Now)

2)现在您正在记录“心跳”,创建另一个应用程序(即另一个进程),它只读取心跳值(即当前时间戳)并在永不停止的while循环中执行此操作。 一旦确定心跳值为“坏”(例如,可能是HeartBeatTimestamp + 5 min

希望这会有所帮助:)如果您想了解更多,请随意从其他资源研究’Heartbeat’设计模式!

干杯,

杰夫