スキップしてメイン コンテンツに移動

PCゲームやソフトが動かない時のVisual C++ランタイム確認と対処方法

Windows PCのゲームやソフトが動かないときに確認したいのがVisual C++ランタイムです。

「DLLが見つかりません」「Visual C++のランタイムを入れてください」といったメッセージが出るときは、必要なランタイムが入っていません。

Visual C++ランタイムがどういうものか、確認方法、ダウンロード方法などを整理してみます。


Visual C++ランタイムとは

Microsoftが提供するライブラリで、Windows上で Visual C++で開発されたアプリケーションを実行するために必要なコンポーネントです。

多くのアプリケーション(ゲーム、オフィスソフト、ユーティリティなど)はVisual C++を使用して開発されている場合が多いです。

アプリに必要なランタイムを組み込んでいない場合、ユーザー側でインストールする必要があります。


複数のランタイムをどの順番で入れても問題ない

正式な再頒布パッケージでインストールする場合、複数のランタイムは適切に管理されます。順番を問わず、ランタイムを入れてもDLLのダウングレードや削除がされないようになっています。

ランタイムのx86とx64は使うアプリに合わせる

x86は32bitアプリに必要なもの、x64は64bitアプリに必要なものです。32bitアプリを使う場合はx86パッケージを入れます。


ランタイムのパッケージ

正式な再頒布可能パッケージ

Microsoft Visual C++ 2015-2022 Redistributable
Visual Studio 2015、2017、2019、2022で開発されたものに必要です。Visual C++ 2015から2022まではランタイムが1つのパッケージになっています。

Microsoft Visual C++ 2013 Redistributable
Microsoft Visual C++ 2012 Redistributable
Microsoft Visual C++ 2010 Redistributable
Microsoft Visual C++ 2008 Redistributable
Microsoft Visual C++ 2005 Redistributable
各Visual Studioで開発されたものは対応するランタイムが必要です。

正式な再頒布パッケージが存在しないVisual C++バージョン

Microsoft Visual C++ .NET 2003
Microsoft Visual C++ .NET 2002
.NET Framework 1.1や.NET Framework 1.0のランタイムに含まれているようです。

Microsoft Visual C++ 6.0以前
ソフトウェアに必要なDLLがバンドルされていることが多いです。

Visual C++ランタイムに含まれているもの

Visual C++再配布可能ランタイムには、以下のようなコンポーネントが含まれています。DLLのファイル名のXXのところはバージョンによって変わります。

C ランタイムライブラリ(CRT, C Runtime Library)
msvcrtXX.dll など
C言語の標準ライブラリ(printf や malloc などの関数を提供)

C++ 標準ライブラリ(STL, Standard Template Library)
vcruntimeXX.dll など
C++ の std::vector や std::string などの標準ライブラリを提供

MFC(Microsoft Foundation Class)ライブラリ(MFC対応版のみ)
mfcXX.dll など
Windows GUI アプリケーション開発向けのライブラリ

ATL(Active Template Library)
atlXX.dll など
COM(Component Object Model)開発のためのテンプレートベースのライブラリ

その他の依存 DLL
msvcpXX.dll(C++ 標準ライブラリ用)
ucrtbase.dll(Universal C Runtime)など

DLLがバージョンごとに別名になっている

Visual C++のバージョンごとに独自のDLL(msvcpXX.dll, msvcpXX.dll など)があり、アプリケーションごとに適切なものがロードされる仕組みになっています。

VC++ 6.0  msvcrt.dll, msvcp60.dll
VC++ .NET 2002 (7.0)  msvcr70.dll, msvcp70.dll
VC++ .NET 2003 (7.1)  msvcr71.dll, msvcp71.dll
VC++ 2005 (8.0)  msvcr80.dll, msvcp80.dll
VC++ 2008 (9.0)  msvcr90.dll, msvcp90.dll
VC++ 2010 (10.0) msvcr100.dll, msvcp100.dll
VC++ 2012 (11.0) msvcr110.dll, msvcp110.dll
VC++ 2013 (12.0) msvcr120.dll, msvcp120.dll
VC++ 2015~2022 (14.x) vcruntime140.dll, msvcp140.dll など

msvcrt.dllはシステムコンポーネントとして管理

msvcrt.dllは元々Windows の標準 C ランタイムライブラリ として提供されており、Windows システム (C:\Windows\System32\やC:\Windows\SysWOW64) に配置されます。

Windows Updateによってのみ更新され、アプリケーションが直接上書きすることはない 仕組みになっています。

Visual C++ のランタイムを複数インストールしても、システムの msvcrt.dll は影響を受けません。異なるmsvcrt.dllが上書きされることはありません。

2005から2010ではサイドバイサイド(SxS)アセンブリによる管理

Visual C++ 2005から2010では「サイドバイサイド(Side-by-Side, SxS)」アセンブリという仕組みが導入されました。

  • C:\Windows\WinSxS\ にバージョンごとのランタイムがインストールされる
  • app.exe.manifest というマニフェストファイルで、どのバージョンの DLL を使用するか指定
  • 複数のバージョンのランタイムが共存可能

Windowsは特定のランタイムバージョンを特定のアプリで使用できるように、異なるバージョンをC:\Windows\WinSxSというフォルダに保存し、アプリが求めるバージョンを自動的に提供する仕組みを持っています。

たとえば、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」などのキーワードで探してみてください。

Vector:ソフトライブラリ

このブログの人気の投稿

Win95/98時代のゲームを今のWindows10/11で遊ぶ・動かす方法

 昔のWindows95/98時代のゲームを今でも遊びたいという人は多いと思います。自分もそうです。 でもWindows10やWindows11で動かそうとしてもそのままではうまく動かないときが多いので対処方法をまとめておきます。 対処方法の一覧 対処方法1:ゲームのインストーラが動かないときはゲームが入っているメディア(FD・CD)から直接コピーする 対処方法2:古い環境でゲームをセットアップして内容をコピーする 対処方法3:DirectX 9.0cをインストールする 対処方法4:互換モードを利用する 対処方法5:DXWndでフルスクリーンゲームをウインドウ化する 対処方法6:DDrawCompatでグラフィックス関連の互換性を上げる 対処方法7:_inmm.dllでCD音源を再生できるようにする 対処方法8:64bit環境ならWOW64の仕組みをふまえて調整する 起動したゲームの例 ぷよぷよ、ぷよぷよ通、バーチャファイターPC、電脳戦機バーチャロン 対処方法1:ゲームのインストーラが動かないときはゲームが入っているメディア(FD・CD)から直接コピーする Windows95/98時代のゲームのインストーラは今のWindowsでうまく動かなかったりします。 ゲームが入っているメディア(FD・CD)を見てみて、ゲームの実行プログラム(EXEプログラム)やゲームのファイルがそのまま見える状態ならコピーしてみましょう。 もしsetup.exeや内容がCABファイルで圧縮されているゲームはセットアップが必要でこの方法は使えません。 手順 1. ゲームが入っているメディア(FD・CD)をエクスプローラで開く 2. ゲームのプログラム(EXE)やDLLファイル、WAVやMIDファイル、TXTファイル、その他ファイルなどが沢山入っているフォルダがあるか確認する 3. 見つかったらCドライブにゲーム名のフォルダを作り、中身をコピーする 4. ゲームのプログラム(EXE)を実行してみて動くか試してみます 対処方法2: 古い環境でゲームをセットアップして内容をコピーする 対処方法1ができないゲームはWindows XPなどの少し前のパソコンがあれば、そこにセットアップしたものをコピーする方法があります。 ただしファイルのコピーだけでは動かず、セットアップでレジストリに登録され...

Windows11 24H2から23H2にダウングレードする方法

Windows11 23H2のパソコンをWindows11 24H2にアップグレードしたあとに、23H2に戻す(ダウングレードする)方法です。 復元するには前提条件があるので確認してから対応してください。 前提条件 アップグレードしてから10日以内 Cドライブに「Windows.old」フォルダがある 対応方法 1. Windowsの「設定」を開きます。 2. 設定画面の左側の一覧から「システム」を開きます。 3. 右側の一覧でスクロールして「回復」をクリック。 4. 「回復オプション」の「復元」にある「戻す」をクリック。 5. 「以前のビルドに戻す」ウインドウが出るまで待ちます。 6. 「フィードバックを共有してください」と表示されたら、「次へ」をクリック。 7. 「アップデートをチェックしますか?」と表示されたら、「行わない」をクリック。 8. 「知っておくべきこと」と表示されたら、内容を確認して「次へ」をクリック。 9. 「ロックアウトされないようにご注意ください」と表示されたら、内容を確認して「次へ」をクリック。 10. 「このビルドをお試しいただきありがとうございます」と表示されたら、「以前のビルドに戻す」をクリック。 11. 復元が始まるので待ちます。(1時間程度) 12. ログイン画面になったらログインします。 対応後 復元が問題なく完了していればWindows11 23H2に戻っています。

32bitゲームを64bit環境で動かすWindowsの仕組みWOW64

Windowsで動くゲームは昔のWindows95/98用ゲームから始まり、ちょっと前のWindowsまで大半のゲームは32bitコードのプログラムです。 今のWindowsを64bit環境で使っている人が多いと思いますが、そのままでは32bitコードのプログラムは動きません。Windows側で「WOW64」というエミュレーションがされます。 WOW64を理解しておくことで昔のゲームを今のパソコンで動かせる可能性が高まります。 WOW64とは Windows 32bit On Windows 64bitの略。64bitのWindowsで32bitコードのプログラムを動かすエミュレーションの仕組みです。 CPU自体だとx86の64bit化自体は32bitとの互換性が高い状態で拡張されています。加えてWindows側は32bitコードのプログラムの互換性を維持するためにWOW64の仕組みが動いて対応します。 64bit環境で32bitコードのプログラムは以下のような動き、制限があります。 32bitコードのプログラム向けに32bitで扱える仮想メモリ空間が割り当てられる 32bitコードのプログラムと64bitコードのプログラムは1つのプロセス内に混在できない DLLも32bitコードのプログラムは32bitコードのDLLを呼び出す必要がある。32bitコードのプログラムから64bitコードのDLLを呼び出せない Windowsのシステムフォルダやレジストリは32bitコード用に用意されたものにアクセスするようにリダイレクトする 32bitのゲームを64bit環境で動かすときのポイント 古いゲームのインストール先は標準のProgam Filesフォルダにしない 64bit環境では64bitコードのプログラムは C:¥Program Files に、32bitコードのプログラムは C:¥Program Files(x86) にインストールされます。Program Files(x86)やProgram FilesフォルダはWindowsの管理下になっています。 Win95/98向けのような古いゲームをこれらのフォルダにセットアップしようとしても、セットアップが途中で失敗したり、入ってもゲームが動かなかったりします。 古いゲームをセットアップするとき、手動でファイルをコピーし...