目录
- 前言
- 一、WinGet介绍
-
- [1. WinGet是什么](#1. WinGet是什么)
- [2. WinGet发展历史](#2. WinGet发展历史)
- [3. WinGet仓库](#3. WinGet仓库)
-
- [3.1 核心本质:只管理元数据,不托管安装包](#3.1 核心本质:只管理元数据,不托管安装包)
-
- [(1)winget 社区主源(winget-pkgs)](#(1)winget 社区主源(winget-pkgs))
- [(2)msstore 微软商店源](#(2)msstore 微软商店源)
- [3.2 软件规模增长](#3.2 软件规模增长)
- [4. 同类工具](#4. 同类工具)
-
- [4.1 Windows 平台同赛道系统级工具](#4.1 Windows 平台同赛道系统级工具)
- [4.2 其他系统的系统级包管理器](#4.2 其他系统的系统级包管理器)
- [4.3 编程语言生态包管理器(非同类,易混淆)](#4.3 编程语言生态包管理器(非同类,易混淆))
- 二、WinGet安装
-
- [1. 系统自带:开箱即用](#1. 系统自带:开箱即用)
-
- [1.1 适用系统](#1.1 适用系统)
- [1.2 一分钟验证是否可用](#1.2 一分钟验证是否可用)
- [2. 手动下载安装](#2. 手动下载安装)
-
- [2.1 方式一:微软商店安装(小白首选,最省心)](#2.1 方式一:微软商店安装(小白首选,最省心))
- [2.2 方式二:官方安装包手动安装](#2.2 方式二:官方安装包手动安装)
- [三、WinGet 命令](#三、WinGet 命令)
-
- [3.0 7-Zip](#3.0 7-Zip)
- [3.1 搜索软件:`search`](#3.1 搜索软件:
search) - [3.2 查看详情:`show`](#3.2 查看详情:
show) - [3.3 安装软件:`install`](#3.3 安装软件:
install) -
- [3.8 安装到指定位置](#3.8 安装到指定位置)
- [3.4 查看已安装:`list`](#3.4 查看已安装:
list) - [3.5 升级软件:`upgrade`](#3.5 升级软件:
upgrade) -
- [3.9 升级覆盖测试](#3.9 升级覆盖测试)
- [3.6 卸载软件:`uninstall`](#3.6 卸载软件:
uninstall) - [3.7 仅下载安装包:`download`](#3.7 仅下载安装包:
download)
- 四、UniGetUI
-
- [4.1 UniGetUI 介绍](#4.1 UniGetUI 介绍)
- [4.2 UniGetUI 安装](#4.2 UniGetUI 安装)
-
- [方式一:WinGet 命令安装](#方式一:WinGet 命令安装)
- 方式二:微软商店安装
- 方式三:手动安装包部署(推荐)
- [4.3 UniGetUI 使用](#4.3 UniGetUI 使用)
-
- [4.3.1 发现软件:搜索与一键安装](#4.3.1 发现软件:搜索与一键安装)
- [4.3.2 已安装软件:统一管理与卸载](#4.3.2 已安装软件:统一管理与卸载)
- [4.3.3 软件更新:批量静默升级](#4.3.3 软件更新:批量静默升级)
- [4.3.4 装机神器:备份与导入还原](#4.3.4 装机神器:备份与导入还原)
- [4.3.5 进阶设置](#4.3.5 进阶设置)
- 后记1:官网汇总
- 后记2
- 参考文献
前言
之前看文章看到过使用winget安装软件,一直没有仔细了解过,前段时间看到有教程说可以用winget无魔法安装Claude code,不清楚怎么实现的,正好研究一下。
一、WinGet介绍

1. WinGet是什么

WinGet 全称 Windows Package Manager(Windows 包管理器),是微软官方推出的 Windows 系统原生命令行软件管理工具。
你可以把它理解成「命令行版的微软应用商店」:不用打开浏览器找官网、不用手动下载安装包、不用一路点「下一步」、不用担心捆绑软件,只需要在终端敲一行命令,就能完成软件的搜索、安装、升级、卸载全流程。
在 WinGet 诞生之前,人们安装应用程序往往要历经繁琐的流程。首先得在官网、相关论坛或者各类下载站寻找程序安装包;找到后,还需手动运行安装程序逐步操作。这个过程不仅效率低下,还充满风险------由于网络环境复杂,用户很容易下载到来源不可信的安装包,这些可疑文件极有可能被植入恶意代码,一旦安装,便可能窃取个人信息,甚至控制计算机用于非法活动。
而 WinGet 问世之后,应用程序安装变得前所未有的便捷。用户只需在终端输入对应命令,系统便会自动从官方认可的来源下载安装包、处理安装逻辑并完成部署。这种方式操作简单直接,极大节省了时间成本;同时官方校验的来源也确保了应用程序的安全性,让用户无需再担忧恶意代码与捆绑软件。
它不是第三方民间工具,而是 Windows 官方级别的系统组件:
- Windows 11 22H2 及之后的版本系统自带,开箱即用,无需额外安装;
- Windows 10 1809+ 版本可通过官方安装包手动部署;
- 兼容 CMD、PowerShell、VS Code 终端等所有 Windows 终端环境。
对普通用户来说,它是批量装机、纯净装软件的神器;对开发者来说,它是快速搭建开发环境(Git、Node、Python、VS Code 等)的高效工具 ------ 所有安装包均直接取自软件厂商的官方发布地址,全程自动校验文件哈希,从源头规避捆绑软件与恶意篡改风险。
2. WinGet发展历史
WinGet 虽然起步晚,但背靠微软官方生态,发展速度非常快,核心时间线如下:
-
首次亮相(2020 年 5 月)
在微软 Build 2020 开发者大会上正式公布并发布首个公开预览版。彼时 Windows 平台已经有 Chocolatey、Scoop 等成熟的第三方包管理器,但始终缺少官方原生方案,WinGet 的推出直接填补了这一空白,定位对标 macOS 的 Homebrew。
-
正式稳定(2021 年 5 月)
发布 v1.0 正式版本,核心功能(安装、升级、卸载、搜索)全部稳定,配套的社区软件仓库
winget-pkgs进入常态化维护,正式进入生产可用阶段。 -
系统原生集成(2022 年起)
从 Windows 11 22H2 版本开始,WinGet 作为系统组件默认预装,用户无需手动下载安装即可直接使用,真正实现了「开箱即用」。
-
功能持续完善(2023-至今)
陆续新增便携软件安装、依赖管理、软件清单导出/导入(批量装机神器)、多源架构、ARM64 原生适配等能力,稳定版本迭代至 1.8+,软件仓库规模持续增长,已经覆盖绝大多数常用桌面软件与开发工具。
3. WinGet仓库
和所有包管理器一样,WinGet 也有自己的「软件仓库」(官方叫「源 / Source」),系统默认自带两个官方源,但它的仓库机制和 apt、npm 等传统包管理器有本质区别。
3.1 核心本质:只管理元数据,不托管安装包
绝大多数传统包管理器(apt、yum、npm 等)都采用「中央仓库」模式:仓库服务器直接托管所有安装包/依赖包文件,用户安装时直接从中央仓库下载。
而 WinGet 走的是「元数据索引」路线:仓库里只存放软件的描述元数据,不存储任何安装包本体。安装包始终保存在软件厂商自己的官方服务器上,WinGet 只充当「导航员」的角色,负责从官方地址拉取文件、校验哈希、自动执行安装。
(1)winget 社区主源(winget-pkgs)
这是 WinGet 最核心、最常用的默认源,也是我们安装绝大多数软件的来源。
- 仓库载体 :托管在 GitHub 上的开源仓库 microsoft/winget-pkgs,完全公开可查,任何人都可以浏览所有软件的完整清单。
- 维护模式:由全球开发者社区提交软件清单,微软官方团队审核合入,人人都可以参与贡献新软件、更新新版本。
- 仓库内容:仅保存 YAML 格式的软件描述文件,包含软件名、版本号、官方下载链接、文件哈希校验值、静默安装参数、卸载方式等信息。
仓库目录结构与清单文件详解
整个仓库有严格的层级规范,所有软件清单统一存放在 manifests 根目录下,按照「包名首字母 → 厂商名称 → 产品名称 → 版本号」四级目录逐层存放,结构清晰易检索。

我们以 Anthropic.ClaudeCode 为例,它的清单完整路径为:
manifests/a/Anthropic/ClaudeCode/
进入目录后,每个历史版本对应一个独立子文件夹,我们找到最新的版本: 2.1.212

单个版本内通常包含 4 个标准 YAML 清单文件,各司其职:

- Anthropic.ClaudeCode.yaml ------ 版本入口清单
yaml
# Created with YamlCreate.ps1 Dumplings Mod
# yaml-language-server: $schema=https://aka.ms/winget-manifest.version.1.12.0.schema.json
PackageIdentifier: Anthropic.ClaudeCode
PackageVersion: 2.1.212
DefaultLocale: en-US
ManifestType: version
ManifestVersion: 1.12.0
这是该版本的总索引文件,对应 version 类型清单,作用是声明软件的唯一标识与基础属性,是整个版本的入口文件。
核心字段包括:
PackageIdentifier:软件唯一包 ID,也就是winget install命令后跟的标识PackageVersion:当前清单对应的软件版本号DefaultLocale:软件默认语言(通常为en-US)
它不包含具体安装逻辑,仅用于关联安装配置文件与多语言描述文件。
- Anthropic.ClaudeCode.installer.yaml ------ 安装器核心配置
yaml
# Created with YamlCreate.ps1 Dumplings Mod
# yaml-language-server: $schema=https://aka.ms/winget-manifest.installer.1.12.0.schema.json
PackageIdentifier: Anthropic.ClaudeCode
PackageVersion: 2.1.212
InstallerType: portable
Commands:
- claude
ReleaseDate: 2026-07-16
Installers:
- Architecture: x64
InstallerUrl: https://downloads.claude.ai/claude-code-releases/2.1.212/win32-x64/claude.exe
InstallerSha256: FE639693FD7E9A881C799867711ABB7666DEC2A5FEFBABA41AF6A09E71BCBEFA
- Architecture: arm64
InstallerUrl: https://downloads.claude.ai/claude-code-releases/2.1.212/win32-arm64/claude.exe
InstallerSha256: ADAA6E3DADB8016755CCD1907A5F249C1BC9BDB6C71D3F7DCEA7D5DB8F72D0A5
ManifestType: installer
ManifestVersion: 1.12.0
这是整个清单的核心执行文件,winget install 命令真正读取的就是这份配置,对应 installer 类型清单。
它完整定义了安装行为的所有参数,以 2.1.210 版本为例:
InstallerType: portable:标识软件为便携版,无需传统 GUI 安装流程,直接下载可执行文件即可使用Commands: [claude]:注册到系统 PATH 的命令名,安装完成后终端可直接调用claudeInstallers:按 CPU 架构区分下载信息,包含 x64 和 arm64 两个版本,每个版本对应一组独立的下载与校验配置Architecture:安装包适配的处理器架构,常见取值为 x64和 arm64。WinGet 会自动识别当前系统架构,自动匹配下载对应的安装包,无需用户手动选择。InstallerUrl:软件官方下载直链,就是 WinGet 实际使用的下载地址,直接指向厂商官方服务器InstallerSha256:安装文件的 SHA256 哈希值,用于校验文件完整性,防止下载过程中被篡改
这也直观印证了 WinGet 的元数据本质:仓库里只存下载地址和校验值,安装包本体始终存放在厂商官方服务器上。
可以看到ClaudeCode是从claude.ai域名下载安装包,理论上来说也需要魔法
- Anthropic.ClaudeCode.locale.en-US.yaml ------ 英文默认本地化文件
yaml
# Created with YamlCreate.ps1 Dumplings Mod
# yaml-language-server: $schema=https://aka.ms/winget-manifest.defaultLocale.1.12.0.schema.json
PackageIdentifier: Anthropic.ClaudeCode
PackageVersion: 2.1.212
PackageLocale: en-US
Publisher: Anthropic PBC
Author: Anthropic PBC
PackageName: Claude Code
License: Proprietary
Copyright: © 2026 Anthropic PBC
ShortDescription: Unleash Claude's raw power directly in your terminal. Search million-line codebases instantly. Turn hours-long workflows into a single command. Your tools. Your workflow. Your codebase, evolving at thought speed.
Description: |-
Claude Code is Anthropic's agentic coding tool that lives in your terminal and helps you turn ideas into code faster than ever before.
What Claude Code does for you
- Build features from descriptions: Tell Claude what you want to build in plain English. It will make a plan, write the code, and ensure it works.
- Debug and fix issues: Describe a bug or paste an error message. Claude Code will analyze your codebase, identify the problem, and implement a fix.
- Navigate any codebase: Ask anything about your team's codebase, and get a thoughtful answer back. Claude Code maintains awareness of your entire project structure, can find up-to-date information from the web, and with MCP can pull from external datasources like Google Drive, Figma, and Slack.
- Automate tedious tasks: Fix fiddly lint issues, resolve merge conflicts, and write release notes. Do all this in a single command from your developer machines, or automatically in CI.
Why developers love Claude Code
- Works in your terminal: Not another chat window. Not another IDE. Claude Code meets you where you already work, with the tools you already love.
- Takes action: Claude Code can directly edit files, run commands, and create commits. Need more? MCP lets Claude read your design docs in Google Drive, update your tickets in Jira, or use your custom developer tooling.
- Unix philosophy: Claude Code is composable and scriptable. tail -f app.log | claude -p "Slack me if you see any anomalies appear in this log stream" works. Your CI can run claude -p "If there are new text strings, translate them into French and raise a PR for @lang-fr-team to review".
- Enterprise-ready: Use Anthropic's API, or host on AWS or GCP. Enterprise-grade security, privacy, and compliance is built-in.
Moniker: claudecode
Tags:
- agent
- agentic
- ai
- chatbot
- claude
- claude-code
- claudecode
- code
- coding
- large-language-model
- llm
- programming
ReleaseNotes: |-
- /fork now copies your conversation into a new background session (its own row in claude agents) while you keep working; the in-session subagent it used to launch is now /subtask
- Added claude auto-mode reset to restore the default auto-mode configuration, with a confirmation prompt (pass --yes to skip)
- Added a session-wide limit on WebSearch tool calls (default 200, tunable via CLAUDE_CODE_MAX_WEB_SEARCHES_PER_SESSION) to stop runaway search loops
- Added a per-session cap on subagent spawns (default 200, override with CLAUDE_CODE_MAX_SUBAGENTS_PER_SESSION) to stop runaway delegation loops; /clear resets the budget
- MCP tool calls running longer than 2 minutes now move to the background automatically so the session stays usable; configure the threshold or disable with CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS
- Typing /resume in the agent view now opens a picker of past sessions --- including sessions deleted from the list --- and resumes your pick as a background session
- Fixed plan mode auto-running file-modifying Bash commands (e.g. touch, rm) without a permission prompt or SDK canUseTool callback
- Fixed worktree creation following a repository-committed symlink at .claude/worktrees, which could create files outside the repository
- Fixed a continue:false hook's halt being dropped when the tool fails or completes mid-stream, and hook infrastructure errors being misreported as user rejections
- Fixed SIGTERM during a running Bash tool orphaning the command's process tree in print/SDK mode; the CLI now aborts the turn, kills the tree, and exits 143
- Fixed /background and claude --bg failing with "EUNKNOWN: unknown error, uv_spawn" on Windows when Group Policy blocks PowerShell 5.1; the daemon now prefers PowerShell 7
- Fixed shell mode (!) not executing commands containing file paths while the path autocomplete popup was open
- Fixed auto-mode denial notifications rendering broken characters when a long denial reason was truncated mid-emoji
- Fixed Ctrl+J not inserting a newline in the agent view dispatch input on terminals with extended key reporting, and surfaced the newline shortcut in the ? help overlay
- Fixed /ultrareview rejecting PR references like #123, PR 123, and pasted PR URLs; error hints now name the command you actually typed
- Fixed /ultrareview <branch> not fetching the branch from origin when it exists remotely; it now suggests the closest branch name on typos
- Fixed /ultrareview skipping the billing confirmation in a new conversation after /clear
- Fixed /ultrareview's "not a git repository" error on Claude Desktop now suggesting the project's repository folder instead of terminal commands
- Fixed hosted (host-managed) sessions failing at startup when repository settings configured mTLS certs, extra CA bundles, or OAuth scopes; these transport settings are now ignored with a warning
- Fixed a spurious "File has not been read yet" error when editing a file that had been read with offset/limit before resuming a session
- Fixed ExitWorktree failing with "no active EnterWorktree session" after resuming a session with --continue/--resume in print/SDK mode
- Fixed the workflow agent grid staying empty for Remote Control clients that join a session mid-run
- Fixed streaming-mode control requests being marked complete before their handler finished, which could lose the request on session restart
- Fixed background sessions created with /fork losing their live-parent protection after a state write failure
- Fixed reopening a stopped background session from the agent view failing silently --- it now resumes the session, or shows why it can't and lets you force a restart
- Fixed agent teams: a stopping teammate could send the leader duplicate idle notifications when team initialization re-ran within a session
- Fixed the plan-approval dialog footer splitting "ctrl+g to edit in " apart when the file path is long
- Fixed the welcome banner keeping its old panel widths after a combined width+height terminal resize in fullscreen mode
- Fixed diff previews losing their line numbers and +/- markers in narrow layouts
- Fixed @-mentions attaching nothing after a partial file read, plugin uninstall targeting the wrong marketplace, and false "Command timed out" on exit code 143
- Fixed OpenTelemetry HTTP exports being rejected with 411/400 by Azure Monitor and other endpoints that don't accept chunked transfer encoding
- Fixed OTLP event log records missing trace_id/span_id when TRACEPARENT is set in SDK/headless mode
- Fixed conversations with many images incorrectly failing with "Request too large" errors, and improved the error message to explain the actual cause
- Fixed web search and web fetch returning "API Error" text as search results or page content when the API was overloaded
- Improved web search and web fetch reliability by retrying 529 errors and rate-limited requests with bounded backoff
- Improved prompt caching: the mid-conversation system block now works behind LLM gateways and custom base URLs (Bedrock, Vertex, 1P)
- Improved background agent attach: cold-attaching now instantly shows the formatted transcript while the session boots, instead of a blank wait
- Reduced token usage in inter-agent messaging: SendMessage bodies are no longer duplicated into replayed history and tool results
- Changed /fork to name the copy after your prompt when the session has no title, so the row is recognizable in the agent view
- Changed bare /btw to reopen the side-question panel on your most recent exchange so you can browse earlier answers
- Changed the ← footer hint to pulse N done for a moment when a background agent finishes while nothing needs your input
- Deprecated the Task tool's mode parameter (now ignored); subagents inherit the parent session's permission mode by default
- Changed Enterprise forceLoginMethod to be enforced for VS Code extension, SDK, setup-token, and install-github-app logins, not just the terminal
- Changed session transcripts to record the reasoning effort level on each assistant message
- Changed headless/SDK sessions to apply a set_model control request mid-turn; the next model round-trip uses the new model instead of waiting for the next turn
- Changed agent view / claude agents --json: sessions waiting on a sandbox, MCP-input, or managed-settings prompt now show as "Needs input" instead of "Working"
- Updated the auth status panel title from "Cloud authentication" to "Authentication"
- Corrected an earlier release note (2.1.200): tmux through the 3.6 series lacks synchronized output; newer tmux with support is detected automatically
ReleaseNotesUrl: https://github.com/anthropics/claude-code/blob/HEAD/CHANGELOG.md#21212
ManifestType: defaultLocale
ManifestVersion: 1.12.0
对应 defaultLocale 类型清单,是软件的默认语言展示文件,包含面向用户的全部展示信息:
- 出版商、作者、软件许可证、版权信息
- 软件简介、详细功能描述、分类标签(Tags)
- 版本更新日志与更新日志官方链接
当系统语言为英文时,winget search、winget show等命令都会读取这份文件的内容进行展示。
- Anthropic.ClaudeCode.locale.zh-CN.yaml ------ 中文本地化文件
yaml
# Created with YamlCreate.ps1 Dumplings Mod
# yaml-language-server: $schema=https://aka.ms/winget-manifest.locale.1.12.0.schema.json
PackageIdentifier: Anthropic.ClaudeCode
PackageVersion: 2.1.212
PackageLocale: zh-CN
License: 专有软件
ShortDescription: 在终端中直接释放 Claude 的强大功能。即时搜索数百万行代码库,将耗时数小时的工作流程浓缩为单个命令,让你的工具、你的工作流、你的代码库以思维速度演化。
Description: |-
Claude Code 是 Anthropic 推出的一款自主智能编程工具,在你的终端中运行,并以前所未有的速度帮助你将想法转化为代码。
Claude Code 能为你做什么
- 根据描述构建功能:用简单的英文告诉 Claude 你想要实现什么功能。它会制定计划、编写代码,并确保其正常运行。
- 调试并修复问题:描述一个 Bug 或粘贴错误信息,Claude Code 会分析你的代码库,定位问题并自动实施修复。
- 快速浏览任意代码库:针对团队的代码库提出任何问题,都能获得深入准确的回答。Claude Code 能理解整个项目的结构,可从网络获取最新信息,并通过 MCP 从 Google Drive、Figma、Slack 等外部数据源获取内容。
- 自动化繁琐任务:修复棘手的代码格式问题、解决合并冲突、撰写发布说明。这些都可以通过开发者机器上的单条命令完成,也可以在 CI 中自动执行。
开发者为何喜爱 Claude Code
- 在终端中运行:无需打开新的聊天窗口,也不用切换 IDE。Claude Code 就在你熟悉的工作环境,配合你钟爱的工具使用。
- 主动执行操作:Claude Code 可直接编辑文件、运行命令、创建提交。需要更多功能?MCP 让 Claude 能读取 Google Drive 中的设计文档、更新 Jira 工单,或集成你自定义的开发工具。
- 遵循 Unix 哲学:Claude Code 可组合、可脚本化。例如,执行 tail -f app.log | claude -p "如果日志流中出现异常,通过 Slack 通知我" 即可生效。你的 CI 系统也可以运行 claude -p "如有新的文本字符串,将其翻译成法语并为 @lang-fr-team 创建 PR 审阅"。
- 企业级就绪:支持使用 Anthropic 的 API,或部署在 AWS 与 GCP 上。内置企业级的安全性、隐私保护和合规能力。
Tags:
- claude
- 人工智能
- 代码
- 大语言模型
- 智能体
- 编程
- 聊天机器人
- 自主智能
ManifestType: locale
ManifestVersion: 1.12.0
对应 locale 类型的简体中文语言包,作用是适配中文系统用户。
内容结构和英文本完全一致,包含软件的中文名称、功能介绍、标签等信息。当你的 Windows 系统设置为简体中文时,WinGet 会自动读取这份中文描述进行展示,提升国内用户的阅读体验。
当你执行 winget install 时,流程是:
- 从社区仓库拉取对应软件的元数据清单
- 根据清单里的官方下载地址,直接从软件厂商官方服务器下载安装包
- 校验文件哈希无误后,自动执行静默安装
这种机制决定了不同软件的下载来源对应各自的官方渠道:比如安装 Git 就直接从 GitHub Releases 下载,安装常用办公软件则从对应厂商的官方下载服务器获取,最终得到的安装文件和你手动去官网下载的完全一致。
也正因如此,软件的下载速度与可用性,取决于对应官方服务器在当前网络环境下的可达性,这也是元数据索引模式和中央仓库模式的核心体验差异之一。
(2)msstore 微软商店源
WinGet 默认自带的第二个源,直接对接微软应用商店的软件库。
- 可安装商店内的 UWP 应用、桌面转制版应用,走商店完整的分发、授权链路;
- 安装部分软件时弹出的「服务协议确认」提示,就是这个源触发的。
除了两个官方源,WinGet 还支持添加第三方私有源,企业可以搭建内部源分发自研软件;普通用户使用默认两个源即可满足几乎所有需求。
3.2 软件规模增长
仓库的软件数量随着社区贡献持续增长:
- 截至 2021 年 6 月 21 日,winget 社区主源收录的软件数量为 2012 个;
- 截至 2026 年初,社区主源已收录超过 13000 个唯一应用包,覆盖生产力工具、开发工具、安全软件、企业应用等全品类,经过时间的积累和社区的不断更新,软件的数量和类型还在持续扩充。
4. 同类工具
很多人容易把不同层级的包管理器混为一谈,这里按「系统级工具」和「语言级工具」两大类做清晰区分与对比。
4.1 Windows 平台同赛道系统级工具
三者都是面向 Windows 的命令行软件管理工具,但设计理念、干净程度和适用场景差异极大,并非简单的"官方 vs 第三方"区别:
| 工具 | 核心定位 | 核心设计 | 适合人群 |
|---|---|---|---|
| WinGet | 官方自动化安装助手 | 仅存元数据索引,调用软件原生安装包静默安装,本质是把 GUI 点下一步的过程自动化 | 普通用户、日常装机、GUI 软件批量管理 |
| Scoop | 开发者向纯净便携包管理器 | 统一解压便携版程序到独立目录,通过 shims 注入 PATH,配置集中 persist 存储,全程不污染系统 | 开发者、命令行重度用户、追求干净环境的人群 |
| Chocolatey | 老牌全功能包管理器 | 完整的包管理体系,支持复杂依赖、系统级部署,社区维护包仓库 | 企业运维、批量部署场景;普通个人用户已不优先推荐 |
WinGet:够用但不算"真正的包管理器"
WinGet 更准确的定位是「官方软件下载安装自动化工具」,而非 Linux 意义上的包管理器。
它的核心逻辑是:从官方源拿到下载地址,下载原版安装包,然后模拟人工点击的流程执行静默安装。程序本身该装到哪里、写不写注册表、往 AppData 写多少文件,完全由软件自身的安装程序决定,WinGet 不做干预。
这种设计的好处是兼容性强,几乎所有桌面软件都能装;缺点也很明显:管控力弱,升级时可能篡改用户自定义的安装路径,也做不到完全干净的卸载。对普通用户来说功能够用,但追求极致干净的开发者往往不满足于此。
Scoop:最干净的开发者专属工具
Scoop 是 Windows 上最接近 Homebrew 体验的包管理器,核心走「便携化 + 集中管理」路线:
- 安装逻辑 :不调用传统 exe 安装包,优先下载软件的 Portable 便携版本,统一解压到
scoop/apps目录下; - 环境管理 :通过
shims目录统一生成命令入口注入 PATH,不会往系统目录、注册表乱写东西; - 配置隔离 :用户配置、数据文件统一存放在
scoop/persist目录,更新、卸载程序本体不会丢失用户设置,卸载后系统几乎无残留; - 权限友好:默认安装在用户目录,无需管理员权限即可使用。
它的短板也很明确:管理大型 GUI 软件体验一般,更适合管理 Python、Rust、fzf、Git 这类命令行工具与开发环境,是开发者的利器,但对普通桌面用户门槛偏高。
Chocolatey:辉煌不再的老牌选手
Chocolatey 是 Windows 领域最早出圈的包管理器(2011 年诞生),早年几乎是 Windows 命令行装软件的唯一选择,生态最完整,支持复杂依赖解析、系统级服务部署、企业批量管理。
但它目前的核心问题是社区仓库质量参差不齐:社区提交的包维护水平差异很大,部分包存在校验缺失、夹带冗余组件、更新滞后的问题,普通用户踩坑概率较高。如今更推荐企业运维场景使用其商业版,个人普通用户优先选 WinGet 或 Scoop 即可。
简单总结:
- 日常装 GUI 软件、图省心省事,用 WinGet 就够;
- 管理开发工具、命令行环境,追求系统干净,选 Scoop;
- 企业批量部署、有专业运维需求,再考虑 Chocolatey。
4.2 其他系统的系统级包管理器
WinGet 在定位上类似于 Linux 发行版中的 apt、yum、dnf、pacman 等包管理器,都是面向系统级的软件生命周期管理工具,但底层设计逻辑存在明显差异。
- apt(Debian / Ubuntu) :Linux 最知名的包管理器,Debian 系发行版标配。仓库直接托管完整的
.deb安装包,软件全、稳定性高,与系统深度绑定。 - yum / dnf(CentOS / RHEL / Fedora):红帽系 Linux 的标准包管理器,yum 为旧版,dnf 为新一代。同样是服务端托管完整安装包,企业级场景应用广泛。
- Homebrew(macOS / Linux):macOS 平台事实标准的第三方包管理器,俗称「brew」。开发者生态极强,功能成熟度远高于 WinGet,是 Mac 开发装机必备。
WinGet 的设计逻辑更偏向于将传统 GUI 安装流程转化为自动化命令执行,它依托软件官方自带的安装卸载程序完成操作,并不像 Linux 原生包管理器那样从系统层面统一管理文件布局与依赖。也正因如此,部分小众软件可能未被官方源收录,在覆盖广度上仍有提升空间。
4.3 编程语言生态包管理器(非同类,易混淆)
这类工具只管理某一门编程语言的依赖库,不是用来装系统软件的,和 WinGet 完全不是一个赛道:
- npm / yarn / pnpm:Node.js 生态的包管理器,管理前端与 Node 项目的依赖库,是前端开发的核心工具。
- Maven / Gradle:Java 生态的包管理 + 构建工具,负责管理 Java 项目的第三方依赖,同时承担项目构建、打包能力。
- pip:Python 的官方包管理器,用于安装 Python 第三方库。
- RubyGems(gem):Ruby 语言的包管理器。
- Composer:PHP 生态的包管理器。
一句话区分:WinGet 管的是「你电脑上装了什么软件」,语言包管理器管的是「你的代码项目里用了什么库」。
二、WinGet安装
WinGet 的安装分两种场景:新版 Windows 系统自带,开箱即用无需额外操作 ;旧版/精简版系统需要手动下载安装。下面分别对应详细操作步骤,新手跟着走不会出错。
1. 系统自带:开箱即用
首先明确一个常识:WinGet 并不是一个独立的软件,它是微软「应用安装程序(App Installer)」系统组件内置的命令行工具。从 Windows 11 22H2 版本开始,该组件默认随系统预装,绝大多数用户不需要手动安装,开机就能用。
1.1 适用系统
- Windows 11 22H2 及以上所有正式版本
- Windows 10 1809+ 版本可通过官方安装包手动部署,正常更新的一般也都自动安装了
- Windows Server 2025 及以上服务器系统
1.2 一分钟验证是否可用
任意打开一个终端:Windows 终端、PowerShell、CMD 均可(推荐使用PowerShell)

输入命令:
powershell
winget --version

如果正常输出版本号(例如 v1.29.280),说明你的系统已经原生支持 WinGet。
小提示:如果你的 Win11 系统输入命令提示「不是内部或外部命令」,大概率是组件版本过低。打开微软商店,搜索「应用安装程序」并更新到最新版,更新完成后即可正常使用。
2. 手动下载安装
如果你的系统是 Windows 10、精简版 Win11,或者系统被阉割过没有自带组件,可以通过以下三种方式手动安装,按推荐优先级从高到低排序。
2.1 方式一:微软商店安装(小白首选,最省心)
这是最不容易出错的方式,全程图形化点击,后续还能自动更新,新手无脑选这个就行:
- 打开系统自带的「微软商店(Microsoft Store)」
- 顶部搜索框输入「应用安装程序」(英文系统搜
App Installer) - 找到发布者为「Microsoft Windows」的官方应用,点击「获取/安装」
- 安装完成后,关闭所有终端窗口重新打开,即可正常使用
winget命令

2.2 方式二:官方安装包手动安装
如果微软商店打不开、无法使用(比如企业内网、校园网、精简系统),可以直接下载官方安装包手动部署:
- 访问微软官方 GitHub 仓库
microsoft/winget-cli的 Releases 页面 - 找到最新稳定版,下载后缀为
.msixbundle的安装包文件 - 双击下载好的文件,按照系统提示点击「安装」即可
- 安装完成后重启终端窗口生效


安装必看注意事项
- 系统版本底线:Windows 10 必须升级到 1809 及以上版本,过低版本无法安装 WinGet
- 生效前提:安装完成后必须关闭所有终端窗口重新打开,新的环境变量才会生效
- 安全提醒:不建议从第三方下载站获取安装包,务必走微软官方渠道,避免植入恶意代码
三、WinGet 命令
WinGet 所有软件管理能力均通过命令行指令完成,覆盖软件搜索、安装、升级、卸载、源管理、批量导出导入等完整使用场景。以下为官方完整命令与功能对照表:
| 命令 | 功能说明 |
|---|---|
install |
安装指定的应用程序 |
show |
显示指定应用的详细信息 |
source |
管理 WinGet 使用的软件源,支持添加、编辑、移除和更新仓库 |
search |
搜索匹配的应用程序 |
list |
列出当前系统已安装的软件包 |
upgrade |
升级指定的应用程序 |
uninstall |
卸载指定的应用程序 |
hash |
为安装程序生成 SHA256 哈希值 |
validate |
校验用于提交到 WinGet 仓库的清单文件格式 |
settings |
打开 WinGet 设置配置界面 |
features |
查看所有实验性功能的启用状态 |
export |
导出已安装软件包列表到文件 |
import |
从文件中批量安装所有软件包 |
pin |
管理软件包的版本锁定(钉选) |
configure |
将系统配置为目标状态(DSC 配置) |
download |
仅下载指定应用的安装包,不执行安装 |
repair |
修复选中的应用程序 |
dscv3 |
PowerShell DSC v3 资源相关命令 |
官网也有每个命令的详细介绍:
https://learn.microsoft.com/en-us/windows/package-manager/winget/
日常使用中,绝大多数场景仅需掌握搜索、安装、查看、升级、卸载等基础命令。下面以开源压缩软件 7-Zip 为统一示例,逐一讲解核心命令的用法。
3.0 7-Zip
开始之前,让我们先去7zip的仓库看看,最新版本是26.02

https://github.com/microsoft/winget-pkgs/tree/master/manifests/7/7zip/7zip/26.02
进入仓库后同样是四个文件,前面WinGet仓库那里我们已经介绍过每个文件的作用了,重点再来看下install.yaml

主要是提前看下下载地址,可以看到也是从GitHub下载的,下载速度实际取决于网络联通情况

3.1 搜索软件:search
用于在已配置的所有软件源中模糊检索目标软件,是安装前确认软件 ID、版本与来源的前置命令。
示例:搜索名称包含 7zip 的所有软件包
powershell
winget search 7zip
执行后会返回匹配结果列表,包含软件名称、唯一 ID、最新版本、所属源等关键信息,可从中确认需要安装的准确条目。

上面可以看到倒数第三条是从msstore下载
3.2 查看详情:show
查看指定软件的完整元数据,包括发布者信息、版本号、安装类型、官方下载地址、软件描述等全部清单内容。
示例:查看 7-Zip 的详细配置信息
powershell
winget show 7zip

由于有多个匹配,需要再明确厂商
powershell
winget show 7zip.7zip

3.3 安装软件:install
WinGet 最核心的命令,用于自动完成下载、校验、安装全流程,支持通过软件名、软件 ID 进行匹配。
示例:安装 7-Zip,记得要加上厂商,否则会报错
powershell
winget install 7zip.7zip
执行后 WinGet 会自动识别当前系统架构,匹配对应版本的安装包,完成哈希校验后静默安装,全程无需手动点击安装向导。
日志信息会显示下载地址,和我们上面在仓库文件看到的一致

winget会默认安装在c盘,这点我很不喜欢,安装到了Program Files文件夹里

3.8 安装到指定位置
此处为执行
3.6 卸载软件:uninstall后,再次使用路径参数进行安装install 命令文档:https://learn.microsoft.com/en-us/windows/package-manager/winget/install
powershell
winget install 7zip.7zip -l D:\Program\System\7zip

安装结果,没什么问题

3.4 查看已安装:list
列出系统中已安装的软件包,支持关键词过滤,常用于确认软件是否安装、核对当前安装版本。
示例:筛选查看已安装的 7-Zip 信息
powershell
winget list 7zip.7zip

不加应用可以查看电脑上已安装的所有的winget维护的软件
powershell
winget list

3.5 升级软件:upgrade
检测指定软件的最新版本并执行升级,也可不带参数运行以扫描全系统可升级软件。
示例:将 7-Zip 升级到最新版本
powershell
winget upgrade 7zip.7zip

3.9 升级覆盖测试
有些程序你要是没装到默认路径用 WinGet 升级会改路径。
有人提到这一点,下面测试下
首先卸载软件
powershell
winget uninstall 7zip.7zip
然后安装一个旧版本到指定位置
powershell
winget install 7zip.7zip -l D:\Program\System\7zip -v 26.00
查看一下
powershell
winget list 7zip.7zip
然后升级
powershell
winget upgrade 7zip.7zip

看下d盘,安装位置,没有重新安装到c盘,也可能是7zip毕竟简单

3.6 卸载软件:uninstall
直接在终端卸载指定软件,无需跳转至系统「应用和功能」界面,支持批量卸载操作。
示例:卸载 7-Zip
powershell
winget uninstall 7zip.7zip

卸载的也不干净,至少安装目录就留了一个dll,如果是复杂的软件会留的更多,卸载软件还是推荐用geek

3.7 仅下载安装包:download
只下载对应软件的安装包到本地目录,不触发安装流程,适合留存安装包、离线批量部署的场景。
示例:下载 7-Zip 安装包文件
powershell
winget download 7zip.7zip -d E:\Software\安装包\系统软件\7zip

在文件夹看下下载结果,一个exe和一个yaml

双击exe会进入安装界面

四、UniGetUI
前面我们完整讲解了 WinGet 的命令行用法,但纯终端操作对普通用户仍有一定门槛,记忆命令、核对包 ID、手动敲参数的流程也不够直观。如果你更习惯图形化操作,又想享受包管理器的纯净与高效,UniGetUI 就是目前最成熟的解决方案。
4.1 UniGetUI 介绍
UniGetUI 前身名为 WingetUI,由开发者 Martí Climent 发起并维护,是一款免费开源的 Windows 多包管理器图形化前端工具,项目采用 MIT 协议开源,在 GitHub 累计收获超 25k Star。
作者网站:https://marticliment.com/
GitHub地址:https://github.com/Devolutions/UniGetUI
版本演进与更名
项目从诞生至今,经历了从单一工具到统一平台的定位升级,关键版本节点如下:
- v0.1(2021 年 6 月 19 日):首个公开版本正式发布,定名 WingetUI,定位为 WinGet 的专属图形化外壳,仅支持 WinGet 单源的基础操作。
- WingetUI 0.4(2021 年 10 月 2 日):快速迭代打磨基础体验,补全搜索、安装、卸载等核心功能,优化安装流程的稳定性与交互细节。
- UniGetUI 3.1.0 alpha 0(2024 年 5 月 19 日) :项目发展的重要里程碑,随着版本迭代,它陆续接入了 Scoop、Chocolatey、Pip、Npm、.NET Tool、PowerShell Gallery 等多款主流包管理器,原名称已无法覆盖产品定位。因此在 3.1.0 版本正式宣布更名为 UniGetUI,同步启动多包管理器适配,从"WinGet 图形工具"转向"全平台包管理统一入口"。
- UniGetUI v2026.1.0(2026 年 3 月 11 日):采用年份化版本号命名规则,功能趋于成熟稳定。已完整覆盖 WinGet、Scoop、Chocolatey、Pip、Npm、.NET Tool 等多款主流包管理器,界面、性能与批量管理能力均完成大幅优化。
补充说明:随着项目商业化运作推进,稳定版的包发布主体已从原作者个人变更为
Devolutions公司,因此 WinGet 源中的稳定版包 ID 为Devolutions.UniGetUI;原作者命名空间下仅保留MartiCliment.UniGetUI.Pre-Release预览版本。
它本身不生产软件,也不托管安装包,定位是「包管理器的统一操作入口」:把原本分散在各个终端里的命令行能力,全部封装进一个类似应用商店的图形界面里,让普通用户不用敲一行命令,也能享受到纯净、高效的软件管理体验。
核心价值
- 降低使用门槛:不用记忆任何命令,搜索、安装、升级、卸载全靠鼠标点击,新手也能零门槛用上 WinGet 等包管理器。
- 多源统一管理:一个界面同时管理 WinGet、Scoop、Chocolatey 等多个包管理器的软件,不用在不同终端间来回切换。
- 彻底告别捆绑软件:所有软件均来自官方源,自动校验文件哈希,全程静默安装,没有弹窗、没有全家桶、没有捆绑主页。
- 批量操作高效省心:支持一键批量升级所有软件、批量导出导入软件清单,无论是日常维护还是新机装机,效率都远超手动操作。
4.2 UniGetUI 安装
UniGetUI 有多种安装方式,可以用我们刚讲完的 WinGet 一键安装,也可以去GitHub下载安装。
方式一:WinGet 命令安装
既然已经配置好了 WinGet 环境,可以直接在 PowerShell 中完成安装:
先搜索下看看有哪些安装包
powershell
winget search UniGetUI

进入2026版本号,厂商名称已经变成了Devolutions,所以安装命令为:
powershell
winget install --exact --id Devolutions.UniGetUI
--exact是开启精确匹配模式:只有包 ID(PackageIdentifier)和输入内容完全一致时才会命中,直接锁定你想要的「官方稳定版」,不会出现多结果弹窗,也不会装错版本。
执行后 WinGet 会自动下载官方安装包并完成部署,安装完成后在开始菜单就能找到程序入口。
方式二:微软商店安装
和 WinGet 一样,UniGetUI 也上架了微软商店,适合偏好图形化操作的用户:
- 打开微软商店,搜索「UniGetUI」
- 找到官方应用,点击「获取」即可自动安装
- 商店版本会跟随系统自动更新,无需手动维护版本

方式三:手动安装包部署(推荐)
由于我对软件安装有着严格的位置要求,更推荐去 GitHub 仓库的 Releases 页面,下载最新版 exe 安装包,双击按向导完成安装即可。
https://github.com/Devolutions/UniGetUI/releases
目前最新版是2026.2.5

往下滑找到下载文件,点击Show all 25 assets打开所以下载文件

根据自己的系统选择对应的安装包,64位Windows选择UniGetUI.Installer.x64.exe

双击下载的安装包

点击ok,语言不用修改,安装好以后会自动根据系统语言调整

这里提示你关掉其他应用,然后next

更换一个安装地址,然后next

默认会创建一个桌面快捷方式和开始菜单快捷方式

最后点击install

点击finish会启动UniGetUI

首次启动说明:打开 UniGetUI 后,它会自动检测系统中已安装的包管理器(WinGet、Scoop、Chocolatey 等),并自动完成对接配置,无需手动添加源。只要你的 WinGet 能正常使用,UniGetUI 就能直接读取所有软件清单。
如下图,正在自动检测

4.3 UniGetUI 使用
UniGetUI 的界面逻辑非常直观,顶部标签页对应核心功能分区,下面逐一讲解最常用的操作。
4.3.1 发现软件:搜索与一键安装
在顶部「发现软件包」页面的搜索框输入软件名称,即可同时检索所有已接入的包管理器源,结果会清晰标注来源、版本号、包 ID 等信息。

左侧可以通过来源、筛选器、搜索模式进行更精确的匹配

找到目标软件后,可以右键安装单个软件,也可以勾选一系列软件点击上方的安装所选项
程序就会在后台自动完成下载、校验、安装全流程,全程不会弹出安装向导,也不会打扰你当前的工作。你可以在底部状态栏查看实时进度,安装完成后会收到通知提示。

右键选择安装选项,就可以可视化的修改安装参数
点击手动安装,会自动打开PowerShell并粘贴命令


architecture选项下可以设置安装位置

后面的命令行,关闭应用,pre- install,大家可以根据自己的需求自行调整
4.3.2 已安装软件:统一管理与卸载
切换到「已安装软件包」标签页,可以看到系统中所有通过包管理器安装的软件,支持按来源、名称筛选。

针对单个软件,你可以直接执行:
- 升级:检测并升级到最新版本
- 卸载:一键静默卸载对应软件
- 忽略更新:对不想升级的软件设置钉选,后续批量更新时会自动跳过
- 查看详情:查看软件的完整元数据,包括发布者、许可证、官方下载地址、更新日志等信息
4.3.3 软件更新:批量静默升级
这是 UniGetUI 最实用的功能之一,也是很多用户选择它的核心理由。
切换到「软件更新」标签页,程序会自动扫描所有可升级的软件并列出清单。你可以勾选需要更新的条目(支持全选),点击「更新所选项」,所有软件就会在后台依次静默升级完成。

再也不用面对一个个软件弹出的更新提示,不用手动跳官网下载安装包,也不用一路点击「下一步」,一次点击就能完成全部软件的版本维护。
4.3.4 装机神器:备份与导入还原
对于经常重装系统、需要给多台电脑部署软件的用户来说,这个功能堪称「神级体验」。
UniGetUI 支持将当前已安装的软件清单导出为一个极小的配置文件(不到 1MB),文件里只记录软件 ID 和来源信息,不包含任何安装包本体。

当你拿到一台新电脑或者重装完系统后:
- 先安装好 UniGetUI
- 导入之前导出的清单文件
- 点击确认,程序就会在后台自动拉取所有软件的最新版本并静默安装
泡一杯茶的功夫,所有常用软件就能全部部署到位,完美复刻你熟悉的工作环境。除了本地备份,它还支持绑定 GitHub Gist 实现云端同步,换机还原更方便。
4.3.5 进阶设置
在设置页面中,你还可以按需调整更多细节:
- 管理启用/禁用的包管理器与软件源
- 设置软件默认安装路径
- 配置代理、安装参数、哈希校验规则
- 自定义界面主题、语言、通知行为

整体来说,UniGetUI 完美补齐了 WinGet 图形化能力的短板,既保留了包管理器纯净、高效的优点,又降低了使用门槛,无论是普通用户还是开发者,都能通过它大幅提升 Windows 软件管理的效率。
后记1:官网汇总
后记2
整体用下来,WinGet 是一个「优点很鲜明,短板也很明确」的工具,它能解决一部分场景的痛点,但远没有到能完全替代手动安装的程度。
先说好用的地方:对于 7-Zip、Everything、Git 这类轻量工具、命令行工具和开发环境,WinGet 的体验非常好。不用打开浏览器搜官网、不用在下载页找正确的下载按钮、不用担心下到捆绑版,一行命令就能完成下载、校验、安装全套流程。日常批量升级软件、重装系统后批量恢复环境,效率也比手动一个个装高得多,再配上 UniGetUI 的图形界面,普通用户也能轻松上手。
但如果你和我一样,习惯把软件按分类安装在 D 盘、对安装路径有强需求,或者经常装一些有大量自定义选项的软件,WinGet 的体验就会打折扣。虽然它支持 -l 参数指定安装路径,但这依赖于软件本身的安装程序支持,不是所有软件都能生效;升级时也存在覆盖自定义路径的风险,越是结构复杂的软件,这个问题越明显。而对于那些需要在安装过程中勾选组件、配置服务、设置环境的大型软件,静默安装相当于全程用默认选项,远不如手动走一遍安装向导来得可控。
再加上卸载残留的问题------WinGet 本质只是调用软件自带的卸载程序,并不会帮你清理目录残留、注册表垃圾,卸载干净程度甚至不如手动卸载,更别说和 Geek Uninstaller 这类专业工具比了。
所以我的结论是:WinGet 不是「银弹」,而是一个很好的补充工具。
- 轻量小工具、开发环境、无需复杂配置的软件,放心用 WinGet 装,省心又高效;
- 大型商业软件、有大量自定义选项的软件、对安装路径和纯净度有高要求的场景,老老实实用官方安装包手动安装,反而更可控、更符合自己的使用习惯。
没有必要为了「极客感」强行所有软件都走包管理器,找到适合自己的组合方式,才是最高效的。
参考文献
为什么Windows版本10(1809)之前官方一直没有类apt、pacman、apk的系统包管理器? - Snowflyt的回答 - 知乎
如何看待微软推出 Windows 官方包管理器 winget? - 老板软件的回答 - 知乎
WinGet:重塑 Windows 软件管理习惯的包管理器 - 马小松的文章 - 知乎
【干货】Windows软件包管理器(WinGet)最实用教程 - 万古妖的文章 - 知乎
喜欢的点个关注吧><!祝你永无bug~
txt
/*
_ooOoo_
o8888888o
88" . "88
(| -_- |)
O\ = /O
____/`---'\____
.' \\| |// `.
/ \\||| : |||// \
/ _||||| -:- |||||- \
| | \\\ - /// | |
| \_| ''\---/'' | |
\ .-\__ `-` ___/-. /
___`. .' /--.--\ `. . __
."" '< `.___\_<|>_/___.' >'"".
| | : `- \`.;`\ _ /`;.`/ - ` : | |
\ \ `-. \_ __\ /__ _/ .-` / /
======`-.____`-.___\_____/___.-`____.-'======
`=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
佛祖保佑 永无BUG
*/