AccessViolationException с веб-браузером в форме Windows

Я написал базовое приложение Windows Form на C# со встроенным элементом управления веб-браузером. Я перехожу на страницу, чтобы просмотреть канал камеры. Приложение отлично работает на Windows XP, но не на Vista.

В Vista я получаю AccessViolationException. Похоже, это связано с предотвращением выполнения данных.

В статье на http://jtstroup.net/CommentView,guid,3fa30293-a3a4-4a1c-a612-058e751ad151.aspx есть несколько решений. Исправление в нижней части страницы editbin.exe /NXCOMPAT: НЕТ YourProgram.exe из командной строки Visual Studio работает просто отлично.

Однако я хотел бы использовать метод события после сборки, добавив следующее, как предлагается:

REM Пометить проект как DEP Несовместимый вызов "$(DevEnvDir)....\VC\bin\vcvars32.bat" вызов "$(DevEnvDir)....\VC\bin\editbin.exe" /NXCOMPAT:NO "$(TargetPath)"

Однако, это не работает, когда я пытаюсь запустить программу через отладчик (то есть я получаю то же исключение).

Есть идеи?

6 ответов

Решение

Согласно этой статье:

Потому что в проекте установки с Visual Studio 2008 было замечено, что путь источника исходных данных "Добавить проект" указывает на событие сборки c:\App\OBJ*.exePost, что приведет к обновлению c:\app\BIN*.exe, а не к OBJ.

Вручную добавьте сборку в проект установки и развертывания. Создать новый проект установки | Добавить файл | выберите Build EXE, который находится в папке Bin

Отключить процесс размещения Visual Studio или, альтернативно, пометить процесс размещения (yourapp.vshost.exe) как несовместимый с DEP?

Вопрос. Виста версия, которую вы пытаетесь. Это 64 бит? Если это так, скомпилируйте код только для x86 и попробуйте.

Это элементы управления ActiveX, а не апплеты.

Опять же, программа работает, если я применяю editbin.exe из командной строки Visual Studio, или если я использую это событие после сборки, как описано выше, и выключаю процесс размещения Visual Studio.

Когда я запускаю создание проекта установки / развертывания, запускаю установщик, а затем пытаюсь запустить программу, она все равно дает сбой. На клиентских машинах, скорее всего, не будет Visual Studio, и я не могу запустить editbin.exe на целевом компьютере после развертывания - его нужно запустить в проекте установки / развертывания. Так что я предполагаю, что событие post-build из первичного вывода не запускается, или это так, и есть что-то, что снова включает DEP в проекте развертывания.

Мне пришлось добавить еще одну строку в мое событие пост сборки

вызовите "$(DevEnvDir)..\tools\vsvars32.bat" editbin.exe /NXCOMPAT: НЕТ "$(TargetPath)" editbin.exe /NXCOMPAT: НЕТ "$(ProjectDir)obj\$(ConfigurationName)\$(TargetFileName)"

это редактирует exe в папке obj. Похоже, это то, что использует мой проект развертывания.

Я получил идею отсюда. Форум Microsoft

Содержит ли просматриваемая страница Java-апплет <applet>? Я столкнулся с этой проблемой и проследил ее до этого. Это связано с тем, что WebBrowser Control использует JVM от Microsoft, который, я считаю, не поддерживается.

Другие вопросы по тегам