2

我写了一个基本的Windows窗体应用程序在C#中,它具有嵌入式Web浏览器控件。我正在浏览页面以查看相机的供稿。该应用程序在Windows XP上运行良好,但在Vista上无法运行。AccessViolationException与Windows窗体中的浏览器

在Vista上,我得到一个AccessViolationException。这似乎与数据执行保护有关。

http://jtstroup.net/CommentView,guid,3fa30293-a3a4-4a1c-a612-058e751ad151.aspx的文章有几个解决方案。在页面底部的修复程序editbin.exe/NXCOMPAT:从Visual Studio命令提示符处运行YourProgram.exe工作得很好。

不过,我想是使用后生成事件的方法,通过添加以下的建议:

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

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

任何想法?

+0

您的链接已损坏,请使用以下链接:http://jtstroup.net/post/Attempted-to-read-or-write-protected-memory-This-is-often-an-indication-that-other - 内存 - 是 - corrupt.aspx – Eyal 2010-03-16 09:54:44

回答

1

根据this article

,因为它是在安装 项目观察与Visual Studio 2008中 添加项目输出源路径 指向C:\ APP \ OBJ * .exePost建立 事件将更新c:\ app \ BIN * .exe 而不是OBJ。

在安装程序中手动添加构建版本和 部署项目创建新安装程序 项目|添加文件|选择Build EXE 这是在bin文件夹

1

关闭Visual Studio宿主进程,或者将宿主进程(yourapp.vshost.exe)标记为DEP不兼容?

0

问题。您正在尝试的Vista版本。它是64位吗?如果是这样,请将代码编译为x86,然后尝试。

0

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

0

它们是ActiveX控件,而不是小程序。

此外,如果我从Visual Studio命令提示符应用editbin.exe,或者如果使用上述的构建后事件并关闭Visual Studio宿主进程,则该程序仍然有效。

这是当我运行创建安装程序/部署项目,运行安装程序,然后尝试运行程序,它仍然崩溃。客户端机器可能不会有Visual Studio,所以在部署后我无法在目标机器上运行editbin.exe - 它需要在安装/部署项目中启动。所以我猜测主要输出的post-build事件没有被解雇,或者是在部署项目中重新启用DEP。

0

我只好到另一行添加到我的后生成事件

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

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

我从这里得到了主意。 Microsoft Forum