以 SYSTEM 用户身份检测关机

发布于 2024-10-19 21:53:24 字数 545 浏览 4 评论 0原文

我有一个由服务启动的应用程序。该应用程序没有用户界面,它包含一个 DataModule 和一个在循环中调用 Forms.Application.HandleMessage 的 TMyApplication 实现(如 SvcMgr.TServiceApplication)。我连接了 MainWindow 来记录 Forms.Application 的隐藏窗口收到的任何消息。

  • 如果我手动启动应用程序,使其在我的用户帐户上运行,则注销/关闭时,我会在 Forms.Application 的隐藏窗口上收到 WM_QUERYENDSESSION 和 WM_ENDSESSION 消息。
  • 如果我使用该服务启动应用程序,该应用程序将在 SYSTEM 帐户下运行。当在系统帐户下运行时,我在系统关闭时仅收到一条消息 $0000001A (WM_WININICHANGE?),然后 Windows 强制终止我的应用程序。因此没有 WM_QUERYENDSESSION 和 WM_ENDSESSION 消息。

如何检测 SYSTEM 帐户上的 Windows 关闭并正常关闭我的应用程序?

I have an application that is started by a service. The application has no User Interface, it contains a DataModule and a TMyApplication implementation that calls Forms.Application.HandleMessage in a loop (like SvcMgr.TServiceApplication). I hooked the MainWindow to log any messages the hidden window of Forms.Application receives.

  • If I manually start the application so it runs on my useraccount, I receive WM_QUERYENDSESSION and WM_ENDSESSION messages on the hidden window of Forms.Application when logging off/shutting down.
  • If I start my application using the service, the application runs under the SYSTEM account. When running under the system account I receive only one message, $0000001A (WM_WININICHANGE?), at systemshutdown before my application is forcefully terminated by Windows. So no WM_QUERYENDSESSION and WM_ENDSESSION messages.

How can I detect a Windows shutdown on a SYSTEM account and close my application gracefully?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

独留℉清风醉 2024-10-26 21:53:24

让您的服务通知您的子应用程序。

以下是有关服务控制管理器如何通知您的服务的一些信息:

http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/063cef3a-de94-44d5-8f2e-4e63c3cfdee8

自己执行 FindWindow 和 PostMessage(hwnd, WM_ENDSESSION) 。

Have your service notify your sub-application.

Here's some information about how the service control manager notifies your service:

http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/063cef3a-de94-44d5-8f2e-4e63c3cfdee8

Do a FindWindow, and PostMessage(hwnd, WM_ENDSESSION) yourself.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文