Как установить WinGet на Windows Server 2019?

Я пытаюсь установить WinGet на Windows Server 2019 (Standard Edition, Version 1809, Build 17763), но не могу заставить его работать ...

При попытке использовать ссылку "установить напрямую" из этого сообщения в блоге я получаю следующую ссылку ms-appinstaller:?source=https://aka.ms/getwinget что мой браузер не понимает, потому что у меня нет установщика приложений.

Итак, я скачал Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.appxbundleсо страницы выпусков GitHub, упомянутой в том же сообщении блога (который должен содержать как установщик приложений, так и WinGet). Поскольку моя система не получает файлы .appxbundle, я попытался установить ее с помощью Powershell:

      Add-AppxPackage ".\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.appxbundle"

Но он жалуется, что промахивается Microsoft.VCLibs.140.00.UWPDesktop:

      Add-AppxPackage : Deployment failed with HRESULT: 0x80073CF3, Package failed updates, 
dependency or conflict validation.
Windows cannot install package Microsoft.DesktopAppInstaller_1.11.11451.0_x64__8wekyb3d8bbwe 
because this package depends on a framework that could not be found. Provide the framework 
"Microsoft.VCLibs.140.00.UWPDesktop" published by "CN=Microsoft Corporation, O=Microsoft 
Corporation, L=Redmond, S=Washington, C=US", with neutral or x64 processor architecture and 
minimum version 14.0.29231.0, along with this package to install. The frameworks with name
"Microsoft.VCLibs.140.00.UWPDesktop" currently installed

По-видимому, это «пакеты среды выполнения C ++ для Desktop Bridge», которые также можно загрузить как приложение; сначала установка, а затем установка пакета DesktopAppInstaller / WinGet проходит без ошибок:

      Add-AppxPackage ".\Microsoft.VCLibs.x64.14.00.Desktop.appx"
Add-AppxPackage ".\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.appxbundle"

Однако на данный момент у меня, похоже, есть установщик приложений (поскольку он теперь распознает файлы .appx / .appxbundle), но не клиент WinGet, потому что, когда я запускаю его из командной строки, он сообщает мне:

      'winget' is not recognized as an internal or external command, operable program or batch file.

Как я могу заставить WinGet работать на машине с Windows Server 2019?

4 ответа

На самом деле, есть обходной путь для установки. Ссылаясь на один из к проблеме winget , мы видим, что все, что нам нужно сделать, это загрузить VCLibs, Microsoft.UI.XAML.2.7.3, установить его с помощьюAdd-AppxPackage, загрузите Microsoft.DesktopInstaller и установите его, чтобы запустить winget на сервере.

Ниже приведена слегка (не сильно) измененная версия комментария, упомянутого в комментариев#1861№ 1861 . Он изменен, чтобы позволить ему загружать последнюю версию winget, несмотря ни на что.

      # Install VCLibs
Add-AppxPackage 'https://aka.ms/Microsoft.VCLibs.x64.14.00.Desktop.appx'

# Install Microsoft.UI.Xaml.2.7.3 from NuGet
Invoke-WebRequest -Uri https://www.nuget.org/api/v2/package/Microsoft.UI.Xaml/2.7.3 -OutFile .\microsoft.ui.xaml.2.7.3.zip
Expand-Archive .\microsoft.ui.xaml.2.7.3.zip
Add-AppxPackage .\microsoft.ui.xaml.2.7.3\tools\AppX\x64\Release\Microsoft.UI.Xaml.2.7.appx

# Install the latest release of Microsoft.DesktopInstaller from GitHub
Invoke-WebRequest -Uri https://github.com/microsoft/winget-cli/releases/latest/download/Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle -OutFile .\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle
Add-AppxPackage .\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle

Если вы хотите использовать это, просто запустите его в пустом каталоге.

Вышеупомянутый обходной путь почти сделал это. Мне пришлось исправить разрешения:

      TAKEOWN /F "C:\Program Files\WindowsApps\Microsoft.DesktopAppInstaller_1.19.10173.0_x64__8wekyb3d8bbwe" /R /A /D Y
ICACLS "C:\Program Files\WindowsApps\Microsoft.DesktopAppInstaller_1.19.10173.0_x64__8wekyb3d8bbwe" /grant Administrators:F /T

а также добавить в путь к оболочке. В существующем экземпляре Powershell:

      $ResolveWingetPath = Resolve-Path "C:\Program Files\WindowsApps\Microsoft.DesktopAppInstaller_*_x64__8wekyb3d8bbwe"
    if ($ResolveWingetPath){
           $WingetPath = $ResolveWingetPath[-1].Path
    }
$ENV:PATH += ";$WingetPath"

Windows Server 2019 и Windows Server 2022 не поддерживаются. Можно установить диспетчер пакетов Windows, но зависимости не включены в эти SKU.

https://github.com/microsoft/winget-cli/issues/754#issuecomment-902798802

Лучший вариант сценария @Jonathan - на случай, если мы не знаем точно версию DesktopAppInstaller:

      $folderMask = "C:\Program Files\WindowsApps\Microsoft.DesktopAppInstaller_*"
$folders = Get-ChildItem -Path $folderMask -Directory | Where-Object { $_.Name -like "*_x64_*" }
foreach ($folder in $folders) {
    $folderPath = $folder.FullName
    TAKEOWN /F $folderPath /R /A /D Y
    ICACLS $folderPath /grant Administrators:F /T
}
Другие вопросы по тегам