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_*.msixbundleDesktopAppInstaller_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 时,应该优先检查具体的依赖框架。
推荐顺序:
- 检查 App Installer 是否存在。
- 查看 AppX 部署日志。
- 优先通过 Microsoft Store 安装或使用官方自动修复工具。
- 若明确缺少 VCLibs,则安装满足版本要求的框架。
- 安装 App Installer。
- 通过
winget --version和软件源查询验证。
本次排查已确认 App Installer 缺少 **Microsoft.VCLibs.140.00.UWPDesktop**,但尚未记录最终修复成功的验证结果。