4

これはちょっと低レベルのタイプの質問ですが、おそらくここの誰かがいくつかの洞察を持っています...

未処理のSEH例外(アクセス違反など)が、プログラムを終了するのではなく、Win32メッセージディスパッチレベルでキャッチされているように見えるという問題があります。問題を説明している次のリファレンスブログを見つけましたが、WM_TIMERメッセージのコンテキストでのみ: http: //bugswar.blogspot.com/2010/07/why-its-not-crashing.html

Win 2008R2と「通常の」メッセージ(例:WM_COMMANDなど)で問題が発生しています。Windowsが例外をマスクして「助け」ようとしているのではないかと思いますが、エラーを出してほしいと思います。「続行して無視する」動作は、一般的にアプリケーションに問題を引き起こしています。すべての関数をtry/catchでラップし、コンパイラオプション/EHaを使用してSEH例外をC++例外に変換できることを理解しています(これ自体は非常に推奨されておらず危険です)が、これは明らかに最適ではありません。

参照されているブログによると、TIB構造(http://en.wikipedia.org/wiki/Win32_Thread_Information_Block)のAppCompatFlags2にフラグがあり、Win32ハンドラーがSEH例外をキャッチ/破棄しない原因となる可能性がありますが、私にはありませんそれを設定/有効化する方法を考えてください。誰かがこれについて何か洞察を持っていますか?Windowsが例外をキャッチして無視しないように有効にできるAppCompat設定はありますか?

4

2 に答える 2

1

設計によるものだと思いますが、明らかに十分に検討されていませんでした。おそらく、いくつかのレガシーアプリケーションを「動作」させる試みは賢明ではありません。

Windows 7 SP1 では、この動作をオーバーライドできます。これについては、このスタックオーバーフローの回答で詳しく書きました。

于 2012-01-24T16:19:10.263 に答える
0

互換性設定がこの特定の側面にどのように影響するかはわかりませんが、エクスプローラーの EXE の [プロパティ] ページからいくつかの互換性モードから選択できます (少なくとも W7 と Vista では)。マニフェストから特定のものをリクエストすることもできることを思い出したようです。

于 2010-10-23T00:32:04.337 に答える