【问题标题】:The OS doesn't shutdown, but my application does操作系统不会关闭,但我的应用程序会
【发布时间】:2010-01-15 10:17:23
【问题描述】:

我有一个应用程序,当我关闭 Windows 时,它会优雅而快速地退出(也在任务管理器和进程资源管理器中检查 - 该进程不再存在)但操作系统没有。似乎操作系统只是忽略了关机。

但如果我尝试再次关闭 Windows,现在一切正常。系统以非常正常的方式关闭。

  1. 为什么?
  2. 我该如何解决这个问题?

关于我的应用的详细信息:

  • 多线程
  • 有一个托盘图标
  • 对 WM_QUERYENDSESSION(或类似)操作系统消息进行任何特殊处理
  • 没有任何特殊的驱动程序、DLL 挂钩等。

有什么解决办法吗?

PS:我可以根据您的要求提供更多详细信息

【问题讨论】:

    标签: windows delphi winapi shutdown


    【解决方案1】:

    您确实对 WM_QUERYENDSESSION(或类似)操作系统消息返回 TRUE 吗?您可能会收到消息,关闭应用程序并返回 FALSE。

    【讨论】:

    • 不,我不对这些消息进行任何处理。 IOW,我没有钩住它们,因此默认消息队列返回“True”。
    • 啊。我认为说“不做任何特殊处理”是指不在处理程序中做奇怪的事情,而只是关闭应用程序。
    • @plainth:我认为你应该追踪这个。可能是默认消息队列不会为所有处理程序返回“true”(无论出于何种原因,因此需要跟踪),但仍然调用足够的终止过程来实际关闭应用程序。
    【解决方案2】:

    这周我们遇到了奇怪但几乎完全相同的问题

    应用程序在托盘中运行,关闭但阻止窗口关闭。因此,在那里,我将分享为我们解决问题的方法。

    • 删除数据模块解决了问题。
    • 删除 NMsmtp 组件解决了问题。
    • 实施this bug report 中给出的建议解决了我的工作站上的问题,但没有解决另一个问题。

    最后,我们选择只删除 NMsmtp 组件,因为我们没有源代码并改为使用 Indy。

    您的情况很可能会有所不同,因此我建议您像我们一样开始从您的项目中剥离所有内容,直到它起作用为止。

    【讨论】:

      【解决方案3】:

      如果应用程序仍在后台工作,这可能会阻止 Windows 关闭。

      您可以检查 AutoEndTasks 设置是否已启用,如果没有则启用它:

      http://technet.microsoft.com/en-us/library/cc978604.aspx

      最好的问候

      【讨论】:

      • 否,应用程序进程句柄从进程列表中消失。此外,它不与任何系统服务交互。 OTOH,我不能依赖 AutoEndTasks(或任何其他外部设置),因为我不控制将部署应用程序的计算机。
      • 亲爱的,好的,我认为这个参数默认为 1 但不是,这是我的错误,然后我认为比你的线程块之一。如果它是一个控制台应用程序,您可以使用 SetConsoleCtrlHandler 和 CTRL_SHUTDOWN_EVEN 来修复它。 msdn.microsoft.com/en-us/library/ms686016%28VS.85%29.aspx 最好的问候
      猜你喜欢
      • 2014-06-20
      • 2014-02-05
      • 2011-01-25
      • 2011-01-22
      • 2016-02-20
      • 1970-01-01
      • 2023-03-23
      • 2011-10-31
      • 1970-01-01
      相关资源
      最近更新 更多