2

最近インストールで多くの問題を引き起こしているサードパーティのlib+DLLが含まれています。依存関係ウォーカーを使用して、dll自体が2つの異なるバージョンを参照していることがわかりました。

MSVCR80.DLL:
Version 8.0.50727.4053 and
Version 8.0.50727.42

代替テキストhttp://img101.imageshack.us/img101/1734/dependencywalk2.jpg

ほとんどの場合、両方のバージョンを配布していなくても、インストールに問題はありません。しかし、多くの場合、インストールが開始されません。次に、SideBySideマネージャーからのWindowsシステムイベントログに「DLLのバージョンが一致しません」というメッセージが表示されます。ほとんどの場合、この問題は.NET Frameworkをインストールすることで解決できます(ただし、これは使用しません)。しかし、今ではこれが役に立たない場合があります。

両方のバージョンを共有アセンブリとしてインストールすることが解決策になることはわかっていますが、それは簡単ではないようです。さらに、もっと単純な解決策を好むでしょう。誰かが回避策を知っていますか?

どういうわけか、DLLの1つのバージョンのみを使用できますか?

編集: 私は今、クリスチャンのアドバイスを試しました:

D:\Develop\LEADTOOLS15\patch_maifest>mt.exe -inputresource:ltkrn15u.dll;#1 -out:old.manifest
Microsoft (R) Manifest Tool version 5.2.3790.2075
Copyright (c) Microsoft Corporation 2005.
All rights reserved.

mt.exe : general error c101008c: Failed to read the manifest from the resource of file "ltkrn15u.dll". Ressource not found.

フルパスでdllの依存関係を表示すると、次のように 表示されます。alt text http://img340.imageshack.us/img340/4122/dependencywalk3.jpg

下位のMSVCR80.DLLは、バージョンが...42のものです。私はこれを理解していません。MSVC P 80.DLLが、それ以外のバージョンとは異なるバージョンのMSVCR80.DLLを参照するのはなぜですか。それはおそらくdependencywalkerの問題ですか?

4

2 に答える 2

1

dllからマニフェストリソースを変更/更新する必要があります。

mt.exe -inputresource:dll_with_manifest.dll;#1 -out:old.manifest
mt.exe -manifest new.manifest -outputresource:dll_with_manfiest.dll;#1

RT_MANIFEST(タイプ24)リソースタイプのリソーステーブルに#1インデックスがない場合は、リソースビューア(ResourceHackerまたはResEdit)を使用してインデックス番号を確認する必要があります。マニフェストに#2のインデックス番号がある場合があります。

于 2009-10-13T11:11:52.290 に答える
1

最善のオプションは、アプリケーションインストーラパッケージ内で必要なDLLを出荷することです。少なくともサードパーティのDLLが依存するバージョンを使用してください。

Microsoftは、ランタイムDLL(vcredits_ *)用のスタンドアロンインストーラーを提供しています。VisualStudio 2005の最新バージョンは、ここからダウンロードできます。これは、DLLがリンクされているバージョンでもあります。インストーラーから再配布可能なパッケージをサイレントに起動できます。

すでにインストールされているシステムの手動回避策として、ターゲットマシンにredistインストーラーを適用するだけです。

この方法を選択した場合、古いバージョンに依存するアプリケーションは常に最新のものを使用するようにリダイレクトされるため、バージョンの競合を心配する必要はありません。

理解を深めるには、このMSDNの記事を参照してください。

于 2009-10-13T11:46:14.227 に答える