最近工作上被恶心的够呛,参与部署了一个比较弱智的服务器程序,原理不过是在服务端不停的检索信息,根据信息内容和更新情况下发到下面客户端上,做一个弹窗提醒,只是提醒,没有其他任何多余的功能。

服务端在测试服务器上运行一切正常,1000 台机器一起连接也没啥问题,但是在服务器上运行就开始报错。

倒不是一开始就报错,而是运行了一段时间就报错,导致下面弹窗提醒功能失效,报错的内容很莫名其妙,就是一般的 Windows 那种“程序文件运行出错,点击关闭”之类的提示,没有其他任何信息。

让开发商看了一下,那家伙除了发邮件问上级其他什么都不知道,只能自己想办法了。

首先需要确定这玩意为什么会崩溃,看了下测试服务器是 Windows 7 ,而正式服务器是 Windows Server 2008 R2,两者应该没什么太大区别,于是在我某日找个屏幕开着远程没事盯着看的时候终于发现了报错的信息。

程序先是假死,然后弹出一个:

access violation at address xxxxxxxxx

继而弹出消失,直接显示”程序出错,点击关闭“

选区_239.png

根据搜索后,发现这个错误是一种使用 Delphi 开发的软件在启用 DEP 的系统上运行会出现的情况,问了半天开发商,最后确定这个小玩意的确是 Delphi 写的。

于是在 Windows Server 2008 R2 的系统设置 - 高级 - DEP 例外里添加程序,再次运行后,虽然速度还是一样的屎,但是观察了两天没有再报错。

参考:
http://jingyan.baidu.com/article/e4511cf3097c842b855eaf62.html