Windows 11 WinGet 安装失败及修复指南

1. 问题概述

Windows 中执行 winget 时提示:

winget : 无法将“winget”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。

WinGet 是微软的 Windows Package Manager 命令行工具,由 App Installer(Microsoft.DesktopAppInstaller) 提供。

常见原因:

  • App Installer 未安装。
  • App Installer 注册异常。
  • 缺少 VCLibs 等依赖框架。
  • 应用执行别名或 PATH 配置异常。
  • Windows AppX/MSIX 部署组件存在问题。

2. 错误诊断

2.1 检查 App Installer

Get-AppxPackage -AllUsers Microsoft.DesktopAppInstaller |
    Select-Object Name, Version, Status, InstallLocation

检查是否已为当前用户安装:

Get-AppxPackage Microsoft.DesktopAppInstaller

2.2 尝试重新注册

Add-AppxPackage -RegisterByFamilyName `
  -MainPackage Microsoft.DesktopAppInstaller_8wekyb3d8bbwe

如果注册失败,检查部署日志。

Get-AppPackageLog -ActivityID "报错中的ActivityId" |
    Format-List Time, Id, Message

常见错误:

错误码 含义
0x80073CF9 AppX 部署失败,需进一步查询日志
0x80070490 找不到指定元素,可能是组件或注册信息异常
0x80073CF3 应用包依赖或冲突验证失败

2.3 缺少 VCLibs 框架

安装 App Installer 时可能出现:

HRESULT: 0x80073CF3

缺少框架:
Microsoft.VCLibs.140.00.UWPDesktop

最低版本:
14.0.33728.0

体系结构:
x64

这说明需要安装符合条件的 UWPDesktop VCLibs 框架。

注意:

  • Microsoft.VCLibs.140.00 和 Microsoft.VCLibs.140.00.UWPDesktop 是不同的包。
  • vc_redist.x64.exe 不能替代 UWPDesktop 框架包。
  • 必须安装满足最低版本要求、匹配处理器架构的依赖。

3. 推荐修复方案

3.1 优先使用 Microsoft Store

App Installer 官方页面:

https://apps.microsoft.com/detail/9NBLGGH4NNS1

如果 Microsoft Store 可用,优先通过商店安装或更新 App Installer,由商店处理所需依赖。

3.2 自动修复 WinGet

微软提供 Microsoft.WinGet.Client PowerShell 模块。

在 Windows PowerShell 中执行:

Set-ExecutionPolicy Bypass -Scope Process -Force

[Net.ServicePointManager]::SecurityProtocol = `
    [Net.SecurityProtocolType]::Tls12

Install-PackageProvider -Name NuGet -Force

Install-Module Microsoft.WinGet.Client `
    -Scope CurrentUser `
    -Repository PSGallery `
    -Force

Repair-WinGetPackageManager -Latest -Force

完成后重新打开 PowerShell:

winget --version

如果修复命令仍然出现依赖缺失错误,改用手动安装方案。

4. 下载 App Installer 及依赖

微软 WinGet 官方发布地址:

https://github.com/microsoft/winget-cli/releases/latest

通常需要:

  • Microsoft.DesktopAppInstaller_*.msixbundle
  • DesktopAppInstaller_Dependencies.zip

如果访问 GitHub 较慢,可以使用第三方下载代理,例如:

https://gh-proxy.com/

将 GitHub 原始下载地址附加在代理地址后面。

例如:

https://gh-proxy.com/https://github.com/microsoft/winget-cli/releases/latest/download/DesktopAppInstaller_Dependencies.zip

第三方代理并非微软官方服务,建议核验下载文件的来源、哈希与签名。

4.1 下载依赖包

创建下载目录:

New-Item -ItemType Directory -Force "C:\Install\WinGet"

使用 curl.exe 下载,以便显示进度:

curl.exe -L --fail --retry 3 `
  --connect-timeout 20 `
  --progress-bar `
  -o "C:\Install\WinGet\DesktopAppInstaller_Dependencies.zip" `
  "https://gh-proxy.com/https://github.com/microsoft/winget-cli/releases/latest/download/DesktopAppInstaller_Dependencies.zip"

下载完成后检查:

Get-Item "C:\Install\WinGet\DesktopAppInstaller_Dependencies.zip" |
    Select-Object Name, Length

下载文件的实际大小取决于发布版本,应与本次 HTTP 响应及官方发布资产信息一致。

4.2 解压依赖包

$dir = "C:\Install\WinGet"

Expand-Archive `
  -Path "$dir\DesktopAppInstaller_Dependencies.zip" `
  -DestinationPath "$dir\Dependencies" `
  -Force

查看依赖:

Get-ChildItem "$dir\Dependencies" -Recurse -File |
    Where-Object {
        $_.Name -match "VCLibs" -and
        $_.Name -match "Desktop" -and
        $_.FullName -match "x64"
    } |
    Select-Object FullName

确认对应依赖满足 App Installer 要求的名称、架构及最低版本。

4.3 安装缺失的依赖

将文件路径替换为实际依赖包:

Add-AppxPackage -Path "C:\Install\WinGet\Dependencies\实际文件名.appx"

检查安装结果:

Get-AppxPackage Microsoft.VCLibs.140.00.UWPDesktop |
    Select-Object Name, Version, Architecture, Status

如果安装包要求最低版本 14.0.33728.0,必须确认当前安装的版本不低于这个值。

4.4 安装 App Installer

Add-AppxPackage -Path `
  "C:\Install\WinGet\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle"

这里需要使用实际下载文件的完整路径和名称。

也可以一次性安装主包和依赖:

Add-AppxPackage `
  -Path "C:\Install\WinGet\AppInstaller.msixbundle" `
  -DependencyPath @(
      "C:\Install\WinGet\Dependencies\VCLibs-x64.appx"
  )

以上 AppInstaller.msixbundle 和 VCLibs-x64.appx 是示例名称,执行时应替换为真实文件名。

5. 验证修复结果

关闭并重新打开 PowerShell。

执行:

winget --version
winget --info

然后:

winget source update
winget search Git.Git

能够正常返回 WinGet 版本、软件源及搜索结果,即说明命令行工具工作正常。

如果 App Installer 已安装但命令仍无法识别:

Test-Path "$env:LOCALAPPDATA\Microsoft\WindowsApps\winget.exe"

再测试:

& "$env:LOCALAPPDATA\Microsoft\WindowsApps\winget.exe" --version

若直接调用可以运行,应检查应用执行别名及 WindowsApps 目录是否包含在 PATH 中。

6. 下载进度与网络排查

6.1 为什么下载没有进度?

PowerShell 中:

$ProgressPreference = "SilentlyContinue"

会隐藏 Invoke-WebRequest 的进度显示。

因此推荐使用:

curl.exe -L --progress-bar -o "文件路径" "下载地址"

6.2 测试代理是否正常

curl.exe -L -I `
  --connect-timeout 10 `
  --max-time 30 `
  "https://gh-proxy.com/https://github.com/microsoft/winget-cli/releases/latest/download/DesktopAppInstaller_Dependencies.zip"

重点检查:

  • HTTP 状态是否为 200 OK。
  • Content-Length 是否合理。
  • Content-Type 是否符合文件类型。
  • 是否支持 Accept-Ranges: bytes。

注意:HEAD 请求成功不等于文件一定能完整下载。

6.3 下载文件显示 0 MB

可能原因包括:

  • 尚未开始传输。
  • 代理连接缓慢。
  • PowerShell 缓冲数据,目标文件尚未更新。
  • 请求超时或被网络设备中断。

如果长时间没有进展,建议中断原下载,改用 curl.exe,观察真实的传输速度和进度。

6.4 当前目录是否影响下载位置?

只要通过 -OutFile 或 curl.exe -o 指定了绝对路径,就不会因为 PowerShell 当前工作目录是 C:\Windows\System32 而把文件下载到 System32。

例如:

Invoke-WebRequest $url -OutFile "C:\Install\WinGet\package.zip"

无论当前目录是什么,目标路径都是 C:\Install\WinGet\package.zip。

7. 修复后的建议

WinGet 正常运行后,可以安装基础开发工具:

winget install --id Git.Git -e
winget install --id Python.Python.3.13 -e
winget install --id OpenJS.NodeJS.LTS -e

对于需要重复部署的 Windows 环境,建议保存已验证可用的 App Installer 及依赖包版本,避免每次重新下载。

8. 总结

当 WinGet 不存在,且 App Installer 安装出现 0x80073CF3 时,应该优先检查具体的依赖框架。

推荐顺序:

  1. 检查 App Installer 是否存在。
  2. 查看 AppX 部署日志。
  3. 优先通过 Microsoft Store 安装或使用官方自动修复工具。
  4. 若明确缺少 VCLibs,则安装满足版本要求的框架。
  5. 安装 App Installer。
  6. 通过 winget --version 和软件源查询验证。

本次排查已确认 App Installer 缺少 **Microsoft.VCLibs.140.00.UWPDesktop**,但尚未记录最终修复成功的验证结果。

参考资料

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注