XPでVC2005ミックスモードDLLでフィルロデックスを引き起こすCRT依存関係を修正するにはどうすればよいですか?
-
11-10-2019 - |
質問
Visual Studio2005に組み込まれた混合モードDLLがあります。依存関係ウォーカーでは、私のDLLは次のCRT DLLの依存性を示しています。これは私のWindows 7開発マシンにあります。
C: Windows winsxs x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4927_none_d08a205e442db5b5 msvcp80.dll
" msvcr80.dll
" msvcm80.dll
8.0.50727.4927
Visual Studio 2005を使用してWindows 7 Dev Machineでは、これがコンパイルされ、正常に実行されます。問題は、最新のCRTがインストールされた状態でWindows XPテストマシンで実行されないことです。
XPマシンのDLLをdepenencyウォーカーにドラッグすると、 System32でDLLを検索しているようです(私はフルパスを表示しに行きましたが、それらにはパスがありませんでした。
問題は、WinSXSのCRTのこのバージョン(ビルド4927)がXPテストマシンにインストールされていないことです。 Visual Studio 2005があり、最新のCRTがインストールされています(SP1?)。
8.0.50727.4053 MSDNで見つけることができる最新バージョンです。
これは最もエキサイティングな質問ではないことを理解していますが、この4927ランタイムがどうなっているのか誰もが知っていますか?
* 編集 *
Mt.exeによって生成されたマニフェスト:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.4053" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.762" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly>
</dependency>
</assembly>
したがって、ターゲットを絞っている3つの異なるバージョンがあります...
解決
リビジョン4927は、おそらくMicrosoftバイナリが使用するWindows 7固有のバージョンです。ビルドはそれに依存するべきではありません。4053はVS2005の最後のものです。これをdepens.exe btwでトラブルシューティングしないでください。WinSXS依存関係を追跡するのは良くありません。
ビルドが生成する依存関係をダブルチェックすることにより、これをトラブルシューティングを開始します。 vc include crtassem.hを最初に見ると、_crt_assembly_versionマクロがマニフェストエントリを生成します。次は、実行可能ファイルに埋め込まれているマニフェストを確認することです。プロジェクトのリリースディレクトリには、埋め込まれた.embed.manifestファイルが含まれています。実行可能ファイルのファイル +オープン +ファイルを使用すると、実際の埋め込みRT_MANIFESTリソースを覗くことができます。