使用Windows服务进行数据执行保护
我正在运行Windows 7 Ultimate 64位。使用Windows服务进行数据执行保护
我有一个Windows服务(用C#编写)调用由南非一家大型电信服务提供商(TELKOM)发布的dll。该DLL被称为MPIEst.dll,我相信它是用C++编写的。链接中的人(http://social.msdn.microsoft.com/Forums/en-US/windowscompatibility/thread/a7e5aafc-bb52-42c3-a3e7-19cb4cfbf6d5/)有一样的问题,我有。
经过一番研究,我发现DEP(数据执行保护)是由于错误“无法加载DLL'MPIest.dll':内存位置无效访问(来自HRESULT的异常:0x800703E6)”。所以我想“好吧,这很简单......让我们关闭整个电脑的DEP,看看会发生什么”。所以我这样做,结果变得更加怪异...... Windows服务成功运行,没有任何反应,但所有对DLL的调用都不做任何事情。
我知道这一点,因为当我编写使用DLL的正常C#控制台应用程序时,DLL方法返回值并正常工作,但是当从Windows服务中运行时,DLL方法返回一个非零结果,表明出了点问题。问题是没有说明返回代码含义的文档。
无论如何,底线是以某种方式关闭整个系统的DEP不会影响Windows服务。 有没有人遇到过这个? Windows服务和控制台应用程序调用完全相同的代码并执行完全相同的操作,但控制台应用程序正常工作,而Windows服务默默无闻,但DEP关闭整个系统。
在此先感谢。
回答:
找到解决方案。解决方案实际上是双重的。 首先是DEP,您需要关闭整个计算机,然后重新启动计算机(这是因为无法通过控制面板关闭Windows服务的DEP)。
然后,其次,我使用“ProcessMonitor”应用程序来查看Windows服务和“MPIEst.dll”在幕后操作系统。事实证明,即使该文件与Windows服务可执行文件位于同一目录中,该DLL仍在搜索它所依赖的文件(client.mpi)在系统目录文件夹中。 因此,我添加了代码,将必要的文件复制到系统目录,一切正常。
以上是 使用Windows服务进行数据执行保护 的全部内容, 来源链接: utcz.com/qa/257350.html