通过重启管理器关闭时,VB6应用程序会锁定

Dea*_*nna 3 vb6 installation

当通过Windows Restart Manager关闭VB6应用程序时,我遇到了问题.在Inno设置中使用新的Restart Manager支持时,这是非常明显的,甚至在编译空的VB6项目时也是如此.

当我向QueryUnloadand Unload事件添加日志记录时,我看到以下序列:

QueryUnload(vbAppWindows)
Unload()
QueryUnload(vbAppTaskManager)
Run Code Online (Sandbox Code Playgroud)

在此之后,VB6进程似乎锁定在VB6运行时内,并且调用Restart Manager的进程最终会超时并放弃.

buit 之前已经报告了类似的问题,没有明显的解决方案.

Dea*_*nna 6

2007年在Windows Application Compatability论坛上就此进行了讨论.

建议的解决方案是将其添加到QueryUnload主窗体的事件处理程序的末尾:

'For Vista Certification requirement.
'Handles TEST CASE 30. Verify the application is Restart Manager Aware.
If UnloadMode = vbAppWindows Then Unload Me
Run Code Online (Sandbox Code Playgroud)

似乎VB6运行时没有正确处理其中一个关闭消息,因此重启管理器然后发送更强制的关闭消息,导致运行时锁定.

我已经用一个相当复杂的多进程VB6应用程序确认了这个修复程序,它都正确关闭,没有明显的不良影响.