Flutterの環境構築で Visual Studio の Desktop development with C++ インストールに詰まった話

# はじめに
　Flutterの環境構築をしていたら、「**Desktop development with C++ (C++によるデスクトップ開発)**」のインストールに詰まったので共有。
　実際には「Desktop development with C++ (C++によるデスクトップ開発)」のインストールに含まれる「**Microsoft Visual C++ 2015-2022 Redistributable (X64)**」、「**同(X86)**」のインストールに失敗するというお話のため、Flutter用途以外の人にもお役に立てるかもしれません。

# 症状
**flutter doctor** で環境診断をすると、こんな感じでした。
※Visual Studioのバージョンは何となく（20xx.xx.xx.xxで）隠しました。Visual Studioがインストールされていれば、そのバージョンが表示されるかと思います。
``` 
> flutter doctor
<中略>
[!] Visual Studio - develop Windows apps (Visual Studio Community 20xx xx.xx.xx)
    X Visual Studio is missing necessary components. Please re-run the Visual Studio installer for the "Desktop
      development with C++" workload, and include these components:
        MSVC v142 - VS 2019 C++ x64/x86 build tools
         - If there are multiple build tool versions available, install the latest
        C++ CMake tools for Windows
        Windows 10 SDK
```

そこで、Visual Studio Installerから「**Desktop development with C++ (C++によるデスクトップ開発)**」をインストールしようとすると、途中でエラーが表示されました。
<font color=red>※実際のエラー画面を取り漏れてしまい、Microsoft Communityからの引用なんですが、次のようなエラーでした。表示されるランタイムのバージョンが少し違いましたが、同じメッセージです。</font>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919346/a3aeb624-08ad-4a4d-63d1-ce10838116a5.png)
[【引用１】Microsoft Community](https://answers.microsoft.com/en-us/windows/forum/all/microsoft-visual-c-2019-x64-minimum-runtime/f6e1d7b4-8af9-4958-9dd6-5c4cb2170866)

その後、次のようなエラーメッセージがでました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919346/5fa670cb-6596-623a-f500-05c1b0789e7c.png)
[【引用２】Microsoft Community](https://answers.microsoft.com/ja-jp/windows/forum/all/microsoft-visual-c-2017-x64-minimum-runtime/971261d2-c6ff-4e94-a659-5077545447a4)

どうやら古いバージョンのC++ 2019ランタイムが削除できないことに起因している模様。

じゃあ、直接コントロールパネルから削除（**Microsoft Visual C++ 2015-2022 Redistributable**のアンインストール）を試みようとすると、そこでも失敗（リストには出ているのに、「既にないよ」のようなエラー内容）

# 解決方法
※私の解決方法を下記に記載しますが、対応は自己責任でお願いします。

結論から言えば、上記画像の引用１（[リンク](https://answers.microsoft.com/en-us/windows/forum/all/microsoft-visual-c-2019-x64-minimum-runtime/f6e1d7b4-8af9-4958-9dd6-5c4cb2170866)）に回答されている内容でよかったのかもしれないが、直接レジストリの知らない箇所を触るのは怖い。
ということで、このMS公式ツール（**プログラムのインストールとアンインストールのトラブルシューティング ツール**）を使いました。
[Fix problems that block programs from being installed or removed](https://support.microsoft.com/en-us/topic/fix-problems-that-block-programs-from-being-installed-or-removed-cca7d1b6-65a9-3d98-426b-e9f927e1eb4d)

上記リンクからツール(**MicrosoftProgram_Install_and_Uninstall.meta.diagcab**)をダウンロードして、実行します。

1. 次へをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919346/8c4ec363-4755-9ad4-9fe4-e6566aac6872.png)

2. アンインストールを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919346/71d22fbd-2301-78e5-b3dd-0864183d0a63.png)

3. アンインストールしたいランタイムを選択
<font color="red">（注）下図は修正後の画像です。</font>
実際に削除したランタイムは「**Microsoft Visual C++ 2019 X64 Minimum Runtime**」、「**Microsoft Visual C++ 2019 X64 Additional Runtime**」、「**Microsoft Visual C++ 2019 X86 Minimum Runtime**」、「**Microsoft Visual C++ 2019 X86 Additional Runtime**」を削除しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919346/470e49f0-d08f-3593-eb1c-37736e3b11fb.png)

4. アンインストールの完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919346/dd0d7ad5-7395-cf3c-95ef-7403fec0fa09.png)

5. PCの再起動（念のため）

6. Visual Studio Installerから「**Desktop development with C++ (C++によるデスクトップ開発)**」をインストール（正常に完了）

7. flutter doctor で診断

```
> flutter doctor
<中略>
[√] Visual Studio - develop Windows apps (Visual Studio Community 20xx xx.xx.xx)
```

無事にFlutterの環境構築(Visual Studio箇所)も完了しました。

# 補足
「**Desktop development with C++ (C++によるデスクトップ開発)**」のインストールでは、C++ランタイム以外のインストールもされてしまいます。C++ランタイムだけをインストールしたいという方は [こちら](https://learn.microsoft.com/ja-jp/cpp/windows/latest-supported-vc-redist?view=msvc-170) から最新バージョンのランタイム（**vc_redist.x64.exe**、**vc_redist.x86.exe**）を入手できます。
※2023年9月時点：2015-2022 C++ 再頒布可能パッケージ

# おわりに
解決までに無駄に時間が掛かりました。
ネットで色々調べていると最悪Windowsの再インストールやリカバリが必要、みたいな内容もちらほら見かけ、それだけは避けたいと考えてました。

私みたいに詰まってしまった方のお役に立てたら幸いです。