.NET Framework 2.0 で作成したアプリケーションがデータ実行防止 (DEP) で例外登録できない

現象
Visual Studio で .NET Framework 2.0 (Service Pack 1 以降) のアプリケーションを作成すると既定で NXCOMPAT フラグが有効になります。
NXCOMPAT フラグが有効な場合、その実行可能ファイルは Windows データ実行防止機能との互換性がテストされたことを意味します。
そのため該当アプリケーションはデータ実行防止 (DEP) の例外登録の対象とならず、登録しようとすると以下のエラーが発生します。

 「このプログラムは、データ実行防止 (DEP) を有効にして実行する必要があります。このプログラムでは DEP を無効にすることはできません。」
原因
.NET Framework 2.0 Service Pack 1 からコンパイラの実装が変更されており NXCOMPAT フラグが既定で有効になります。
解決方法
Visual Studio でコンパイラオプションを変更する方法はありません。ビルド後に EDITBIN ツールで NXCOMPAT フラグを無効に設定します。


Visual Studio の EDITBIN ツールで NXCOMPAT フラグを無効にする方法

DEP の例外登録が必要なアプリケーションについては、以下の手順に沿ってNXCOMPAT フラグを無効に設定します。

 1. [すべてのプログラム] - [Microsoft Visual Studio (バージョン)] の [Visual Studio Tools] から [Visual Studio コマンド プロンプト] を 選択します。

 2. 以下のコマンドを実行します。
 
    editbin.exe /NXCOMPAT:NO <application.exe>

 3. コマンド プロンプトに特にエラー等が表示されず、コマンドの実行が完了することをご確認ください。





詳細

- NXCOMPAT フラグ の確認方法
- .NET Framework 4 以降のバージョンについて



NXCOMPAT フラグ の確認方法
 

上記の設定が正常に完了したかを確認する場合には、Visual Studio に付属の DUMPBIN ツールが使用可能です。

 1. [すべてのプログラム] - [Microsoft Visual Studio (バージョン)] の [Visual Studio Tools] から [Visual Studio コマンド プロンプト] を 選択します。

 2. 以下のコマンドを実行します。 

    dumpbin /headers <application.exe>

 3. 下記 OPTIONAL HEADER VALUES の DLL characteristics 配下に "NX compatible" が表示されなければ、設定は正常に完了しています。

    Dump of file <application.exe>
    PE signature found
    File Type: EXECUTABLE IMAGE

    FILE HEADER VALUES
       < ... 略 ... >

    OPTIONAL HEADER VALUES
       < ... 略 ... >
             400 size of headers
               0 checksum
               2 subsystem (Windows GUI)
            8540 DLL characteristics
                   Dynamic base
                   No structured exception handler
                   Terminal Server Aware




 .NET Framework 4 以降のバージョンについて

.NET Framework 4.0 および .NET Framework 4.5 でも .NET Framework 2.0 SP1 以降のバージョンと同様に NXCOMPAT フラグが有効になります。
同様に、EDITBIN ツールを使用することで NXCOMPAT フラグを無効にすることが可能です。



注意 : これは、マイクロソフトのサポート組織内で直接作成された "緊急公開" の資料です。 この資料には、確認中の問題に関する現状ベースの情報が記載されています。 情報提供のスピードを優先するため、資料には誤植が含まれる可能性があり、予告なしに随時改定される場合があります。 その他の考慮事項については、使用条件を参照してください。
プロパティ

文書番号:2854967 - 最終更新日: 09/29/2016 14:57:00 - リビジョン: 4.0

Microsoft .NET Framework 2.0 Service Pack 1 (x86), Microsoft .NET Framework 2.0 Service Pack 2, Microsoft .NET Framework 3.0, Microsoft .NET Framework 3.0 Service Pack 1, Microsoft .NET Framework 3.0 Service Pack 2, Microsoft .NET Framework 3.5, Microsoft .NET Framework 3.5 Service Pack 1, Microsoft .NET Framework 3.5.1, Microsoft .NET Framework 4.0, Microsoft .NET Framework 4.5

  • kbtshoot kbexpertiseadvanced KB2854967
フィードバック