Windows 程序包管理器,客户端 winget.exe;Win10 21H2+/Win11 内置;也可通过 Microsoft App Installer MSIX 包分发;核心能力:软件安装、卸载、升级、源管理、导出导入清单、搜索;支持 MSIX、MSI、EXE、ZIP 包。 客户端为主,无系统后台常驻服务;大部分逻辑在 winget.exe 内部完成;仅部分系统能力调用系统 API
使用 WinGet 安装和管理应用程序 | Microsoft Learn
Windows 程序包管理器 | Microsoft Learn
WinGet(Windows Package Manager)拆解|底层原理|依赖文件|依赖关系|配套链|边界|自动化流水线
组件:Windows 程序包管理器,客户端
winget.exe;Win10 21H2+/Win11 内置;也可通过 Microsoft App Installer MSIX 包分发;核心能力:软件安装、卸载、升级、源管理、导出导入清单、搜索;支持 MSIX、MSI、EXE、ZIP 包。 底层架构:客户端为主,无系统后台常驻服务;大部分逻辑在 winget.exe 内部完成;仅部分系统能力调用系统 API。
一、底层原理
WinGet 整体工作链路:
- 源索引管理:默认源为微软公共源(winget‑public);下载源索引
source.msix(压缩的 YAML 软件清单数据库),本地缓存;记录软件 ID、版本、下载 URL、安装参数、校验哈希。 - 查询解析层:接收用户命令 (search/show/install/upgrade/uninstall/import/export);在本地索引匹配软件 ID、名称、版本。
- 下载层:HTTP/HTTPS 下载安装包;校验 SHA256 哈希;支持断点续传;缓存安装包。
- 安装调度层:根据包类型调用对应安装器:
- MSIX:调用
Appx系列 API - MSI:调用 msiexec.exe
- EXE:静默参数自动适配(从清单读取 silent/silentwithprogress 参数)
- ZIP:解压到目标路径
- MSIX:调用
- 卸载逻辑:读取注册表卸载项
HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall、HKCU下卸载信息,执行卸载命令。 - 清单 / 导出导入:yaml 格式清单,批量部署软件。
- 契约匹配:已安装软件与源清单做版本比对,实现 upgrade 升级。
完整执行时序(winget install XXX)
winget.exe 启动
↓
读取本地源缓存 source.msix;如果缓存过期,从远程源下载更新索引
↓
搜索匹配软件ID/名称;解析软件清单yaml元数据
↓
HTTP下载安装包;校验SHA256哈希
↓
根据包类型,调用对应安装执行器(msiexec/appx/exe解压)
↓
等待安装进程退出;读取返回码
↓
写入本地状态;输出执行结果;winget.exe进程退出
关键特性
- winget.exe不是后台服务,每次执行独立进程,执行完毕退出。
- 源索引是本地缓存,软件本体不在源内,源只存下载地址与元数据。
- 不接管系统卸载注册表;复用 Windows 原生卸载注册表。
- 用户权限区分:用户安装(当前用户) / 机器范围安装(需要管理员)。
二、依赖文件
| 文件 | 路径 | 作用 |
|---|---|---|
| winget.exe | %LocalAppData%\Microsoft\WindowsApps\winget.exe |
主客户端二进制;MSIX AppInstaller 包内交付;不在 System32 |
| Microsoft.Management.Deployment.dll | 系统 | MSIX/Appx 部署 API,安装卸载 msix 包 |
| msiexec.exe | System32\msiexec.exe |
MSI 安装包执行宿主 |
| cabinet.dll | System32 | ZIP/CAB 解压处理 |
| winhttp.dll | System32 | 网络下载源索引、软件包 HTTPS 请求 |
| crypt32.dll | System32 | 哈希校验、证书校验 |
| advapi32.dll | System32 | 读写卸载注册表项、权限查询 |
重要:winget.exe 由 App Installer(Microsoft.DesktopAppInstaller)MSIX 包提供;删除该应用,winget 命令直接消失。
关键注册表路径
- 用户源缓存配置:
HKCU\Software\Microsoft\Windows Package Manager\Settings
用户配置:源列表、下载缓存路径、静默行为、安全设置、网络代理。
- 系统卸载注册表(winget 读取已安装软件)
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\UninstallHKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\UninstallHKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall - MSIX 已安装包注册表:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModel\Repository\Packages
磁盘缓存目录
- 源索引缓存:
%LOCALAPPDATA%\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState\WinGet - 安装包下载缓存:
%LOCALAPPDATA%\WinGet\Packages
三、依赖关系
- 分发依赖:winget.exe 来自
Microsoft.DesktopAppInstaller(App Installer)MSIX 包;系统没有此包,winget 命令不存在。 - 网络依赖:依赖 winhttp.dll 访问微软公共源https://cdn.winget.microsoft.com;需要能访问外网;可配置私有源。
- 权限依赖:
- 用户级软件安装:普通用户权限;
- 机器范围安装、MSI 机器安装:必须管理员权限。
- 版本依赖:Windows 10 最低 21H2;Win11 全部内置;旧版 Windows 需要手动安装 AppInstaller MSIX。
- 无后台服务:不依赖任何常驻系统服务;每次调用独立进程。
- 源更新逻辑:每次执行 winget 命令会检查本地索引缓存有效期,过期自动拉取新 source.msix。
调用链路
cmd/powershell → winget.exe
↓winhttp.dll 拉取/读取本地source.msix源索引
↓crypt32.dll 校验元数据
↓winhttp.dll下载软件安装包,哈希校验
↓
├─MSIX → Microsoft.Management.Deployment.dll
├─MSI → 启动msiexec.exe子进程
├─EXE → 启动exe子进程,传入清单静默参数
└─ZIP → cabinet.dll解压
↓
advapi32.dll读取Uninstall注册表,比对已安装版本
↓
winget.exe退出
四、配套链
图形配套
| 工具 | 说明 |
|---|---|
| Microsoft Store | 更新 App Installer,间接更新 winget 版本 |
| 设置‑应用‑已安装应用 | winget 安装的 exe/msi 软件在此显示,复用系统卸载注册表 |
命令行 & 脚本配套工具链
| 工具 | 用途 |
|---|---|
| winget.exe | 主程序;install/search/upgrade/uninstall/export/import/source/settings |
| reg.exe | 读写 WinGet 用户配置注册表 |
| powershell | 配合 winget export/import 做批量部署 |
| msiexec.exe | MSI 包安装后端 |
| Add‑AppxPackage | 底层 MSIX 部署 PowerShell cmdlet |
上游
- 公共源:微软 WinGet Community Repository(github 开源清单仓库)
- 私有源:可配置 REST 源 / 本地 json 源,企业内部软件仓库
下游消费场景
- 工作站批量初始化部署;
- CI 流水线软件安装;
- 镜像部署脚本;
- 个人机器软件清单导出迁移。
五、边界(坑点与限制)
- 权限边界
- 用户安装的软件,管理员 winget 看不到;管理员安装的机器级软件普通用户看不到;两套卸载注册表隔离。
- 源索引缓存问题
- winget 不会实时查询互联网,优先读取本地缓存 source.msix;旧缓存会看到旧版本软件;可执行
winget source update强制刷新源。
- winget 不会实时查询互联网,优先读取本地缓存 source.msix;旧缓存会看到旧版本软件;可执行
- EXE 安装包黑盒限制
- EXE 安装程序行为不受 winget 完全控制;依赖清单提供正确静默参数;如果清单缺失,无法静默安装。
- 升级边界
- winget upgrade 仅能识别源内存在对应 ID,且注册表卸载项版本匹配的软件;第三方独立更新的软件识别失败。
- 网络隔离内网环境:必须部署私有 WinGet REST 源;公共源无法访问时默认源不可用。
- 系统内置 UWP/MSIX 系统应用:部分系统包受系统保护,winget 无法卸载。
- 版本约束:winget 版本跟随 AppInstaller;系统版本过低,Store 不会推送新版 AppInstaller。
- 配置仅 HKCU 当前用户:WinGet 设置注册表存储在当前用户,无 HKLM 机器全局策略;多用户各自独立缓存与配置。
- 不做系统还原点;安装失败不会自动回滚。
六、自动化流水线
流水线 1:基础运维命令
# 强制更新源索引
winget source update
# 搜索软件
winget search notepad++
# 安装软件(静默)
winget install Notepad++.Notepad++ -h
# 导出本机软件清单yaml
winget export -o .\winget_list.yaml
# 根据清单批量部署
winget import .\winget_list.yaml
# 全部可升级软件
winget upgrade --all -h
# 查看winget版本
winget --info
流水线 2:PowerShell 自动化部署脚本模板
# 判断winget是否可用
if (-not(Get‑Command winget -ErrorAction SilentlyContinue)){
Write‑Error "WinGet不存在,请安装App Installer MSIX"
exit 1
}
# 批量安装软件列表
$apps=@(
"Notepad++.Notepad++",
"7zip.7zip"
)
foreach($app in $apps){
winget install $app -h --accept‑package‑agreements --accept‑source‑agreements
}
流水线 3:查看 WinGet 用户配置注册表
Get‑ItemProperty -Path "HKCU:\Software\Microsoft\Windows Package Manager\Settings" -ErrorAction SilentlyContinue
流水线 4:故障分级排查 SOP
winget不是内部命令:AppInstaller MSIX 丢失 / 版本过低;去商店安装 / 更新应用安装程序。- 搜索不到新版本:执行
winget source update刷新本地源缓存。 - upgrade 识别不到已安装软件:EXE 软件卸载注册表版本号与源清单版本不匹配;属于 EXE 包固有局限。
- 内网机器无法下载:配置企业私有 REST 源;移除默认公共源。
- 静默安装失败:EXE 程序缺少正确静默参数,需要校验软件清单。
核心总结 WinGet (winget.exe) 是 Windows 包管理客户端,由 AppInstaller MSIX 提供;无后台服务,进程即启即退;依靠本地 source.msix 源索引;复用系统原生 MSI/Appx/EXE/ZIP 安装能力;注册表配置仅作用于当前用户;EXE 黑盒安装存在识别、静默边界;自动化部署优先使用 export‑import 清单流水线。
WinGet(Windows Package Manager)完整拆解解构
基础信息
winget.exe
Microsoft.DesktopAppInstaller_8wekyb3d8bbwe(应用安装程序 / App Installer,MSIX 打包应用)
%LOCALAPPDATA%\Microsoft\WindowsApps\winget.exe(App Execution Alias 软入口)
C:\Program Files\WindowsApps\Microsoft.DesktopAppInstaller_xxxx
关键边界:WinGet 不属于传统 Win32 系统服务,是按需执行的客户端程序;无常驻后台进程;安装逻辑不创造独立安装引擎,复用系统原生安装程序静默参数。
一、底层原理
核心架构模型:源驱动 + 清单驱动
-
源索引机制默认源:
winget(社区仓库)、msstore(微软商店);客户端定期从cdn.winget.microsoft.com下载source.msix(内置 SQLite 索引库 index.db);winget search不实时联网查询,优先本地 SQL 索引检索;仅下载包体、刷新源清单才访问外网。 -
清单 Manifest 机制每个软件对应标准化 YAML 清单,定义:架构、下载地址、哈希校验、静默安装参数、依赖、权限要求;WinGet 仅读取清单指令,不内置动态脚本执行能力(区别 Chocolatey/Scoop)。
-
完整标准执行时序(winget install)
终端调用 winget.exe
↓
加载AppX容器运行时、VCLibs、UI.Xaml依赖
↓
读取本地缓存source索引库,匹配软件ID
↓
校验源清单时效;过期则后台拉取更新source.msix
↓
解析对应软件Manifest,提取InstallerUrl、SHA256、静默参数
↓
HTTPS下载安装包至用户临时目录 %TEMP%\WinGet
↓
校验文件哈希;校验失败直接终止
↓
根据InstallerType唤起对应原生安装器:
MSIX → AppX部署引擎
MSI → msiexec.exe
EXE → 直接静默启动
Portable → 解压并创建符号链接
↓
等待安装进程退出,读取返回码判断成败
↓
写入本地软件安装状态记录;临时安装包默认保留/按策略清理
↓
可选:采集操作遥测事件(可通过组策略管控)
- 权限模型
- Machine 范围安装(Program Files):必须管理员权限;
- User 范围安装:普通用户可执行(依赖安装器支持用户级部署);
- 便携包拥有独立目录管理体系:
%LOCALAPPDATA%\Microsoft\WinGet\Packages
二、依赖文件 & 关键目录清单
1. 核心二进制载体
| 路径 | 名称 | 描述 |
|---|---|---|
| %LOCALAPPDATA%\Microsoft\WindowsApps\winget.exe | winget.exe | App 执行别名(stub 转发至 AppX 包内真实程序) |
| C:\Program Files\WindowsApps\Microsoft.DesktopAppInstaller_xxxx\winget.exe | winget.exe | 真实 CLI 主程序 |
| 配套 AppX 内部 DLL | AppInstaller 核心引擎库 | 源解析、下载、校验、安装调度逻辑 |
2. 强制运行依赖(AppX 运行必备)
Microsoft.VCLibs.x64.14.00(VC++ 运行时 AppX 包)Microsoft.UI.Xaml(UI 框架,Win10 强制依赖,Win11 内置)- AppX 部署框架(AppxDeployment.dll)
- WinHTTP.dll:HTTPS 下载、源通信
- crypt32.dll:哈希校验、证书验证
3. 关键缓存 / 配置目录
-
用户配置文件
%LOCALAPPDATA%\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState\settings.json控制日志、代理、源信任等级、遥测开关。 -
运行日志目录
%LOCALAPPDATA%\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState\DiagOutputDir -
源索引缓存
%LOCALAPPDATA%\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState\Cache存放解压后的 source.msix、SQLite index.db -
临时安装包下载目录
%TEMP%\WinGet,安装完成后不会永久保留,系统自动清理。 -
便携软件托管目录用户级:
%LOCALAPPDATA%\Microsoft\WinGet\Packages机器级:C:\Program Files\WinGet\Packages
4. 协同外部系统程序(调用链下游)
msiexec.exe:MSI 程序安装powershell.exe:DSC 配置执行AppxDeploymentService:MSIX/APPX 部署certutil.exe:辅助证书校验bits.dll(可选):部分版本支持 BITS 后台下载
三、依赖关系梳理
硬性强制依赖
- AppX/MSIX 应用部署运行环境(Windows 10 1809+)
- Microsoft.DesktopAppInstaller(应用安装程序包)
- WinHTTP 网络栈、系统证书存储(HTTPS 与签名校验)
- RPCSs:AppX 组件跨进程通信
可选依赖
- Microsoft Store 服务(仅用于更新 AppInstaller 本体;离线可手动安装 msixbundle)
- BITS 后台智能传输;关闭后仅改用前台 HTTP 下载
- Windows Update(无直接依赖;与 SoftwareDistribution 体系相互独立)
完全无依赖
- OOBE 组件、BypassNRO、msoobe、oobeldr
- DiagTrack、whesvc、DeviceCensus 遥测采集进程
⚠️ 注意:WinGet自身可产生独立遥测事件,但不强制依赖 DiagTrack 管线上传;拥有独立遥测链路。
- wlidsvc、CDPSvc、GDID 生成链路;WinGet 默认不主动读取 / 附加 GDID
四、完整逻辑链路(上下游配套链)
上游(数据源)
- 官方 CDN:
cdn.winget.microsoft.com(源索引 source.msix) - 软件官方下载服务器(各类 InstallerUrl)
- 私有自建 REST 源 / 镜像源(中科大、南大镜像)
- Microsoft Store API(msstore 源)
中游(处理链路)
winget.exe CLI → 源索引解析 → 清单读取 → 文件下载 → 哈希校验 → 调用原生安装器下游(产出)
- 系统软件注册表卸载项(标准 Uninstall 注册表路径)
- 便携包:
%LOCALAPPDATA%\Microsoft\WinGet - 本地日志、临时缓存文件
- 可选遥测上报(微软隐私端点)
并行关联系统(区分边界)
- Windows Update(wuauserv/SoftwareDistribution):负责系统补丁;与 WinGet 应用软件互相独立,两套下载、两套缓存
- Microsoft Store:msstore 源共用商店后端,但安装链路分离
五、核心运行机制详解
机制 1:源更新机制
- 启动 / 执行搜索时自动判断索引老化;
- 下载 source.msix(压缩 SQLite 数据库),覆盖本地缓存;
- 企业内网可通过组策略阻止自动更新源、禁用公共源。
机制 2:安全校验机制
- 源清单签名校验;
- 安装包 SHA256 哈希校验;
哈希不匹配直接拒绝安装,防止中间人篡改安装程序。
机制 3:遥测行为(运维风险重点)
机制 4:离线运行限制
六、运维管控、风险点
安全风险
- 允许添加不受信任第三方源,存在供应链风险;建议组策略锁定可信源列表;
- 临时目录
%TEMP%\WinGet留存安装包,存在本地文件泄露; - 管理员权限下可静默批量部署软件,终端基线管控需要限制 winget 可用范围。
标准管控手段
- 组策略:禁用公共源、限制源添加、关闭遥测;
- 权限 ACL:限制普通用户启动 winget.exe;
- 镜像部署:预装私有镜像源,阻断公网 CDN 访问;
- 定期清理
%TEMP%\WinGet临时缓存。
七、常见认知误区澄清
误区 1:winget.exe 位于 System32 目录
误区 2:WinGet 依赖 Windows Update 服务
误区 3:winget 安装程序会写入 SoftwareDistribution 缓存
误区 4:winget 自动携带 GDID 上报设备标识
八、横向对比(并入你的终端资产评估总表)
| 对象 | 数据缓存目录 | 是否独立遥测 | 是否关联 GDID | 外部网络目标 |
|---|---|---|---|---|
| WinGet | % TEMP%\WinGet、AppX 包内 Cache | ✅独立遥测 | ❌默认不携带 | cdn.winget.microsoft.com、软件官方下载地址 |
| SoftwareDistribution\Download | 系统目录缓存 | ❌无遥测 | ❌ | dl.delivery.mp.microsoft.com |
| DeviceCensus.exe | 临时 ETL 日志 | ✅依托 DiagTrack | ✅可读取缓存 | vortex-win.data.microsoft.com |
PS C:\Users\Administrator> WinGet
Windows 程序包管理器 v1.11.430 版权所有 (C) Microsoft Corporation。保留所有权利。
WinGet 命令行实用工具可从命令行安装应用程序和其他程序包。
使用情况: winget [<命令>] [<选项>]
下列命令有效:
WinGet install 安装给定的程序包
WinGet show 显示包的相关信息
WinGet source 管理程序包的来源
WinGet search 查找并显示程序包的基本信息
WinGet list 显示已安装的程序包
WinGet upgrade 显示并执行可用升级
WinGet uninstall 卸载给定的程序包
WinGet hash 哈希安装程序的帮助程序
WinGet validate 验证清单文件
WinGet settings 打开设置或设置管理员设置
WinGet features 显示实验性功能的状态
WinGet export 导出已安装程序包的列表
WinGet import 安装文件中的所有程序包
WinGet pin 管理包钉
WinGet configure 将系统配置为所需状态
WinGet download 从给定的程序包下载安装程序
WinGet repair 修复所选包
WinGet dscv3 DSC v3 资源命令
如需特定命令的更多详细信息,请向其传递帮助参数。 [-?]
下列选项可用:
-v,--version 显示工具的版本
--info 显示工具的常规信息
-?,--help 显示选定命令的帮助信息
--wait 提示用户在退出前按任意键
--logs,--open-logs 打开默认日志位置
--verbose,--verbose-logs 启用 WinGet 的详细日志记录
--nowarn,--ignore-warnings 禁止显示警告输出
--disable-interactivity 禁用交互式提示
--proxy 设置要用于此执行的代理
--no-proxy 禁止对此执行使用代理
可在此找到更多帮助: "https://aka.ms/winget-command-help"
WinGet 命令汇总表(字段:名称 | 描述 | 应用场景 | 实例)
| 名称 | 描述 | 应用场景 | 实例 |
|---|---|---|---|
| winget install | 安装给定的程序包 | 自动化批量部署软件、标准化装机、CI 无人值守安装 | winget install Notepad++
winget install Git.Git -s winget --silent |
| winget show | 显示包的相关信息 | 查看软件版本、安装链接、依赖、静默参数,合规核查 | winget show Notepad++ |
| winget source | 管理程序包的来源 | 添加 / 删除 / 更新私有源、切换国内镜像、阻断公网源 | winget source add winget https://cdn.winget.microsoft.com/cite
winget source remove winget |
| winget search | 查找并显示程序包的基本信息 | 检索可用软件、脚本前置匹配软件 ID | winget search firefox |
| winget list | 显示已安装的程序包 | 终端软件资产盘点、版本巡检、升级前置筛查 | winget list
winget list python |
| winget upgrade | 显示并执行可用升级 | 统一批量更新终端应用软件 | winget upgrade
winget upgrade Notepad++
winget upgrade --all |
| winget uninstall | 卸载给定的程序包 | 基线整改、批量清理软件 | winget uninstall Notepad++ --silent |
| winget hash | 哈希安装程序的帮助程序 | 制作自定义软件清单,生成安装包 SHA256 | winget hash D:\setup.exe |
| winget validate | 验证清单文件 | 校验自定义 manifest 语法与字段合法性 | winget validate D:\manifest.yaml |
| winget settings | 打开设置或设置管理员设置 | 修改遥测、代理、实验功能、安全策略 | winget settings |
| winget features | 显示实验性功能的状态 | 查看 / 开启预览实验特性 | winget features |
| winget export | 导出已安装程序包的列表 | 备份软件清单、制作装机模板 | winget export -o D:\packages.json |
| winget import | 安装文件中的所有程序包 | 根据清单批量部署软件,环境迁移 | winget import D:\packages.json |
| winget pin | 管理包钉 | 锁定软件版本,防止自动升级引发兼容故障 | winget pin add Notepad++
winget pin remove Notepad++ |
| winget configure | 将系统配置为所需状态 | IaC 自动化基线、工作站标准化初始化 | winget configure D:\configuration.dsc.yaml |
| winget download | 从给定的程序包下载安装程序 | 离线装机预下载安装包,内网分发 | winget download Notepad++ -d D:\offline |
| winget repair | 修复所选包 | 修复损坏的 MSI 类型应用 | winget repair 7zip.7zip |
| winget dscv3 | DSC v3 资源命令 | 对接 PowerShell DSC,持续配置合规收敛 | winget dscv3 --help |
WinGet 全局通用选项表(字段:名称 | 描述 | 应用场景 | 实例)
| 名称 | 描述 | 应用场景 | 实例 |
|---|---|---|---|
| -v,--version | 显示工具的版本 | 版本基线核查、兼容性排查 | winget -v |
| --info | 显示工具的常规信息 | 环境巡检、路径与策略排查 | winget --info |
| -?,--help | 显示选定命令的帮助信息 | 查阅命令完整参数语法 | winget install -? |
| --wait | 提示用户在退出前按任意键 | 人工调试,防止窗口直接关闭 | winget list --wait |
| --logs,--open-logs | 打开默认日志位置 | 安装失败故障排查 | winget install Notepad++ --open-logs |
| --verbose,--verbose-logs | 启用 WinGet 的详细日志记录 | 深度定位下载、校验异常 | winget install Git.Git --verbose |
| --nowarn,--ignore-warnings | 禁止显示警告输出 | 自动化脚本屏蔽干扰信息 | winget upgrade --all --nowarn |
| --disable-interactivity | 禁用交互式提示 | 无人值守脚本,自动确认 | winget install Notepad++ --disable-interactivity |
| --proxy | 设置要用于此执行的代理 | 隔离网络环境临时指定代理 | winget search chrome --proxy http://127.0.0.1:7890 |
| --no-proxy | 禁止对此执行使用代理 | 内网直连私有源,绕过系统代理 | winget source update --no-proxy |
WinGet 子命令清单表
| 名称 | 描述 | 功能特色 | 应用场景 |
|---|---|---|---|
| winget install | 安装给定的程序包 | 支持 MSIX/MSI/EXE/ 便携包;自动校验哈希;支持静默安装、指定版本、架构;可自定义安装参数 | 批量部署软件、终端自动化装机、CI 脚本、离线软件部署 |
| winget show | 显示包的相关信息 | 读取 Manifest 清单,展示版本、作者、许可、依赖、安装链接、静默参数 | 部署前调研软件参数、确认安装程序信息、合规核查 |
| winget source | 管理程序包的来源 | 添加 / 删除 / 更新 / 启用 / 禁用软件源;支持官方源、私有 REST 镜像源;源签名校验 | 内网搭建私有软件仓库、阻断公网源、切换国内镜像源 |
| winget search | 查找并显示程序包的基本信息 | 基于本地 SQLite 索引检索;支持 ID、名称、关键词模糊搜索;筛选架构、渠道 | 快速检索可用软件、编写自动化脚本前匹配软件 ID |
| winget list | 显示已安装的程序包 | 枚举系统已安装应用,匹配 WinGet 清单;识别可升级软件;支持筛选、导出 | 终端资产盘点、巡检软件版本、批量升级前置筛查 |
| winget upgrade | 显示并执行可用升级 | 检测已安装软件新版本;支持批量升级、指定包升级、忽略升级 | 终端常态化软件更新、运维统一推送软件新版本 |
| winget uninstall | 卸载给定的程序包 | 调用程序原生卸载程序;支持静默卸载、强制清理残留 | 批量回收软件、基线整改、自动化终端标准化清理 |
| winget hash | 哈希安装程序的帮助程序 | 对安装文件生成 SHA256 哈希;用于制作自定义 Manifest 清单 | 自制私有软件清单、校验安装包完整性、供应链安全加固 |
| winget validate | 验证清单文件 | 校验 YAML Manifest 语法、字段规范、链接与哈希合规性 | 开发私有软件源、编写自定义安装清单、自动化 CI 校验 |
| winget settings | 打开设置或设置管理员设置 | 图形 / JSON 配置;控制遥测、代理、源行为、实验功能、日志策略 | 统一管控终端 WinGet 安全策略、关闭遥测、锁定可信源 |
| winget features | 显示实验性功能的状态 | 查询 / 切换预览实验特性开关 | 测试新版 WinGet 前瞻功能、适配新部署能力 |
| winget export | 导出已安装程序包的列表 | 输出 JSON 清单,记录当前所有已安装软件 ID 与版本 | 终端环境备份、批量迁移软件清单、装机模板制作 |
| winget import | 安装文件中的所有程序包 | 读取 export 导出清单,批量自动安装清单内全部软件 | 标准化批量装机、虚拟机模板初始化、灾备环境重建 |
| winget pin | 管理包钉 | 锁定指定软件版本,阻止被 upgrade 自动升级 | 业务系统锁定稳定软件版本,规避自动更新引发兼容性故障 |
| winget configure | 将系统配置为所需状态 | 基于配置文件执行应用安装、系统参数配置(WinGet 配置文件规范) | 云主机初始化、工作站标准化基线、IaC 自动化部署 |
| winget download | 从给定的程序包下载安装程序 | 仅下载不安装;自动保存安装包至指定路径,校验哈希 | 离线装机预下载安装包、流量管控、内网文件分发前置缓存 |
| winget repair | 修复所选包 | 调用软件原生修复程序,支持 MSI 修复模式 | 软件文件损坏、安装异常后的自动化修复运维 |
| winget dscv3 | DSC v3 资源命令 | 对接 PowerShell DSC v3,实现持续配置收敛 | 域终端持续合规管控、云原生自动化配置管理 |
WinGet 全局通用选项表
| 参数 | 描述 | 功能特色 | 应用场景 |
|---|---|---|---|
| -v,--version | 显示工具的版本 | 快速查询当前 WinGet 客户端版本 | 版本兼容性排查、批量环境基线核查 |
| --info | 显示工具的常规信息 | 输出运行环境、源状态、功能开关摘要 | 故障排查、收集客户端运行上下文信息 |
| -?,--help | 显示选定命令的帮助信息 | 展示子命令完整参数语法、示例 | 脚本开发、命令参数调试 |
| --wait | 提示用户在退出前按任意键 | 命令执行完成后阻塞窗口不关闭 | 人工调试脚本、观察执行结果 |
| --logs,--open-logs | 打开默认日志位置 | 直接跳转 WinGet 日志目录 | 安装失败问题排查、审计执行记录 |
| --verbose,--verbose-logs | 启用 WinGet 的详细日志记录 | 输出完整网络、下载、校验调试日志 | 深度故障定位、供应链下载链路排查 |
| --nowarn,--ignore-warnings | 禁止显示警告输出 | 屏蔽非阻断类警告信息 | 自动化脚本执行,避免警告干扰返回码判断 |
| --disable-interactivity | 禁用交互式提示 | 自动采用默认选项,不弹出人机确认 | 无人值守自动化脚本、CI / 后台批量任务 |
| --proxy | 设置要用于此执行的代理 | 单次命令临时指定代理地址 | 隔离网络环境、按需代理下载软件包 |
| --no-proxy | 禁止对此执行使用代理 | 本次调用强制绕过系统代理 | 内网直连私有源场景,规避代理路由异常 |
PS C:\Users\Administrator> WinGet upgrade
名称 ID 版本 可用 源
-----------------------------------------------------------------------
Windows 终端 Microsoft.WindowsTerminal 1.22.12111.0 1.23.12371.0 winget
1 升级可用。
PS C:\Users\Administrator> winget upgrade Microsoft.WindowsTerminal
已找到 Windows Terminal [Microsoft.WindowsTerminal] 版本 1.23.12371.0
此应用程序由其所有者授权给你。
Microsoft 对第三方程序包概不负责,也不向第三方程序包授予任何许可证。
此包需要以下依赖项:
- 程序包
Microsoft.UI.Xaml.2.8 [>= 8.2306.22001.0]
PS C:\Users\Administrator> WinGet features
以下实验性功能正在进行中。
它们可以通过设置文件“winget settings”进行配置。
功能 状态 属性 链接
-----------------------------------------------------------------------
Direct MSI Installation 已禁用 directMSI https://aka.ms/winget-settings
Resume 已禁用 resume https://aka.ms/winget-settings
Font 已禁用 Font https://aka.ms/winget-settings
PS C:\Users\Administrator> winget list
名称 ID 版本 可用 源
-----------------------------------------------------------------------------------------------------------------------
Image Eye v9.3 x64 ARP\Machine\X64\Image Eye x64_is1 Unknown
WinRAR 7.13 (64-位) RARLab.WinRAR 7.13.0 winget
Microsoft Edge Microsoft.Edge 140.0.3485.54 winget
Microsoft Edge WebView2 Runtime Microsoft.EdgeWebView2Runtime 140.0.3485.54 winget
QQ Tencent.QQ.NT 9.9.21.39038 winget
英特尔® 显卡控制中心 MSIX\AppUp.IntelGraphicsExperience_1.10… 1.100.5688.0
应用安装程序 Microsoft.AppInstaller 1.26.430.0 winget
Microsoft Edge 游戏助手 MSIX\Microsoft.Edge.GameAssist_1.0.3456… 1.0.3456.0
Microsoft Edge MSIX\Microsoft.MicrosoftEdge.Stable_140… 140.0.3485.54
Microsoft .Net Native Framework Package… MSIX\Microsoft.NET.Native.Framework.2.2… 2.2.29512.0
Microsoft .Net Native Framework Package… MSIX\Microsoft.NET.Native.Framework.2.2… 2.2.29512.0
Microsoft .Net Native Runtime Package 2… MSIX\Microsoft.NET.Native.Runtime.2.2_2… 2.2.28604.0
Microsoft .Net Native Runtime Package 2… MSIX\Microsoft.NET.Native.Runtime.2.2_2… 2.2.28604.0
Windows 安全中心 MSIX\Microsoft.SecHealthUI_1000.27840.1… 1000.27840.1000.0
Microsoft.UI.Xaml.2.8 Microsoft.UI.Xaml.2.8 8.2501.31001.0 winget
Microsoft.UI.Xaml.2.8 Microsoft.UI.Xaml.2.8 8.2501.31001.0 winget
Microsoft Visual C++ 2015 UWP Desktop R… Microsoft.VCLibs.Desktop.14 14.0.33728.0 winget
Microsoft Visual C++ 2015 UWP Desktop R… Microsoft.VCLibs.Desktop.14 14.0.33728.0 winget
Microsoft Visual C++ 2015 UWP Runtime P… MSIX\Microsoft.VCLibs.140.00_14.0.33519… 14.0.33519.0
Microsoft Visual C++ 2015 UWP Runtime P… MSIX\Microsoft.VCLibs.140.00_14.0.33519… 14.0.33519.0
反馈中心 MSIX\Microsoft.WindowsFeedbackHub_1.250… 1.2506.12104.0
Windows 终端 Microsoft.WindowsTerminal 1.22.12111.0 1.23.12371.0 winget
Windows Package Manager Source (winget)… MSIX\Microsoft.Winget.Source_2025.909.2… 2025.909.2443.37
QQExtension MSIX\QQExtension_1.0.0.0_neutral__mgek6… 1.0.0.0
WinRAR MSIX\WinRAR.ShellExtension_1.0.0.2_x64_… 1.0.0.2
PS C:\Users\Administrator> winget --info
Windows 程序包管理器 v1.11.430
版权所有 (C) Microsoft Corporation。保留所有权利。
Windows: Windows.Server v10.0.26100.4946
系统体系结构: X64
软件包: Microsoft.DesktopAppInstaller v1.26.430.0
Winget 目录
-------------------------------------------------------------------------------------------------------------------
日志 %LOCALAPPDATA%\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState\DiagOutputDir
用户设置 %LOCALAPPDATA%\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState\settings.json
可移植链接目录(用户) %LOCALAPPDATA%\Microsoft\WinGet\Links
可移植链接目录(计算机) C:\Program Files\WinGet\Links
可移植包根目录(用户) %LOCALAPPDATA%\Microsoft\WinGet\Packages
可移植包根目录 C:\Program Files\WinGet\Packages
可移植包根目录 (x86) C:\Program Files (x86)\WinGet\Packages
安装程序下载 %USERPROFILE%\Downloads
配置模块 %LOCALAPPDATA%\Microsoft\WinGet\Configuration\Modules
链接
----------------------------------------------------------------------------
隐私声明 https://aka.ms/winget-privacy
许可协议 https://aka.ms/winget-license
第三方声明 https://aka.ms/winget-3rdPartyNotice
主页 https://aka.ms/winget
Windows 应用商店条款 https://www.microsoft.com/en-us/storedocs/terms-of-sale
管理员设置 状态
------------------------------------------------
LocalManifestFiles 已禁用
BypassCertificatePinningForMicrosoftStore 已禁用
InstallerHashOverride 已禁用
LocalArchiveMalwareScanOverride 已禁用
ProxyCommandLineOptions 已禁用
DefaultProxy 已禁用
WinGet --info 输出信息整理表
| 名称 | 描述 | 功能特色 | 应用场景 |
|---|---|---|---|
| winget --info | 输出 WinGet 运行环境、版本、目录路径、管理员策略、相关链接汇总信息 | 一次性展示客户端版本、宿主 App 版本、操作系统信息、全部工作目录、管理员策略开关;快速收集运行上下文 | 环境基线核查、故障排查、自动化脚本预校验环境、终端资产巡检 |
| Windows 程序包管理器 v1.11.430 | winget CLI 核心版本号 | 区分命令行接口能力集,不同版本支持命令存在差异 | 功能兼容性测试、批量终端版本标准化管控 |
| Microsoft.DesktopAppInstaller v1.26.430.0 | WinGet 宿主 MSIX 包版本(应用安装程序) | WinGet 依托该 AppX 包运行,版本决定底层引擎能力 | 离线部署包匹配、功能异常版本溯源 |
日志路径
%LOCALAPPDATA%\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState\DiagOutputDir |
WinGet 运行日志存放目录 | 记录安装、下载、源刷新、校验全过程日志;支持 verbose 详细日志 | 安装失败排障、操作行为审计、供应链下载异常定位 |
用户设置
%LOCALAPPDATA%\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState\settings.json |
WinGet 用户级 JSON 配置文件 | 控制遥测、日志级别、代理、源行为、实验功能 | 批量下发配置、关闭遥测、锁定可信软件源、安全加固 |
可移植链接目录 (用户)
%LOCALAPPDATA%\Microsoft\WinGet\Links |
用户级便携程序软链接目录 | 存放便携包 exe 符号链接,实现全局命令调用 | 部署便携绿色软件、用户隔离软件环境 |
可移植链接目录 (计算机)
C:\Program Files\WinGet\Links |
机器全局便携程序链接目录 | 所有用户可用的便携程序软链接,加入系统 PATH | 标准化部署跨用户共用便携工具 |
可移植包根目录 (用户)
%LOCALAPPDATA%\Microsoft\WinGet\Packages |
用户范围便携软件本体存放目录 | 安装便携包时解压到此,权限隔离,无需管理员 | 普通用户自主安装绿色软件,不污染系统目录 |
可移植包根目录
C:\Program Files\WinGet\Packages |
X64 机器范围便携软件根目录 | 管理员部署全局便携软件,所有用户访问 | 工作站统一运维工具集部署 |
可移植包根目录 (x86)
C:\Program Files (x86)\WinGet\Packages |
32 位便携包独立根目录 | 区分 32/64 位便携程序,架构隔离 | 兼容老旧 32 位工具批量部署 |
安装程序下载
%USERPROFILE%\Downloads |
winget download 默认输出路径 | 未指定路径时,安装包下载到此目录 | 预下载离线安装包、人工二次分发安装介质 |
配置模块
%LOCALAPPDATA%\Microsoft\WinGet\Configuration\Modules |
WinGet Configure / DSCv3 配置模块存放目录 | 存放自定义配置资源模块,扩展系统配置能力 | IaC 自动化基线、终端持续合规配置管理 |
外部链接清单
| 名称 | 描述 | 功能特色 | 应用场景 |
|---|---|---|---|
| 隐私声明 https://aka.ms/winget-privacy | WinGet 官方隐私说明文档 | 阐述遥测收集范围、数据处理规则 | 等保合规审查、终端隐私管控评估 |
| 许可协议 https://aka.ms/winget-license | WinGet 使用许可协议 | 客户端使用法律条款 | 企业规模化部署法务合规参考 |
| 第三方声明 https://aka.ms/winget-3rdPartyNotice | 第三方开源组件声明 | 开源组件版权信息 | 软件供应链合规审计 |
| 主页 https://aka.ms/winget | WinGet 官方项目主页 | 获取文档、更新公告、最佳实践 | 运维人员查阅官方部署规范 |
| Windows 应用商店条款 | Microsoft Store 商业条款 | msstore 源相关分发规则 | 使用商店源部署软件时合规参考 |
管理员策略(Group Policy 可控开关)
| 名称 | 描述 | 功能特色 | 应用场景 |
|---|---|---|---|
| LocalManifestFiles | 本地清单文件支持开关 | 启用后允许加载本地未签名清单安装软件;风险较高 | 高度隔离内网离线部署;建议默认禁用 |
| BypassCertificatePinningForMicrosoftStore | 绕过 Microsoft Store 证书固定校验 | 关闭证书强校验,存在中间人攻击风险 | 内网代理 SSL 拦截特殊场景,不推荐启用 |
| InstallerHashOverride | 允许覆盖安装包哈希校验 | 跳过 SHA256 安全校验,极大降低供应链安全性 | 仅测试环境临时使用,生产环境强制禁用 |
| LocalArchiveMalwareScanOverride | 绕过本地归档文件恶意软件扫描 | 跳过压缩包安全检测 | 内部可信离线介质场景,生产默认禁用 |
| ProxyCommandLineOptions | 启用命令行代理参数 | 控制是否允许通过命令行临时指定代理 | 安全管控:禁止终端随意设置代理访问外网源 |
| DefaultProxy | 默认代理全局配置开关 | 统一设置 WinGet 默认代理 | 企业统一出口代理环境管控 |
winget 命令及其选项的详细化分类:
| 分类名称 | 子类 | 精确颗粒度 | 命令/选项 |
|---|---|---|---|
| 命令 | 安装命令 | 安装给定的程序包 | install |
| 显示命令 | 显示包的相关信息 | show |
|
| 来源管理命令 | 管理程序包的来源 | source |
|
| 查找命令 | 查找并显示程序包的基本信息 | search |
|
| 已安装包列表命令 | 显示已安装的程序包 | list |
|
| 升级命令 | 显示并执行可用升级 | upgrade |
|
| 卸载命令 | 卸载给定的程序包 | uninstall |
|
| 哈希命令 | 哈希安装程序的帮助程序 | hash |
|
| 验证命令 | 验证清单文件 | validate |
|
| 设置命令 | 打开设置或设置管理员设置 | settings |
|
| 功能显示命令 | 显示实验性功能的状态 | features |
|
| 导出命令 | 导出已安装程序包的列表 | export |
|
| 导入命令 | 安装文件中的所有程序包 | import |
|
| 钉住包命令 | 管理包钉 | pin |
|
| 配置命令 | 将系统配置为所需状态 | configure |
|
| 下载命令 | 从给定的程序包下载安装程序 | download |
|
| 修复命令 | 修复所选包 | repair |
|
| 选项 | 版本信息 | 显示工具的版本 | -v, --version |
| 常规信息 | 显示工具的常规信息 | --info |
|
| 帮助信息 | 显示选定命令的帮助信息 | -?, --help |
|
| 等待提示 | 提示用户在退出前按任意键 | --wait |
|
| 打开日志 | 打开默认日志位置 | --logs, --open-logs |
|
| 详细日志 | 启用 WinGet 的详细日志记录 | --verbose, --verbose-logs |
|
| 禁止警告 | 禁止显示警告输出 | --nowarn, --ignore-warnings |
|
| 禁用交互 | 禁用交互式提示 | --disable-interactivity |
|
| 代理设置 | 设置要用于此执行的代理 | --proxy |
|
| 禁用代理 | 禁止对此执行使用代理 | --no-proxy |
说明:
- 命令:表示
winget工具的不同功能命令,如安装、卸载、升级等。 - 选项:表示可以与命令一同使用的额外参数,帮助控制行为或提供额外的输出信息。
winget upgrade 命令及其参数、选项的分类和化展示,具有更精确的颗粒度,便于深入理解每个功能的用途。通过细化每个分类名称和子类,我们可以清晰地看到每个命令和选项所对应的功能。
winget upgrade 命令及其参数、选项(更精细分类)
| 类别 | 子类别 | 选项 | 描述 | 示例/值 |
|---|---|---|---|---|
| 基本命令 | winget upgrade |
更新已安装的程序包 | ||
winget update |
winget upgrade 的别名,执行相同操作 |
|||
| 查询与筛选 | 包查询 | -q, --query |
搜索并列出符合条件的程序包 | <query> |
--id |
按程序包的 ID 筛选结果 | <id> |
||
--name |
按程序包名称筛选结果 | <name> |
||
--moniker |
按程序包对象名称(别名)筛选结果 | <moniker> |
||
| 版本控制 | 版本指定 | -v, --version |
指定升级至的程序包版本(默认为最新版本) | <version> |
-a, --architecture |
指定程序包的体系结构(如 x86, x64, arm) |
<architecture> |
||
| 源与仓库 | 源选择 | -s, --source |
指定使用的源(可以选择官方源或自定义源) | <source> |
--locale |
设置程序包的区域设置(BCP47 格式) | <locale> |
||
| 交互与安装控制 | 安装模式 | -i, --interactive |
允许用户交互式安装(可能需要用户输入) | true/false |
-h, --silent |
启用无提示安装模式 | true/false |
||
--allow-reboot |
如果适用,允许系统在安装后重启 | true/false |
||
--disable-interactivity |
禁用所有交互式提示 | true/false |
||
--force |
强制执行命令,忽略潜在的安全警告 | true/false |
||
| 依赖与安装细节 | 依赖项处理 | --skip-dependencies |
跳过程序包的依赖项和 Windows 功能的处理 | true/false |
--ignore-local-archive-malware-scan |
忽略本地清单安装时的恶意软件扫描检查 | true/false |
||
| 日志与输出 | 日志文件 | --log |
设置日志文件路径 | <path> |
--verbose, --verbose-logs |
启用详细日志记录,输出更多安装过程信息 | true/false |
||
--nowarn, --ignore-warnings |
禁用所有警告输出 | true/false |
||
| 协议与接受 | 协议接受 | --accept-package-agreements |
接受程序包的所有许可协议 | true/false |
--accept-source-agreements |
接受源程序包在下载时的许可协议 | true/false |
||
| 卸载与更新控制 | 升级控制 | -r, --recurse, --all |
升级所有已安装的程序包 | true/false |
--uninstall-previous |
在升级过程中卸载之前的版本 | true/false |
||
| 安装包管理 | 自定义安装 | --custom |
将自定义参数传递给程序包的安装程序 | <custom_args> |
--installer-type |
指定安装程序的类型(如 msi, exe, appx 等) |
<installer_type> |
||
| 清理与管理 | 卸载与清理 | --purge |
删除程序包目录中的所有文件和目录(对于便携式程序包) | true/false |
| 身份验证与代理 | 身份验证 | --authentication-mode |
指定身份验证首选项(silent, silentPreferred, interactive) |
silent/silentPreferred/interactive |
--authentication-account |
提供身份验证的账户名称 | <account> |
||
| 代理设置 | --proxy |
设置代理服务器 | <proxy> |
|
--no-proxy |
禁用代理服务器 | true/false |
||
| 其他控制选项 | 扩展控制 | --header |
可选的 HTTP 请求头,用于 Windows-Package-Manager REST 源 | <header> |
--wait |
提示用户按任意键退出命令 | true/false |
||
--logs, --open-logs |
打开默认的日志文件位置 | true/false |
进一步解释
-
基本命令
winget upgrade是用来更新所有已安装程序包的基础命令,winget update是它的别名。
-
查询与筛选
- 通过
--query、--id、--name等参数,你可以在升级前筛选出特定的程序包。--moniker参数可以帮助按程序包的别名来筛选。
- 通过
-
版本控制
-v, --version用于指定安装的版本,支持传入具体的版本号,默认是最新版本。-a, --architecture用于选择程序包适配的体系结构,比如x86,x64,arm。
-
源与仓库
-s, --source用来指定源,支持自定义源以外的官方源。--locale可以设置程序包的语言区域。
-
交互与安装控制
- 允许用户选择是否启用交互式安装(
-i, --interactive),或者强制无提示安装(-h, --silent)。--force可以用来忽略任何潜在的安装警告。
- 允许用户选择是否启用交互式安装(
-
依赖与安装细节
--skip-dependencies跳过程序包的依赖安装,适用于需要精细控制安装过程的场景。
-
日志与输出
--log用来指定日志输出路径。--verbose启用详细日志,有助于排查问题。--nowarn可以禁止警告显示。
-
协议与接受
--accept-package-agreements用于自动接受程序包的协议,--accept-source-agreements用于自动接受源的协议。
-
卸载与更新控制
-r, --recurse, --all允许你在更新时一次性更新所有已安装程序包,--uninstall-previous则允许在升级时卸载之前的版本。
-
安装包管理
--custom用于传递自定义的安装参数,--installer-type则指定了安装程序的类型(例如.msi或.exe)。
-
清理与管理
--purge用于清理程序包目录中的文件,适用于便携式程序包。
-
身份验证与代理
- 如果需要身份验证或使用代理,
--authentication-mode和--proxy可以帮助指定。
- 如果需要身份验证或使用代理,
-
其他控制选项
--wait等选项用于进一步的用户交互控制,--header用来设置 HTTP 请求头。
这样化后的分类和细节能够让你更加清晰地理解和使用 winget upgrade 命令的各项功能。每个选项和参数都得到了精细的拆解,您可以根据具体需求灵活选择和组合使用。
winget 是 Windows 10 和 Windows 11 上的一个命令行工具,用于管理和安装 Windows 应用程序。它是由 Microsoft 提供的 Windows 包管理器,类似于 Linux 系统中的 apt 或 yum,可以帮助用户从命令行轻松安装、更新和卸载应用程序。
|
winget WinGet 命令行实用工具可从命令行安装应用程序和其他程序包。 使用情况: winget [<命令>] [<选项>] 下列命令有效:
如需特定命令的更多详细信息,请向其传递帮助参数。 [-?] 下列选项可用: 可在此找到更多帮助: "https://aka.ms/winget-command-help" |
1. winget 是什么?
winget 是 Windows 包管理器的一部分,它允许用户通过命令行界面直接从 Microsoft Store 或第三方源下载和安装软件包,而不需要手动访问网站、下载安装程序、再进行安装。winget 支持安装软件、管理已安装的软件版本、更新软件以及卸载软件等功能。
2. winget 如何使用?
2.1 安装应用程序
使用 winget 命令可以安装应用程序。例如,要安装 Google Chrome,可以执行以下命令:
winget install Google.Chrome
2.2 搜索应用程序
如果你不知道应用程序的确切名称,winget 也可以用来搜索软件包:
winget search Chrome
这将返回与 "Chrome" 相关的所有软件包(包括 Google Chrome 浏览器)。
2.3 更新已安装的应用程序
通过 winget 更新应用程序非常方便。你可以使用以下命令来更新所有可以通过 winget 更新的软件:
winget upgrade --all
或者,更新单个应用:
winget upgrade Google.Chrome
2.4 卸载应用程序
卸载应用程序也是 winget 的一项功能。你只需要执行以下命令:
winget uninstall Google.Chrome
2.5 查看已安装的应用程序
使用以下命令来列出所有已安装的应用程序:
winget list
2.6 显示应用程序详细信息
你还可以查看某个软件包的详细信息,例如版本号、描述等:
winget show Google.Chrome
3. 为什么使用 winget?
3.1 节省时间与自动化
winget 通过命令行方式提供了自动化的软件安装与管理过程,这对于 IT 管理员、开发者和有大量软件需求的用户来说非常方便。你可以编写脚本来批量安装、更新或卸载软件,而不需要逐个手动操作。
3.2 简化安装流程
对于经常需要重新安装系统的用户,winget 提供了一种更加简便的方式来恢复工作环境。你只需要记住一个简单的命令,就可以自动安装所有必要的软件,而不需要去每个软件的网站手动下载和安装。
3.3 软件版本管理
winget 提供了易于管理的软件版本功能。通过 winget upgrade,你可以轻松地将所有已安装的软件更新到最新版本,保持软件环境的最新性和安全性。
3.4 集成 Microsoft Store 和第三方包源
winget 支持不仅仅是 Microsoft Store 中的软件包,还支持来自第三方开发者或包源的软件包。通过这种方式,你可以访问更广泛的应用程序,而不局限于 Windows Store 中的内容。
3.5 一致的用户体验
winget 提供了一致的命令行界面,无论你是在安装哪个软件,命令的格式和用法都很相似,易于学习和使用。
4. 如何获取和安装 winget?
4.1 Windows 10 和 Windows 11 默认包含 winget
从 Windows 10 版本 1809 开始,winget 被集成到 Windows 系统中,但前提是你需要安装 App Installer(应用商店中的应用)。因此,如果你的 Windows 是最新版本,你应该已经默认拥有 winget。
4.2 手动安装 winget
如果你的系统没有预装 winget,你可以通过 Microsoft Store 安装 App Installer,这个应用包含了 winget 工具。只需访问 Microsoft Store,搜索 App Installer,然后进行安装。
5. winget 的优势与局限性
优势:
- 简便性:通过命令行可以快速完成安装、更新、卸载操作。
- 自动化:可以将常见任务自动化,方便批量操作。
- 跨平台兼容:与其他操作系统上的包管理工具(如 Linux 上的
apt)类似,带来了更统一的开发环境。 - 广泛的软件源:支持 Microsoft Store 和第三方软件包源,能提供多种软件选择。
局限性:
- 软件库不完全:尽管
winget支持许多应用程序,但并非所有软件都能在它的库中找到,尤其是一些小众或者不常见的软件。 - 命令行限制:对于不熟悉命令行的普通用户来说,可能不太方便。虽然可以通过图形界面进行操作,但对一些用户而言,命令行操作并不直观。
- 需要网络连接:
winget需要联网下载软件,因此需要稳定的网络环境。
6. 总结
winget 是 Windows 系统上的一个非常实用的命令行工具,它通过集成包管理功能,简化了软件的安装、更新和卸载过程。它能够提高工作效率,特别适合那些喜欢使用命令行或需要批量管理软件的开发者和 IT 专业人员。尽管它的功能在不断扩展,但仍然存在一些小局限性,例如软件库的覆盖度和命令行的使用门槛。
|
Windows PowerShell WindowsProductName
WinGet 命令行实用工具可从命令行安装应用程序和其他程序包。 使用情况: winget [<命令>] [<选项>] 下列命令有效: 如需特定命令的更多详细信息,请向其传递帮助参数。 [-?] 下列选项可用: 可在此找到更多帮助: "https://aka.ms/winget-command-help" |
winget(Windows Package Manager)的起源可以追溯到 Microsoft 对 Windows 系统中包管理功能的需求和改进。在过去,Windows 用户通常需要通过手动下载、安装和更新软件来管理他们的应用程序,而这种方式不如 Linux 系统中的包管理工具(如 apt 或 yum)高效。因此,Microsoft 在 2019 年正式推出了 Windows 包管理器(winget),以改善用户的安装、更新和管理软件体验。
1. 起源背景
在 Microsoft 推出 winget 之前,Windows 系统的包管理功能几乎是缺失的。尽管有一些第三方工具,如 Chocolatey,可以帮助用户通过命令行安装和管理软件,但 Windows 自身并没有官方的包管理工具。
随着 Windows 10 和 Windows 11 变得更加面向开发者和高级用户,Microsoft 开始意识到需要提供一个类似于 Linux 和 macOS 中的包管理工具的解决方案。这个工具不仅能帮助用户更方便地安装和管理软件,还能够在企业环境中进行更高效的软件部署和维护。
2. winget 的首次发布
winget 最初的实现和概念来自于 Microsoft 开发者社区的一个名为 "Project Reunion" 的计划。该计划的目标是让 Windows 更加现代化,并为开发者提供更加一致的工具和 API,以便他们可以在不同版本的 Windows 上构建跨平台应用。作为 Project Reunion 的一部分,winget 被提出并正式开发出来,目的是为 Windows 引入官方的包管理工具。
2019 年,Microsoft 宣布了 Windows 包管理器的项目,并在 GitHub 上开源了 winget 的早期版本。该工具最初是通过 Windows 10 Insider Preview 渠道发布,向开发者和测试者提供。
3. 关键的发布里程碑
-
2019年5月:
winget项目在 GitHub 上首次公开发布,并开始接受开发者的贡献。这一版本主要面向开发人员和技术爱好者,旨在测试和验证 Windows 包管理器的功能和稳定性。 -
2020年5月:Microsoft 在 Windows 10 版本 2004(May 2020 Update)中正式发布了
winget,将其作为 Windows 10 的一项核心功能集成到操作系统中。这个版本的winget引入了基本的命令行安装、更新和卸载功能。 -
2021年:随着 Windows 10 和 Windows 11 的更新,
winget功能逐步增强,支持更多的软件源、改进了命令行界面的体验,并加入了诸如搜索、列出已安装的软件和管理版本等功能。
4. winget 的设计理念
winget 的设计理念是尽可能简单、易用并且符合开发者和高级用户的需求。它支持从多个源(如 Microsoft Store、社区贡献的软件库等)安装和管理软件包,能够自动处理软件的版本更新,简化了软件安装和管理过程,尤其适合需要快速部署和更新应用的开发者和 IT 管理员。
此外,winget 也与 Windows Store 的应用商店无缝集成,能够直接从 Store 安装应用程序,同时还支持从 GitHub 等第三方源安装软件,使其成为一个多功能的包管理工具。
winget 的起源可以看作是 Microsoft 为了提升 Windows 操作系统在包管理和软件安装方面的能力,借鉴了 Linux 和其他操作系统的经验,最终推出的一项工具。它的目标是为开发者、IT 管理员和普通用户提供一个统一、简洁和高效的方式来安装、更新和管理软件应用。自从推出以来,winget 逐渐完善并获得了更多用户的青睐,成为 Windows 用户日常工作和开发中不可或缺的一部分。
winget(Windows Package Manager)自从发布以来,经历了多个发展阶段,逐步提升了功能、稳定性和用户体验。以下是 winget 的主要发展阶段:
1. 初期阶段:项目启动与早期开发(2019年)
-
2019年5月:
winget的开发最早可以追溯到 2019 年,当时 Microsoft 在 GitHub 上公开了 Windows 包管理器项目。这个项目的目的就是为 Windows 操作系统引入一个类似于 Linux 中的包管理工具,使得用户能够通过命令行便捷地安装、更新和卸载应用。 -
GitHub 开源:微软开源了
winget的代码,允许开发者和技术爱好者参与开发、提交功能建议、修复 bug,并进行测试。这一阶段的winget版本主要面向开发人员和技术专家,作为早期的测试版本。
2. 中期阶段:功能扩展与稳定性增强(2020年)
-
2020年5月:
winget在 Windows 10 版本 2004(May 2020 Update)中正式发布,成为 Windows 10 系统的一部分。用户可以直接通过winget来安装、更新和管理软件包。 -
功能引入:
- 安装和卸载软件:用户可以通过命令行安装、卸载软件。
- 软件包搜索:提供搜索功能,用户可以通过名称、类别等方式找到所需的软件。
- 软件包更新:支持检查已安装软件的更新,并执行更新操作。
- GitHub 和社区贡献的源:允许从 GitHub 等开源平台以及其他软件源进行安装。
-
增加命令:这一阶段,
winget开始支持更多的命令,如查看已安装的软件包、列出软件包、搜索软件等,提升了工具的易用性和功能的丰富度。
3. 成熟阶段:功能增强与广泛使用(2021年-2023年)
-
2021年:随着 Windows 10 和 Windows 11 的普及,
winget开始进入稳定期。Microsoft 在此期间不断改进winget的功能,增强了用户体验并修复了许多问题。 -
支持更多的软件源:除了 GitHub,
winget开始支持更多的软件源,如官方的 Microsoft Store 和第三方软件库,拓展了软件包的来源和种类。 -
命令行工具改进:
- 引入了更多的命令选项,如
winget upgrade用于升级已安装的应用,winget show用于查看某个软件的详细信息等。 - 用户可以通过
winget export和winget import导出和导入软件安装列表,便于备份和在其他计算机上恢复。
- 引入了更多的命令选项,如
-
集成到 Windows 11:
winget在 Windows 11 中得到了更好的集成,成为该操作系统的默认工具之一,进一步提升了其普及度和使用频率。 -
可定制的包管理源:Microsoft 支持通过 YAML 文件自定义软件包源,允许企业或开发者创建自定义的安装源。
4. 创新阶段:企业级支持与社区参与(2024年)
-
企业级应用支持:随着
winget的广泛应用,尤其是在企业环境中,Microsoft 开始强化对企业级功能的支持,例如:- 企业管理员可以利用
winget来统一管理和部署公司内部的应用程序。 - 企业可以创建私有的
winget软件包源,以便部署和管理自己的定制应用。
- 企业管理员可以利用
-
增强的命令功能:
winget继续优化命令功能和用户体验,增加了诸如自动安装依赖项、批量安装命令等功能,使得开发者和高级用户能够更高效地使用这一工具。 -
社区支持:
winget的开源项目继续得到社区的积极支持,用户和开发者可以提交新的软件包、改进建议和 bug 修复。同时,Microsoft 在 GitHub 上推出了winget-pkgs仓库,供社区贡献和管理软件包。
5. 未来发展趋势(2024年及以后)
-
跨平台扩展:随着 Microsoft 推进其跨平台战略,
winget未来可能会支持更多操作系统,不仅限于 Windows。例如,Microsoft 可能会通过 WSL(Windows Subsystem for Linux)使winget工具能够在 Linux 和 macOS 上使用,进一步扩展其生态系统。 -
更多集成工具:随着 Windows 操作系统的不断更新,
winget可能会与更多的 Microsoft 服务和工具进行集成,比如 Azure DevOps 和其他自动化工具,为开发者提供更完善的包管理解决方案。 -
性能优化与智能化:随着 AI 和自动化技术的发展,
winget可能会加入更多智能化功能,如自动检测过时的软件、智能推荐软件更新等。 -
企业级增强:
winget可能会进一步增强对企业和 IT 管理员的支持,包括提供更多的策略管理功能、跨设备部署、远程安装等。
winget 的发展经历了从一个开源项目到 Windows 系统的核心功能、再到企业级支持的过程。通过不断增强功能、优化用户体验以及支持更多软件源,winget 逐步成为 Windows 用户和开发者的重要工具。未来,随着 Microsoft 对跨平台和自动化的进一步投入,winget 很可能会在更多场景中得到应用,成为跨平台包管理工具的一部分。
winget(Windows Package Manager)是一个用于管理 Windows 系统上软件包的命令行工具。它为用户提供了多种功能,主要可以分为以下几类:
1. 软件安装与卸载功能
-
安装软件:
winget install <软件名称>:用于安装软件。可以指定软件包名称、ID、版本等。- 示例:
bashCopy Code
winget install vscode - 该命令会从默认的软件源中查找并安装 Visual Studio Code。
-
卸载软件:
winget uninstall <软件名称>:用于卸载指定的软件。- 示例:
bashCopy Code
winget uninstall vscode - 卸载 Visual Studio Code。
2. 软件更新功能
-
更新软件:
winget upgrade <软件名称>:用于更新已安装的指定软件。- 示例:
bashCopy Code
winget upgrade vscode - 更新 Visual Studio Code 到最新版本。
-
更新所有软件:
winget upgrade:用于更新所有支持的已安装软件。- 示例:
bashCopy Code
winget upgrade - 该命令会检查所有已安装的软件,若有新版本可用,将自动更新它们。
3. 软件包搜索与查询功能
-
搜索软件:
winget search <软件名称>:在默认的软件源中搜索指定的软件包。- 示例:
bashCopy Code
winget search nodejs - 搜索 Node.js 软件包。
-
查看软件详情:
winget show <软件名称>:显示指定软件包的详细信息,如版本、来源、描述等。- 示例:
bashCopy Code
winget show vscode - 显示 Visual Studio Code 的详细信息。
4. 已安装软件管理功能
-
列出已安装软件:
winget list:列出所有已安装的软件包。- 示例:
bashCopy Code
winget list - 该命令会列出系统中所有通过
winget安装的软件。
-
导出已安装软件列表:
winget export:将已安装的软件列表导出到一个文件(如 JSON 或 YAML 格式),便于备份或迁移。- 示例:
bashCopy Code
winget export --output "installed_apps.json" - 导出已安装的应用列表。
-
导入已安装软件列表:
winget import:从导出的文件中重新安装已列出的软件包。- 示例:
bashCopy Code
winget import --input "installed_apps.json" - 从文件恢复已安装的软件。
5. 软件包源管理功能
-
列出软件源:
winget source list:列出当前配置的所有软件源。- 示例:
bashCopy Code
winget source list - 列出所有可用的软件包源。
-
添加软件源:
winget source add <源名称> <源URL>:添加一个新的软件源。- 示例:
bashCopy Code
winget source add MySource https://example.com/packages - 向
winget中添加一个自定义软件源。
-
删除软件源:
winget source remove <源名称>:删除一个指定的软件源。- 示例:
bashCopy Code
winget source remove MySource - 删除名为
MySource的软件源。
6. 配置与设置功能
-
查看配置信息:
winget settings:查看当前winget配置的相关设置。- 示例:
bashCopy Code
winget settings - 显示配置文件中的设置,如源、日志等。
-
设置配置选项:
winget config:用于配置winget的选项,如设置安装位置、源等。
7. 批量安装功能
- 批量安装软件:
winget install <软件1> <软件2> ...:通过空格分隔多个软件包,可以一次性批量安装多个软件。- 示例:
bashCopy Code
winget install vscode git 7zip - 一次安装 Visual Studio Code、Git 和 7zip。
8. 高级功能与调试
-
显示帮助信息:
winget --help:显示winget工具的帮助文档,列出所有可用的命令和选项。- 示例:
bashCopy Code
winget --help
-
获取版本信息:
winget --version:显示当前安装的winget版本号。- 示例:
bashCopy Code
winget --version
-
调试模式:
winget --debug:启用调试模式,显示详细的错误和调试信息。
winget 提供了强大的功能来管理 Windows 操作系统上的应用软件。它的主要功能包括安装、卸载、更新软件,管理软件源,列出已安装的软件,批量安装应用,配置与设置功能等。通过这些功能,用户可以更高效地通过命令行管理系统上的软件,并且支持导出与导入软件列表,适用于迁移或备份使用场景。
winget(Windows Package Manager)初级使用教程的大纲,旨在帮助新用户掌握如何在 Windows 系统中使用 winget 工具来管理软件包。此教程将涵盖基础的安装、卸载、更新、查询等操作,并提供一些常见的命令和示例。
1. 介绍与安装
1.1 什么是 winget?
- 介绍
winget工具的功能和作用 - 为什么使用
winget管理 Windows 软件
1.2 安装 winget
- 确保你的 Windows 版本支持
winget - 通过 Windows 10 及更新版本的 Microsoft Store 安装
winget - 验证
winget是否已安装:使用winget --version
2. 基本命令与功能
2.1 查看帮助文档
- 使用
winget --help查看所有命令和选项
2.2 安装软件
- 使用
winget install <软件名称>安装软件 - 示例:安装 Visual Studio Code (
winget install vscode)
2.3 卸载软件
- 使用
winget uninstall <软件名称>卸载软件 - 示例:卸载 Visual Studio Code (
winget uninstall vscode)
2.4 更新软件
- 更新指定软件:
winget upgrade <软件名称> - 更新所有软件:
winget upgrade - 示例:更新 Visual Studio Code (
winget upgrade vscode)
3. 查询与搜索
3.1 搜索软件
- 使用
winget search <软件名称>查找软件包 - 示例:搜索 Node.js (
winget search nodejs)
3.2 查看软件信息
- 使用
winget show <软件名称>查看软件详细信息 - 示例:查看 Visual Studio Code 详细信息 (
winget show vscode)
3.3 列出已安装的软件
- 使用
winget list列出所有已安装的软件
4. 软件源管理
4.1 查看软件源
- 使用
winget source list查看已配置的软件源
4.2 添加软件源
- 使用
winget source add <源名称> <源URL>添加新的软件源 - 示例:
winget source add MySource https://example.com/packages
4.3 删除软件源
- 使用
winget source remove <源名称>删除指定的软件源 - 示例:
winget source remove MySource
5. 高级操作
5.1 导出和导入软件列表
- 导出已安装软件列表:
winget export --output <文件名> - 导入软件列表:
winget import --input <文件名> - 示例:导出并导入已安装的软件
5.2 批量安装软件
- 使用
winget install <软件1> <软件2> ...批量安装多个软件 - 示例:
winget install vscode git 7zip
6. 配置与设置
6.1 配置 winget
- 使用
winget settings查看当前配置 - 配置安装路径等选项(如设置自定义安装位置)
6.2 调试与错误日志
- 启用调试模式:
winget --debug - 查看
winget配置和错误日志
7. 常见问题解答(FAQ)
7.1 如何解决安装失败的问题?
- 检查网络连接
- 确认软件源是否可用
- 使用管理员权限运行
winget
7.2 如何查找不在默认源中的软件?
- 使用自定义软件源
- 搜索其他公共源
8. 总结与最佳实践
- 通过
winget提高软件管理的效率 - 定期更新软件,保持系统和应用的最新版本
- 利用批量安装和导出导入功能进行软件迁移和备份
通过这个大纲,用户可以从基础到进阶逐步掌握 winget 工具的使用,并能够在日常的 Windows 软件管理中得心应手。
winget(Windows Package Manager)中级使用教程的大纲,旨在帮助用户进一步掌握 winget 的高级功能,并应用于更复杂的软件管理任务。此教程将深入探讨如何通过脚本、自动化以及高级配置来提升工作效率,适合已经具备基础操作经验的用户。
1. 介绍与前提
1.1 winget 高级特性概述
- 中级用户如何利用
winget进行更复杂的软件管理 winget与其他包管理工具(如 Chocolatey、Scoop)的比较
1.2 前提条件
- 确保已安装并配置
winget - 对基础命令有一定了解(如安装、卸载、更新)
2. 高级安装与配置
2.1 安装特定版本的软件
- 使用
winget install <软件名称> --version <版本号>安装特定版本的软件 - 示例:
winget install vscode --version 1.70.0
2.2 安装软件时指定自定义安装路径
- 使用
winget install <软件名称> --install-location <路径>指定安装目录 - 示例:
winget install 7zip --install-location "D:\Program Files\7zip"
2.3 离线安装与使用本地包
- 通过
.appxbundle或.msixbundle文件进行离线安装 - 示例:
winget install <本地文件路径>
3. 批量操作与自动化
3.1 批量安装与配置
- 通过脚本实现批量安装:编写批处理文件或 PowerShell 脚本来一次性安装多个软件
- 示例:
winget install vscode git 7zip或使用脚本文件install_packages.bat
3.2 自动化更新
- 使用定时任务(Task Scheduler)或脚本定期自动更新软件
- 示例:编写 PowerShell 脚本并使用 Task Scheduler 设置自动更新任务
3.3 使用 winget 与其他自动化工具结合
- 配合 CI/CD 工具进行软件包的自动化管理
- 使用
winget在 DevOps 环境中自动安装和更新开发工具
4. 自定义软件源与包管理
4.1 添加、管理和删除软件源
- 使用
winget source add <源名称> <源URL>添加新的软件源 - 示例:
winget source add MyRepo https://example.com/repo - 使用
winget source list查看所有源 - 使用
winget source remove <源名称>删除指定源
4.2 自定义源的优先级设置
- 配置软件源的优先级,确保从特定源安装软件
- 示例:
winget source update --priority <优先级>
4.3 使用 winget 创建和分享自定义软件包
- 使用
winget create自定义软件包并推送到源 - 发布自定义软件包到本地或私人源
- 示例:如何创建并上传自定义的
winget包
5. 高级搜索与筛选
5.1 使用筛选器精确搜索
- 通过多种筛选条件进行搜索:如按安装来源、许可证类型、支持的平台等
- 示例:
winget search <软件名称> --tag <标签>
5.2 使用正则表达式搜索软件
- 使用
winget支持的正则表达式进行更复杂的搜索 - 示例:
winget search "^Visual Studio"
5.3 搜索未安装的更新
- 使用
winget upgrade --available查看当前系统中所有未安装的更新
6. 软件包和更新管理
6.1 管理安装的多个版本
- 使用
winget list查看已安装软件的不同版本 - 使用
winget install <软件名称> --version <版本号>管理软件版本
6.2 强制卸载软件
- 使用
winget uninstall <软件名称> --force强制卸载软件,绕过错误或依赖问题
6.3 查看安装软件的详细信息
- 使用
winget show <软件名称>查看软件的详细信息,包括版本、安装位置等
7. 导入导出配置与备份
7.1 导出已安装软件列表
- 使用
winget export --output <文件名>导出已安装的软件清单,以便备份或迁移 - 示例:
winget export --output installed_software.json
7.2 导入已安装的软件列表
- 使用
winget import --input <文件名>导入已导出的软件清单 - 示例:
winget import --input installed_software.json
7.3 配置文件的管理
- 管理
winget配置文件,确保多设备之间的同步
8. winget 与 Windows 环境集成
8.1 与 PowerShell 集成
- 使用
winget在 PowerShell 脚本中执行软件管理操作 - 示例:通过 PowerShell 自动化安装、更新和卸载软件
8.2 与 Windows Subsystem for Linux (WSL) 配合使用
- 使用
winget安装 Windows 本地软件与 WSL 中的 Linux 软件 - 示例:在 WSL 环境中使用 Windows 工具
8.3 与 Windows Server 配置管理
- 在 Windows Server 上使用
winget管理多个客户端设备的软件 - 示例:集中管理 Windows Server 集群的软件更新
9. 故障排除与调试
9.1 常见错误及解决方案
winget无法找到软件包:检查源配置或更新源- 安装失败:确保管理员权限、检查软件兼容性
9.2 调试模式与日志
- 使用
winget --debug调试安装过程 - 查看
winget错误日志以解决复杂问题
9.3 网络问题排查
- 配置代理或解决连接问题
- 使用本地镜像源解决下载速度慢的问题
10. 最佳实践与优化
10.1 软件安装与更新策略
- 定期检查并更新所有软件
- 使用自动化脚本定期维护软件环境
10.2 高效的批量管理
- 优化批量安装脚本的执行速度
- 通过软件源优先级优化包安装顺序
10.3 管理多个系统的软件
- 使用
winget管理不同 Windows 版本或设备上的软件 - 将
winget集成进 DevOps 或 IT 管理流程中
通过这个中级教程大纲,用户能够进一步提升在 Windows 环境中使用 winget 进行软件管理的能力,不仅能够高效地批量管理软件,还能通过自动化脚本和高级配置,适应复杂的 IT 管理需求,优化工作流程。
winget(Windows Package Manager)高级使用教程的大纲,适合希望更深入掌握 winget 功能并将其应用于自动化和复杂软件管理任务的用户。此教程涵盖高级操作技巧、批量管理、脚本化和自定义配置等内容。
1. 介绍与背景
1.1 winget 高级功能概述
winget作为 Windows 的包管理工具,如何在大规模软件管理中发挥作用。winget与其他包管理工具的优缺点对比。
1.2 前提条件
- 基础知识回顾:如何安装和使用
winget,以及常见的基础命令(如安装、卸载、搜索)。
2. 高级安装与定制
2.1 安装特定版本的软件
- 使用
--version安装软件的指定版本。 - 示例:
winget install vscode --version 1.70.0
2.2 安装软件到指定目录
- 使用
--install-location指定自定义的安装路径。 - 示例:
winget install 7zip --install-location "D:\Programs\7zip"
2.3 离线安装与本地源管理
- 使用
.msix或.appx文件离线安装软件。 - 示例:
winget install <本地文件路径> - 设置本地软件源并从中安装软件。
3. 批量安装与自动化
3.1 批量安装软件
- 使用
winget批量安装多个软件包。 - 示例:
winget install vscode git 7zip
3.2 批量卸载与更新
- 使用
winget进行批量卸载。 - 示例:
winget uninstall <软件1> <软件2> - 自动化更新多个软件包。
3.3 结合 PowerShell 脚本实现自动化
- 编写 PowerShell 脚本批量执行安装、卸载、更新。
- 示例:如何用脚本自动安装软件,并在不同环境中执行。
4. 自定义源与包管理
4.1 添加与管理自定义软件源
- 使用
winget source add添加自定义软件源。 - 示例:
winget source add MyRepo https://example.com/repo - 列出、更新和删除源。
4.2 设置源的优先级
- 配置多个软件源并调整优先级,确保安装的软件来自指定源。
- 示例:
winget source update --priority 1
4.3 发布与管理自定义软件包
- 使用
winget创建、打包和发布自己的软件包。 - 如何创建
.yaml包描述文件并发布到本地或公共源。
5. 高级搜索与筛选
5.1 使用高级搜索功能
- 使用筛选条件(如标签、许可证类型、平台等)进行精确搜索。
- 示例:
winget search <软件名称> --tag <标签> - 使用正则表达式进行高级搜索。
- 示例:
winget search "^Visual Studio"
5.2 查找未安装的更新
- 查看所有可更新的软件。
- 示例:
winget upgrade --available
5.3 搜索并安装软件包
- 使用
winget搜索并直接安装软件。 - 示例:
winget install <软件名称>
6. 软件管理与更新
6.1 版本管理
- 安装指定版本的软件包,升级或降级版本。
- 示例:
winget install vscode --version 1.75.0
6.2 强制卸载软件
- 使用
--force强制卸载软件,跳过卸载错误。 - 示例:
winget uninstall <软件名称> --force
6.3 安装、卸载历史记录查看
- 查看软件的安装和卸载历史记录。
- 示例:
winget history
7. 配置与导入导出管理
7.1 导出已安装软件列表
- 导出所有已安装软件的清单,以便迁移或备份。
- 示例:
winget export --output installed_software.json
7.2 导入已安装软件列表
- 从备份的清单中导入软件,并在新设备或系统上恢复软件安装。
- 示例:
winget import --input installed_software.json
7.3 配置文件管理与同步
- 管理
winget配置文件(如settings.json),确保跨设备同步。 - 定期备份和恢复配置文件。
8. 故障排除与调试
8.1 常见问题与解决方案
- 如何处理常见的安装失败、软件包丢失和依赖问题。
- 示例:如何解决包安装失败的网络错误。
8.2 启用调试模式
- 使用
winget --debug启用调试模式并查看详细错误信息。 - 查看日志文件诊断问题。
8.3 网络问题排查
- 配置代理服务器、处理无法连接的源。
- 使用本地镜像源加速软件安装。
9. 高效软件管理策略
9.1 自动化更新管理
- 设置定时任务自动检查并更新所有已安装的软件。
- 使用 Task Scheduler 或 PowerShell 自动化工具定期执行
winget upgrade。
9.2 多环境和多系统管理
- 在多个 Windows 系统和设备之间统一管理软件。
- 使用
winget在 Windows Server 或企业环境中集中管理软件包。
9.3 版本控制与兼容性管理
- 使用版本控制管理已安装的软件,确保兼容性。
- 配合使用
winget管理特定版本的开发工具和运行环境。
10. 集成与扩展
10.1 与其他自动化工具结合
- 将
winget集成进 CI/CD 流程,进行持续集成和持续交付。 - 示例:如何在 Jenkins 或 GitHub Actions 中使用
winget管理工具链。
10.2 与 PowerShell 脚本结合
- 在 PowerShell 脚本中嵌入
winget命令,进行软件管理的自动化。 - 示例:使用 PowerShell 批量安装、更新和卸载软件。
10.3 与 Windows Subsystem for Linux (WSL) 集成
- 在 WSL 中使用
winget安装和管理 Windows 软件。 - 示例:在 WSL 环境下与 Windows 工具链无缝协作。
通过本教程,用户不仅可以熟练掌握 winget 的高级功能,还能够将其应用于实际的工作环境中进行批量管理、自动化操作和高效的软件维护。
winget(Windows Package Manager)专家级使用教程的大纲,面向希望进一步深入掌握 winget 高级功能并应用到复杂的自动化、企业级软件管理、持续集成等场景的用户。
1. 引言与背景
1.1 winget 简介
winget的起源与发展- 与其他包管理工具(如
choco、apt)的对比 winget在企业环境中的应用场景
1.2 winget 的架构与工作原理
- 软件包来源与仓库结构
- 包描述文件(Manifest)解析
wingetCLI 与 Windows App Installer 的关系
2. 高级安装与配置
2.1 高级安装选项
- 安装特定版本的包:
--version - 安装到自定义目录:
--install-location - 安装时设置自定义参数(如安装命令行参数)
2.2 离线安装与本地源
- 使用
.msix、.appx或.exe离线安装软件 - 添加与管理本地软件源(通过
winget source add) - 配置本地缓存与源同步策略
2.3 环境隔离与安装策略
- 在隔离环境(如容器、虚拟机)中使用
winget - 配合 Windows Sandbox 和 WSL(Windows Subsystem for Linux)管理跨环境软件
3. 批量与自动化管理
3.1 批量安装与升级
- 使用
winget批量安装多个软件:组合命令与批量清单 - 使用
winget批量升级所有已安装的软件包:winget upgrade --all - 管理软件包依赖与版本冲突:如何处理自动升级失败
3.2 通过脚本实现全面自动化
- 用 PowerShell 脚本批量管理安装、卸载、更新操作
- 使用批处理脚本和
winget管理定时任务 - 在 CI/CD 管道中集成
winget进行持续集成与自动化部署
3.3 批量卸载与清理
winget批量卸载指定软件包- 清理冗余软件:卸载不再使用的应用程序及其依赖
4. 高级包管理与软件源
4.1 自定义软件源与仓库
- 创建并管理本地和自定义软件源(如企业内部仓库)
- 管理源的优先级:使用
--priority设置源的优先级 - 从私有源发布、安装软件
4.2 创建与管理自定义包
- 如何撰写与发布自己的
winget包:编写 YAML 格式的包清单 - 通过 GitHub Actions 自动化包发布与版本管理
- 提交自定义软件包到 Windows Package Manager Community Repository
4.3 源更新与调度
- 定期同步软件源:使用
winget source update - 使用自定义脚本定期检查与更新私有源
5. 高级搜索与筛选功能
5.1 高级搜索与正则表达式
- 使用
winget search实现复杂的筛选操作 - 使用正则表达式进行精确匹配与高效查找
- 搜索并安装依赖包、相关工具
5.2 查询安装与更新历史
- 查看安装记录、升级历史:
winget history - 如何处理不常见的安装失败记录与解决方案
5.3 软件包的详细信息查询
- 使用
winget show <package>获取软件包详细信息(如许可证、大小、来源) - 搜索并下载软件包的元数据
6. 高级更新与版本控制
6.1 自动化更新策略
- 使用
winget upgrade自动更新软件包 - 配合 Task Scheduler 或第三方任务管理工具实现定期自动更新
- 控制特定版本的软件包更新(例如开发环境中的版本锁定)
6.2 强制软件包更新与降级
- 使用
--force强制更新软件,即使存在依赖冲突 - 降级到旧版本软件的策略与实现
6.3 版本冲突与兼容性问题的解决
- 解决软件版本之间的冲突(不同版本间的依赖不一致问题)
- 如何通过包描述文件管理不同版本的软件兼容性
7. 导入、导出与迁移管理
7.1 导出与导入软件包列表
- 使用
winget export导出所有已安装软件清单,并恢复到新系统 - 使用
winget import导入之前导出的软件包清单 - 与 Windows 迁移工具结合使用,进行企业级软件迁移
7.2 配置与同步跨设备管理
- 管理
winget配置文件(如settings.json)并实现跨设备同步 - 配置多台设备的安装环境并保持一致性
8. 故障排除与调试
8.1 高级调试与日志管理
- 使用
--debug模式启动调试,分析安装日志 - 分析和诊断安装失败的详细日志文件
- 结合 Windows Event Log 分析系统级安装问题
8.2 解决常见安装与更新问题
- 解决网络连接问题:配置代理、使用离线包
- 处理软件包依赖错误:如何修复依赖丢失与冲突
- 解决 Windows 环境中的权限问题(如管理员权限要求)
8.3 网络问题与缓存管理
- 配置代理、镜像源,提高下载速度
- 管理本地缓存与临时文件,优化安装过程
9. 企业级应用与集成
9.1 企业级批量软件管理
- 使用
winget管理企业内部环境中的所有设备 - 集成
winget与企业软件管理系统(如 SCCM、Intune)实现自动化部署 - 安全管理与权限控制:限制软件包来源与安装权限
9.2 集成 CI/CD 与 DevOps 流程
- 在 DevOps 流程中集成
winget安装、更新和部署 - 在 Jenkins、GitLab CI、GitHub Actions 等平台中自动化安装依赖包
- 使用
winget管理开发环境的标准化与一致性
9.3 Windows 10/11 企业版管理
- 使用
winget配合组策略和企业管理工具集中管理 Windows 系统中的软件包 - 定制化配置与部署企业应用
10. 高效软件管理与优化策略
10.1 版本控制与依赖管理
- 使用版本控制和依赖锁定,确保开发环境的一致性
- 管理软件包的生命周期(安装、更新、废弃)
10.2 跨平台管理与 WSL 集成
- 配合 WSL 管理 Linux 和 Windows 软件的跨平台环境
- 在 WSL 中使用
winget安装与管理 Windows 工具链
10.3 高效的团队协作与软件管理
- 跨团队协作,确保统一的软件包管理策略
- 使用
winget配合项目管理工具(如 Jira、Trello)跟踪软件安装状态
通过本教程,用户可以充分利用 winget 强大的功能进行高效的软件管理、版本控制、自动化部署和跨平台集成,提升个人及团队的工作效率,特别是在企业环境中的应用管理。
个人开发者的自动化管理通常涉及到高效地安装、更新、卸载软件包,自动化构建与部署环境,提升工作流的效率。使用 winget(Windows Package Manager)可以大大简化这些任务。以下是如何为个人开发者实现软件管理自动化的指南:
1. 自动化软件安装与配置
1.1 批量安装常用开发工具
作为开发者,你可能需要安装多个开发工具、库、编辑器等软件。你可以通过 winget 批量安装这些工具,节省时间。
示例:批量安装常用开发工具
winget install --id Microsoft.VisualStudioCode
winget install --id Git.Git
winget install --id Node.js.LTS
winget install --id Python.Python.3
winget install --id Docker.DockerDesktop
通过将这些命令写入一个批处理脚本(如 install-dev-tools.bat),你可以一键安装所有常用工具。
install-dev-tools.bat 示例:
@echo off
winget install --id Microsoft.VisualStudioCode
winget install --id Git.Git
winget install --id Node.js.LTS
winget install --id Python.Python.3
winget install --id Docker.DockerDesktop
pause
将这个脚本保存在你的开发机器中,每次需要设置新的开发环境时,只需运行此脚本。
1.2 自动化环境配置
开发环境的配置往往会包括不同版本的工具、依赖和库。你可以在 winget 中指定版本,确保安装特定版本的工具。
安装指定版本的工具:
winget install --id Node.js.LTS --version 18.15.0
winget install --id Python.Python.3 --version 3.9.7
为了避免未来版本的自动更新导致不兼容问题,使用 --version 来锁定安装版本。
2. 脚本化与自动化部署
2.1 自动化更新
定期检查和更新开发工具非常重要,避免因为版本过旧导致的安全隐患或兼容问题。你可以使用 winget upgrade 命令来自动更新已安装的软件包。
自动更新所有已安装软件:
winget upgrade --all
你可以将这个命令放入 Windows 任务计划程序(Task Scheduler)中,实现定时自动更新。每周或每月自动执行一次,确保所有开发工具都是最新版本。
2.2 配合 PowerShell 自动化
通过 PowerShell,你可以进一步增强自动化管理。例如,创建一个 PowerShell 脚本来安装、更新和卸载软件,并能输出详细日志供后续分析。
PowerShell 自动化示例:
# 安装必要工具
winget install --id Microsoft.VisualStudioCode
winget install --id Git.Git
winget install --id Node.js.LTS
# 更新所有已安装软件
winget upgrade --all
# 卸载不需要的软件
winget uninstall --id Some.UnwantedSoftware
将此 PowerShell 脚本保存为 .ps1 文件后,可以直接运行,自动完成开发环境的安装和管理任务。
3. 软件包管理与依赖管理
3.1 创建自定义软件包清单
作为开发者,你可以创建自己的清单文件来定义一组软件包的安装,确保每个开发环境都能在多台机器或多个项目中复用。
创建清单文件 dev-environment.json:
{
"packages": [
{ "id": "Microsoft.VisualStudioCode", "version": "1.70.0" },
{ "id": "Git.Git", "version": "2.34.1" },
{ "id": "Node.js.LTS", "version": "16.15.0" }
]
}
你可以通过脚本来读取这个清单文件,批量安装所有软件包:
PowerShell 读取并安装清单文件中的软件:
# 读取软件包清单并安装
$packages = Get-Content -Path "dev-environment.json" | ConvertFrom-Json
foreach ($package in $packages.packages) {
winget install --id $package.id --version $package.version
}
3.2 依赖管理
作为开发者,可能需要管理多个开发环境或项目的依赖关系。例如,Python 项目可能依赖于特定版本的 Python 和其他库,Node.js 项目可能依赖特定版本的 Node.js 和 npm 库。虽然 winget 本身不直接管理这些依赖,但你可以使用其他工具(如 pip、npm)与 winget 配合,进一步提高开发环境的自动化。
示例:创建 Python 虚拟环境并安装依赖:
python -m venv myenv
myenv\Scripts\activate
pip install -r requirements.txt
示例:使用 Node.js 配置项目依赖:
npm install
可以将这些步骤与 winget 安装工具结合,实现一站式的开发环境搭建。
4. 离线安装与源管理
4.1 离线安装
在某些情况下,可能需要在没有网络连接的环境中进行软件安装。你可以使用 winget 下载软件包并保存到本地,然后在离线环境中使用本地包进行安装。
将软件包下载到本地:
winget download --id Microsoft.VisualStudioCode --output "C:\path\to\save"
然后,将下载的安装包复制到离线机器上并执行安装。
4.2 自定义软件源
如果你在公司内部或私人网络中工作,可能需要配置本地软件源以供 winget 使用。这对于提高安装速度或确保软件版本一致性很有帮助。
添加本地软件源:
winget source add --name MyLocalSource --source "C:\path\to\local\repo"
通过这种方式,你可以在没有互联网连接的环境中安装软件包。
5. 故障排除与优化
5.1 调试安装问题
有时软件包可能安装失败,可以使用 --debug 参数查看详细的调试日志。
查看详细安装日志:
winget install --id Microsoft.VisualStudioCode --debug
日志文件将帮助你分析安装过程中的任何问题,尤其是由于网络问题、权限问题或软件包本身的问题导致的失败。
5.2 优化软件安装流程
你可以使用 --silent 参数进行静默安装,避免干扰和弹出提示框,适用于批量安装或自动化脚本中。
示例:静默安装:
winget install --id Microsoft.VisualStudioCode --silent
6. 定期更新与自动化任务
为了保持开发环境始终处于最佳状态,可以使用 Windows 任务计划程序(Task Scheduler)来定期运行软件更新和维护任务。
设置定期更新任务:
- 打开任务计划程序。
- 创建一个新任务,选择触发器为“每天”或“每周”。
- 在操作中选择“启动程序”,并指定你的 PowerShell 或批处理脚本,执行软件包更新命令(如
winget upgrade --all)。
通过结合 winget 与其他自动化工具(如 PowerShell、任务计划程序等),个人开发者可以实现高效的软件包管理、环境配置、更新与故障排除。无论是在设置新的开发环境,还是维护现有环境,自动化管理都能帮助节省时间、减少重复工作,提高开发效率。

浙公网安备 33010602011771号