我在通过Windows Restart Manager关闭VB6应用时遇到问题。 在Inno设置中使用新的Restart Manager支持时非常明显,甚至在编译空的VB6项目时也会出现这种情况。
当我将记录添加到QueryUnload
和Unload
事件时,我看到以下序列:
QueryUnload(vbAppWindows)
Unload()
QueryUnload(vbAppTaskManager)
在此之后,VB6进程似乎锁定在VB6运行时内部,并且调用Restart Manager的进程最终会超时并放弃。
据报道,类似的问题before没有明显的解决方案。
答案 0 :(得分: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
似乎VB6运行时没有正确处理其中一个关闭消息,因此重启管理器会发送一个更强的关闭消息,导致运行时锁定。
我已经使用相当复杂的多进程VB6应用程序确认了此修复程序,并且所有这些都正确关闭,没有明显的不良影响。