1

我开发了一个程序(在 C# Winforms 中)并通过我创建的 Google 站点分发它。

我从某人那里得到一条评论,说如果没有禁用 DEP(他有 Windows 7),它就无法工作。

我读了一些关于 DEP 的东西,我知道它会阻止任何试图使用 RAM 运行的程序,这些程序应该保存到 Windows 系统......

这是我在开发程序时所做的事情吗?我为该程序制作了一个安装项目,因此它创建了一个 msi 文件。有没有办法阻止我的程序在 RAM 上运行那些被禁止的部分(如果我理解正确的话)?

如果有帮助,请链接到我的网站 - https://sites.google.com/site/chessopeningmaster/

4

1 回答 1

2

所有 .NET 程序,至少从 .NET 2.0 开始,但可能更早,都声明自己与 DEP 兼容。这是通过可执行文件头中的标志来完成的。当您从 Visual Studio 命令提示符对 EXE 运行 dumpbin.exe /headers 时,您可以看到它:

...
       2 subsystem (Windows GUI)
    8540 DLL characteristics
           Dynamic base
           NX compatible                       // <=== here
           No structured exception handler
           Terminal Server Aware
  100000 size of stack reserve
....

“NX”表示Never eXecute,一种由处理器在硬件中实现的数据执行预防机制。关于它的维基百科文章非常好。

这是由任何现代版本的 Windows(XP SP2 和更高版本)和任何现代处理器强制执行的。如果您的程序在您的机器上正确执行,您可以放心地假设您的程序实际上与 DEP 兼容。

所以这个用户可能看到你的程序崩溃了,不管什么原因,并开始修补他可用的工具。就像关闭 DEP 执法一样。从技术上讲,这有可能阻止了崩溃。然而,这并不意味着程序运行正常。这当然并不意味着您应该关闭此选项。这在技术上可以通过运行带有 /nxcompat:no 选项的 editbin.exe 来实现。

如果你想追求这个,那么你应该向用户询问崩溃进程的小型转储。

于 2012-11-01T19:25:45.430 回答