以SYSTEM用户身份检测关闭

时间:2011-03-01 16:05:28

标签: windows delphi service shutdown

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

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

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

1 个答案:

答案 0 :(得分:4)

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

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

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

自己做一个FindWindow和PostMessage(hwnd,WM_ENDSESSION)。