winget-cli完全指南:从安装到精通Windows软件包管理
引言:Windows软件包管理的革命
你是否还在为寻找可靠的软件下载源而烦恼?是否厌倦了手动跟踪和更新系统中的应用程序?微软推出的Windows Package Manager(winget)彻底改变了这一现状。作为Windows系统原生的命令行软件包管理器,winget让你能够通过简单的命令行操作完成软件的安装、升级、卸载和管理,极大地提升了开发效率和系统维护体验。
读完本文后,你将能够:
- 掌握winget的安装与基本配置
- 熟练使用各种核心命令进行软件管理
- 定制个性化的winget设置以满足特定需求
- 解决常见的winget使用问题
- 利用高级功能提升工作流效率
一、安装与初始配置
1.1 系统要求
winget要求Windows 10 1809(内部版本17763)或更高版本。Windows Server 2019不支持,因为Microsoft Store不可用且缺少更新的依赖项。Windows Server 2022可能可以安装,但应视为实验性(不受支持),并且需要手动安装依赖项。
1.2 安装方法
1.2.1 Microsoft Store(推荐)
客户端通过App Installer包分发。这是获取winget的最简单方法,并且会自动接收更新。
1.2.2 开发版本
有两种获取开发版本的方法:
- 安装Windows 10或Windows 11 Insider构建
- 通过注册加入Windows Package Manager Insider计划
注意:加入Windows Package Manager Insider计划后,可能需要几天时间才能收到更新的App Installer。
1.2.3 手动更新
我们的Releases页面也会提供相同的Microsoft Store包。请注意,安装此包将为你提供WinGet客户端,但如果你未加入Windows Package Manager Insider计划,将无法从Microsoft Store启用自动更新。
注意:在较旧的Windows 10版本上,你可能需要安装VC++ v14桌面框架包。只有当你收到有关缺少框架包的错误时才需要这样做。
1.3 验证安装
安装完成后,打开命令提示符或PowerShell,输入以下命令验证winget是否安装成功:
winget --version
如果安装成功,将显示当前winget版本信息,例如:
v1.7.0-preview
二、核心命令详解
2.1 搜索软件包
使用search命令查找可用的软件包:
winget search <关键词>
例如,搜索"python":
winget search python
这将返回所有名称或ID中包含"python"的软件包列表,包括名称、ID、版本和来源信息。
2.2 安装软件包
使用install命令安装软件包:
winget install <包ID>
例如,安装Python:
winget install Python.Python.3.10
你也可以直接使用软件名称,但为了避免歧义,建议使用包ID。如果有多个版本可用,可以使用--version参数指定版本:
winget install Python.Python.3.10 --version 3.10.0
2.2.1 安装选项
| 参数 | 描述 |
|---|---|
-v, --version | 指定要安装的版本 |
-s, --source | 指定要使用的源 |
-e, --exact | 强制精确匹配包名称 |
--silent | 以静默模式安装(无用户交互) |
--location | 指定安装位置 |
--scope | 指定安装范围(user或machine) |
例如,使用静默模式安装Visual Studio Code:
winget install Microsoft.VisualStudioCode --silent
2.3 升级软件包
使用upgrade命令升级已安装的软件包:
winget upgrade <包ID>
升级所有可用软件包:
winget upgrade --all
查看可升级的软件包列表:
winget upgrade
2.4 卸载软件包
使用uninstall命令卸载软件包:
winget uninstall <包ID>
例如,卸载Python:
winget uninstall Python.Python.3.10
2.5 查看软件包信息
使用show命令查看软件包的详细信息:
winget show <包ID>
例如,查看Google Chrome的详细信息:
winget show Google.Chrome
这将显示软件包的描述、版本、作者、许可证、安装命令等详细信息。
2.6 管理软件源
winget使用软件源(sources)来获取软件包信息。默认情况下,winget配置了两个源:
msstore:Microsoft Store中的免费应用winget:Windows Package Manager社区仓库
2.6.1 查看已配置的源
winget source list
2.6.2 添加自定义源
winget source add -n <源名称> -u <源URL>
2.6.3 更新源数据
winget source update
2.6.4 删除源
winget source remove -n <源名称>
2.7 列出已安装的软件
使用list命令查看系统中已安装的软件包:
winget list
你也可以使用关键词过滤结果:
winget list <关键词>
三、高级配置与个性化
3.1 配置文件设置
winget的配置文件settings.json允许你自定义其行为。通过以下命令打开配置文件:
winget settings
配置文件的默认位置:
- 常规安装:
%LOCALAPPDATA%\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState\settings.json - 从源代码构建的非打包版本:
%LOCALAPPDATA%\Microsoft\WinGet\Settings\settings.json
3.1.1 常用配置选项
源更新间隔
"source": {
"autoUpdateIntervalInMinutes": 3
}
autoUpdateIntervalInMinutes指定源自动更新的间隔时间(分钟)。0表示禁用自动更新,默认值为15。
进度条样式
"visual": {
"progressBar": "accent"
}
progressBar设置进度条样式,可选值:
accent(默认):使用Windows强调色retro:使用当前终端前景色rainbow:彩虹色渐变sixel:使用sixel图像(需要支持sixel的终端)disabled:禁用进度显示
安装行为
"installBehavior": {
"preferences": {
"scope": "user",
"architectures": ["x64", "arm64"],
"installerTypes": ["msi", "msix"]
}
}
installBehavior允许你设置安装偏好,如默认范围(user或machine)、首选架构和安装程序类型。
网络设置
"network": {
"downloader": "do",
"doProgressTimeoutInSeconds": 60
}
downloader指定下载器,可选值为default、wininet或do(Delivery Optimization)。doProgressTimeoutInSeconds设置无进度时的超时时间(秒)。
3.2 自定义安装位置
对于支持自定义安装路径的便携软件包,可以通过配置文件设置默认安装根目录:
"installBehavior": {
"portablePackageUserRoot": "C:/Users/用户名/PortableApps",
"portablePackageMachineRoot": "C:/Program Files/PortableApps"
}
portablePackageUserRoot为当前用户设置便携软件的默认安装目录,portablePackageMachineRoot为所有用户设置。
3.3 配置命令别名
虽然winget本身不支持命令别名,但你可以通过创建PowerShell函数来实现类似功能。例如,在你的PowerShell配置文件中添加:
function wi { winget install $args }
function wu { winget upgrade $args }
function wun { winget uninstall $args }
这样,你就可以使用wi、wu和wun分别作为install、upgrade和uninstall的快捷命令。
四、故障排除与常见问题
4.1 命令未找到:winget
如果在命令提示符或PowerShell中运行winget时提示"命令未找到",可能是以下原因:
-
PATH环境变量未配置:winget通常安装在
%LOCALAPPDATA%\Microsoft\WindowsApps目录下。请确保此路径已添加到你的PATH环境变量中。验证方法:在PowerShell中运行:
$env:PATH -split ';' | Select-String "WindowsApps"如果没有结果,请手动添加该路径:
$env:PATH += ";$env:LOCALAPPDATA\Microsoft\WindowsApps" -
App Execution Alias被禁用:前往"设置 > 应用 > 应用执行别名",确保"winget"的开关已打开。
-
安装损坏:尝试重新安装App Installer。
4.2 网络连接问题
错误0x80072efd
此错误与网络连接有关,表示无法连接到服务器。可能的解决方案:
-
启用TLS 1.2:
[Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12 -
刷新DNS缓存:
ipconfig /flushdns -
检查防火墙设置,确保winget可以访问网络。
错误0x801901a0
此错误与Delivery Optimization有关。可以通过配置winget使用WININET下载器来解决:
winget settings
在配置文件中添加或修改:
"network": {
"downloader": "wininet"
}
4.3 安装失败
如果安装失败,首先尝试使用--verbose参数获取详细日志:
winget install <包ID> --verbose
常见安装问题及解决方案:
-
权限不足:尝试以管理员身份运行命令提示符或PowerShell。
-
已安装较新版本:使用
--force参数强制安装特定版本:winget install <包ID> --version <版本号> --force -
依赖项问题:某些软件需要特定的运行时环境。检查软件包详情页面获取依赖信息。
4.4 源更新失败
如果winget source update失败,尝试手动更新源:
winget source remove winget
winget source add winget https://cdn.winget.microsoft.com/cache/source.msix
五、高级使用技巧
5.1 批量安装软件
你可以创建一个文本文件,列出所有要安装的软件包ID,每行一个,然后使用以下命令批量安装:
Get-Content packages.txt | ForEach-Object { winget install $_ -e }
这在设置新计算机时特别有用。例如,packages.txt内容可能如下:
Microsoft.VisualStudioCode
Git.Git
Python.Python.3.10
NodeJS.NodeJS
Microsoft.PowerShell
5.2 使用配置文件自动安装
winget支持使用配置文件进行更复杂的安装配置。创建一个名为install.config的JSON文件:
{
"$schema": "https://aka.ms/winget-config-schema",
"sources": {
"winget": {
"enabled": true
}
},
"packages": [
{
"packageIdentifier": "Microsoft.VisualStudioCode",
"version": "1.70.0",
"installOptions": ["--silent"]
},
{
"packageIdentifier": "Git.Git"
}
]
}
然后使用以下命令应用配置:
winget configure install.config
5.3 导出和导入已安装软件列表
导出已安装软件列表:
winget export -o installed_packages.json
在另一台计算机上导入此列表:
winget import -i installed_packages.json
这对于在多台计算机上保持一致的开发环境非常有用。
5.4 集成到CI/CD管道
winget可以轻松集成到CI/CD管道中,用于设置构建环境。例如,在GitHub Actions中:
jobs:
build:
runs-on: windows-latest
steps:
- name: Install dependencies
run: |
winget install Microsoft.VisualStudio.BuildTools --version 16.11.0 --silent --override "--installPath C:\BuildTools --add Microsoft.VisualStudio.Workload.NativeDesktop --includeRecommended"
winget install Python.Python.3.10 --silent
5.5 使用别名和函数增强体验
在PowerShell中创建自定义函数来扩展winget功能:
# 快速搜索并安装软件
function winget-quickinstall {
param(
[Parameter(Mandatory=$true)]
[string]$SearchTerm
)
$packages = winget search $SearchTerm | Out-GridView -Title "Select package to install" -PassThru
if ($packages) {
winget install $packages.Id
}
}
# 检查并升级所有软件
function winget-upgradeall {
winget upgrade --all --silent
}
六、未来展望与社区参与
6.1 即将推出的功能
根据微软的官方 roadmap,未来版本的winget将包含以下激动人心的功能:
- 改进的依赖管理:更智能地处理软件包之间的依赖关系。
- 更强大的配置管理:允许更精细的安装配置和策略控制。
- 增强的搜索功能:提供更相关的搜索结果和高级筛选选项。
- 性能优化:加快软件包安装和更新速度。
6.2 参与社区
winget是一个开源项目,欢迎社区贡献。你可以通过以下方式参与:
- 报告问题:在GitHub上提交bug报告和功能请求。
- 提交PR:为winget代码库贡献修复和新功能。
- 维护软件包:在winget-pkgs仓库中提交新软件包或更新现有软件包。
- 提供反馈:参与讨论和调查,帮助塑造winget的未来发展方向。
GitHub仓库地址:https://github.com/microsoft/winget-cli
七、总结
Windows Package Manager (winget) 为Windows用户提供了一个强大、高效的命令行软件包管理工具。通过本文介绍的内容,你应该已经掌握了从安装配置到高级使用的各个方面,包括:
- 安装和配置winget的基本步骤
- 使用核心命令进行软件的搜索、安装、升级和卸载
- 自定义winget设置以满足个人需求
- 解决常见的使用问题
- 利用高级技巧提升工作效率
随着winget的不断发展,它将成为Windows平台上软件开发和系统管理不可或缺的工具。无论是普通用户还是IT专业人士,都可以通过winget简化软件管理流程,提高工作效率。
现在,是时候开始使用winget来管理你的Windows软件了。尝试使用winget search查找你常用的软件,或使用winget upgrade --all保持系统最新。如有任何问题或建议,欢迎参与winget的社区讨论,共同推动Windows软件管理体验的进步。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



