.NET COM dllのデプロイ、エラーの取得(0x80070002)

.net assemblies com
.NET COM dllのデプロイ、エラーの取得(0x80070002)

Webサーバーに展開しようとしている.NET COMアセンブリがあります(IIS 6 Win 2003)。 このアセンブリをテスト環境に正常に展開しましたが、運用環境は機能していません。

アセンブリは、従来のASPページから呼び出されています。 そのページが「 Set LTMRender = CreateObject(" LTMRender.Render ")」でアセンブリを初期化しようとするたびに、「 Error Type :,(0x80070002)」というエラーが表示されます。

このエラーは、許可が拒否されたか、ファイルが見つからないという問題を示しているようです。

アセンブリがWebページの外部で機能するかどうかを確認するテストアプリを作成しました。 .exeはアセンブリを初期化してから、失敗するように設計された呼び出しを行い、その結果、アセンブリがログファイルを生成します。 アセンブリと同じフォルダーで.exeを実行すると動作しますが、他の場所で実行すると失敗します。

何らかの理由で、アセンブリはフォルダの外部からアクセスできません。

これがうまくいかない理由がわかりません。 私が確認したこと:

  • 展開フォルダーには適切なアクセス許可があります。

  • アセンブリがインストールされているフォルダーには、
    すべての必要なユーザーアカウントの正しいアクセス許可。

  • アセンブリは厳密な名前で署名され、登録されました
    regasm.exe C:_WebSites \ LTMRender \ LTMRender.dll / codebase /tlb:C:_WebSites\LTMRender\LTMRender.tlb Regasmは成功を報告しました。

  • アセンブリには、属性と関連するGUIDが正しく設定されています。

任意のヒント?

EDIT

testapp.exeに対してfilemonを実行しましたが、問題が何であるかが示されているようです。 testapp.exeがD:_websites \ DocWebV2 \またはD:_websites \ DocWebV2 \ LTMRender \フォルダーで実行されると成功し、filemonはD:_websites \ DocWebV2 \ LTMRender \ pinPDF.dll SUCCESSを表示します

D:_websites \ DocWebV2 \ Clientでtestapp.exeを実行すると、aspページが実行され、D:_websites \ DocWebV2 \ pinPDF.dll NAME NOT FOUNDが表示され、次にD:_websites \ DocWebV2 \ pinPDF \ pinPDF.dllが表示されますファイルが見つかりません

この特定のフォルダのみにある場合に、正しいフォルダが表示されない理由はわかりません。

  1  1


ベストアンサー

ファイルが見つからない場合、権限の問題ではありません。 7はWindowsエラーを示し、2はERROR_FILE_NOT_FOUNDです。 COM可視コンポーネントの通常の問題は、WindowsまたはCLRが依存DLLを見つけることができないことです。 しかし、それは異なるエラーコードを生成するはずです。 ファイルのフルパス名を使用せずにファイルを開こうとすると、ソースコードで問題を探します。 作業ディレクトリはサーバー上で異なります。 これを解決する最良の方法は、デバッガを使用することです。

1


これで問題が見つかりました。 私はそれを完全に理解しているとは言えませんが、機能しています。 パスに集中できるようになってくれたnobugzに感謝します。

Filemonは、テスト環境で検出された依存(マネージ.NET).dllを示していましたが、本番環境では見つかりませんでした。

重要なのは、実稼働環境でネットワークチームが別のフォルダーに展開してからテストすることを選択したことです。

  • PROD * + D:_Websites \ DocWebV2 \ LTMRender + * TEST * + D:_Websites \ LTMRender

PRODと同じフォルダー構造を使用するようにTESTを変更すると、問題は再現可能になりました。

登録されているため、COM .dllであるアセンブリが見つかりました。 依存する.dllが登録されていなかったため、WindowsはGAC全体をチェックし、次にPATHフォルダー、実行中のプロセスフォルダーをチェックして、見つかりませんでした。

「実行プロセスフォルダー」は.dllフォルダー(依存する.dllを呼び出すため)であると常に想定していましたが、Webページが実行プロセスのように見えます。

今、私が理解していないのは、D:_Websites \ LTMRenderがチェックされる理由です。 PATHにはありません。 d:_WebSitesはそこにあるすべてのWeb設定のルートフォルダーであるため、IISはこれで何かを実行していると想定しています。 私はIISの専門家ではないので、これが何らかの形でこれを制御していると思います。

1


タイトルとURLをコピーしました