2

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

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

http://jtstroup.net/CommentView,guid,3fa30293-a3a4-4a1c-a612-058e751ad151.aspx上的文章有几个解决方案。页面底部的修复,来自 Visual Studio 命令提示符的 editbin.exe /NXCOMPAT:NO 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 回答
1

根据这篇文章

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

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

于 2009-02-04T11:54:47.920 回答
0

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

于 2009-02-04T00:02:38.560 回答
0

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

于 2009-02-04T02:42:55.273 回答
0

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

同样,如果我从 Visual Studio 命令提示符应用 editbin.exe,或者如果我使用上述构建后事件并关闭 Visual Studio 托管进程,则程序可以工作。

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

于 2009-02-04T03:38:28.577 回答
0

我不得不在我的后期构建事件中添加另一行

调用 "$(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 回答