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

Visual C++再頒布可能パッケージのアップグレードに失敗する

現象

アプリケーションと一緒にVisual C++再頒布可能パッケージをインストールする構成にしていると、新規インストール時の失敗はあまり見かけないものの、既にインストール済みのためアップグレードとなる場合は失敗するケースを割と見かけます。特によく見られるものとしては、Windowsインストーラーのキャッシュが削除されたため、アップグレード時に行われる旧バージョンのアンインストールがうまくいかずに失敗しているケースが挙げられます。この場合、以下のようにキャッシュの参照を求めるメッセージのエラーダイアログが表示されます。

Visual C++再頒布可能パッケージのエラー

このとき、一時フォルダー(実行ユーザーの%temp%環境変数の場所)に出力されるdd_vcredistで始まるログファイルにはエラーコード0x80070643が記録されます。このエラーコードのうちエラーの意味を示す部分は0x0643=0n1603となりますが、残念ながらこの番号はドキュメントによるとERROR_INSTALL_FAILUREというただ失敗を示すだけのものになりますので、このログを見ただけでは何が起きたのか全く分かりません。

[042C:2230][2025-01-26T00:50:14]e000: Error 0x80070643: Failed to install MSI package.
[042C:2230][2025-01-26T00:50:14]e000: Error 0x80070643: Failed to execute MSI package.
[21D8:21D4][2025-01-26T00:50:14]e000: Error 0x80070643: Failed to configure per-machine MSI package.
[21D8:21D4][2025-01-26T00:50:14]i319: Applied execute package: vcRuntimeMinimum_x64, result: 0x80070643, restart: None
[21D8:21D4][2025-01-26T00:50:14]e000: Error 0x80070643: Failed to execute MSI package.

Windowsインストーラーキャッシュが削除されていることが原因であることを特定するためには、ファイル名にvcRuntimeMiminumやvcRuntimeAditionalを含むほうのログファイルを確認する必要があります。下記例のようにC:\Windows\Installer配下とC:\ProgramData\Package Cache配下の両方でファイルが見つからなかったことを示す以下のようなログが記録されている場合は、何らかの理由でWindowsインストーラーキャッシュが削除されていると判断できます。

MSI (s) (64:3C) [00:44:13:104]: Warning: Local cached package 'C:\Windows\Installer\57a8.msi' is missing.
...
MSI (s) (64:3C) [00:44:13:104]: SOURCEMGMT: Trying source C:\ProgramData\Package Cache\{3407B900-37F5-4CC2-B612-5CD5D580A163}v14.32.31332\packages\vcRuntimeMinimum_amd64\.
MSI (s) (64:3C) [00:44:13:104]: Note: 1: 2203 2: C:\ProgramData\Package Cache\{3407B900-37F5-4CC2-B612-5CD5D580A163}v14.32.31332\packages\vcRuntimeMinimum_amd64\vc_runtimeMinimum_x64.msi 3: -2147287037
MSI (s) (64:3C) [00:44:13:104]: SOURCEMGMT: Source is invalid due to missing/inaccessible package.

Microsoftは公式ドキュメントでWindowsインストーラーキャッシュを削除しないように注意喚起していますが、インターネット上にはキャッシュを削除する方法やツールを紹介しているWebサイトが散見されますので、もしかするとそのような情報に騙されて削除してしまう方が多いのかもしれません。キャッシュが削除された場合に復旧する一般的な方法はドキュメントの公式情報によれば復旧以外にはなさそうですが、Visual C++再頒布可能パッケージについてはコンピューターを再セットアップする前に試せることがあります。2通りの手順を紹介しますので、この状況に遭遇した場合は試してみるとよいでしょう。

対処方法1.修復インストール

Windowsインストーラーには製品の構成を修復する機能がありますが、コントロールパネルや設定アプリから修復の操作を行った場合はWindowsインストーラーキャッシュを使用して実施します。そのため、今回のケースではコントロールパネルから修復を実施しても失敗する可能性が高いです。同一バージョンのインストーラーが入手できる場合や手元に残されている場合は、そのインストーラーを実行することでメンテナンスモードでインストーラーを起動して修復インストールを実施することが可能です。

  1. コントロールパネルまたは設定アプリを起動します。

  2. 現在インストールされているVisual C++ Redistributableのバージョンを確認します。例えば次の図の場合バージョンは14.32.31332となります。

    アプリと機能の画面でバージョンを確認する

  3. Visual C++再頒布可能パッケージのダウンロードリンク(2022, 2019, 2017, 2015以前)からバージョンとアーキテクチャ(x86, x64, ARM64)が合致するインストーラーをダウンロードします。

  4. ダウンロードしたインストーラーを実行し、[修復]ボタンをクリックします。

    インストーラーを実行して修復ボタンをクリックする

  5. インストーラーのウィザードの指示に沿って画面を進めます。コンピューターの再起動が求められた場合は再起動します。

  6. 新しいバージョンのVisual C++再頒布可能パッケージのインストーラーを実行し、問題が解消したか確認します。

対処方法2.トラブルシューティングツールを使用してインストール情報をクリーンアップする

Windowsインストーラーキャッシュが削除されている場合、トラブルシューティングツールを使用してインストール情報をクリーンアップすることができます。ただし、製品をアンインストールするためには元となったインストーラーが必要なはずなので、このツールが一体どのような方法でインストール情報をクリーンアップしているのか謎です。インストール情報だけを消してインストーラーがとりあえず実行可能な状態にしているだけな気がするので、他に方法がない場合の最終手段と個人的には考えています。

  1. Microsoftのサポートサイトからトラブルシューティングツール(MicrosoftProgram_Install_and_Uninstall.meta.diagcab)をダウンロードします。

  2. "MicrosoftProgram_Install_and_Uninstall.meta.diagcab"をダブルクリックしてトラブルシュートツールを起動します。

  3. 以下の画面が表示されますので、[次へ]ボタンをクリックします。
    alt text

  4. 問題の種類を聞かれますので、[アンインストール]を選択します。
    alt text

  5. アプリケーションの一覧が表示されますので、"Microsoft Visual C++ <バージョン> <アーキテクチャ> Minimum Runtime - <バージョン>"を選択して[次へ]ボタンをクリックします。
    alt text

  6. 実施してよいか聞かれますので、[はい、アンインストールを試行する]を選択します。
    alt text

  7. 問題が解決されたら以下の画面に遷移しますので、ここで一旦トラブルシュートツールを終了します。
    alt text

  8. もう一度トラブルシュートを実行して同様に操作を進め、次はアプリケーションの一覧で"Microsoft Visual C++ <バージョン> <アーキテクチャ> Additional Runtime - <バージョン>"のアンインストールを試行します。
    alt text

  9. 新しいバージョンのVisual C++再頒布可能パッケージのインストーラーを実行し、問題が解消したか確認します。