【问题标题】:Keep process alive during shutdown在关闭期间保持进程处于活动状态
【发布时间】:2020-10-27 15:45:56
【问题描述】:

我在同一台机器上有两个桌面应用程序,我们称它们为客户端和服务器。当 Windows 进入关闭状态时,我想让客户端对服务器进行一些简短的大扫除。客户知道它是关闭时间,因为在OnFormClosing 中,FormClosingEventArgs.CloseReasonCloseReason.WindowsShutDown。但与此同时,服务器可能会被操作系统强行杀死。是否可以让服务器尽可能长时间地处于活动状态,以便所有客户端都可以完成他们的工作,但不能完全停止关机?

  • 服务器不知道哪些客户端还活着并且需要清理。
  • 客户端和服务器都不应导致 Windows 显示应用程序阻止 Windows 关闭的消息。

我想我要求一些 Windows API 调用可以与 Windows 协商,以便在可能的情况下最后终止进程,但欢迎任何可行的解决方案。 Client 用 C# 编写,Server 用 C++ 编写。

【问题讨论】:

  • 使 Server 成为服务。
  • @Dialectus 回答已发布

标签: windows winapi visual-c++


【解决方案1】:

服务器应该跟踪连接到它的客户端。因此,如果您的应用程序忙于执行大扫除,它们会阻止关闭,即使只是暂时的。那么让 Windows 向用户显示这样的消息有什么问题呢?

当服务器收到即将关闭的通知时,如果有任何客户端连接,则让它调用ShutdownBlockReasonCreate()。无论Clients是否进行housecleaning,当最后一个Client断开连接时,Server可以调用ShutdownBlockReasonDestroy()

【讨论】:

    【解决方案2】:

    显而易见的解决方案是让服务器a Windows service

    作为权宜之计,您可以尝试SetProcessShutdownParameters

    此函数设置一个进程相对于系统中其他进程的关闭顺序。

    【讨论】:

      猜你喜欢
      • 2014-11-14
      • 1970-01-01
      • 2016-03-15
      • 1970-01-01
      • 2012-06-05
      • 1970-01-01
      • 2020-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多