0

ネットワーク ドライブ上の dll ファイルを使用する必要がある Windows サービスがあります。このネットワーク ドライブに接続したときに、この dll を Windows サービスへの参照として追加しました。この dll ファイルを追加することにより、自動的にさらに 2 つの参照ファイルが作成されました。このサービスには、dll からクラスのインスタンスを単純に作成するコードがあります。Visual Studio 2010 でこのコードをデバッグしているときに、F10 (ステップ オーバー) を押すと、例外がスローされます。

「CLSID {65EB3876-89FF-459F-BF24-02E8DD7F2DB2} のコンポーネントの COM クラス ファクトリを取得できませんでした。次のエラーが原因です: 8007007e 指定されたモジュールが見つかりませんでした。(HRESULT からの例外: 0x8007007E)。」

テスト用に、Windows フォーム アプリケーションで同じ dll と同じコードを使用しています。エラーは発生せず、クラス インスタンスが正常に作成されます。

ネットワークドライブの許可に関するものでしょうか?

4

1 に答える 1

1

Windowsサービスは異なる資格情報で実行される可能性が高いため、このアカウントのドライブマッピングは「表示」されないため、DLLへのパスは存在しません。エラーコードは、まさにこの問題を示しています。

サービスとリダイレクトされたドライブ

ドライブマッピングはログオンコンテキスト全体に存在するため、アプリケーションがLocalServiceアカウントのコンテキストで実行されている場合、そのコンテキストで実行されている他のサービスがマップされたドライブにアクセスできる可能性があります。

UNCパスを使用してDLLを再登録するか、DLLをローカルドライブにコピーして再登録するか、ドライブマッピングが存在する場合にインタラクティブと同じ資格情報で実行するようにサービスを設定する必要があります。

于 2012-04-02T06:51:36.920 に答える