Windows PCのゲームやソフトが動かないときに確認したいのがVisual C++ランタイムです。
「DLLが見つかりません」「Visual C++のランタイムを入れてください」といったメッセージが出るときは、必要なランタイムが入っていません。
Visual C++ランタイムがどういうものか、確認方法、ダウンロード方法などを整理してみます。
Visual C++ランタイムとは
Microsoftが提供するライブラリで、Windows上で Visual C++で開発されたアプリケーションを実行するために必要なコンポーネントです。
多くのアプリケーション(ゲーム、オフィスソフト、ユーティリティなど)はVisual C++を使用して開発されている場合が多いです。
アプリに必要なランタイムを組み込んでいない場合、ユーザー側でインストールする必要があります。
複数のランタイムをどの順番で入れても問題ない
ランタイムのx86とx64は使うアプリに合わせる
x86は32bitアプリに必要なもの、x64は64bitアプリに必要なものです。32bitアプリを使う場合はx86パッケージを入れます。
ランタイムのパッケージ
正式な再頒布可能パッケージ
正式な再頒布パッケージが存在しないVisual C++バージョン
Visual C++ランタイムに含まれているもの
DLLがバージョンごとに別名になっている
msvcrt.dllはシステムコンポーネントとして管理
msvcrt.dllは元々Windows の標準 C ランタイムライブラリ として提供されており、Windows システム (C:\Windows\System32\やC:\Windows\SysWOW64) に配置されます。
Windows Updateによってのみ更新され、アプリケーションが直接上書きすることはない 仕組みになっています。
2005から2010ではサイドバイサイド(SxS)アセンブリによる管理
Visual C++ 2005から2010では「サイドバイサイド(Side-by-Side, SxS)」アセンブリという仕組みが導入されました。
- C:\Windows\WinSxS\ にバージョンごとのランタイムがインストールされる
- app.exe.manifest というマニフェストファイルで、どのバージョンの DLL を使用するか指定
- 複数のバージョンのランタイムが共存可能
たとえば、Microsoft Visual C++ 2008 Redistributableの中でも複数バージョンがあり、どのバージョンも同時にセットアップ可能です。あるアプリが 9.0.21022(2008年最初のバージョン)を必要とし、別のアプリが 9.0.30729(SP1のアップデート版)を必要とする場合、両方が共存します。
2005から2010はSxSにより DLL が分離され、上書き問題は発生しません。
2015から2022は統合され、下位互換性を持つ
Visual C++ 2015 以降(2015, 2017, 2019, 2022)は同じランタイム(vcruntime140.dll, msvcp140.dll など)を使用し、互換性を持つようになりました。
新しいバージョンが出ると、古いバージョンと互換性を持ちつつ上書き更新されます。
2015以降は統合されているため、1つのバージョンを入れればOKです。
インストール済みか確認する方法
- Windowsのインストール済みアプリケーションの一覧で「Microsoft Visual C++ XXXX Redistributable」があるかどうか、x86とx64パッケージが別々なのでどれが入っているか見る
- C:\Windows\System32やC:\Windows\SysWOW64、C:\Windows\WinSxS\にmsvcrXX.dllなどのファイルがあるか検索する
必要なランタイムをインストールします。
- Visual C++ 2005以降のランタイムが必要な場合は、該当する再頒布パッケージを導入する
- ソフトウェアのパッケージにバンドルされたDLLがあれば、適切な場所にコピーする
- ソフトウェアがリリースされたのが2000年前半なら、「Microsoft Visual C++ 2005 Redistributable」や初期の「.NET Framework」などを入れてみる
- 「Vector」などのソフトライブラリサイトでユーザーが作成したDLLのパッケージが配布されているため、ダウンロードして導入する
ダウンロード方法
2005以降のものは以下のページからダウンロードできます。
サポートされている最新の Visual C++ 再頒布可能パッケージのダウンロード
2005より前のものは「Vector」などのソフトライブラリサイトで「ランタイム」「msvcr」「msvcp」などのキーワードで探してみてください。