我有一个由服务启动的应用程序。该应用程序没有用户界面,它包含一个DataModule和一个在一个循环中调用Forms.Application.HandleMessage的TMyApplication实现(如SvcMgr.TServiceApplication)。我挂钩了MainWindow来记录Forms.Application收到的隐藏窗口的任何消息。检测系统用户关机
- 如果我手动启动该应用程序,它运行在我的useraccount,我Forms.Application隐藏的窗口收到WM_QUERYENDSESSION WM_ENDSESSION和信息注销/关闭时。
- 如果我使用该服务启动我的应用程序,则应用程序将在SYSTEM帐户下运行。在系统帐户下运行时,在我的应用程序被Windows强制终止之前,我在系统关机时只收到一条消息
$0000001A
(WM_WININICHANGE?)。所以没有WM_QUERYENDSESSION和WM_ENDSESSION消息。
如何检测系统帐户上的Windows关机并优雅地关闭我的应用程序?
你为什么不直接运行你的服务? – 2011-03-01 16:11:54
我知道它没有回答你的问题,但在SYSTEM帐户下运行一个进程被认为是非常糟糕的做法。如果您已经意识到了这一点,那么我很抱歉无法接听。 – 2011-03-01 16:39:59