古いアプリを起動したときに、msvcr100.dllやmsvcr120.dllが見つからないという次のようなエラーが出たら、DLL名の数字とアプリのビット数(x86 / x64)から、入れる再頒布可能パッケージを決めます。
MSVCR100.dll が見つからないため、コードの実行を続行できません。
プログラムを再インストールすると、この問題が解決する可能性があります。
msvcrで始まるDLLは、Visual Studio 2013までのVisual C++で作ったアプリが使うCランタイムです。同じ世代のMFCのDLLと同じ再頒布可能パッケージに入っているので、MFCを使うアプリでも使わないアプリでも、入れるものは同じです。
msvcr100.dll / msvcr120.dllの数字から再頒布可能パッケージを決める
Microsoftの再頒布するDLLの決め方には、Visual Studio 2015より前のCランタイムは、名前に版の数字が付いた再頒布可能なDLLだったと書かれています。msvcr100.dllの100はVisual C++ 10.0(Visual Studio 2010)、110は11.0(2012)、120は12.0(2013)です。同じ数字のmsvcp100.dllなどはC++標準ライブラリ(std::vectorなど)のDLLで、入れるパッケージはmsvcrと同じです。
| エラーに出たDLL名 | アプリを作ったVisual Studio | 入れるもの |
|---|---|---|
| msvcr100.dll / msvcp100.dll | Visual Studio 2010(VC++ 10.0) | Visual C++ 2010 SP1の再頒布可能パッケージ(10.0.40219.325) |
| msvcr110.dll / msvcp110.dll | Visual Studio 2012(VC++ 11.0) | Visual C++ 2012 Update 4の再頒布可能パッケージ(11.0.61030.0) |
| msvcr120.dll / msvcp120.dll | Visual Studio 2013(VC++ 12.0) | Visual C++ 2013の再頒布可能パッケージ(12.0.40664.0) |
| msvcr90.dll / msvcr80.dll | Visual Studio 2008 / 2005 | Visual C++ 2008 SP1 / 2005 SP1の再頒布可能パッケージ。DLL名ではなく「サイド バイ サイド構成が正しくない」で止まることがある(サイド バイ サイド アセンブリ) |
| msvcr100d.dll、msvcp120d.dllなど末尾にdが付くもの | Debug構成でビルドしたexe | 入れられない。配布元がReleaseでビルドし直す |
| VCRUNTIME140.dll | Visual Studio 2015以降 | 今のv14の再頒布可能パッケージ(DLL名の早見表) |
2010・2012・2013のパッケージは、MicrosoftのVisual C++再頒布可能パッケージのページの「Unsupported legacy versions」の欄からダウンロードできます。表の版の数字はこのページに載っている最新の版で、ファイル名はどれもvcredist_x86.exeとvcredist_x64.exeです。どれもサポートが終わったランタイムなので、アプリの配布元に新しい版が無いかも確かめておきます。
Visual Studio 2015からは、CランタイムがVCRUNTIME140.dllとユニバーサルCRT(UCRT)に分かれました(同じ「再頒布するDLLの決め方」のページ)。今のv14のパッケージ(vc_redist)は2015以降のアプリのためのもので、msvcr100.dllやmsvcr120.dllはv14のパッケージでは入りません。再頒布可能パッケージは世代ごとに別々に入れます。
同じ世代のmsvcp100.dllやmfc100u.dllも同じパッケージで入る
Visual Studio 2010の資料Redistributing Visual C++ Filesには、Visual C++の再頒布可能パッケージは「Visual C++のライブラリをすべてインストールし、登録する」と書かれています。同じ時代の配布の手順では、UnicodeのMFCアプリを動かすのにmfc100u.dllとmsvcr100.dllの2つを使っています。共有DLLのMFCを使うアプリは、MFCのDLLとCランタイムのDLLの両方を読み込むので、msvcr100.dllのエラーを直したあとにmfc100u.dllのエラーが出ることもあります。その場合も、同じVisual C++ 2010 SP1のパッケージを入れます(mfc100u.dllについてはmfc100u.dllの記事)。
ただし、msvcr100.dllが1つあるからといって、同じ世代のDLLが全部そろっているとは限りません。MFCのダイアログアプリから、msvcr・msvcp・mfcの3つを世代ごとにLoadLibraryで読み込んでみました。読み込めたものは読み込み元のフォルダーとファイルバージョンを、読み込めなかったものはエラー番号を表に出しています。

Visual Studio 2026で作ったMFCのダイアログを、x64とWin32でビルドして試しました。この画像のPCでは、64bitのmsvcr100.dllとmsvcp100.dllがC:\Windows\System32にありましたが、mfc100u.dllはエラー126(指定されたモジュールが見つかりません)で読み込めませんでした。2012と2013の世代は、msvcr・msvcp・mfcの3つとも読み込めています。何がmsvcr100.dllとmsvcp100.dllだけを入れたのかは確かめていません。2010の資料には、パッケージのほかに、マージモジュールやexeと同じフォルダーへのコピーでDLLを1つずつ配る方法も書かれています。同じ世代のDLLが次々に見つからないと言われるときは、DLLを1つずつ探すよりも、その世代のパッケージを入れるほうが早く済みます。
x86版かx64版かはアプリのビット数で選ぶ
再頒布可能パッケージのアーキテクチャは、Windowsではなくアプリに合わせます(再頒布可能パッケージのページ)。64bit版のWindowsでは、C:\Windows\System32は64bitのアプリのためのフォルダーで、32bitのアプリがSystem32を見に行くとC:\Windows\SysWOW64へ振り替えられます(File System Redirector)。そのため、System32に64bitのmsvcr100.dllがあっても、32bitのアプリはそれを読み込めません。
上と同じPCで、同じアプリをWin32でビルドして動かしました。表の最後の行は、MSVCR100.dllを取り込むだけの小さなexeを起動した結果です。x64版のexeは起動できましたが(上の画像の最後の行)、Win32版のexeは0xC0000135で起動できませんでした。冒頭のエラーの文は、この0xC0000135の意味をWindowsから取ったものです。

このPCで32bitのアプリを動かすには、Visual C++ 2010 SP1のvcredist_x86.exeが要ります。x64版のパッケージが入っていても、32bitのアプリのエラーは直りません。
アプリのビット数は、Visual Studioが入っているPCならDeveloper Command Promptで確かめられます。
dumpbin /headers YourApp.exe | findstr machine
machineの行が14Cならx86、8664ならx64です。上の画像の1行目の「Machine = 0x8664」「Machine = 0x014C」は、exeのこの値をアプリ自身が読んで出したものです。どちらか分からないときは、64bit版のWindowsにはx86版とx64版の両方を入れます。32bit版のWindowsにはx64版を入れられない(再頒布可能パッケージのページ)ので、x86版だけです。
入れても直らないとき
エラーのDLL名の末尾にdが付いている(msvcr100d.dll、msvcp120d.dllなど)ときは、Debug構成でビルドしたexeが配られています。Debug版のDLLは再頒布できず(再頒布するDLLの決め方)、パッケージを入れても入りません。配布元がReleaseでビルドし直す必要があります。
パッケージを入れたのに同じエラーが出るときは、入れたパッケージの世代とビット数を見直します。msvcr120.dllのエラーに2010のパッケージを入れても直らず、32bitのアプリにはx86版が要ります。同じ世代でも、入れたパッケージの版がアプリより古いと足りないことがあります。Microsoftは、パッケージのメジャー版がアプリを作ったツールセットと同じで、マイナー版が同じか新しいことを求めています(再頒布するDLLの決め方)。古いインストーラーを使い回さず、上の表の版を入れ直します。
ダウンロードサイトから拾ったmsvcr100.dllをexeの横に置く方法は避けます。exeのフォルダーに置いたDLLはWindows Updateで更新されず、更新は置いた側が受け持つことになります。Microsoftは、再頒布可能パッケージで中央に入れる方法を勧めています(再頒布するDLLの決め方)。
まとめ
- msvcr100.dllはVisual C++ 2010 SP1、msvcr110.dllは2012 Update 4、msvcr120.dllは2013の再頒布可能パッケージを入れる。同じ数字のmsvcpやmfcのDLLも同じパッケージに入る。
- 今のv14のパッケージ(vc_redist)ではmsvcr100.dllなどは入らない。世代ごとに別々に入れる。
- x86版とx64版は、Windowsではなくアプリのビット数で選ぶ。System32に64bitのmsvcr100.dllがあっても、32bitのアプリはSysWOW64を探すので起動できない。
- 末尾にdが付くDLLはDebug版で、配布元がReleaseでビルドし直す。
