2012-02-10 10 views
1

私はWindows 7 Ultimate 64ビットを実行しています。Windowsサービスでのデータ実行防止

南アフリカ(TELKOM)の主要テレコムサービスプロバイダからリリースされたdllを呼び出すWindowsサービス(C#で書かれています)があります。 DLLはMPIEst.dllと呼ばれ、C++で書かれていると思います。リンク先の人(http://social.msdn.microsoft.com/Forums/en-US/windowscompatibility/thread/a7e5aafc-bb52-42c3-a3b7-19cb4cfbf6d5/)には同じ問題がありました。

DEP(Data Execution Prevention)が「DLL 'MPIest.dll'を読み込めません:メモリロケーションへのアクセスが無効です(HRESULT:0x800703E6の例外)」というエラーが発生していることがわかりました。だから、私は「OK、それは簡単です...コンピュータ全体のDEPをオフにして、何が起こるかを見てみましょう」と考えました。だから私はこれを実行し、結果はさらに奇妙になります... Windowsサービスは何も起こらないように正常に実行されますが、DLLへのすべての呼び出しは何もしません。

DLLを使用する通常のC#コンソールアプリケーションを作成したときに、DLLメソッドが値を返して正常に動作したためですが、Windowsサービスから実行すると、DLLメソッドはゼロ以外の結果を返します。何かが間違っていたことを示します。物事には、リターンコードが何を意味するのかを示すドキュメントはありません。

とにかく、システム全体のDEPを無効にしても、Windowsサービスには影響しません。 誰もこれまでに遭遇したことはありますか? Windowsサービスとコンソールアプリケーションはまったく同じコードを呼び出し、まったく同じことをしますが、コンソールアプリケーションは正しく機能しますが、Windowsサービスは何もしませんが、DEPはシステム全体でオフになっています。

ありがとうございます。

答えて

2

解決策が見つかりました。解決策は実際には2倍です。 まず、DEPがあります。これは、コンピュータ全体をオフにしてから、コンピュータを再起動する必要があります(これは、コントロールパネルからWindowsサービスのDEPをオフにすることができないためです)。

次に、 "ProcessMonitor"アプリケーションを使用して、Windowsサービスと "MPIEst.dll"がWindows OSで何をしているのかを確認しました。ファイルがWindowsサービスの実行可能ファイルと同じディレクトリにあったとしても、システムディレクトリフォルダー内の依存ファイル(client.mpi)をDLLが探していたことが判明しました。 私は、システムディレクトリに必要なファイルをコピーするコードを追加しました。

関連する問題