web-dev-qa-db-ja.com

REGSVR32:モジュール "xxxxx.dll"のロードに失敗しました...依存するアセンブリが見つかりませんでした

Windows 7 x64での* .dllの登録に関して問題があります。

* .dllをC:/ Windows/System32とC:/ Windows/SysWOW64の両方に配置して、昇格したコマンドプロンプトで "regsvr32 xxxxx.dll"に登録しようとしました。また、別のディレクトリから登録してみました。次のエラーで応答します。

The module "xxxxx.dll" failed to load.
Make sure the binary is stored at the specified path or debug it to check for problems with the binary or dependent .DLL files.
The application has failed to start because its side-by-side configuration is incorrect. Please see the application event log or use the command-line sxstrace.exe tool for more detail.

EventLogのメモ:

Activation context generation failed for "C:\(path-to-dll)
Dependent Assembly
Microsoft.VC90.ATL,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8" could not be found.
Please use sxstrace.exe for detailed diagnosis

N.B。 x86とx64の両方のMicrosoft Visual C++ 2010再頒布可能パッケージをインストールしました。

おもしろいのは、仕事用のx64 Windows 7ラップトップで同じ* .dllを登録しようとしたところ、期待どおりに登録されたことです。これは、ある種のC++依存関係が欠落している、またはATLに関連しているという事実に傾いていると思いますか?

誰かが私を正しい方向に向けるのを手伝ってくれるか、問題について追加の光を当てるなら;感謝以上だ。

よろしく。

8
Alfie J. Palmer

これはほぼ確実に依存関係が欠落しているためです。 Dependency Walker のようなツールを使用して、DLLの必要な依存関係を見つけます。または、DLLがサードパーティから提供されている場合は、必要な依存関係を指定する必要があるドキュメントをお読みください。

ご了承ください Microsoft.VC90.ATLは、VS2008であるMSVCのバージョン9を示します。したがって、その依存関係を満たすには、MSVC 2008ランタイムをインストールする必要があります。誤ってMSVC 2010ランタイムをインストールしたようです。

最後に、システムディレクトリにファイルを置かないでください。これはシステムに属しているため、変更しないでください。

13
David Heffernan

依存アセンブリMicrosoft.VC90.ATL、processorArchitecture = "x86"

これは、Visual C++ランタイムモジュールが欠落していることを示しています( Visual C++ Libraries as Shared Side-by-Side Assemblies を参照)。再配布可能なインストーラーとして使用できます( this はおそらく必要なものですx86バリアント)、DLLを登録する前にインストールする必要があります(これは、不足しているコンポーネントに依存します)。

4
Roman R.

これが失敗する別の理由もあります。私はたまたまこれに遭遇しました。 Windows 7をサポートしないAPIメソッドを使用していましたPathCchRemoveFileSpecなど 更新する必要がありました古いものに 非推奨PathRemoveFileSpec 。 Dependency Walkerを使用して、これが原因であることを確認しました。 Dependency Walkerは少しあります。下のスクリーンショットを見ると、赤いセクションは実際の問題を示しています-DLLで解決できなかったメソッドなど-しかし、青い部分は実際にはまったく問題のないDLLを示しています(これらはDLLが存在します)。 Dependency Walkerは非常に古いため、少し嘘をついています(時代遅れであり、時々何かが利用できないと考えています)が、通常、それはまた真実を伝えます...上から少し下にスクロールする必要があります私のように左ペイン。自己紹介:次回は下にスクロールしてください。とにかく、私が捨てたらpathcch.h、すべてが7.で動作しました。ハッピーコーディング。

enter image description here

1
Alexandru

regsvr32を介してx.dl​​lを登録しているときにも同じ問題に直面したため、x.dllがunmaged dllである可能性があることが原因の1つと考えられます。ドットネットコードでアンマネージDLLエクスポート関数を使用するには、Dllimportを使用する必要があります。

0
Ayush joshi

私はこのエラーメッセージから安心しました。私のバイナリパスには、SPACEがありました。 SPACEUNDERSCORE(_)に置き換えただけです。それは私のために働いた。

0