对于开发者来说,一款好用的软件包管理工具可以大大提高安装、部署、管理软件的效率。在 Win 环境下,我们手动安装一款软件的流程是:

  • 寻找软件官方发布地址,或通过某软件管家

  • 下载我们设定版本的软件

  • 运行软件安装器来安装下载得到的软件

  • 并进行环境上的准备、安装后的善后工作等(配置 Path, 删除安装包等)

之前只有 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 工具的当前预览版支持以下命令。

命令

说明

hash

为安装程序生成 SHA256 哈希。

help

显示 winget 工具命令的帮助信息。

install

安装指定的应用程序。

search

搜索某个应用程序。

show

显示指定应用程序的详细信息。

source

添加、删除和更新 winget 工具访问的 Windows 程序包管理器存储库。

validate

验证要提交到 Windows 程序包管理器存储库的清单文件。

选项

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

选项

说明

-v、--version

此选项返回 winget 的当前版本。

--info

info 提供有关 winget 的所有详细信息,包括许可证和隐私声明的链接。

-?、--help

获取有关 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: x64Url: https://www.7-zip.org/a/7z1900-x64.msiSha256: A7803233EEDB6A4B59B3024CCF9292A6FFFB94507DC998AA67C5B745D197A5DCSwitches:Silent: /quiet /norestartSilentWithProgress: /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键):

winget ⇥

winget install

install is the first command below the root

winget sh⇥

winget show

show is the first command that starts with sh

winget source l⇥

winget source list

list is the first sub-command of source that starts with l

winget -⇥

winget --version

--version is the first argument defined for the root

winget install power⇥

winget install "Power Toys"

"Power Toys" is the first package whose Id, Name, or Moniker starts with power

winget install "Power Toys" --version ⇥

winget install "Power Toys" --version 0.19.2

0.19.2 is the highest version of Power Toys at the time of writing

之后我们可以检验自动补全的效果

其它功能就不需要额外配置 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/winget-cli

推荐阅读
0. 逛逛GitHub交流群限时加入
1. IntelliJ IDEA 从入门到上瘾!
2. 手机抓包!
3. 干掉马赛克!
4. GitHub 暗黑模式终于来了!

Windows 也有包管理工具?相关推荐

  1. Windows下的包管理工具scoop

    Windows下的包管理工具scoop 包管理工具? 顾名思义就是程序软件包的安装工具,可以管理操作系统上的软件,我们熟知的Ubuntu上的apt-get(在Ubuntu16以上可以直接用apt了), ...

  2. linuxpip安装python包_Windows+Linux安装Python包管理工具pip

    Windows+Linux安装Python包管理工具pip Windows安装Python包管理工具pip pip是一个Python包管理工具,主要是用于安装PyPI上的软件包,可以替代easy_in ...

  3. 【包管理工具】Windows下的软件包管理工具Chocolatey介绍、安装软件出现错误的解决方法

    文章目录 1. Chocolatey是什么? 2. 为什么要使用Chocolatey? 3. 如何下载Chocolatey? 4. 如何使用Chocolatey? 5. 示例一:使用Chocolate ...

  4. 工程实践:Windows包管理工具——VCPKG

    工程实践:Windows包管理工具--VCPKG 前言 Windows C++开发使用第三方库 使用第三方库存在的问题 vcpkg的优点 如何使用VCPKG 总结 前言 作为推荐大家使用vcpkg来进 ...

  5. windows server 2012 使用包管理工具choco安装程序

    下载.安装 管理员打开powershell,输入下面命令 Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePo ...

  6. 节省磁盘空间的新一代包管理工具PNPM

    在使用前端工具时,yarn.npm都是大家常用的包管理器,但是如果有多个项目使用了同一个依赖的时候,就会在硬盘里保存相应的副本,一旦这个多个项目变得数字很大,那么这个硬盘空间也是会逐渐吓人的. 所以今 ...

  7. python管理包管理工具pip和conda使用,及使用pip和conda创建虚拟环境

    python管理包管理工具pip使用,及使用pip创建虚拟环境 文章目录: 1 pip的使用 1.1 pip的基础使用 1.1.1 pip安装库包(pip install) 1.1.2 pip卸载库包 ...

  8. 前端包管理工具 yarn

    yarn 是一个  与 npm 类似的 前端包管理工具 安装 windows  要去官网下载 (一定要去官网下载 .mis 文件进行安装)   用npm 或者 cnpm  也能安装 但是这种安装 有缺 ...

  9. 外来Slackware包管理工具[转]

    http://blog.csdn.net/eroswang/archive/2007/08/11/1738766.aspx一.SWARET ---网络安装模式的实现! 1.简介: swaret可以进行 ...

最新文章

  1. 2016/05/03(接口 买票 临界资源同步锁)
  2. Python技巧之“is”对比“==”
  3. java之 代理设计模式
  4. K NEAREST NEIGHBOR 算法(knn)
  5. Angular之filter学习
  6. esxi 部署模板_vSphere使用模板部署虚拟机
  7. 电脑开机太慢?这5个方法瞬间提升你的电脑速度
  8. 通过爬虫爬取一些图片
  9. 台式机dp接口_了解笔记本电脑的各种视频接口
  10. 2020-10-19 Nvidia与vGPU
  11. ubuntu18.04修改mac地址
  12. 中国大学MOOC C语言程序设计(大连理工大学) 课后编程题 第五周题解(个人向仅供参考)
  13. 极路由X(C526A)刷Openwrt 18.06固件
  14. matlab整数规划--简单入门
  15. iOS-脚本打包出现的问题最后居然这么解决了
  16. mysql的reorg_DB2 runstats和reorg操作
  17. 传输接口的对比 USB、Thunderbolt、HDMI、DP、type-c
  18. 关于5G与4G的对比以及未来前瞻的个人见解
  19. 斯图金是如何发明电磁铁的?
  20. ubuntu16配置ElastiFusion--失败的尝试

热门文章

  1. thinkphp3.1.3 getshell_C# / VB.NET 在PPT中创建、编辑PPT SmartArt图形的方法详解_C#教程...
  2. OpenAL的Mingw编译
  3. [计算机图形学]反走样(前瞻预习/复习回顾)
  4. 服务——DNS正向反向域名解析服务
  5. 【Android Gradle 插件】PackagingOptions 配置 ③ ( merges 属性配置 | excludes 属性配置 )
  6. MySQL批量修改表名列名大小写
  7. 关于mac12系统使用php(安装篇)
  8. makehuman模型导入unity,绑定动作后,四肢的运动方向与原方向不一致
  9. oracle int c,c 数据库 char转int
  10. cesium编辑功能CesiumEdit.js