我开发了一个程序(在C#Winforms中)并通过我创建的Google网站进行分发。
我收到了某人的评论,如果没有DEP禁用它就无法运行(他有Windows 7)。
我读了一些关于DEP的事情,我明白它会阻止任何尝试使用RAM运行的程序,而这些程序可以保存到windows系统......
这是我在开发程序时所做的事情吗?我为该程序创建了一个安装项目,因此它创建了一个msi文件。有没有办法阻止我的程序在RAM上运行那些禁止的部分(如果我当然理解正确的话)?
指向我网站的链接,如果有帮助的话 - https://sites.google.com/site/chessopeningmaster/
答案 0 :(得分: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,是处理器在硬件中实现的数据执行防止机制。关于它的Wikipedia article非常好。
这是由任何现代版本的Windows(XP SP2及更高版本)和任何现代处理器强制执行的。如果您的程序在您的计算机上正确执行,您可以放心地假设您的程序实际上与DEP兼容。
因此,无论出于何种原因,该用户可能会看到您的程序崩溃,并开始修改他可用的工具。就像关闭DEP执法一样。从技术上讲,这可能会阻止崩溃。但这并不意味着程序运行正常。这绝对不意味着你应该关掉这个选项。通过使用/ nxcompat:no选项运行editbin.exe在技术上是可行的。
如果您想继续这样做,那么您应该向用户询问崩溃过程的小型转储。