Windows 也有包管理工具?
对于开发者来说,一款好用的软件包管理工具可以大大提高安装、部署、管理软件的效率。在 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键):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
之后我们可以检验自动补全的效果
其它功能就不需要额外配置 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 也有包管理工具?相关推荐
- Windows下的包管理工具scoop
Windows下的包管理工具scoop 包管理工具? 顾名思义就是程序软件包的安装工具,可以管理操作系统上的软件,我们熟知的Ubuntu上的apt-get(在Ubuntu16以上可以直接用apt了), ...
- linuxpip安装python包_Windows+Linux安装Python包管理工具pip
Windows+Linux安装Python包管理工具pip Windows安装Python包管理工具pip pip是一个Python包管理工具,主要是用于安装PyPI上的软件包,可以替代easy_in ...
- 【包管理工具】Windows下的软件包管理工具Chocolatey介绍、安装软件出现错误的解决方法
文章目录 1. Chocolatey是什么? 2. 为什么要使用Chocolatey? 3. 如何下载Chocolatey? 4. 如何使用Chocolatey? 5. 示例一:使用Chocolate ...
- 工程实践:Windows包管理工具——VCPKG
工程实践:Windows包管理工具--VCPKG 前言 Windows C++开发使用第三方库 使用第三方库存在的问题 vcpkg的优点 如何使用VCPKG 总结 前言 作为推荐大家使用vcpkg来进 ...
- windows server 2012 使用包管理工具choco安装程序
下载.安装 管理员打开powershell,输入下面命令 Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePo ...
- 节省磁盘空间的新一代包管理工具PNPM
在使用前端工具时,yarn.npm都是大家常用的包管理器,但是如果有多个项目使用了同一个依赖的时候,就会在硬盘里保存相应的副本,一旦这个多个项目变得数字很大,那么这个硬盘空间也是会逐渐吓人的. 所以今 ...
- python管理包管理工具pip和conda使用,及使用pip和conda创建虚拟环境
python管理包管理工具pip使用,及使用pip创建虚拟环境 文章目录: 1 pip的使用 1.1 pip的基础使用 1.1.1 pip安装库包(pip install) 1.1.2 pip卸载库包 ...
- 前端包管理工具 yarn
yarn 是一个 与 npm 类似的 前端包管理工具 安装 windows 要去官网下载 (一定要去官网下载 .mis 文件进行安装) 用npm 或者 cnpm 也能安装 但是这种安装 有缺 ...
- 外来Slackware包管理工具[转]
http://blog.csdn.net/eroswang/archive/2007/08/11/1738766.aspx一.SWARET ---网络安装模式的实现! 1.简介: swaret可以进行 ...
最新文章
- 2016/05/03(接口 买票 临界资源同步锁)
- Python技巧之“is”对比“==”
- java之 代理设计模式
- K NEAREST NEIGHBOR 算法(knn)
- Angular之filter学习
- esxi 部署模板_vSphere使用模板部署虚拟机
- 电脑开机太慢?这5个方法瞬间提升你的电脑速度
- 通过爬虫爬取一些图片
- 台式机dp接口_了解笔记本电脑的各种视频接口
- 2020-10-19 Nvidia与vGPU
- ubuntu18.04修改mac地址
- 中国大学MOOC C语言程序设计(大连理工大学) 课后编程题 第五周题解(个人向仅供参考)
- 极路由X(C526A)刷Openwrt 18.06固件
- matlab整数规划--简单入门
- iOS-脚本打包出现的问题最后居然这么解决了
- mysql的reorg_DB2 runstats和reorg操作
- 传输接口的对比 USB、Thunderbolt、HDMI、DP、type-c
- 关于5G与4G的对比以及未来前瞻的个人见解
- 斯图金是如何发明电磁铁的?
- ubuntu16配置ElastiFusion--失败的尝试
热门文章
- thinkphp3.1.3 getshell_C# / VB.NET 在PPT中创建、编辑PPT SmartArt图形的方法详解_C#教程...
- OpenAL的Mingw编译
- [计算机图形学]反走样(前瞻预习/复习回顾)
- 服务——DNS正向反向域名解析服务
- 【Android Gradle 插件】PackagingOptions 配置 ③ ( merges 属性配置 | excludes 属性配置 )
- MySQL批量修改表名列名大小写
- 关于mac12系统使用php(安装篇)
- makehuman模型导入unity,绑定动作后,四肢的运动方向与原方向不一致
- oracle int c,c 数据库 char转int
- cesium编辑功能CesiumEdit.js