WinGet完全指南:Windows包管理器安装、配置镜像源与排查技巧
2026/9/20 17:27:22 网站建设 项目流程

第一次在同事的屏幕上看到一长串软件被安排得明明白白,那种感觉挺微妙:同一台电脑,他装完系统后靠几条命令就把常用软件全部搞定,而我还在一个个打开浏览器、搜索官网、下载安装包、点下一步。这个工具就是 WinGet,微软官方出品的 Windows 包管理器。简单说,它是一个命令行版的“软件安装管家”,你给出软件名字,它负责把下载、校验、安装、升级一整套流程跑完。这篇博客从 WinGet 的下载安装开始讲,把日常使用、镜像源配置、常见报错排查全部梳理一遍,Windows 用户和开发者都适合收藏一份。

1. WinGet 到底是什么:把“装软件”从手工劳动变成一条命令

1.1 从“装软件”这件小事说起

在 Windows 上装软件的历史,经历过好几个阶段。早年是买光盘、塞光驱,后来是百度搜官网、下载安装包、一路下一步,再有就是各类“软件管家”全家桶。用官网安装包的问题是:第一,来源不统一,机器上装了哪些软件、什么版本、是否安全,全凭记忆,时间一长很容易装出重复软件和垃圾残留;第二,升级是灾难,今天想更新一个软件,得重新走一遍“找官网、下安装包、确认版本”的流程;第三,批量部署基本靠人肉,新来的同事配一台开发机,光装环境就得折腾半小时。

如果你用过 Linux 的 apt 或者 macOS 的 Homebrew,会非常清楚包管理器解决的就是这三个痛点:统一的软件来源、统一的升级通道、统一的卸载清理。WinGet 就是微软给 Windows 补上的这块拼图。它由微软官方开发和维护,软件包仓库叫 winget-pkgs,社区贡献者维护了成千上万个软件包的安装清单,里面有 7-Zip、VLC、PowerToys、Python、Node.js、Git 这类常见软件,也有大量专业工具和开源项目。

1.2 和“软件管家”相比,WinGet 赢在哪

很多人会问:我直接用某某软件管家不也一样吗?不一样,而且差别很大。下面这张表是我自己对比过几个常见方案后整理出来的:

对比项传统软件管家官网手动下载WinGet
软件来源自家商店收录,可能夹带推广官网,需要自行判断社区维护的开放仓库 winget-pkgs
安装过程客户端界面引导,部分版本有捆绑手动点击向导命令行自动下载安装,可全静默
更新管理仅自家收录的软件可更新无法统一管理一条命令升级全部软件
批量部署不支持纯手工支持 export/import 配置文件
是否依赖 GUI否,可脚本化,适合远程和 CI

说句公道话,软件管家对小白用户友好,图形界面点点点就能安装。但它的局限性也很明显:收录不透明、偶尔夹带推广、升级覆盖不全。WinGet 的模型更像“软件的 Git”,仓库是开放的,安装清单有版本信息,命令是确定的,特别适合需要可复现环境的场景,比如开发机初始化、测试环境搭建、公司统一装机。它的门槛是你要愿意开一个终端,但说实话,这个门槛真的不高,本文后面每一步都会给出可以直接复制执行的命令。

2. 拿到手的第一步:WinGet 下载安装与版本核验

2.1 先检查系统里有没有 WinGet

WinGet 并不是一个独立下载的 exe,而是集成在“应用安装程序(App Installer)”这个系统组件里。Windows 11 和较新版本的 Windows 10(1809 以上)通常自带这个组件,但很多精简版系统、企业定制镜像或长期没更新的系统,可能没有预装,或者版本太老。

最直接的检查方式:打开 PowerShell(或 Windows Terminal),输入下面这行命令:

winget --version

如果输出类似v1.9.x这样的版本号,说明已经可用了。如果提示“无法将‘winget’项识别为 cmdlet、函数、脚本文件或可运行程序的名称”,说明系统里没有这个组件,或者应用执行别名被关闭了。还有一种情况是命令存在但版本很老,建议更新到新版本,因为老版本对源协议、安装参数的支持都不够完善,后面配置镜像源时也容易出问题。

2.2 常规在线安装方式:从 Microsoft Store 更新 App Installer

最简单的安装方式,就是打开 Microsoft Store,搜索“应用安装程序”或“App Installer”,点击更新或安装。商店里这个应用就是 WinGet 的宿主,微软会把 WinGet 的更新随着商店版本一起推送。

另外留意一下系统设置里的“应用执行别名”。在 Windows 10/11 的设置里搜索“应用执行别名”,确保wingetwinget.exe两个开关都是打开的。有些安全软件或系统优化工具会顺手关掉这里的别名,导致命令不存在,其实是误伤。这个开关的原理很简单:它把winget命令指向商店安装的 App Installer 程序入口,关闭了就等于剥夺了命令行的访问路径。

如果你用的是 LTSC 这类不带商店的版本,或者商店被组策略禁用,那就走离线安装路线,见下一节。

2.3 离线安装版本:没有商店也能装

“缺少 winget”这个问题在很多内网服务器上特别常见。解决思路是下载 App Installer 的离线安装包,然后用 PowerShell 直接部署。具体分两步:

先拿到安装包。WinGet 的发布渠道是 GitHub 的 microsoft/winget-cli 仓库,在 Releases 页面找到最新版本,下载Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle文件,同时下载同名的.xml文件。注意 msixbundle 里有不同架构的包,建议选择 x64 架构的版本即可,如果你的机器是 arm64 可以选对应架构。

拿到文件后,用管理员身份打开 PowerShell,切换到文件所在目录,执行:

Add-AppxPackage -Path .\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle

这里有一个容易踩的坑:如果系统缺少必要的依赖包(比如 VCLibs、UI.Xaml),Add-AppxPackage 会报错,提示找不到依赖。解决办法是同时下载发布的.xml中列出的依赖包,并添加-DependencyPath参数。具体命令为:

Add-AppxPackage -Path .\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle -DependencyPath .\Microsoft.VCLibs.140.00.UWPDesktop_14.0.30704.0_x64__8wekyb3d8bbwe.msix

安装完成后重新打开终端,执行winget --version验证。整个过程不依赖图形安装向导,特别适合服务器和离线网络环境,这也是很多运维同事最喜欢的部署方式,一条命令就完成核心组件的落地。

3. 核心实战:用 winget 安装、卸载、升级软件

3.1 装第一个软件:从搜索到安装的完整路径

先别急着敲winget install,确认软件包 ID 是关键一步。拿 7-Zip 举例,打开终端输入:

winget search 7zip

输出结果里会列出名称、ID、来源和匹配程度。正常情况下你会看到7-Zip.7zip,这就是这个软件包的唯一标识。包 ID 的命名规则一般是“发布者.软件名”,比如 Google.Chrome、Mozilla.Firefox、Python.Python.3.12。看到 ID 后,可以先看看它的详细信息:

winget show 7-Zip.7zip

这一步会显示软件的版本、安装程序类型、发布者、许可协议等,在不确定一个包是否可靠时非常有用。确认无误后执行安装:

winget install 7-Zip.7zip

WinGet 会创建下载任务,验证哈希,然后调用安装程序完成安装。大多数软件支持静默安装参数,你甚至看不到安装窗口。如果你的环境需要完全无人值守,可以加上几个参数:

winget install 7-Zip.7zip --silent --accept-package-agreements --accept-source-agreements

--silent让安装程序不弹界面,--accept-package-agreements自动接受软件许可协议,--accept-source-agreements自动接受源协议。这三件套在写脚本批量部署时几乎是标配,建议随身记着。

3.2 升级和卸载:别再用“控制面板”了

WinGet 的升级能力是它最值钱的功能之一。手动检查更新是一件反人性的事,而upgrade子命令把这变成了例行公事。先看系统里有哪些软件可升级:

winget upgrade

输出会列出已安装、有新版本的软件包列表。全部升一遍:

winget upgrade --all

如果只想升级某个软件,直接指定包 ID:winget upgrade Google.Chrome。这里有两个细节值得注意:第一,upgrade --all执行时会逐个安装,中间某个软件如果安装程序要求关闭当前运行中的进程,会导致升级失败,所以升级前最好先保存工作并关闭明显占用中的程序;第二,不是所有软件包都支持静默升级,少数安装程序会强制弹出交互界面,这类软件只能手动处理。

卸载同样简单,不再需要去“设置 -> 应用”里一页页翻找:

winget uninstall 7-Zip.7zip

winget list可以查看系统当前通过 WinGet 安装的所有包:

winget list

这条命令输出的列表比控制面板的应用列表更纯粹,它会标注每个软件的 ID 和版本号,配合升级功能用起来非常顺手。

3.3 批量部署:把“配环境”变成一条命令

批量安装是 WinGet 真正拉开差距的场景。新电脑、新虚拟机、公司新员工的开发机,以前要装 Chrome、微信、VS Code、Git、Python、Node.js,每一样都要单独下载执行,现在可以写成一个脚本直接跑。无非就是把安装命令一行行堆进去:

winget install --silent --accept-package-agreements --accept-source-agreements Google.Chrome winget install --silent --accept-package-agreements --accept-source-agreements Tencent.WeChat winget install --silent --accept-package-agreements --accept-source-agreements Microsoft.VisualStudioCode winget install --silent --accept-package-agreements --accept-source-agreements Git.Git winget install --silent --accept-package-agreements --accept-source-agreements Python.Python.3.12

更优雅的做法是使用配置文件。在一台已经装好各种软件的机器上执行:

winget export -o .\packages.json

得到一份 JSON 文件,里面记录了所有已安装的软件包 ID、版本范围和来源。然后在新机器上执行:

winget import -i .\packages.json --accept-package-agreements --accept-source-agreements

WinGet 会逐条读取配置并自动安装缺失的软件。配合 Git 仓库管理这份配置文件,整个团队的环境基准就能保持基本一致。我个人会在每次重装系统后,先跑一遍 import,再去处理那些仓库里没有收录的“漏网之鱼”,整个过程从半天缩短到一顿饭的工夫。

4. 走镜像源:解决下载慢、反复失败的进阶操作

4.1 为什么默认源会“翻车”

WinGet 默认的软件源指向微软官方的 CDN,存放的是软件包的元数据信息,安装时实际下载的安装包来自各软件官方渠道。在国内网络环境下,这个默认源偶尔会出现连接超时、源更新失败、安装中途中断的情况。典型表现是命令敲下去后,卡在Updating source或者Downloading阶段半天不动,最后抛出一个网络错误。

这不是 WinGet 本身的问题,而是网络链路的问题。解决方案是切换到一个更稳定、更快的镜像源。目前比较常用的是国内高校开源镜像站提供的 WinGet 源镜像,比如中科大开源软件镜像站。需要说明的是,镜像源镜像的是 WinGet 仓库的元数据,安装包本体依然从软件官网下载,所以在“找得到软件包”这一环提速、提稳,效果非常明显。

4.2 中科大 WinGet 源配置步骤

配置镜像源并不复杂,核心就是“移除旧源、添加新源”两个动作。先查看当前源列表:

winget source list

你会看到一个名为winget的源,地址指向微软官方。接下来用中科大镜像替换它。Windows PowerShell 里执行:

winget source remove winget

然后添加中科大源。地址是https://mirrors.ustc.edu.cn/winget-source/,对应的命令是:

winget source add winget https://mirrors.ustc.edu.cn/winget-source/

注意这里我仍然使用了winget作为源名称,这样原有命令无需改动,所有不带--source参数的搜索和安装操作都会自动走新源。如果你不想覆盖旧源,也可以保留默认源,用一个新的名字添加:

winget source add ustc https://mirrors.ustc.edu.cn/winget-source/

然后安装时显式指定源:

winget install 7-Zip.7zip --source ustc

这种方式适合那些想“默认源为主、镜像源为辅”的用户,可以在特定软件包走官方源失败时切换尝试。配置完成后建议执行一次源更新,让本地缓存刷新:

winget source update

4.3 源管理、优先级与恢复默认

源多了以后,需要知道怎么管理和切换。几个常用的源管理命令:

winget source list # 列出所有源 winget source update # 更新所有源缓存 winget source reset winget --force # 强制恢复指定源的默认地址

如果你按上面第二种种方式保留了多个源,而默认源偶尔抽风,可以把镜像源的优先级调高。WinGet 的源优先级通过winget source add时的--priority参数设置,数字越小优先级越高:

winget source add ustc https://mirrors.ustc.edu.cn/winget-source/ --priority 1

如果把源配置坏了,或者想回到官方默认状态,执行:

winget source reset --force

这会清空所有自定义源,恢复默认。注意--force参数会直接重置,不需要二次确认,使用前想清楚。说实话,配置源这件事在实际使用中“一次配好、长期受益”,但很多教程喜欢把命令说得玄乎,其实核心就是增删查改,掌握了上面几条,换任何镜像站都只是换个 URL 的事。

5. 常见问题与排查技巧实录:报错别再乱删系统了

5.1 高频错误速查表

这一节整理了我在日常使用和帮同事排查时遇到的典型问题,直接做成表格,方便你对照处理:

错误现象可能原因解决方法
winget不是内部或外部命令系统未安装 App Installer,或执行别名被关闭在线安装/离线部署 App Installer,检查应用执行别名
无法找到程序包/No package found matching input criteria包 ID 写错,或源缓存未更新先用winget search确认 ID,再执行winget source update
winget : 无法...后跟一串路径命令执行不完整,通常是包名被终端解析错误检查包 ID 是否包含空格/特殊字符,用引号包裹参数
Failed in attempting to update the source源连接超时或证书问题切换镜像源,或执行winget source reset
安装程序失败,退出代码: 1603安装程序要求管理员权限,或磁盘空间不足用管理员身份打开终端重试,清理 C 盘空间
0x80070005/ 访问被拒绝权限不足使用管理员 PowerShell 执行
下载卡住不动默认源连接到官方 CDN 不稳定配置中科大源,观察下载地址
依赖项不满足离线安装 App Installer 时缺少运行库补齐 VCLibs 等依赖包后用-DependencyPath参数安装

很多报错本质上就两个原因:一个是包名不对,一个是权限不够。先搜、再看、再装,这个顺序不要乱。遇到“无法”类错误,我强烈建议把完整错误信息复制到搜索引擎,比盯着终端里那一行中文猜半天有效得多。

5.2 一个典型报错场景的完整排查过程

网上经常看到有人贴出类似这样的命令记录:

PS C:\Users\Administrator> winget install anthropic.claudecode winget : 无法...

“无法”后面往往跟着一串描述,但没贴完整,导致很多人没法判断具体原因。我把这种报错的排查路径走一遍,你以后遇到也能照做。

第一步,确认报错的完整文本。只看到“无法”两个字不够,要看它说的是“无法找到程序包”还是“无法解析依赖”还是“无法连接到源”。这决定了问题方向。

第二步,如果是“无法找到程序包”,先执行winget search claudecode,确认包 ID 是否真的存在。像个别较新或较冷门的软件,可能还没有被 winget-pkgs 仓库收录,这时候只能走官网手动安装。

第三步,如果搜索到了但安装失败,看是不是版本冲突。可以尝试指定版本安装:

winget install --id anthropic.claudecode --version 1.0.0 --force

--force参数会跳过一些校验,但要注意,它同时也会跳过部分安全检查,不建议作为日常参数使用。

第四步,检查是否被代理设置或网络策略阻断。企业内网经常有网络白名单,导致安装包下载失败,这时可以先ping一下下载地址,或者干脆尝试配置镜像源再试一次。

5.3 几个值得养成的使用习惯

最后分享几个让我效率明显提升的使用习惯,都是平时用出来的经验,新手可以直接抄。

第一,每周或每两周跑一次winget upgrade --all。别等到某个软件坏了才想起来升级,把升级当作例行维护,能少踩很多已知问题的坑。升级前有未保存的工作,先保存一下,避免安装程序要求重启应用时打断工作。

第二,别只记install一条命令,searchshow是帮你“看清再动手”的关键。新软件先搜索确认开源项目和包 ID 是否是预期的那一个,再用show看看安装来源是不是官方地址。社区仓库虽然相对可靠,但多看一眼不亏。

第三,管理好你的源。源不是越多越好,我发现很多人喜欢把几个镜像源都加上,结果搜索时返回一堆重复条目,安装时反而出现包来源冲突。建议只保留一个默认源加一个备用镜像源,装不上了再手动切。

第四,善用settings命令。winget settings可以打开 WinGet 的配置文件,里面有一些高级选项,比如启用实验特性、自定义安装行为等。日常用不到,但知道入口在哪里,将来需要时能省不少找资料的时间。

第五,脚本化部署时记得把--accept-package-agreements--accept-source-agreements写上。否则在无人值守场景下,WinGet 会停下来等用户确认协议,整个脚本就卡住了。

写在最后

这几年 Windows 在开发者体验上的进步,WinGet 算是比较有代表性的一个。它和 PowerShell、Windows Terminal、WSL 配合起来,把很多以前靠手动点击才能完成的操作逐渐变成了可记录、可复用、可分享的脚本。我自己的使用体会是:真正让我离不开它的,不是安装那一下的方便,而是“升级所有软件”和“重装系统后一键恢复环境”这两个能力。第一次用winget upgrade --all把十几个软件一次性更新完的时候,确实有种前所未有的爽快感。如果你还在一个个手动装软件,建议从今天起,遇到任何想安装的工具,先敲一句winget search,慢慢就会习惯这种“能用命令行解决就不点鼠标”的节奏。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询