25

vs2012 用と vs2010 用の両方の vcredist をインストールする必要がある可能性はありますか?

アプリが .dll を読み込めないというエラーが発生し、無関係なインストールを行った後に突然動作し始めたので、問題を修正した古い vcredist をインストールしたに違いないと推測しました。ただし、c++ 11 の機能を使用していると確信しています。

4

4 に答える 4

16

展開はそれ自体が仕事です。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 つが常に存在します。

于 2013-09-03T19:30:17.227 に答える
8

この問題を次のように解決しました(Windows 7の場合):

  1. ライブラリをロードしようとしましたが、「サイド バイ サイド情報が正しくないため、アプリケーションを開始できませんでした」と表示されて失敗しました。
  2. 「コンピュータの管理」ウィンドウを開きました: [スタート] -> [コンピュータ] を右クリック -> [管理]。
  3. 「コンピューターの管理」ウィンドウで、「イベント ビューアー」->「Windows ログ」->「アプリケーション」を選択しました。
  4. エラーに対応するログには、特定のバージョンの Microsoft.VC90.CRT の DLL が見つからないことが示されていました。私の場合、バージョンは 9.0.30729.6161 で、Google で検索すると、ここから再配布可能ファイルの「通常とは異なる」バージョンをインストールする必要があることがわかりました。

依存関係ウォーカーは私には役に立ちませんでした (不要な依存関係を報告して混乱させただけでした)。

于 2014-05-03T18:45:51.363 に答える
8

必要なランタイムを知りたい場合は、win10 などの最新のシステムで動作する github ( https://github.com/lucasg/Dependencies ) の lucasg の「依存関係」ツールを使用してみてください。

依存関係ツリーでMsVcR##.dllo (# は数字を表す)を探すだけです。VcRuntime###.dll

HTH

PS: 私たちが何年も使用してきた古くて忠実な「依存関係ウォーカー」は、新しい OS が遅延した依存関係を処理する方法を処理できないようであり、それらを「不足している」とマークします。知らない方法で…

于 2018-03-19T17:27:36.237 に答える