Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Windows服务防止数据执行_C#_Windows_Service_Dep_Data Execution Prevention - Fatal编程技术网

C# 使用Windows服务防止数据执行

C# 使用Windows服务防止数据执行,c#,windows,service,dep,data-execution-prevention,C#,Windows,Service,Dep,Data Execution Prevention,我运行的是64位Windows 7 Ultimate 我有一个windows服务(用C#编写),它调用南非一家主要电信服务提供商(TELKOM)发布的dll。DLL被称为MPIest.DLL,我相信它是用C++编写的。链接处的那个家伙(http://social.msdn.microsoft.com/Forums/en-US/windowscompatibility/thread/a7e5aafc-bb52-42c3-a3b7-19cb4cfbf6d5/)有点像我遇到的问题 在做了一些研究之后,

我运行的是64位Windows 7 Ultimate

我有一个windows服务(用C#编写),它调用南非一家主要电信服务提供商(TELKOM)发布的dll。DLL被称为MPIest.DLL,我相信它是用C++编写的。链接处的那个家伙(http://social.msdn.microsoft.com/Forums/en-US/windowscompatibility/thread/a7e5aafc-bb52-42c3-a3b7-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服务可执行文件位于同一目录中。 因此,我添加了代码,将必要的文件复制到系统目录,一切正常