如何模拟Windows关机进行debugging?

当Windowsclosures时,我的应用程序出现问题 – 我的应用程序没有正确退出,导致显示“结束任务”窗口。 我怎样才能使用debugging器来看看发生了什么?

有没有办法将Windows关机消息发送到我的应用程序,所以它认为Windows正在closures,所以我可以看到它的行为?

Microsoft的徽标testing工具(Windows版)中有一个名为Restart Manager(rmtool.exe)的工具,可用于将关机和重新启动消息发送到进程。 徽标testing工具可以在这里下载:

http://download.microsoft.com/download/d/2/5/d2522ce4-a441-459d-8302-be8f3321823c/LogoToolsv1.0.msi

然后你可以模拟你的进程关机:

rmtool.exe -p [PID] -S 

其中[PID]是进程ID。 根据Vista标志authenticationtesting案例文件,

重新启动pipe理器closures消息是:

一个。 WM_QUERYENDSESSION与LPARAM = ENDSESSION_CLOSEAPP(0x1):GUI应用程序必须立即响应(TRUE)以准备重新启动。

湾 WM_ENDSESSION与LPARAM = ENDSESSION_CLOSEAPP(0x1):应用程序必须在5秒内closures(20秒的服务)。

C。 CTRL_SHUTDOWN_EVENT:控制台应用程序必须立即closures。

我相信当Windowsclosures时,它会向所有应用程序发送一个“WM_QueryEndSession”。 要模拟Windows关机,您可以创build一个小应用程序,将PostMessage与此消息一起发送到您的应用程序,并查看会发生什么情况。 Windows可能会发送比实际closures应用程序更多的消息(如WM_CLOSE),但是当应用程序收到“WM_QueryEndSession”消息时,这意味着您的应用程序即将从该应用程序中取出地毯。

您可以使用SystemEvents.SessionEnding事件,该事件在用户注销或closures时触发。 使用它时要小心,但有些资源不能保证可用。 例如,我的应用程序需要在服务器closures时为用户输出时钟(时钟应用程序),但是当发生此事件时网卡有时已被禁用。 既然你只是在做清理,这应该工作得很好。