igg*_*igg 11 c# linux windows .net-6.0
如果我们只是谈论 Windows,我可以使用Microsoft.Win32.SystemEvents.SessionEnding
有什么跨平台的东西可以使用吗?我想要一些可以在 Windows 和 Linux 上运行的东西。我将使用 .NET 6.0
据我所知,在 Linux 环境中没有直接可靠的方法来确定这一点,更不用说跨平台解决方案了。您需要实现一种特定于 Linux 的方法来检测这一点。
正如 @fredrik 在评论中提到的,使用PosixSignal会让您知道您的应用程序被要求终止,但不知道为什么。不过,您可以在收到消息后检查情况,SIGTERM以确定系统是否确实正在关闭。例如,systemctl is-system-running如果是这种情况,运行将返回“停止”。
如果我们假设一个现代 Linux 桌面环境,一个更强大的替代方案可能是订阅D-bus信号PrepareForShutdown。来自systemd 文档:
当系统挂起或关闭被请求并即将执行时,以及挂起/关闭完成(或失败)后,会发出PrepareForShutdown()和PrepareForSleep()信号...
库Tmds.Dbus提供了一个异步 API 来监听 .net 应用程序中的该信号。您仍然需要处理这样一个事实:您将按SIGTERM顺序收到此信息和此信息。
| 归档时间: |
|
| 查看次数: |
636 次 |
| 最近记录: |