3

VB6アプリがWindowsRestartManagerを介してシャットダウンされたときにロックアップするという問題があります。これは、Innoセットアップで新しいRestart Managerサポートを使用している場合に非常に目立ち、空のVB6プロジェクトがコンパイルされている場合でも発生します。

QueryUnloadandイベントにロギングを追加するとUnload、次のシーケンスが表示されます。

QueryUnload(vbAppWindows)
Unload()
QueryUnload(vbAppTaskManager)

この後、VB6プロセスはVB6ランタイム内でロックアップしているように見え、RestartManagerを呼び出すプロセスは最終的にタイムアウトしてあきらめます。

同様の問題がbuitの前に報告されており、適切な解決策はありません。

4

1 に答える 1

6

これについては、2007年にWindowsアプリケーション互換性フォーラムで議論されました。

QueryUnload提案された解決策は、これをメインフォームのイベントハンドラーの最後に追加することでした。

'For Vista Certification requirement.
'Handles TEST CASE 30. Verify the application is Restart Manager Aware.
If UnloadMode = vbAppWindows Then Unload Me

VB6ランタイムがシャットダウンメッセージの1つを正しく処理していないようです。そのため、Restart Managerは、より強制的なクローズメッセージを送信して、ランタイムをロックアップさせます。

私はこの修正をかなり複雑なマルチプロセスVB6アプリケーションで確認しましたが、明らかな悪影響なしにすべてが正しくシャットダウンします。

于 2012-06-25T14:28:45.263 に答える