メインコンテンツまでスキップ

VCRUNTIME140_1.dllが見つからないため、コードの実行を継続できません。

VCRUNTIME140_1.dllが見つからないエラー

アプリケーションの起動時に「VCRUNTIME140_1.dllが見つからないため、コードの実行を継続できません。」というエラーが表示されて起動に失敗することがあります。

対処方法

このファイルはVisual C++ 2019以降で追加されたファイルです。最新のVisual C++のバージョンは互換性がありますので、公式ページから最新バージョンをダウンロードしてインストールすることで解決するはずです。インストールは簡単ですが、こちらのページで説明していますので参考にしてください。 x86、x64、ARM64の各アーキテクチャ用のインストーラーがあり、アプリケーションのアーキテクチャと一致したものを選択する必要があります。不明な場合は、数十MB程度なのでとりあえず全部インストールしても特に問題ありません。ARM64用のインストーラーはARM64版のWindowsでのみ使用できます。

原因

このエラーが表示される場合、以下のいずれかの原因が考えられます。

1. Visual C++ 2019以降の再頒布可能パッケージがインストールされていない

これはもっとも一般的な原因で、アプリケーションがVisual C++ 2019以降のランタイムを必要としているにも関わらず、そのランタイムがシステムにインストールされていない場合に発生します。Visual C++ 2019以降の再頒布可能パッケージをインストールすることで解決できます。 通常はアプリケーションのインストーラーにVisual C++ 2019以降の再頒布可能パッケージが同梱されていることが多いのですが、手動で別途インストールすることを求めている場合もありますので、アプリケーションのドキュメントや公式サイトを確認しましょう。

2. Visual C++ 2019以降の再頒布可能パッケージをインストールしたが、アーキテクチャが間違っている

これもよくある原因です。Visual C++ 2019以降の再頒布可能パッケージには、x86、x64、ARM64の3つのアーキテクチャ用のインストーラーがあります。アプリケーションが特定のアーキテクチャ用にビルドされている場合、そのアーキテクチャに対応した再頒布可能パッケージをインストールする必要があります。例えば、x64版のアプリケーションにはx64版の再頒布可能パッケージが必要です。

3. Visual C++ 2019以降のランタイムを同梱するアプリをアンインストールしてファイルが消失した

これはあまり一般的ではありませんが時々遭遇するケースです。現在は推奨されていませんが、Visual C++のランタイムファイルを再頒布可能パッケージではなくアプリケーションに同梱している場合があります。このようなアプリケーションをアンインストールした際に、他のアプリケーションもランタイムファイルを使用するにも関わらずアンインストーラーが誤って削除してしまうことがあります。この場合、再度Visual C++ 2019以降の再頒布可能パッケージをインストールすることで解決できます。

なお、Windowsインストーラーはコンポーネント単位で参照カウントを管理していますので、Windowsインストーラーの仕組みに従っていれば、他のアプリケーションが同じランタイムファイルを使用している場合はアンインストーラーが削除しないようになっています。例えばVCRUNTIME140_1.dllを使用する2つのアプリケーションがそれぞれWindowsインストーラーでインストールされている場合、参照カウントは"2"になっており、一方をアンインストールしても参照カウントが"1"に減算されるだけでファイルが削除されることはなく、もう一方のアプリケーションは引き続きそのファイルを使用できます。しかし、Windowsインストーラーの仕組みに従っていないアプリケーションがあるとこのような仕組みが破綻します。

また、この仕組みには一つ落とし穴があります。VCRUNTIME140_1.dllはVisual C++ 2019以降で追加されたファイルですので、Visual C++ 2015やVisual C++ 2017の再頒布可能パッケージには含まれていません。ここで、例えば以下のような2つのアプリケーションをインストールしたと仮定します。

  • アプリケーションA: Visual C++ 2017に依存(VCRUNTIME140.dllのバージョン14.10のみ同梱)
  • アプリケーションB: Visual C++ 2019に依存(VCRUNTIME140.dllのバージョン14.20とVCRUNTIME140_1.dllのバージョン14.20を同梱)

Windowsインストーラーはファイルバージョンが新しいものを優先します。これらのアプリケーションがインストールされている場合、VCRUNTIME140.dllのバージョン14.20は両方のアプリケーションが使用するため参照カウント"2"となりますが、VCRUNTIME140.dllのバージョン14.20はアプリケーションBのみで使用するため参照カウントが"1"となっています。この状態でアプリケーションBをアンインストールすると、VCRUNTIME140.dllのバージョン14.20は参照カウントが"1"となり、VCRUNTIME140_1.dllは参照カウントが"0"となります。これにより、VCRUNTIME140_1.dllが削除されますが、VCRUNTIME140.dllはバージョンが14.20のままとなります。このバージョンはVCRUNTIME140_1.dllに依存していますので、アプリケーションの起動を試みるとVCRUNTIME140_1.dllが見つからないためエラーが発生します。(参考情報: Latest VC142 CRT merge modules do not properly uninstall vcruntime140.dll)