如何处理C#控制台应用程序的终止?

7
如果我有一个控制台应用程序,是否有办法处理以下内容:
1. Ctrl-C(我知道答案。使用Console.TreatControlCAsInput和Console.CancelKeyPress) 2. 会话终止,例如当某人注销时 3. 进程退出,例如当某人使用任务管理器关闭应用程序。
我知道如果我编写的是Unix应用程序,我将处理各种信号以捕获关闭请求(从内存中的SIGTERM),但我也知道我需要在系统执行kill -9(SIGKILL)之前快速处理这些消息并退出。
但对于C#控制台应用程序,我不确定如何做到这一点。

前几天我不得不做这个,但我不记得我当时做了什么。在谷歌上很容易找到答案。如果你还没有找到解决方案,我回家后会发布答案。编辑:看看这里:http://bytes.com/topic/c-sharp/answers/273227-console-application-close#post1092937 - leppie
你需要使用P/Invoke SetConsoleCtrlHandler。很容易在谷歌上找到相关信息。 - Hans Passant
1
你无法捕获SIGKILL。SIGKILL强制程序关闭而不调用任何信号处理程序,它无法被捕获或忽略。 - Marco Sulla
如果您想要处理进程退出,请查看以下问题:捕获控制台退出C#如何在.NET 5控制台应用程序中处理任务管理器的“结束任务”? - Robin Hartmann
1个回答

5

会话终止,例如当有人注销时

处理 SystemEvents.SessionEnded 事件。

进程退出,例如当有人使用任务管理器关闭应用程序时。

如果你的意思是,如果有人从任务栏杀死应用程序,我认为你无法处理它。


实际上,您可以处理用户从任务栏或使用“X”按钮关闭应用程序的情况,如此问题中的答案所述。 - Robin Hartmann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接