首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Windows服务保护数据执行

使用Windows服务保护数据执行
EN

Stack Overflow用户
提问于 2012-02-10 13:58:12
回答 1查看 2.2K关注 0票数 1

我运行的是64位Windows 7旗舰版。

我有一个windows服务(用C#编写),它调用南非一家主要电信服务提供商(TELKOM)发布的动态链接库。这个动态链接库叫做MPIEst.dll,我相信它是用C++写的。link (http://social.msdn.microsoft.com/Forums/en-US/windowscompatibility/thread/a7e5aafc-bb52-42c3-a3b7-19cb4cfbf6d5/)的人也有和我一样的问题。

在做了一些研究之后,我发现DEP (数据执行保护)是导致错误"Unable to load DLL 'MPIest.dll':Invalid access to memory location. (Exception from HRESULT: 0x800703E6)“的罪魁祸首。所以我想“好吧,这很简单……让我们关闭整个计算机的DEP,看看会发生什么”。所以我这样做了,结果是weirder...The windows服务成功运行,就像什么都没有发生一样,但对DLL的所有调用都不会做任何事情。

我之所以知道这一点,是因为当我编写一个使用动态链接库的普通C#控制台应用程序时,动态链接库方法返回值并且工作正常,但是当从windows服务内部运行时,动态链接库方法返回一个非零的结果,这表明出现了错误。问题是,没有文档说明返回代码的含义。

无论如何,底线是,以某种方式关闭整个系统的DEP并不会影响windows服务。以前有没有人遇到过这种情况?windows服务和控制台应用程序调用完全相同的代码,做完全相同的事情,但控制台应用程序工作正常,而windows服务静默不做任何事情,但整个系统的DEP是关闭的。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-13 22:30:52

找到了解决方案。解决方案实际上有两个方面。首先是DEP,您需要关闭整个计算机,然后重新启动计算机(这是因为不能通过控制面板关闭windows服务的DEP )。

其次,我使用"ProcessMonitor“应用程序来查看windows服务和"MPIEst.dll”在幕后对windows操作系统做了什么。结果是DLL在系统目录文件夹中搜索它所依赖的文件(client.mpi),即使该文件与windows服务可执行文件在同一目录中也是如此。因此,我添加了代码,将必要的文件复制到系统目录中,一切都正常了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9223405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档