winget で Visual C++ 再頒布可能パッケージをインストールした時のメモ

# `winget` を使う

`winget` コマンドは Windows11では標準で使える。

Windows10では使えない場合がある。
[公式の文書](https://docs.microsoft.com/ja-jp/windows/package-manager/winget/)では「アプリ インストーラーを取得」と書いてあるが、Microsoft Storeを更新すれば使えるようになる。
Microsoft Storeのアプリを起動して、「ダウンロードと更新」からMicrosoft Storeを更新するとUIが変わった新しいバージョンへと更新される。その後PowerShellなどを起動すれば `winget` が使えるようになっている。（Windows10 ver.1709 OSビルド 16299 以上が必要）

# Visual C++ 再頒布可能パッケージを探す

一応、[再頒布可能パッケージの配布ページ](https://docs.microsoft.com/ja-JP/cpp/windows/latest-supported-vc-redist)へ行けばそれぞれのインストーラを取得することができるが `winget` を使えばブラウザから検索して探す手間がなくなる。

`winget` でインストールできるものを探すときは `winget search` を使う。

<details><summary>ID名などが変わったので編集しました</summary><div>

以前は 「VC++」で検索してみると次のように表示された。

```powershell
PS C:\Users\public> winget search VC++
名前                                                 ID                                バージョン     一致        ソース
------------------------------------------------------------------------------------------------------------------------
Microsoft Visual C++ 2022 Redistributable (Arm64)    Microsoft.VC++2022Redist-arm64    14.32.31332.0              winget
Microsoft Visual C++ 2019 Redistributable (Arm64)    Microsoft.VC++2019Redist-arm64    14.29.30139.0              winget
Microsoft Visual C++ 2017 Redistributable (x86)      Microsoft.VC++2017Redist-x86      14.20.27404.0              winget
Microsoft Visual C++ 2017 Redistributable (x64)      Microsoft.VC++2017Redist-x64      14.20.27404.0              winget
Microsoft Visual C++ 2015 Redistributable (x86)      Microsoft.VC++2015Redist-x86      14.0.24516.0               winget
Microsoft Visual C++ 2015 Redistributable (x64)      Microsoft.VC++2015Redist-x64      14.0.24516.0               winget
Microsoft Visual C++ 2015-2022 Redistributable (x86) Microsoft.VC++2015-2022Redist-x86 14.32.31332.0              winget
Microsoft Visual C++ 2015-2022 Redistributable (x64) Microsoft.VC++2015-2022Redist-x64 14.32.31332.0              winget
Microsoft Visual C++ 2015-2019 Redistributable (x86) Microsoft.VC++2015-2019Redist-x86 14.29.30139.0              winget
Microsoft Visual C++ 2015-2019 Redistributable (x64) Microsoft.VC++2015-2019Redist-x64 14.29.30139.0              winget
Microsoft Visual C++ 2013 Redistributable (x86)      Microsoft.VC++2013Redist-x86      12.0.40664.0               winget
Microsoft Visual C++ 2013 Redistributable (x64)      Microsoft.VC++2013Redist-x64      12.0.40664.0               winget
Microsoft Visual C++ 2012 Redistributable (x86)      Microsoft.VC++2012Redist-x86      11.0.61030.0               winget
Microsoft Visual C++ 2012 Redistributable (x64)      Microsoft.VC++2012Redist-x64      11.0.61030.0               winget
Microsoft Visual C++ 2010 x86 Redistributable        Microsoft.VC++2010Redist-x86      10.0.40219                 winget
Microsoft Visual C++ 2010 x64 Redistributable        Microsoft.VC++2010Redist-x64      10.0.40219                 winget
Microsoft Visual C++ 2008 Redistributable - x86      Microsoft.VC++2008Redist-x86      9.0.30729.6161             winget
Microsoft Visual C++ 2008 Redistributable - x64      Microsoft.VC++2008Redist-x64      9.0.30729.6161             winget
Microsoft Visual C++ 2005 Redistributable            Microsoft.VC++2005Redist-x86      8.0.61001                  winget
Microsoft Visual C++ 2005 Redistributable (x64)      Microsoft.VC++2005Redist-x64      8.0.61000                  winget
Redpanda-C++                                         RoyQu.RedPanda-C++                1.2            Tag: devc++ winget
Dev-C++                                              Orwell.Dev-C++                    5.11           Tag: DevC++ winget
Embarcadero Dev-C++                                  Embarcadero.Dev-C++               6.3            Tag: DevC++ winget
```

現在はこんな感じ $\Downarrow$

```powershell
PS C:\Users\public>winget search VC++
名前                                            ID                           バージョン     一致        ソース
--------------------------------------------------------------------------------------------------------------
Microsoft Visual C++ 2005 Redistributable (x64) Microsoft.VCRedist.2005.x64  8.0.61000      Tag: vc++   winget
Microsoft Visual C++ 2005 Redistributable       Microsoft.VCRedist.2005.x86  8.0.61001      Tag: vc++   winget
Microsoft Visual C++ 2008 Redistributable - x64 Microsoft.VCRedist.2008.x64  9.0.30729.6161 Tag: vc++   winget
Microsoft Visual C++ 2008 Redistributable - x86 Microsoft.VCRedist.2008.x86  9.0.30729.6161 Tag: vc++   winget
Microsoft Visual C++ 2008 Redistributable - x86 Microsoft.VC++2008Redist-x86 9.0.30729.6161             winget
Microsoft Visual C++ 2008 Redistributable - x64 Microsoft.VC++2008Redist-x64 9.0.30729.6161             winget
Redpanda-C++                                    RoyQu.RedPanda-C++           1.4            Tag: devc++ winget
Dev-C++                                         Orwell.Dev-C++               5.11           Tag: devc++ winget
Embarcadero Dev-C++                             Embarcadero.Dev-C++          6.3            Tag: devc++ winget
```

IDが `Microsoft` 直下から `Microsoft.VCRedist` の下に配置されたので 「VC++」で検索しても見つかりません。
（何故か2005と2008は旧IDが残っていたり「vc++」タグが付いている、そのうち修正されるかも？）

</div></details>

2022/10/17 時点では 「VCR」で検索してみると次のように表示される。

```powershell
PS C:\Users\public>winget search vcr
名前                                                 ID                            バージョン     ソース
----------------------------------------------------------------------------------------------------------
VCR                                                  9WZDNCRDHHF2                  Unknown        msstore
VcRead                                               9WZDNCRDP582                  Unknown        msstore
MarkRight                                            dvcrn.markright               0.1.11         winget
Microsoft Visual C++ 2005 Redistributable (x64)      Microsoft.VCRedist.2005.x64   8.0.61000      winget
Microsoft Visual C++ 2005 Redistributable            Microsoft.VCRedist.2005.x86   8.0.61001      winget
Microsoft Visual C++ 2008 Redistributable - x64      Microsoft.VCRedist.2008.x64   9.0.30729.6161 winget
Microsoft Visual C++ 2008 Redistributable - x86      Microsoft.VCRedist.2008.x86   9.0.30729.6161 winget
Microsoft Visual C++ 2013 Redistributable (x86)      Microsoft.VCRedist.2013.x86   12.0.40664.0   winget
Microsoft Visual C++ 2013 Redistributable (x64)      Microsoft.VCRedist.2013.x64   12.0.40664.0   winget
Microsoft Visual C++ 2012 Redistributable (x64)      Microsoft.VCRedist.2012.x64   11.0.61030.0   winget
Microsoft Visual C++ 2012 Redistributable (x86)      Microsoft.VCRedist.2012.x86   11.0.61030.0   winget
Microsoft Visual C++ 2015-2022 Redistributable (x64) Microsoft.VCRedist.2015+.x64  14.34.31823.3  winget
Microsoft Visual C++ 2015-2022 Redistributable (x86) Microsoft.VCRedist.2015+.x86  14.34.31823.3  winget
Microsoft Visual C++ 2010 x64 Redistributable        Microsoft.VCRedist.2010.x64   10.0.40219     winget
Microsoft Visual C++ 2010 x86 Redistributable        Microsoft.VCRedist.2010.x86   10.0.40219     winget
Microsoft Visual C++ 2019 Redistributable (Arm64)    Microsoft.VCRedist.2019.arm64 14.29.30139.0  winget
Microsoft Visual C++ 2022 Redistributable (Arm64)    Microsoft.VCRedist.2022.arm64 14.34.31823.3  winget
```

各ディストリビューション、各バージョンが利用できることがわかるので目的の物のIDをコピーしてインストールする。

```powershell
PS C:\Users\public>winget install Microsoft.VCRedist.2015+.x64
見つかりました Microsoft Visual C++ 2015-2022 Redistributable (x64) [Microsoft.VCRedist.2015+.x64] バージョン 14.34.31823.3
このアプリケーションは所有者からライセンス供与されます。
Microsoft はサードパーティのパッケージに対して責任を負わず、ライセンスも付与しません。
Downloading https://download.visualstudio.microsoft.com/download/pr/a16e1596-7fef-4570-8d63-fb9d4e72c820/D0CAFF8097BB9C43A3685686826867506BF6EDD667F7B90092CB0EB1B964A85E/VC_redist.x64.exe
  ██████████████████████████████  24.2 MB / 24.2 MB
インストーラーハッシュが正常に検証されました
パッケージのインストールを開始しています...
インストールが完了しました

PS C:\Users\public>winget install Microsoft.VCRedist.2015+.x86
見つかりました Microsoft Visual C++ 2015-2022 Redistributable (x86) [Microsoft.VCRedist.2015+.x86] バージョン 14.34.31823.3
このアプリケーションは所有者からライセンス供与されます。
Microsoft はサードパーティのパッケージに対して責任を負わず、ライセンスも付与しません。
Downloading https://download.visualstudio.microsoft.com/download/pr/a16e1596-7fef-4570-8d63-fb9d4e72c820/BB66E74A41ECF5DC09487608E477ACC4F78A38A0EC4FFE3100069C8A067DA29A/VC_redist.x86.exe
  ██████████████████████████████  13.0 MB / 13.0 MB
インストーラーハッシュが正常に検証されました
パッケージのインストールを開始しています...
インストールが完了しました

PS C:\Users\public>
```

## `winget` のメモ

`winget` を使うと主要ブラウザやコードエディタなどもインストールできる。
WindowsのPCを新しくセットアップするときに使えば、Edgeを起動せずに他のブラウザやVSCodeなどをインストールできる。
また、Visual StudioのビルドツールやPython、Anaconda、rustupなど開発環境の構築に役立つものも多いので、ブラウザで検索して探すのに手間取ったときなどは `winget` で検索してみるとあっさり見つかるかもしれない。

Git for Windowsなどはインストーラを起動すると各種設定を行いながら進み最後にインストールが行われるはずだが、 `winget` を使ってインストールを実行するとすべての設定がデフォルトのままインストールされてしまうので、こだわりたい人は注意が必要。
`winget install` または `winget upgrade` するときは `-i` ( `--interactive` )オプションをつけておくと対話的なインストールが始まり、インストール過程で変更できる設定を編集できるようになる。 ~~（対話モードをデフォルトにしてほしい）~~

`winget` に登録されている情報は `show` を使うとみることができる。

```powershell
PS C:\Users\public>winget show Git.GIT
見つかりました Git [Git.Git]
バージョン: 2.38.0
公開元: The Git Development Community
発行元 URL: https://gitforwindows.org
発行元のサポート URL: https://github.com/git-for-windows/git/issues
作成者: Johannes Schindelin
モニカー: git
説明: Git for Windows focuses on offering a lightweight, native set of tools that bring the full feature set of the Git SCM to Windows while providing appropriate user interfaces for experienced Git users and novices alike.
ホーム ページ: https://gitforwindows.org
ライセンス: GNU General Public License version 2
ライセンス URL: https://raw.githubusercontent.com/git-for-windows/git/main/COPYING
著作権: Copyright (C) 1989, 1991 Free Software Foundation, Inc.
著作権 URL: https://raw.githubusercontent.com/git-for-windows/git/main/COPYING
リリース ノート URL: https://github.com/git-for-windows/git/releases/tag/v2.38.0.windows.1
インストーラー:
  種類: inno
  ダウンロード URL: https://github.com/git-for-windows/git/releases/download/v2.38.0.windows.1/Git-2.38.0-64-bit.exe
  SHA256: 49fa8d1f151e83b89c84e0cb9e400ee0d543d238960f506e487b5a39889fa2c8
  リリース日: 2022-10-03
```

インストーラの実行ファイルへのURLが記載されている場合がほとんどであるため、
`curl.exe` などでダウンロードして手動で実行することでもデフォルトインストールを回避することができる。

その他、使い方は `winget` または `winget <コマンド>` の後に `-?` or `--help` オプションをつけることで見ることができる。

```powershell
PS C:\Users\public>winget -?
Windows パッケージ マネージャー v1.3.2691
Copyright (c) Microsoft Corporation. All rights reserved.

WinGet コマンド ライン ユーティリティを使用すると、コマンド ラインからアプリケーションやその他のパッケージをインストールできます。

使用状況: winget [<コマンド>] [<オプション>]

使用できるコマンドは次のとおりです:
  install    指定されたパッケージをインストール
  show       パッケージに関する情報を表示します
  source     パッケージのソースの管理
  search     アプリの基本情報を見つけて表示
  list       インストール済みパッケージを表示する
  upgrade    利用可能なアップグレードの表示と実行
  uninstall  指定されたパッケージをアンインストール
  hash       インストーラー ファイルをハッシュするヘルパー
  validate   マニフェスト ファイルを検証
  settings   設定を開くか、管理者設定を設定する
  features   試験的な機能の状態を表示
  export     インストールされているパッケージのリストをエクスポート
  import     ファイル中のすべてのパッケージをインストール

特定のコマンドの詳細については、そのコマンドにヘルプ引数を渡します。 [-?]

次のオプションを使用できます。
  -v,--version  ツールのバージョンを表示
  --info        ツールの一般情報を表示

詳細については、次を参照してください。 https://aka.ms/winget-command-help
```

```powershell
PS C:\Users\public>winget upgrade --help
Windows パッケージ マネージャー v1.3.2691
Copyright (c) Microsoft Corporation. All rights reserved.

インストールされたパッケージ リスト、またはマニフェストから直接検索し、選択されたパッケージをアップグレードします。既定では、クエリはパッケージの ID、名前、モニカーに大文字小文字の区別なく一致する必要があります。その他のフィールドは、適切なオプションを渡すことで使用することができます。引数が指定されていない場合は、利用可能なアップグレードを含むパッケージが表示されます

使用状況: winget upgrade [[-q] <query>] [<オプション>]

次の引数を使用できます。
  -q,--query                   パッケージの検索に使用されるクエリ

次のオプションを使用できます。
  -m,--manifest                パッケージのマニフェストのパス
  --id                         ID で結果をフィルター処理
  --name                       名前で結果をフィルター処理
  --moniker                    モニカーで結果をフィルター処理
  -v,--version                 指定されたバージョンを使用します。既定値は最新バージョンです
  -s,--source                  指定されたリソースを使用してパッケージを検索
  -e,--exact                   完全一致を使用してパッケージを検索
  -i,--interactive             対話式のインストールが要求されます。ユーザーの入力が必要になる場合があります
  -h,--silent                  サイレント インストールを要求
  --purge                      パッケージ ディレクトリ (ポータブル) 内のすべてのファイルとディレクトリを削除します
  -o,--log                     ログの場所 (サポートされている場合)
  --override                   インストーラーに渡される引数を上書き
  -l,--location                インストール先 (サポートされている場合)
  --force                      インストーラーのハッシュのチェックを上書きする
  --accept-package-agreements  パッケージのすべての使用許諾契約に同意する
  --accept-source-agreements   ソース操作中にすべてのソース契約に同意する
  --header                     オプションの Windows-Package-Manager REST ソース HTTP ヘッダー
  --all                        インストールされているすべてのパッケージが利用可能であれば最新のものに更新する
  --include-unknown            現在のバージョンを特定できない場合でもパッケージをアップグレードする

詳細については、次を参照してください。 https://aka.ms/winget-command-upgrade
```