vs2012 用と vs2010 用の両方の vcredist をインストールする必要がある可能性はありますか?
アプリが .dll を読み込めないというエラーが発生し、無関係なインストールを行った後に突然動作し始めたので、問題を修正した古い vcredist をインストールしたに違いないと推測しました。ただし、c++ 11 の機能を使用していると確信しています。
vs2012 用と vs2010 用の両方の vcredist をインストールする必要がある可能性はありますか?
アプリが .dll を読み込めないというエラーが発生し、無関係なインストールを行った後に突然動作し始めたので、問題を修正した古い vcredist をインストールしたに違いないと推測しました。ただし、c++ 11 の機能を使用していると確信しています。
展開はそれ自体が仕事です。Windows でインストールを作成する方法が嫌いです。…今は気分が良くなっています…</p>
必要な vcredist は 1 つだけです。リンカーがプログラムをリンクすることを決定したもの。「Windows SDK」がインストールされている場合、実際の再配布は次の場所にあります。
C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\vcredist_x86
重要でないものを含むすべての更新プログラムをインストールすると、Microsoft はそのフォルダー内の再配布リストを更新します!
実行したくない実行可能ファイルがある場合は、依存関係 walkerが必要です。非常に便利なツールであり、Microsoft は Visual Studio から削除しなければなりませんでした。プログラムをダウンロードし、exe を開きます。実際に何が起こるかを理解する必要はありません。開いているときにダイアログが表示されない限り、下のウィンドウに感嘆符が表示されていても問題ありません。ダイアログに「解決できませんでした」などのメッセージが表示された場合は、下部のウィンドウを確認してください。通常、下のウィンドウには「msvcr.dll」または「msvcr100.dll」または「msvcr110.dll」のようなものがあります。「msvcr100d.dll」のように拡張子の前に「d」が含まれている場合、実行可能ファイルはデバッグ モードでコンパイルされており、コンパイラがインストールされていないシステムで作業が終了します。そうでない場合は、
msvcr100 = VS 2010 再配布(32 ビット) (64 ビット)
msvcr110 = VS 2012 再配布(32/64 ビット?)
msvcr ではない場合もありますが、常に "ms" で始まります。もちろん、プログラムは、microsofts だけでなく、dll のどのコマンドが使用されているかだけでなく、欠落しているすべての dll を通知します。これは時々非常に便利です。実行可能ファイルのフォルダー内のすべての dll に対して、解決できない依存関係がある可能性があるため、これを行う必要があります。
最初の質問に戻ります。プログラムは msvcr100 または msvcr110 にしかリンクできず、両方にはリンクできません。これが、実行可能ファイルごとに必要な vcredist が 1 つだけである理由です。解説で述べたように、サード パーティの DLL は異なる msvcp バージョンを使用している可能性があります。そうです、使用するすべての DLL を検索する必要があり、両方の vcredist を何度かインストールする必要があります。
PS: msvcr と msvcp の少なくとも 2 つが常に存在します。
この問題を次のように解決しました(Windows 7の場合):
依存関係ウォーカーは私には役に立ちませんでした (不要な依存関係を報告して混乱させただけでした)。
必要なランタイムを知りたい場合は、win10 などの最新のシステムで動作する github ( https://github.com/lucasg/Dependencies ) の lucasg の「依存関係」ツールを使用してみてください。
依存関係ツリーでMsVcR##.dll
o (# は数字を表す)を探すだけです。VcRuntime###.dll
HTH
PS: 私たちが何年も使用してきた古くて忠実な「依存関係ウォーカー」は、新しい OS が遅延した依存関係を処理する方法を処理できないようであり、それらを「不足している」とマークします。知らない方法で…