C#应用程序关闭WIN7系统DEP执行保…

本文介绍了在开发C#应用程序时遇到的Windows DEP(数据执行保护)拦截问题,以及如何通过修改项目后期生成事件命令行,使用editbin.exe工具关闭DEP以确保程序正常运行。在打包MSI安装包后,发现命令行失效,经过排查,最终确定是OBJ文件夹下的EXE未执行关闭DEP的脚本,修改OBJ目录下的EXE后解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     最近在做项目,由于应用程序中调用了第三方的DLL,运行在WIN7上发现被DEP拦截了,程序跑不起来。网上一阵搜索发现是由于VS开发工具在编译C#项目的时候会在PE头文件里面将DEP开关打开,而C#工程又没有这个关闭的开关【C++工程是有这个开关的】,最后终于找到了一个方法,在项目生产后执行事件里添加关闭DEP命令行即可。

项目属性---》生产事件---》后期生成事件命令行---》编辑后期生成事件

命令行:

 call $(DevEnvDir)..\tools\vsvars32.bat

 editbin.exe /NXCOMPAT:NO $(TargetPath)

 

编译后,运行即不会被系统DEP拦截,这个是编译后的EXE。

接下来我又碰到另外一个问题,就是将EXE打包到安装部署工程里,编译为MSI安装包,给客户端安装。在打包完成生产MSI,安装后发现这个命令行失效了。

是什么原因呢?

想想看,有没有可能是路径问题?安装到不同文件夹后发现不是路径问题。

......

后来发现是EXE问题,我们做安装部署项目的时候都是有用BIN/RELEASE 下面的EXE,这个EXE也是我上面执行命令的EXE,那为什么就不行呢?在安装部署项目中可以看到EXE的属性里引用路径就是BIN/RELEASE 下面的。我们还有一个怀疑点就是OBJ文件夹下面的,VS在运行的时候会引用到这个EXE,经过我尝试修改OBJ下面的EXE后发现成功了,居然是OBJ下面的EXE没有运行脚本导致的,原来安装部署项目里面显示引用的BIN下面的EXE实际确引用OBJ下面的。这个应该是个BUG,困扰我好几天。<

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值