AccessViolationException与Windows窗体中的Web浏览器

时间:2009-02-03 22:23:25

标签: c# winforms webbrowser-control data-execution-prevention

我在C#中编写了一个基本的Windows窗体应用程序,它具有嵌入式Web浏览器控件。我正在导航到页面以查看相机的Feed。该应用程序在Windows XP上运行正常,但在Vista上运行不正常。

在Vista上,我收到了一个AccessViolationException。这似乎与数据执行预防有关。

http://jtstroup.net/CommentView,guid,3fa30293-a3a4-4a1c-a612-058e751ad151.aspx上的文章有几个解决方案。页面底部的修复,editbin.exe / NXCOMPAT:来自Visual Studio命令提示符的NO YourProgram.exe工作正常。

但是,我想要的是使用post build事件方法,按照建议添加以下内容:

REM Mark项目为DEP不合规 调用“$(DevEnvDir).... \ VC \ bin \ vcvars32.bat” 调用“$(DevEnvDir).... \ VC \ bin \ editbin.exe”/ NXCOMPAT:NO“$(TargetPath)”

但是,当我尝试通过调试器运行程序时,这不起作用(即我得到相同的异常)。

有什么想法吗?

6 个答案:

答案 0 :(得分:1)

关闭Visual Studio托管流程,或者将托管流程(yourapp.vshost.exe)标记为DEP不合规?

答案 1 :(得分:1)

根据this article

  

因为它是在安装程序中观察到的   使用Visual Studio 2008进行项目   添加项目输出源路径   指向c:\ App \ OBJ * .exePost构建   事件将更新c:\ app \ BIN * .exe   而不是OBJ。

     

在设置中手动添加内置和   部署项目创建新设置   项目|添加文件|选择Build EXE   它位于Bin文件夹下

答案 2 :(得分:0)

问题。你正在尝试的vista版本。是64位吗?如果是这样,请仅将代码编译为x86并尝试。

答案 3 :(得分:0)

您正在查看的网页是否包含java小程序<applet>?我遇到了这个确切的问题,并将其追溯到那个。这是由于使用微软JVM的WebBrowser控件,我相信现在不支持它。

答案 4 :(得分:0)

它们是ActiveX控件,而不是applet。

同样,如果我从Visual Studio命令提示符应用editbin.exe,或者如果我使用上面的post build事件,该程序仍然有效,并关闭Visual Studio Hosting Process。

当我运行创建安装/部署项目,运行安装程序,然后尝试运行它仍然崩溃的程序时。客户端计算机可能没有Visual Studio,因此我无法在部署后在目标计算机上运行editbin.exe - 它需要在安装/部署项目中触发。所以我猜测主要输出中的后期构建事件没有被触发,或者它是,并且在部署项目中重新启用了DEP。

答案 5 :(得分:0)

我必须在我的帖子构建活动中添加另一行

调用“$(DevEnvDir).. \ tools \ vsvars32.bat” editbin.exe / NXCOMPAT:NO“$(TargetPath)” editbin.exe / NXCOMPAT:NO“$(ProjectDir)obj \ $(ConfigurationName)\ $(TargetFileName)”

这会编辑obj文件夹中的exe。这似乎是我的部署项目使用的。

我从这里得到了这个想法。 Microsoft Forum