1

Windows 7 Ultimate 64 ビットを実行しています。

ここ南アフリカの主要な通信サービス プロバイダー (TELKOM) によってリリースされた dll を呼び出す Windows サービス (C# で記述) があります。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 がオフになります。

前もって感謝します。

4

1 に答える 1

2

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

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

于 2012-02-13T14:30:51.603 に答える