windows 包管理 winget 初体验

Posted on May 29, 2023
tl;dr: 试用微软开源的包管理工具 winget 和工具集 PowerToys。

1 前言

以前使用过 windows 平台的包管理 scoopchocolatey,但是使用体验并不好,最终还是回归到「官网下载」-> 「安装」 的流程。

今天了解到了微软自家的包管理工具 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 的实用工具

坚果云是国内领先的同步网盘,特点:

  1. 任意文件夹同步
  2. 畅享移动办公
  3. 智能增量同步
  4. 闪电下载
  5. 文件自动锁定
  6. 链接优质软件
  7. 企业知识管理
  8. 团队权限设置

详细内容见:坚果云

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.exeuninstall.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 操作系统 安装后清理小脚本的味道,如果你爸和我爸一个年纪,应该也会喜欢且信任这种脚本:

克莱德

参考


留言或评论请使用 Github Issues