1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SandboxでWindowsのパッケージマネージャ(winget)を使ってみる

Last updated at Posted at 2022-02-27

Windowsのパッケージマネージャ(winget)を使ってみる

WindowsにもLinuxのaptやyumといったものと似たようなコマンドラインで実行できるパッケージマネージャが実装されていました。

前の記述のままでは動かなくなっていた(2023/06/04)ので、修正しました。
・Microsoft.UI.Xamlのインストールを追記。
・Pythonパッケージ名を修正

また、前の記述のままでは動かなくなっていた(2024/04/15時点)ので、修正しました。
・Microsoftのサイトのリンクに変更

winget

wingetの使い方は、他のパッケージマネージャツールとほとんど変わらないようです。
searchで検索して、installでインストール、です。
https://docs.microsoft.com/ja-jp/windows/package-manager/

Sandboxでのwinget

実際に使える場面としては、Sandboxで環境を作る際にバッチファイルで作成しやすいとかですね。
前の記事(Windows Sandbox設定)では、インストーラをダウンロードしてオプション指定してサイレントインストールをしていました。
wingetに置き換えるとスマートに記述できると思うので作成しようとしたのですが、Sandboxにはwingetはインストールされていません。
Sandboxで使うためには、wingetをインストールしてから、他のアプリをwingetでインストールという形になります。
また、VCLibsも必要とのことなので、それもインストールが必要となります。

wingetのインストール

VCLibsのパッケージのURLは以下のページから取得します。
C++ ランタイム フレームワーク パッケージのデスクトップ ブリッジ

以下のページからPackage ManagerのパッケージのURLを取得します。
https://github.com/microsoft/winget-cli/releases/
Windows 10 (1809+).同等のパッケージが現時点(2022/02/27)のLatestなので、ここからURLを取得します。

以前の記述だけでは、wingetインストールでエラーとなります。
フレームワーク"Microsoft.UI.Xaml.2.7"が必要なようです。

実際のコマンドは以下のようになります。

Microsoftのサイトのリンクに変更

wingetでの環境構築

wingetをコマンドラインで実行する場合には、以下のようなコマンドになります。

winget install Microsoft.VisualStudioCode
winget install OpenJS.NodeJS.LTS
winget install Python.Python.3.8

Jsonファイルでまとめてimportもできます。
詳細は公式import コマンド (winget)を参照して下さい。

インストール対象のアプリに関しては、ホスト側のWindowsのインストールパッケージを参考にしたいため、一旦、チェックします。
以下のコマンドでインストール済みパッケージがファイルに出力されます。

winget export export.json

import時のコマンドは以下のようになります。

winget import export.json

Sandboxファイル作成

これまでの情報を元にSnadbox構築ファイルを作っていきます。
定番のソフトと開発用も含めて以下のパッケージをインストール対象としたSndbox起動用ファイルを作成します。
・VSCode
・Node.js
・Python
・Git
・7zip

パッケージの指定方法は、exportしたファイルを参考にしてjsonファイルを作成します。

packages.json

まずは、import対象ファイルをJSONファイルにまとめます。

packages.json
{
    "$schema": "https://aka.ms/winget-packages.schema.2.0.json",
    "Sources": [
        {
            "Packages": [
                {
                    "PackageIdentifier": "Microsoft.VisualStudioCode"
                },
                {
                    "PackageIdentifier": "OpenJS.NodeJS.LTS"
                },
                {
                    "PackageIdentifier" : "Python.Python.3.8"
                },
                {
                    "PackageIdentifier": "Git.Git"
                },
                {
                    "PackageIdentifier": "7zip.7zip.Alpha.msi"
                }
            ],
            "SourceDetails": {
                "Argument": "https://winget.azureedge.net/cache",
                "Identifier": "Microsoft.Winget.Source_8wekyb3d8bbwe",
                "Name": "winget",
                "Type": "Microsoft.PreIndexed.Package"
            }
        }
    ]
}

setup.ps1

環境設定用のPowerShellスクリプトを作成します。

setup.ps1
# wingetインストール
$progressPreference = 'silentlyContinue'
Write-Information "Downloading WinGet and its dependencies..."
Invoke-WebRequest -Uri https://aka.ms/getwinget -OutFile Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle
Invoke-WebRequest -Uri https://aka.ms/Microsoft.VCLibs.x64.14.00.Desktop.appx -OutFile Microsoft.VCLibs.x64.14.00.Desktop.appx
Invoke-WebRequest -Uri https://github.com/microsoft/microsoft-ui-xaml/releases/download/v2.8.6/Microsoft.UI.Xaml.2.8.x64.appx -OutFile Microsoft.UI.Xaml.2.8.x64.appx
Add-AppxPackage Microsoft.VCLibs.x64.14.00.Desktop.appx
Add-AppxPackage Microsoft.UI.Xaml.2.8.x64.appx
Add-AppxPackage Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle

# wingetでimport
cd C:\Users\WDAGUtilityAccount\Desktop\SandboxScripts\
winget import packages.json

setup.cmd

環境設定用のPowerShellスクリプトを呼び出すスクリプトを作成します。

setup.cmd
"%SystemRoot%\System32\\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command Start-Process -wait 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe' C:\Users\WDAGUtilityAccount\Desktop\SandboxScripts\setup.ps1"

setup.wsb

Sandbox起動用ファイルを作成します。

setup.wsb
<Configuration>
  <MappedFolders>
    <MappedFolder>
      <HostFolder>C:\SandboxScripts</HostFolder>
      <ReadOnly>true</ReadOnly>
    </MappedFolder>
  </MappedFolders>
  <LogonCommand>
    <Command>C:\Users\WDAGUtilityAccount\Desktop\SandboxScripts\setup.cmd</Command>
  </LogonCommand>
</Configuration>

上記の設定は、packages.json/setup.ps1/setup.cmdはC:\SandboxScriptsに格納されている前提です。

作成したsetup.wsbファイルをダブルクリックでSandboxが起動され、環境設定まで実行されます。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?