写在前面 (最好选择WinGet,它是微软自己搞的东西。)
如果你也身处 Windows 系统的生态环境之中,或许你身边也有小伙伴正在遭受这样的烦恼:他们永远搞不懂自己辛辛苦苦在搜索引擎找到并下载安装的软件到底在哪里?他们也不清楚为什么电脑中总会出现形形色色、不明不白的垃圾软件和弹窗?即便电脑已经越来越臃肿,他们也不敢碰除个人文件外的任何东西,生怕系统崩坏、数据丢失;他们没有文件管理习惯,快捷方式是他们认为软件是否安装的唯一标志,甚至认为删除即卸载;他们深知自己电脑的内部文件体系已是一团乱糟糟,所以桌面总是满满当当、密不透风。
搜索、下载、安装,这是几乎任何一个软件在「食用」之前要做的准备工作。每一步都有坑:百度搜索里的「海底捞」,点击下载那一刻的战战兢兢,等待安装时的擦亮双眼、诚惶诚恐。如果算上在使用过程中的升级和使用完之后的卸载,那麻烦就更多了。
上述或许并不夸张,正是你我之前曾经有过或正在经历的困惑。
如果这样,那么本文正是为你量身打造、包管理器也非你莫属。
「包管理器」一行命令,帮你打通软件从搜索、下载、安装到配置、升级、卸载的全流程。
什么是包管理器
包管理器又称软件包管理系统,它是在电脑中自动安装、配置、卸载和升级软件包的工具组合,在各种系统软件和应用软件的安装管理中均有广泛应用。
——引自
包管理器又称软件包管理系统,它是在电脑中自动安装、配置、卸载和升级软件包的工具组合,在各种系统软件和应用软件的安装管理中均有广泛应用。
——引自
如果你用过 ,那么对 pip 一定不陌生,Python 对所有第三方库的查找、下载、安装、卸载等都可以通过 pip 来完成的。需要哪个库,pip install帮你安装;不需要了,pip uninstall一键就能卸载。简单省事、方便快捷。不少编程语言均有各自对应的包管理器,比如 Nodejs 的 npm 等。
其实在操作系统上,包管理器应用就更广泛了,尤其是 Linux 系统和 macOS 系统已经相当成熟了。比如 Ubuntu 的 apt、CentOS 的 yum、 macOS 系统下的 Homebrew 等。Windows 平台的包管理器虽然仍受诟病,但目前来看已经能够完成绝大多数的工作了。
Windows 系统上常见的包管理器主要有 Chocolatey、winget和 Scoop。
为什么要用包管理器
- 降低安装维护软件的成本
- 避免安装大量软件造成的路径污染
- 不必查找和安装软件的其他依赖项
- 避免捆绑和垃圾软件
- 彻底地卸载
仅第一条理由就足以让我拥抱它~~
王牌劲旅:Chocolatey.安装前提
在安装之前,必须要保证自己电脑满足以下标准:
- Windows 7+ / Windows Server 2003+
- PowerShell v2+
- .NET Framework 4+
如何查看 PowerShell 版本号?以下两种方式都可以实现。
- 在 PowerShell 里运行$PSVersionTable.PSVersion,Major 就是版本号。
- 在 PowerShell 里运行host,Version 显示的就是详细的版本号信息(更简单)。
首先安装powershell:
下载https://github.com/PowerShell/PowerShell/releases/download/v7.2.4/PowerShell-7.2.4-win-x64.msi 并安装它。
然后,用管理员身份打开PowerShell,运行:
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
(以上这段是一条完整的命令,请复制粘贴到PowerShell里面运行)
安装完成后,输入choco -?,如果显示帮助文档,则说明安装成功。

基本使用
Chocolatey 默认安装在C:\ProgramData\chocolatey(或者通过在 PowerShell 来输入:$env:ChocolateyInstall查看)。使用 Chocolatey 安装软件包的默认本地位置为C:\ProgramData\chocolatey\bin。
以下6条命令是基本涵盖了 Chocolatey 绝大多数功能,其他进阶玩法,可以详读 官方文档,或者choco -? 获取详细帮助信息。
- 帮助:choco -?
- 搜索:choco search
- 安装:choco install
- 卸载:choco uninstall
- 升级:choco upgrade
- 显示详细信息:choco info
下面的 GI F以Pandoc为例演示了Chocolatey 从软件的搜索、显示详情信息、下载安装到卸载的全流程。看完之后你一定更加会惊叹包管理器的简便和易用了。
以 Pandoc 为例演示 Chocolatey 的使用软件列表备份
想想看,系统重装或迁移之后的软件安装、配置工作,有多麻烦。
choco list -l > chocolatey.txt 可以助你把 Chocolatey 安装的软件导出(导出符 >后面指的是导出路径,可自行更改,这里表示导出到当前目录的 chocolatey.txt 文件中)。
拿到导出的软件清单,你就可以在新机上 choco install -y 软件1 软件2。把电脑放一边运行着,该干啥干啥,两不耽误,方便快捷,好不惬意!
ChocolateyGUI:「APP Store」的极佳选择
当然并非所有用户都适合命令行界面(CLI:Command-Line Interface),如果你之前从未接触过命令行或者实在用不惯,Chocolatey 还提供了 (GUI:Graphical User Interface)版本。
通过choco install chocolateygui一键安装。安装完成之后,直接chocolateygui即可进入软件界面。详细说明可参照 。

- 「用户 PC」页面显示了本机使用 Chocolatey 安装的软件列表

- 「chocolatey」页面显示了整个 Chocolatey 拥有的软件合集

ChocolateyGUI 的感觉莫名地熟悉。咦,这不就是个 APP Store 吗?不过这个 APP Store 可良心多了,没有「贴心」推荐、没有垃圾捆绑,而且软件数量惊人(截止 2021 年 4 月初,ChocolateyGUI 提供的软件包多达有 8000+ 之众!当然代价就是有点卡 ,搜索比 CLI 版本慢一些)
总体来说,ChocolateyGUI 完成度很高,软件的搜索、下载、升级、卸载等主要功能一步也没缺,十分适合不习惯命令行窗口的用户,不过完全可以作为 APP Store 来使用( 虽然界面确实不好看)。official website: https://docs.chocolatey.org/en-us/
( Chocolatey,软件包管理系统
在 Linux 下,大家喜欢用 apt-get(mac下用brew) 来安装应用程序,如今在windows 下,大家可以使用 Chocolatey 来快速下载搭建一个开发环境。Chocolatey的哲学就是完全用命令行来安装应用程序, 它更像一个包管理工具(背后使用 Nuget )
另外需要说明的是, Chocolatey 只是把官方下载路径封装到了 Chocolatey 中,所以下载源都是其官方路径,所以下载的一定是合法的,但是如果原
软件是需要 Licence 注册的话,那么 Chocolatey 下载安装好的软件还是需要你去购买注册。不过 Chocolatey 一般还是会选用免费 Licence 可用的软件。
安装chocolatey , 运行如下命令即可:
@powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin
安装
软件命令 choco install softwareName, 短写是 cinst softwareName
可安装的应用程序,可以参见其 Package列表
以下是window下开发常用的开发环境应用:
choco install autohotkey.portable #安装 AutoHotkey (Portable)
choco install nodejs.install #安装 node
choco install git.install #安装 git
choco install ruby #安装 ruby
choco install python #安装 python
choco install jdk8 #安装 JDK8
choco install googlechrome #安装 Chrome
choco install google-chrome-x64 #Google Chrome (64-bit only)
choco install firefox #安装 firefox
choco install notepadplusplus.install #安装 notepad++
choco install Atom #安装 Atom
choco install SublimeText3 #安装 SublimeText3
https://git-for-windows.github.io/ )
后起之秀:WinGet
WinGet(Windows 程序包管理器:Windows Package Manager)是微软为 win10 开发的一款开源的软件包管理器,于 2020年5月的 Microsoft Build 开发者大会上 首宣。
前提:Windows 101709 及以上版本
当前 WinGet 支持的安装程序类型尚不多,除了EXE、MSIX、MSI三种之外,还能够在自定义配置后下载部分微软应用商店的程序。
下载、安装和验证
你可以在 下载.appxbundle格式的文件,双击打开并运行(官方 和 里有 WinGet 更详细配置信息)。

如果出现「此电脑不支持打开该类型文件」的提示,则可在Win + I 进入设置 -> 更新和安全 -> 开发者选项 -> 打开开发人员模式。
输入winget可以查看简略帮助文档;输入winget -v查看版本信息

基本使用
- 显示简略帮助文档:winget -?(-?可选);查看特定命令的详细帮助文档:winget [] -?,如winget install -?
- 显示软件详细信息:winget show
- 搜索软件:winget search
- 安装软件:winget install
是的,如你所见,WinGet 并没有自动开启卸载、升级等功能,这也是其在发布之后很长时间不温不火的重要原因。
但是不要着急,截止到2021/03/25发布的最新预览版v0.2.10771,WinGet 实验性功能(需要用户自启)的数量已经增加到了八个,其中就包括uninstall、upgrade、list等重要功能,以及支持安装 Microsoft Store 上的应用程序!

如果想要开启实验功能,可以在终端输入winget settiings,打开 WinGet 配置文件settings.json增加以下内容(其他自定义配置可参照 winget-cli settings 的官方具体说明):
"experimentalFeatures": { "uninstall": true, "upgrade": true, "list": true, "experimentalMSStore": true },
如果想要更改 winget 显示的进度条视觉效果,可以在setting.json里增加:
"visual": { "progressBar": "accent" }, # 三种样式可选:accent(默认值)、 retro、 rainbow

- winget list > winget.txt 同样支持一键导出软件列表,方便备份和换机重装。
实验功能开启"experimentalMSStore": true之后,winget 可以下载 MStore 的软件了(不过目前支持的并不多)。
winget source list查看软件源列表,发现除了winget源之外,MSStore 源已经添加上了。部分商店内软件可以正常下载安装了。

卸载其他源安装的软件
winget 可以卸载winget list 显示出的所有软件。包括电脑上的大多数软件,如Windows系统自带的、手动安装的、Chocolatey 安装的部分等。唯一不足的是,卸载时会被弹出的卸载窗口打断,降低了自动化的一致性。
winget卸载弹窗

winget可以卸载多种类型的软件. 程序高度灵活,可定制.
official website: https://docs.microsoft.com/zh-cn/windows/package-manager
Scoop 功能更全面、可配置性更高,但由于国内下载速度较慢,所以放在了最后介绍。
下载安装
前提:
- Windows 7 SP1+ / Windows Server 2008
- PowerShell 5+(include and up)
运行PowerShell(不要用管理员身份)
输入以下两条命令,待安装完成之后,输入scoop显示帮助文档即说明安装成功。
Set-ExecutionPolicy RemoteSigned -scope CurrentUser
irm get.scoop.sh | iex
(参见 https://scoop.sh)
以上第2条命令,最好改为:
irm get.scoop.sh -Proxy 'http://127.0.0.1:7080' | iex
(这里, http://127.0.0.1:7080为某个本地的http proxy的地址。因为irm要访问github.com,所以要给irm设置代理,通常是http proxy. 详见https://github.com/scoopinstaller/install)
运行scoop -h或 scoop --help或scoop help查看使用帮助。
注:Scoop 支持利用aria2进行多线程下载。所以可先scoop install aria2下载 aria2,之后所有的下载任务就均可以调用 aria2 多线程下载来提高速度了。
更换下载位置
Scoop 默认安装位置C:\User\Your Username\scoop,如果想要更改安装位置,比如D:\Scoop,可以在安装之前,先运行:
$env:SCOOP='D:\Scoop' [Environment]::SetEnvironmentVariable('SCOOP', $env:SCOOP, 'User')

Scoop 会自动将.\Scoop\shims文件添加到系统环境变量,免去 Windows 用户自行添加的麻烦;同时在.\Scoop\apps存放所有已安装的软件,便于统一管理。
基本使用
刚认识 Scoop就能看出,Scoop 支持的命令更多、可玩性更强~~

除此之外,与 Chocolatey 和 winget 类似,scoop export > scoop.txt也可导出软件列表,便于备份与换机。
添加其他 bucket 软件库
语法:scoop bucket add [软件源名字] [源地址]
语法:scoop bucket add [软件源名字] [源地址]
bucket 指的是软件仓库,也是Scoop的「内核」了。未进行配置的Scoop默认只会安装main一个bucket,由于官方的严格限制,main里的软件列表不足以涵盖了用户对大多数软件的需求,所以「搜索失败」时常发生,因此自行安装其他 bucket就成了使用 Scoop 的必备。
bucket 分为官方维护和社区维护两种。
官方 bucket 软件仓库主要有以下几个(可通过scoop bucket known查看):

其中最重要、也最推荐的 bucket 是extras(包含了大量的GUI程序)。配合main可满足多数的下载需求了。
# 官方提供 scoop bucket add extras scoop bucket add java
除了官方 bucket 之外,GitHub 上有众多网友维护的 社区 bucket

# 社区提供 scoop bucket add echo https://github.com/echoiron/echo-scoop scoop bucket add dorado https://github.com/chawyehsu/dorado scoop bucket add dodorz https://github.com/dodorz/scoop
一般来说,可谷歌搜索「软件名+Scoop」就可以找到我们想要安装的软件有没有被某个bucket 软件仓库收录。添加上面推荐的三个社区bucket,配合官方的main和extras,应付日常使用已经可以游刃有余了。
换源:提高下载速度
要改善 Scoop 的下载速度,详细可以参照 Scoop | Gitee 版 的说明更换下载源。换源之后的Scoop,速度提升不是一星半点儿。
- 更换 Scoop 源
- 更换 bucket 源
无需访问搜索引擎苦苦寻觅,无需次次配置系统环境变量,无需点击图形界面、一不小心安装个「全家桶」,一行命令、几个单词,就能满足大多数人对日常软件的所有需求。
那到底哪个包管理器更好呢?
软件源丰富、又能做到配置简单的 Chocolatey,支持安装MSStore程序、而又拥有强大卸载功能的winget,用户自定义配置选项灵活多样的Scoop,只能说各有各的优点,配合使用或许效果最佳。from https://www.sohu.com/a/460002651_115785
--------------
软件包管理工具选Scoop还是Chocolatey?看完这篇就知道了
本文主要比较两款工具的差别,以便于评估哪种方式最适合你。如果你刚刚接触软件包管理工具,那么推荐阅读相关的指导文章,以了解这些工具在实践中的运行方式。
需要注意的是,Scoop和Chocolatey都允许用户使用单个命令,从命令行安装Windows程序。在整个安装过程中用户无需手动访问下载站点或者点击图形安装程序。此外这些软件包管理工具还简化了检查和下载更新步骤,因此你可以确保所使用的应用程序始终处于最新状态。

从外观上来看Scoop和Chocolatey的界面比较相似。不过通过深入发掘你就会发现几个比较小但很重要的差异。其中最重要的差别在于两款工具是针对的不同的用户群。
Chocolatey的自我定位是Windows系统的“软件管理自动化”。它能够在无需人工干预的情况下自动安装超过20种Windows软件包类型,而且开箱即用,支持配置超过7000款主流软件,包括Google Chrome和VLC多媒体播放器等桌面热门应用程序。
Scoop同样可以通过单命令安装Windows软件,不过它的适用目标相对来说更狭窄,也更有针对性。这款软件包管理工具更多的时候是帮助开发者安装系统工具时使用,尤其是那些依赖于Linux但在Windows系统上不存在的软件程序。
根据该软件作者的描述,Scoop的定位主要是“开源、命令行的开发者工具”。Scoop同样能够安装诸如Chrome和VLC这样的常规Windows程序,但在做这些事情之前用户需要额外手动添加附加库。
对于那些只需要一个软件包管理工具的普通用户来说,Chocolatey应该是最佳的选择。用户不需要进行任何额外配置,就能安装数百款热门应用程序。此外如果用户并不希望使用终端,甚至还能获得GUI图形界面。
不过Chocolatey的普遍适用性也带来了额外的复杂性。Chocolatey依赖于Windows PowerShell及其NuGet包管理器系统,该系统主要用于解决软件库依赖关系。Chocolatey也往往需要管理员权限才能运行使用,这就意味着你将会被UAC弹出窗口打断。
相比之下,Scoop并不使用NuGet而且不会进行全局安装。相反,这些应用程序的范围会被限定在你的用户账户中,并安装到特殊目录以避免路径污染。 Scoop甚至将自己与被视为包管理器的距离保持距离,因为它只是“读取描述如何安装程序及其依赖关系的清单”。
哪个更适合你?
两款软件包安装程序都有各自的优缺点,所以需要根据自己的需求进行选择。如果您想快速简单地安装熟悉的Windows程序,那么Chocolatey可能适合您。其广泛的社区驱动的软件包存储库意味着您无需额外配置的情况下,就可以找到几乎所有流行的Windows程序。
但是,如果要将程序范围限定为用户帐户,没有管理员权限或主要寻找开发人员工具,Scoop应该是您的首选。它在技术上更简单,对系统的目录结构影响较小,而且比Chocolatey更轻量级。通过添加scoop-extras存储库可以轻松添加对流行的Windows桌面程序的支持。
当然,Chocolatey和Scoop都有许多额外的功能,优点和缺点,我们在这里没有讨论过。特别是,Chocolatey拥有许多针对企业的专业能力,使其更适合企业和系统管理员。同时,Scoop简化的“包”模型意味着应用程序开发人员添加支持相当简单 - Git存储库中的单个文件将通过Scoop实现安装。
--------------------
Windows 也有包管理工具?
之前只有 MacOS 和 Linux 官方才有软件包管理工具,其实微软官方也为 Windows 系统发布了一款名为 Winget 的软件包管理工具。
虽然在 Windows 平台已经有 scoop 和 chocolately 这样的包管理工具,但毕竟 WinGet 是微软亲儿子,而且在不断更新中。
现在 Winget 还处于开发预览阶段,项目托管在 GitHub 上。同时,微软还在 GitHub 上维护着 winget-pkgs 仓库。
winget-pkgs 和 WinGet 的关系是:WinGet 需要使用软件源 Manifest 来管理和安装软件,通过读取对应的 Manifest 清单来寻找软件,然后才能下载和安装软件,而 winget-pkgs 就是维护 Manifest 清单的 Repo。
比如我想安装 Postman, WinGet 就会做如下事情:
- 找到当前源(软件仓库)中的 Manifest 清单文件
- 按照 Manifest 规定完成准备工作
- 按照 Manifest 规定执行安装步骤
- 按照 Manifest 设定完成善后工作

举个例子:你打算安个 360 安全卫士
winget install 360安全卫士
正在添加依赖:360浏览器 正在添加依赖:360杀毒
1. WinGet 安装方法:
法1:提交 WinGet 的预览体验申请,Win10 商店下载
法2:申请加入 Windows Insider,Win10 商店下载
法3:GitHub下载安装包直接安装
推荐法3,简单直接, 在 GitHub 搜索 WinGet,microsoft/winget-cli 就是该项目。在 releases 页面下载名为 Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.appxbundle 的软件安装包。

下载后双击即可安装成功。
2. 使用 WinGet
安装 应用安装程序 后,可以通过在命令提示符下键入 “winget” 来运行 WinGet 。最常见的使用场景之一是搜索并安装你最喜欢的工具。若要搜索某个工具,请键入 winget search \<appname>
确认你需要的工具可用后,可以通过键入 winget install \<appname> 来安装该工具。 WinGet 工具会启动安装程序,将应用程序安装在你的电脑上。
比如搜索并安装我们前一阵介绍的 PowerToys:

除了安装和搜索外, WinGet 还提供了许多其他命令,用来 显示应用程序详细信息, 更改源以及 验证程序包。若要获取完整的命令列表,请键入 winget --help

命令
WinGet 工具的当前预览版支持以下命令。

选项
WinGet 工具的当前预览版支持以下选项。

彩(虹)蛋
安装命令后加 --rainbow,可以看到彩虹进度条,是不是很骚 。

当然你可以通过winget settings将彩虹进度条设置为默认,就不用打--rainbow了

支持的安装程序格式
winget 工具的当前预览版支持以下类型的安装程序
- EXE
- MSIX
- MSI
编写 winget 脚本
可以编写批处理脚本和 powershell 脚本来安装多个应用程序。
可能以后装机用得上:
@echo off
Echo Install Powertoys and Terminal
REM Powertoys
winget install Microsoft.Powertoys
if %ERRORLEVEL% EQU 0 Echo Powertoys installed successfully.
REM Terminal
winget install Microsoft.WindowsTerminal
if %ERRORLEVEL% EQU 0 Echo Terminal installed successfully. %ERRORLEVEL%
注:使用脚本时, WinGet 会按指定顺序启动应用程序。当安装程序返回成功或失败时, WinGet 会启动下一个安装程序。如果某个安装程序启动了另一进程,它可能会提前返回到 WinGet 。这会导致 WinGet 在上一个安装程序完成之前安装下一个安装程序。
如果没有你想要的软件
如果官方源未包含你的工具或应用程序, 你可以将程序包提交到官方的存储库。添加你最喜爱的工具后,你和其他人都可以使用它。
官方存储库,也就是官方源的地址:https://github.com/microsoft/winget-pkgs
官方源(存储库)长这样(更新频繁):

官方欢迎你提交自己编写的 manifest,以解压软件7Zip为例,manifest长这样:它包含了下载地址,Sha256校验码等关键信息:
Id: 7zip.7zip
Name: 7Zip
AppMoniker: 7zip
Version: 19.0.0
Publisher: 7zip
Author: 7zip
License: Copyright (C) 1999-2020 Igor Pavlov. - GNU LGPL
LicenseUrl: https://7-zip.org/license.txt
MinOSVersion: 10.0.0.0
Homepage: https://www.7-zip.org/
Description: Free and open source file archiver with a high compression ratio.
Tags: "7zip,compression,file compression,utility,tool,zip"
InstallerType: msi
Installers:
- Arch: x64
Url: https://www.7-zip.org/a/7z1900-x64.msi
Sha256: A7803233EEDB6A4B59B3024CCF9292A6FFFB94507DC998AA67C5B745D197A5DC
Switches:
Silent: /quiet /norestart
SilentWithProgress: /passive /norestart
3. 实验功能体验
输入:winget features,会给出所有 WinGet 上的实验功能,显示如下:

默认状态下,实验性功能是禁用状态,WinGet 提示我们打开 settings(输入 WinGet settings 即可), 类似于 vscode,WinGet 的设置也通过 json 来进行配置
默认的设置项是空的:

其中,对于自动补全功能,需要额外对 Powershell 进行如下配置:
配置过程如下:
首先给Powershell创建一个$profile
$profile主要用于个性化常用的函数、别名等等。每次加载powershell的时候,都会执行profile中的内容。
查看是否有profile:
$profile如果结果是false说明没有。则创建一个。
New-Item –Path $Profile –Type File –Force
Register-ArgumentCompleter -Native -CommandName winget -ScriptBlock {
param($wordToComplete, $commandAst, $cursorPosition)
[Console]::InputEncoding = [Console]::OutputEncoding = $OutputEncoding = [System.Text.Utf8Encoding]::new()
$Local:word = $wordToComplete.Replace('"', '""')
$Local:ast = $commandAst.ToString().Replace('"', '""')
winget complete --word="$Local:word" --commandline "$Local:ast" --position $cursorPosition | ForEach-Object {
[System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
}
}
对Powershell的配置就完成了
目前支持的自动补全如下(⇥ 代表tab键):
之后我们可以检验自动补全的效果

其它功能就不需要额外配置 powershell 了,只需要在 settings 设置完成即可:
比如我想开启list功能,自动补全功能,进行如下的设置:

我们配置完 settings 文件后,再输入 winget features 来查看实验性功能的开启情况:

你可能注意到,甚至 list 命令和 upgrade 命令都是实验性功能,可见其不够完善。
目前比较操蛋的是 WinGet 竟然还没有卸载功能,老逛测试时该项目已经发布半年多了。

后来老逛发现了它的官方路线图,原来到 2021 年 5 月份,我们才能得到一个基本可用的 1.0 版本。
4. Scoop和Chocolately
上文提到,之前在 Windows 平台上,已经有了两个不错的包管理工具:Chocolatey 以及 Scoop,Chocolatey 的自我定位是 Windows 系统的软件管理自动化。它能够在无需人工干预的情况下自动安装超过 20 种 Windows 软件包类型,而且开箱即用,支持配置超过 7000 款主流软件,包括 Google Chrome 和 VLC 多媒体播放器等桌面热门应用程序。

Scoop 同样可以通过单命令安装 Windows 软件,不过它的适用目标相对来说更狭窄,也更有针对性。这款软件包管理工具更多的时候是帮助开发者安装系统工具时使用,尤其是那些依赖于 Linux 但在 Windows 系统上不存在的软件程序。

两款软件包安装程序都有各自的优缺点,所以需要根据自己的需求进行选择。如果想快速简单地安装熟悉的 Windows 程序,那么 Chocolatey 可能适合你。
其广泛的社区驱动的软件包存储库意味着无需额外配置的情况下,你就可以找到几乎所有流行的 Windows 程序。
这两个成熟的工具都比 WinGet 要完善,在现阶段,如果你想在 Windows 上体验包管理工具,老逛建议还是 scoop+chocolately 吧。
因为今天这篇文章是介绍 WinGet,推荐两篇文章介绍这两个工具,我就不多赘述了。
Scoop: https://sspai.com/post/52496
Chocolately: https://sspai.com/post/55309
5. 总结
WinGet 于 5 月 29 在微软的 Build 2020 上发布,历时大半年 ,老逛在 2020 年末体验了一遍 WinGet,甚至没有卸载功能。
目前功能还非常有限,毕竟还处于预览体验阶段,但是因为它有官方 buff 的加持,我还是希望它越来越好,甚至希望有天它能像 Linux子系统(WSL)一样集成到官方系统中,给 Windows 平台的用户带来稳定易用的体验。
我觉得我们还是要宽容吧,准官方的 Windows 包管理工具在不断进化中,如果你喜欢开源项目,并且希望推动 WinGet 的发展,可以使用 WinGet 并在官方 Github 提出issue,开源社区万岁!
比如,刚提到的 list (列出已安装软件)及 upgrade (升级软件)的功能,也是开发人员回复并落实了用户提出的 issue。


参考链接
[1] https://sspai.com/post/60592 作者:SpencerWoo
[2] https://sspai.com/post/60597 作者:stevapple
[3] https://docs.microsoft.com/zh-cn/windows/package-manager/
[4] https://github.com/microsoft/wi
from https://zhuanlan.zhihu.com/p/343053500
------
这或许是 Windows 上最好的包管理工具:Windows Package Manager 1.0
如果用过 macOS 或者 Linux 的朋友,或多或少都听说过包管理工具。通过包管理工具,你可以直接在终端中快速自动地安装、配置、卸载和升级软件,而无需通过 GUI 页面一步步手动安装下载软件。这非常适合一次性安装非常多软件,大大地节约了软件安装所需要的时间和步骤,同时也在一定程度上确保了来源软件的安全性。
然而在 Windows 上一直以来都鲜少出现类似的工具,社区中不乏有 Chocolatey 以及 Scoop 这样的第三方工具,但这两款工具都过分依赖社区支持,软件包数量上也都非常有限。直到去年 Build 2020 期间,微软自己亲自下场宣布推出 Windows 包管理工具 winget,而在今年的 Build 2021 上这款工具终于迈入 1.0 版本。
随着首个正式版本的发布,我们也终于可以对其功能进行全面地测试,至少在我看来,现在的 winget 才真的能称得上「Windows 的包管理工具」。
如何安装 Windows Package Manager (winget)
和之前测试版一样,winget 支持 Windows 1809 及以上版本的 Windows 10,你可以通过下列两种方式安装:
通过 Microsoft Store
相比以前测试版繁琐的注册操作,正式版的 winget 我们可以直接通过 Microsoft Store 进行安装,搜索找到「应用安装程序」点击安装即可。这不只是最为简单的办法,也是最方便的方法,winget 可以随着 Microsoft Store 自动更新到最新版本。

通过 GitHub Release 手动安装
如果你不方便通过 Microsoft Store 进行下载,也可以在 winget-cli 的官方 Github 仓库中直接 在 Release 页面手 动下载 winget 的安装程序进行手动安装。这里需要选择下载后缀为 .appxbundle的软件并双击安装。

不过这种安装方式可能会因为 Windows 10 的安全限制导致无法安装。如果你也遇到了这个问题,则需要在系统设置中找到「更新和安全」-「开发者选项」,打开其中的「开发人员模式」来允许在任意源安装应用。

接下来我们一起看看 winget 1.0 如何使用吧!
使用 Winget
之后我们打开 Powershell 或者 CMD(也可以直接使用 Windows Terminal),在终端窗口中直接输入 winget --info 后如果可以看到对应版本信息就表示 winget 已经安装到系统中了。要说到 1.0 最大的变化,可能就是原先的「实验性功能」几乎全部转正,也就是说你可以完全通过 winget 安装、更新、卸载软件了(此前测试版本不能卸载指定的软件)。下面我们就详细介绍下 1.0 的所有功能吧!

使用 winget 安装指定的软件
这个用法和其他平台的包管理工具基本相同,语法上就是:
winget install [软件名]
比如我想安装微软的 openjdk,那么输入的命令就是
winget install microsoft.openjdk.11
这时候 winget 会解析并下载软件包、验证安装包哈希,最后调用软件包的安装器。因为下载的软件包基本上都是 .exe 后缀,加上大多需要通过 UAC 提权,因此安装软件过程中大概率会弹出调用 GUI 安装交互界面,其实并不能实现真正意义上的完全静默安装。

列出已经安装在系统中的软件
想要卸载或者更新软件,那么首先就要知道在当前系统下安装了到底多少的软件,这里使用的是 list。
winget list
这里 winget 会将你安装的 win32 软件以及通过 Microsoft Store 安装的软件记录下来,并且将软件的 ID 和软件源里面的软件列表进行对应。最终会将安装的 win32 软件以及 UWP 软件的软件名和软件 ID以列表的形式列出,方便你指定一款软件进行进一步的操作。

显示某一款软件的具体信息
这条命令可以检查当前已经安装的某一款软件的软件信息或者是列在源里面但尚未下载安装的软件信息,主要的参数是 show:
winget show [软件名]

处理软件源地址
和很多系统下的包管理系统类似,winget 同样可以对软件源进行管理,你可以通过 source 来对当前 winget 的软件源进行操作:

这个命令下面还有子命令,比如你可以添加、删除、查看以及更新软件源列表,目前尚未针对国内环境推出相对应的软件源镜像,所以目前在使用 winget 安装下载软件时会遇到比较严重的网络问题。
在源里搜索软件
和其他包管理器一样,我们可以使用近乎相同的方法在源里搜索软件包,甚至命令也完全一样:
winget search [软件名]
无需添加其他的通配符就会直接列出和该关键词匹配的软件,并且给出源地址、软件 ID 版本信息等等。而在 winget 中可以快速定位需要安装的软件 ID 并进行下一步的安装操作,不过 search 命令目前看来还不够完善,比如目前并不能在搜索结果中给出软件是否已经完成安装。

使用 winget 卸载指定的软件
最初的 winget 只能安装但不能卸载,卸载软件还是需要通过控制面板的「程序和功能」来实现,而后卸载功能被放在实验性功能里面,而随着 1.0 正式发布而终于转正。
用法上和其他平台包管理工具语法基本类似:
winget uninstall [软件名]
虽然整个命令中需要指定已经安装的软件名称或者软件 ID,但实际上该命令在运行的同时已经先运行了 winget list 来罗列安装列表。测试下来感觉这条参数命令依旧不够成熟,主要集中在两个方面:一方面是卸载基于 Electron 打包的软件时会出现命令调用失败;另一方面是软件名中有空格会找不到指定软件。

不过相比去年的测试版本,现在 winget 已经可以卸载处理 win32 以及从 Microsoft store 下载安装的软件,甚至还可以用来卸载通过 Microsoft edge 安装的 PWA 应用。

更新你的软件
和其他的包管理器类似,winget 也可以支持对当前的安装的软件进行更新升级,虽然从命令的说明来看需要指定某一款软件在进行升级,不过最好的方式就是不加参数,先让 winget 将当前安装的列表和软件源进行比对:
winget upgrade

其实这里一样先运行了winget list,然后列出了所有可以更新的软件列表,之后的命令形式类似安装软件的命令:
winget upgrade [软件名]
当然这里遇到的问题主要是无法更新或者是更新后再刷新时依旧显示旧版本。根本问题还是 win32 软件的打包方式并无统一标准,加上很多软件安装目录也不统一(有的安装到用户目录,有的安装到 Program Files),导致 winget 的对安装目录判断有误,最后引起了。
实验性的功能以及打开 winget 设置
随着 winget 进入到 1.0 正式版,原先那些被暂时放在实验功能的命令参数纷纷「毕业」成为正式功能,因此现阶段你会发现只有一个功能还处于实验功能中:
winget features

也就是 Microsoft Store 支持,而这里就需要通过设置功能来开启,只不过目前设置功能也没有 GUI 界面,基本上就是直接打开 winget 的设置 json 文件。
winget settings
这里根据需要手动进行添加相关的代码块来开启部分功能,微软也在项目的 GitHub 页面中列出了可以修改或者增添的代码配置段说明,只需要根据说明将想要的代码块添加到 json 中,然后重启终端即可生效。

总结
总的来说,在经过近一年多的开发之后,winget 发布的首个正式版本可以说是「基本合格」,首先在命令上 winget 借鉴了多个平台的主流包管理系统,对于习惯在 Linux 或者 macOS 上通过包管理工具来管理软件的用户来说非常容易上手,并且可以很快组合出自己的管理命令组合。
当然,由于 Windows 平台各种历史遗留问题,winget 也存在着天生的限制,这主要集中在由于不同软件安装和卸载功能的实现方式不同,从而造成的各种软件安装/卸载中的调用问题。
不过透过现象看本质,我们依旧可以看出微软更希望将其打造成 Windows 10 上的 Homebrew——通过 winget 来弥补Microsoft Store 软件数量上的不足,从而打造出更适合现状的 Windows 应用商店,而现在我们已经看到了蓝图的第一部分。
from https://sspai.com/post/67005
------
Windows 程序包管理器--winget
Windows 程序包管理器是微软刚刚发布的程序包管理器解决方案,包含了一款命令行工具 winget。主要面向开发者和软件提供商,用来搜索、安装、升级、删除和配置特选应用程序集,也就是说以后普通用户只需要敲击几下命令就能安装软件了,省去了传统搜索、下载软件安装包的过程。
注意目前的 Windows 程序包管理器和 winget 工具均为公共预览版,仅支持 Windows 10。
1. 安装 winget
微软提供了多种方式安装 winget,第一种方式是在微软官网登记表格之后,在 Windows Store 自动安装。更简单的方式是在 GitHub 下载后直接安装。
微软官网
Github 链接
建议使用新的 Windows 终端程序 Windows Terminal 而不是命令提示符 cmd。
2. winget 功能
目前 winget 有下列命令:
- install 安装指定的应用程序
- show 显示关于应用的信息
- source 管理应用源
- search 查找并显示应用的基本信息
- hash 哈希安装程序的帮助程序
- validate 验证清单文件
- -v,–version 显示工具的版本
- –info 显示工具的常规信息
然后,就是测试啦。
3. 使用 winget 安装 Edge 开发者版本
这里通过测试 winget 安装 Edge 的开发者版本,就可以对比到与传统安装方式的区别。
- 搜索程序包 winget search edge
- 获得程序包 ID “Microsoft.EdgeDev”
- 安装 winget install Microsoft.EdgeDev
然后,就完成了 Edge 开发者版本的安装。是不是很简单呢,小伙伴们快去体验一下吧!
另外,开发者可以提交自己的软件包给 Windows 程序包管理器,用户就可以通过 winget 安装程序了。感觉未来桌面操作系统的操作方式会越来越接近呀。
附链接:
Windows 程序包管理器(预览)
使用 winget 工具安装和管理应用程序

No comments:
Post a Comment