2

私はでWindows 2000動作するように動作するプログラムを取得しようとしていWindows 2003ます。プログラムを動作させるためにこれまでにやらなければならなかったことはすべてWindows 2003、正しくない構成に関係していました。現在、このコードは次のとおりです。

chr = pAdapterEnvPtr.CreateInstance(__uuidof(PFADAPTERMNGLib::PFAdapterEnv));

戻ってきました:

0x8007007E

または言い換えれば:

The specified module could not be found.

他に2つのプログラムと別の.dllがあり、それらのクラスのインスタンスを正常に作成できます。しかし、これは失敗するようです。

私は以前Procmon、プログラムが何を見つけられないかを理解しようとしましたが、プログラムがProcmon何かを見つけられなかったことを示す可能性のあるものは何も表示しませんでした。

OleView、クラスのインスタンスを作成しようとすると、次の画像が表示されます。

IClassFactory::CreateInstanceが失敗しました。 指定されたモジュールが見つかりませんでした。 重大度:SEVERITY_ERROR、ファシリティ:FACILITY_WIN32($ 8007007E

画像の左側を見ると、のインスタンスを作成しようとするPFComgMngと同じエラーが発生します。(PFAdapterEnvそしてPFCompMng同じプロセスを使用しますPFAdapterMng.exe。)ただしPFMQMonitor、、、PFSendおよびPFTraceすべてが正しく機能します。(、、、およびを使用PFMQListen.exeします。)PFSend.dllPFTraceService.exe

私が注意したかったもう1つのことは、次のコードです。

hr = pPFCompMng.CreateInstance(__uuidof(PFADAPTERMNGLib::PFCompMng));

から以前に呼び出された場合は、完全に正常に機能しPFAdapterMng.exeます。したがって、モジュールを正常に見つけてインスタンスを作成できるように見えPFAdapterMng.exeますが、クラス内のいずれかのインスタンスを作成しようとする他のプロセスPFAdapterMng.exeはモジュールを見つけることができず、このエラーが発生します。

この特定のケースを支援していないのでProcmon、他のプロセスがモジュールを見つけるのを妨げているものを理解するために私が何ができるかを誰かが知っていますか?

アップデート:

サービスとして実行する必要があるため、Dependency Walkerプロファイリングで実行できません。プロファイリング中に実行し、のインスタンスを作成して、メッセージボックスが表示された理由を調べようとしました。残念ながら、何かが欠けていることを示していませんでした。PFAdapterMng.exePFTraceService.exeDependency WalkerOleViewPFAdapterEnvPFCompMngModule not foundDependency Walker

UPDATE2:

ログに何かが足りなかったProcmonので、通話をステップオーバーする直前と通話の直後にイベントをキャプチャして新しいログを作成しましたCreateInstance。多分誰か他の人が見て、私がそれを逃したかどうか教えてくれるでしょうか?何かを見つけることができなかった兆候を見つけることがPFMQListen.exeできません。

Procmonこれは、ファイル、.csvファイル、およびファイルを含むzipフォルダーへのリンク.xmlです。

http://www.mediafire.com/?07jq8zj7emmpsvd

UPDATE3:

そのため、Dependency Walkerプロファイルモードで実行して、のインスタンスを作成することができましたPFAdapterEnvDependency Walker欠落しているものは見つかりませんでした.dll

したがって、Procmon何も表示されません。また、表示されませんDependency Walker。アセンブリレベルでコードをステップ実行していたollydbgところ、関数でエラーが発生したことに気付きましたNdrClientCall2。これが何か意味があるのか​​わかりません。

他に何を試すことができるかについてのアイデアはありますか?人々は私がこの問題を解決するのを助けるためにもっと多くの情報を必要としていますか?もしそうなら、聞いてください。

UPDATE4:

を使っ/RegServerてアプリケーションを登録してみましたが、うまくいきました。以前に使用してみましたが、を使用/RegServerしてすべての登録を解除し/UnregServerました。今回は、別のIDでComponent Services実行したかったので、必要なコンポーネントも削除しました。PFAdapterMng

/RegServerしたがって、アプリケーションを実行してダブルクリックすると、すべてが機能するように見えます。ただし、すべてを別の構成で実行したいと思います。

アプリケーションを次のように動作させるためにすべてを構成するにはどうすればよいですか。

PFAdapterMng.exe-として登録し/Service、別のIDで実行するservices.msc PFTraceServer.exe-として登録し/Service、別のIDで実行するservices.msc

PFMQListen.exe-/RegServerによって開始されるものとして登録しますPFAdapterMng PFMQSend.dll-に登録Regsvr32され、によってロードされますPFAdapterMng

ありがとう、Krzys

4

1 に答える 1

0

私の推測では、実行可能ファイルの一部の DLL 依存関係の検索パスに関連していると思われます。すべてのモジュールで「Dependency Walker」を試して、すべての DLL が利用可能かどうかを確認できます: http://www.dependencywalker.com/ 必要に応じて検索 PATH を更新します。

于 2011-07-30T08:18:04.043 に答える