2

Web ブラウザー コントロールが組み込まれた基本的な Windows フォーム アプリを C# で作成しました。カメラのフィードを表示するページに移動しています。アプリケーションは Windows XP では正常に動作しますが、Vista では動作しません。

Vista では、AccessViolationException が発生します。これは、データ実行防止に関連しているようです。

http://jtstroup.net/CommentView,guid,3fa30293-a3a4-4a1c-a612-058e751ad151.aspxの記事には、いくつかの解決策があります。ページの下部にある修正プログラム editbin.exe /NXCOMPAT:NO Visual Studio コマンド プロンプトからの YourProgram.exe は問題なく動作します。

ただし、私が望むのは、ビルド後のイベント メソッドを使用することです。提案されているように、次を追加します。

REM プロジェクトを DEP 非準拠としてマーク call "$(DevEnvDir)....\VC\bin\vcvars32.bat" call "$(DevEnvDir)....\VC\bin\editbin.exe" /NXCOMPAT:NO "$ (ターゲットパス)"

ただし、デバッガーを使用してプログラムを実行しようとすると、これは機能しません (つまり、同じ例外が発生します)。

何か案は?

4

6 に答える 6

1

Visual Studioホスティングプロセスをオフにするか、またはホスティングプロセス(yourapp.vshost.exe)をDEP非準拠としてマークしますか?

于 2009-02-03T22:43:37.627 に答える
0

これらはActiveXコントロールであり、アプレットではありません。

この場合も、Visual Studioコマンドプロンプトからeditbin.exeを適用するか、上記のようにビルド後のイベントを使用して、Visual Studioホスティングプロセスをオフにすると、プログラムは機能します。

セットアップ/デプロイメントプロジェクトの作成を実行し、インストーラーを実行してから、プログラムを実行しようとすると、まだクラッシュします。クライアントマシンにはVisualStudioがない可能性が高いため、展開後にターゲットマシンでeditbin.exeを実行できません。セットアップ/展開プロジェクトで起動する必要があります。したがって、プライマリ出力からのビルド後のイベントが発生していないか、発生していて、デプロイメントプロジェクトでDEPを再度有効にする何かがあると推測しています。

于 2009-02-04T03:38:28.577 に答える
0

表示しているページにJavaアプレットが含まれています<applet>か?私はこの正確な問題に遭遇し、それを追跡しました。これは、現在サポートされていないMicrosoftのJVMを使用しているWebBrowserControlが原因であると私は信じています。

于 2009-02-04T02:42:55.273 に答える
0

ビルド後のイベントに別の行を追加する必要がありました

call "$(DevEnvDir)..\tools\vsvars32.bat" editbin.exe /NXCOMPAT:NO "$(TargetPath)" editbin.exe /NXCOMPAT:NO "$(ProjectDir)obj\$(ConfigurationName)\$(TargetFileName) )"

これにより、obj フォルダー内の exe が編集されます。それが私の展開プロジェクトで使用されているようです。

ここから着想を得ました。 マイクロソフト フォーラム

于 2013-01-06T19:16:10.570 に答える
0

質問。試している Vista のバージョン。64ビットですか?その場合は、コードを x86 のみにコンパイルして試してください。

于 2009-02-04T00:02:38.560 に答える