windows 包管理 winget 初体验
1 前言
以前使用过 windows 平台的包管理 scoop 和 chocolatey,但是使用体验并不好,最终还是回归到「官网下载」-> 「安装」 的流程。
今天了解到了微软自家的包管理工具 winget,觉得很有趣,就短暂地试用了下,下面是使用记录。
2 简介
Windows 程序包管理器是一个综合的程序包管理器解决方案,由一个命令行工具和一组用于在 Windows 10 和 Windows 11 上安装应用程序的服务组成。
程序包管理器是一个用于自动安装、升级、配置和使用软件的系统或工具集。 大多数程序包管理器都是设计用于发现和安装开发人员工具。
用户可以在 Windows 10 和 Windows 11 计算机上使用 winget 命令行工具来发现、安装、升级、删除和配置应用程序。 此工具是 Windows 程序包管理器服务的客户端接口。
3 安装
打开「命令提示符」窗口,按下 win+r
,输入 cmd
。
输入 winget --version
,如果已安装,会显示 winget 的版本信息,如我的 cmd
显示:
C:\Users\???>winget --version
v1.4.10173
如果提示:「‘winget’ 不是内部或外部命令,也不是可运行的程序或批处理文件。」,则需要自行下载,注意, winget 命令行工具仅在 Windows 10 1709(版本 16299)或更高版本上受支持。
可以在 MicrosoftStore 安装。
也可以安装预览版或者在 Windows 沙盒上安装 winget。
4 使用
4.1 查看帮助
可以在命令行提示符中键入 winget --help
查看使用帮助。
Windows 程序包管理器 v1.4.10173
版权所有 (C) Microsoft Corporation。保留所有权利。
WinGet 命令行实用工具可从命令行安装应用程序和其他程序包。
使用情况: winget [<命令>] [<选项>]
下列命令有效:
install 安装给定的程序包
show 显示包的相关信息
source 管理程序包的来源
search 查找并显示程序包的基本信息
list 显示已安装的程序包
upgrade 显示并执行可用升级
uninstall 卸载给定的程序包
hash 哈希安装程序的帮助程序
validate 验证清单文件
settings 打开设置或设置管理员设置
features 显示实验性功能的状态
export 导出已安装程序包的列表
import 安装文件中的所有程序包
如需特定命令的更多详细信息,请向其传递帮助参数。 [-?]
下列选项可用:
-v,--version 显示工具的版本
--info 显示工具的常规信息
-?,--help 显示选定命令的帮助信息
--wait 提示用户在退出前按任意键
--verbose,--verbose-logs 启用 WinGet 的详细日志记录
--disable-interactivity 禁用交互式提示
可在此找到更多帮助: "https://aka.ms/winget-command-help"
示例:使用 winget upgrade --help
:
C:\Users\???>winget upgrade --help
Windows 程序包管理器 v1.4.10173
版权所有 (C) Microsoft Corporation。保留所有权利。
升级通过搜索已安装的包列表或直接从清单中找到的所选包。默认情况下,查询必须以不区分大小写方式匹配包的 ID、名称或名字对象。可通过传递相应的选项来使用其他字段。如果未提供参数,则显示具有可用升级的包
使用情况: winget upgrade [[-q] <query>] [<选项>]
以下命令别名可用:
update
以下参数可用:
-q,--query 用于搜索程序包的查询
下列选项可用:
-m,--manifest 程序包清单的路径
--id 按 id 筛选结果
--name 按名称筛选结果
--moniker 按名字对象筛选结果
-v,--version 使用指定的版本;默认为最新版本
-s,--source 使用指定的源查找程序包
-e,--exact 使用精确匹配查找程序包
-i,--interactive 请求交互式安装;可能需要用户输入
-h,--silent 请求无提示安装
--purge 删除包目录中的所有文件和目录(可移植)
-o,--log 日志位置(如果支持)
--override 覆盖待传递的参数至安装程序
-l,--location 要安装到的位置(如支持)
--scope (用户或计算机)选择已安装的包范围筛选器
-a,--architecture 选择要安装的体系结构
--locale 要使用的区域设置(BCP47 格式)
--ignore-security-hash 忽略安装程序哈希检查失败
--ignore-local-archive-malware-scan 忽略在从本地清单安装存档类型包时执行的恶意软件扫描
--accept-package-agreements 接受包的所有许可协议
--accept-source-agreements 在源操作期间接受所有源协议
--header 可选的 Windows-Package-Manager REST 源 HTTP 标头
-r,--recurse,--all 如果可用,将所有已安装的程序包更新为最新版本
-u,--unknown,--include-unknown 即使无法确定其当前版本,也可升级包
--force 直接运行命令并继续处理与安全无关的问题
-?,--help 显示选定命令的帮助信息
--wait 提示用户在退出前按任意键
--verbose,--verbose-logs 启用 WinGet 的详细日志记录
--disable-interactivity 禁用交互式提示
可在此找到更多帮助: "https://aka.ms/winget-command-upgrade"
4.2 实践:安装 PowerToys、坚果云
介绍
Microsoft PowerToys 是一组实用工具,可帮助高级用户调整和简化其 Windows 体验,从而提高工作 效率,由微软团队开发并开源。
有包括但不限于:Always on Top、颜色选取器、图像大小调整器、文本提取器等功能。
详细内容可见 Microsoft Learn - Microsoft PowerToys:用于自定义 Windows 的实用工具。
坚果云是国内领先的同步网盘,特点:
- 任意文件夹同步
- 畅享移动办公
- 智能增量同步
- 闪电下载
- 文件自动锁定
- 链接优质软件
- 企业知识管理
- 团队权限设置
详细内容见:坚果云
step1. 查找程序包
C:\Users\???>winget search PowerToys
名称 ID 版本 源
--------------------------------------------------------
Microsoft PowerToys XP89DCGQ3K6VLD Unknown msstore
PowerToys (Preview) Microsoft.PowerToys 0.70.0 winget
C:\Users\aihli>winget search 坚果云
名称 ID 版本 匹配 源
--------------------------------------------------------------------
Nutstore LightApp Nutstore.NutstoreLightApp 2.0.3 Tag: 坚果云 winget
可以看到,PowerToys 软件包的源有两个:Microsoft Store 和 winget。
如果在指定源查找程序包则使用 winget search xxx --source winget/msstore
命令。
step2. 安装
执行 winget install PowerToys --source winget
命令,从 winget 源安装。
如果要从微软商店安装,则运行 winget install PowerToys --source msstore
。
step3. 卸载
以坚果云(Nutstore)为例:
4.3 更新
运行 winget --list
命令,可以看到 Notepad++、Postman、Vim、Wireshark、腾讯QQ、坚果云
有可用的新版本。
这里以网易有道翻译为例,进行升级。
5 注意事项
5.1 下载速度慢
微软并未将软件存储在服务器上,只是在服务器上存储软件官网的下载地址,所以在下载某些软件时,
可能无法下载或者下载速度极慢,这些等属于正常现象,比如 PowerToys
是从 github 下载 。
因此给 winget
更换镜像源没有任何意义,并不会加速下载。
5.2 安装和卸载
目前 winget 安装和卸载仍然是调用软件本身的 setup.exe
和 uninstall.exe
。
5.3 官方存储库
地址:winget-pkgs
微软团队强烈建议用户为喜欢的应用程序提交清单:
You are highly encouraged to submit manifests for your favorite application.
– Microsoft
5.4 安装/升级脚本
从文章《一日一技 | 无需「XX 管家」,用 Windows 自带工具搞定应用安装与升级》看到 winget 的 一个小应用,觉得很有意思:
@echo off
rem Get the app name from the user.
set /p appname=输入你想安装或升级的应用名称:
rem Check if the app is installed.
rem If it is, upgrade it.
rem If it is not, install it.
rem If there are multiple app packages from different sources, set the winget source to only "winget".
rem This will ensure that the app is installed from the official Microsoft repository.
if exist "%appname%" (
winget upgrade "%appname%"
) else (
winget install "%appname%" --source winget
)
rem Display a success message.
echo %appname% 已成功安装/升级。
rem Keep the command line window open and let the user to exit with any key.
pause
顺手将这个记事本文件另存为「你喜欢的名字.bat」。注意,如果像上方实例一样在 set /p appname= 这里用了中文,保存时记得将编码设置为 ANSI 避免乱码。
接下来你只需要把这个文件留在朋友或长辈的电脑上,想尽办法让他们不要删,并且让他们需要的时候双击 运行一下即可。
无论是新应用安装还是已安装应用升级,这个小文件均能搞定,用起来也颇有当年某些 Ghost 操作系统 安装后清理小脚本的味道,如果你爸和我爸一个年纪,应该也会喜欢且信任这种脚本:
– 克莱德
参考
- Microsoft Learn - Windows 程序包管理器
- PowerTyos 源代码
- winget-cli 源代码
- 如何看待微软推出 Windows 官方包管理器 winget? - 老板软件的回答 - 知乎
- Windows 也有包管理工具?
留言或评论请使用 Github Issues。