Windows之应用安装程序 —— winget
大家都用过Linux中的应用程序安装工具,如yum、apt、rpm等工具进行安装自己想要的一些工具或则软件之类的,当然Linux操作系统还是很强大的有很多类似的命令来安装我们所需要的程序,但是windwos有没有类似于windows这样的应用安装程序呢?想必大家看标题就能看的出来肯定是有的,那就是微软提供的winget官网提供的名称叫应用安装程序又叫windows程序包管理器,今天我们就来说一说这个windows版的命令程序安装工具,这个工具对于大家来说还是很合谐的,使用也是非常简单和Linux中的安装程序的工具很类似,只不过windows操作系统更注重于图形化操作,所以很少有人去注意或者关注命令行中的一些操作,这个也和windows操作系统闭源有很大一部分关系的,好了废话不多说了我们开始我们的winget之旅吧!
winget是一个综合的程序包管理器解决方案,由一个命令行工具和一组用于在 windwos上安装应用程序的服务组成。
winget是一个用于自动安装、升级、配置和使用软件的系统或工具集。 大多数程序包管理器都是设计用于发现和安装开发人员工具。开发人员使用程序包管理器来指定先决条件,这些先决条件适用于为给定项目开发解决方案所需的工具。 然后,程序包管理器就会按照声明性说明来安装和配置这些工具。 程序包管理器可减少准备环境所需的时间,并有助于确保在计算机上安装相同版本的程序包。
除了上面说的微软还面向ISV(独立软件供应商)提供软件仓库,ISV可以将自己的工具或者应用程序的软件包上传到软件仓库,这个就类似于163源码包一样,不过在Linux中是任何人都可以做这个源码包仓库的,但在windows中就会出现类似于手机中的应用商城一样,自己有自己独家的软件包仓库并不统一,举个栗子:比如说我在小米商城里面没有办法下载华为商城里面的一些程序一样;这个算是微软的一个弊端吧,但是好处就是有一个统一的软件包仓库这样也是绝对安全的,接着来说这个软件仓库,这个软件仓库是微软在github中开通的一个仓库,可以提供用户下载程序和上传自己的应用程序。
默认情况下winget对于win10或者win11的用户来说是不用自行安装的,是微软将此程序打包到windwos镜像中的,只要你安装好默认就会有的。可能部分版本也会出现没有的情况不过也没有关系,也可以额外进行安装的,下面我们就来说说如何进行安装。
方式一:Microsoft Store商城安装
win10以上版本微软都会提供一个Microsoft Store商城的这样一个软件,这个是微软方便用户进行安装一些应用程序的,不过没有也没有关系,大家可以参考我下面的方式二进行安装。
Microsoft Store商城中安装winget步骤很简单的,只需要打开Microsoft Store商城搜索winget或者应用安装程序,搜索出来第一个就是,点击进行下载安装就可以了,Microsoft Store商城有一个很方便的地方就是他直接就是静默安装不需要你再去点很多下一步去完成安装操作了,下面是Microsoft Store商城搜索winget的截图。
方式二:官网安装
第二种方式就从微软官网上去下载安装包,下载完成手动进行安装,这个适用于所有用户哦
winget下载地址:https://apps.microsoft.com/store/detail/%E5%BA%94%E7%94%A8%E5%AE%89%E8%A3%85%E7%A8%8B%E5%BA%8F/9NBLGGH4NNS1?hl=zh-cn&gl=cn
浏览器中输入上面网址打开就可以免费下载了
安装的时候需要注意的是可能需要获取你的管理员权限,建议大家右键管理员权限进行运行。
使用的话也比较简单首先使用win + r快捷键调出运行窗口,在窗口中输入cmd,然后敲击回车你就会得到一个命令行窗口,winget的命令在这里就可以输入使用的,由于执行部分winget命令时需要管理员权限,建议使用管理员权限运行cmd命令行窗口。
管理员权限运行:
输入win快捷键同样输入cmd,然后找到cmd命令提示符右键以管理员身份打开即可这样你就获得了一个拥有管理员权限的命令行工具,这里是window的一个弊端,不像linux一样可以sudo直接以管理员权限执行,只能以管理员方式打开
1.安装程序
winget install 软件包名称
上面截图是我安装了一个相应的程序,安装过程中会让你确认并同意软件厂商所提供的相关协议,这里你只需要输入y就可以了,他会先进行下载下载完成后启动安装程序,这个时候部分软件是有弹窗的,需要让你确认一些安装步骤之类的,基本很少,提示已成功安装就代表安装成功了,你可以使用命令来运行你安装的程序或者去开始菜单里面找你所安装的程序双击打开即可
2.卸载程序
卸载程序建议大家先把已安装的程序列出一下然后再进行卸载,除非你完全知道所需要卸载程序的名字,这个名字必须是完整的才可以,这一点微软做的就有点坑了,有时候还需要加上版本号
winget list //列出已安装的所有程序除系统所需程序或补丁包
列出之后我们就可以看到所有已安装的程序了,可以按照名称去查找一下,看看你所需要的卸载的程序名称或者ID,然后进行卸载就可以了
winget uninstall 名称/ID
首先他会先查找这个你所输入的程序名称或者ID是否存在,存在的话会启动程序包卸载程序来进行卸载,显示卸载成功就表示已经卸载成功了。
3.查找软件
在安装程序之前你可以先使用search来查找下你所要安装的程序在微软仓库中有没有相应的安装包,有的话你可以直接安装,没有那就需要你去软件官网下载安装程序再来进行安装。
winget search 软件名称
上面截图里面是我想安装一个nginx,搜索之后是有的,但是这个软件包大家一定看清楚,他并不是一个nginx,只是nginx的一个替程序,他是一个WAMP,大家可以看下下面的截图,最终会安装一个laragon-wamp的程序
所以说现在微软的安装包仓库里面程序并不是很全,大部分还是需要你去官网下载程序然后再来进行安装的,不过可以推荐类似的软件其实也是个很不错的功能,不像linux一样没有就是没有
上面我又搜索了一个xmind的工具,他竟然真的有,很让人意外的
4.查看可以升级的程序并进行升级
winget upgrade //查看那些有最新的软件可以进行升级
显示出来的都是可以升级的软件了,下面同样可以使用upgrade来进行升级软件
winget upgrade 软件包名称/ID
这样就升级好啦。
上面就是说了一些简单的例子,也是最常用的下面我们来具体说说每个命令所包含的参数之类的
1. export
export是一个导出当前应用的一个命令,可以把你电脑上的当前应用环境进行导出,导出后可以放到其他的电脑然后使用import进行导入,大部分用于还原环境使用,更适合开发人员使用,个人的话基本上没啥用,除非换电脑了要把程序啥的换到新电脑上,注意不是导出软件安装包哦。他导出的是一个json文件,下面来看看他的参数吧和使用方法吧
winget export 参数 //导出命令
参数:
参数 | 说明 |
---|---|
-o,–output | 要导出json文件的路径及名称 |
例子:
winget export -o \opt\abc.json
对了忘记说一个前提了,大家也在上面截图里面看到了,因为这些程序都是我之前图形化安装的所以他是找不到安装源的,这样就会导不出来的,这一点很不友好
选项:
来看看export的选项有哪些吧
选项 | 说明 |
---|---|
-s,–source | 选择导出从哪个源安装的,他的可选项有两个一个是msstore和winget |
–include-versions | 指定当前应用的版本 |
–accept-source-agreements | 接受开源许可协议,这个就是为了避免提示你要不要接受 |
–verbose-logs | 设置并创建详细的日志 |
除了从旧版windows上导出之外,你还可以手动去编写json文件哦,json文件内容也比较简单只有4块内容:
1.源:是指的你即将安装的程序源仓库是在哪里
2.包:是指的你所需要安装的程序集
3.标识符:用于指定包的 Windows 程序包管理器包标识符
4.版本:你所要安装程序的版本号
2. import
和import相对应得,是为了导入要安装的应用json文件,使用import可以批量进行安装程序啦
winget import 参数
参数:
参数 | 说明 |
---|---|
-i,–import-file | 指定要安装程序的json文件路径 |
例子:
winget import -i c://demo/myfiles1.json
选项:
选项 | 说明 |
---|---|
–ignore-unavailable | 所安装的程序不可用的时候不提示错误 |
–ignore-versions | 忽略json中所写的版本号,可以安装最新版本 |
–accept-source-agreements | 用于跳过接受源协议 |
–accept-package-agreements | 用于跳过接受协议 |
–verbose-logs | 生成详细日志 |
3. install
install用来安装应用程序
winget install 参数
参数:
参数 | 说明 |
---|---|
-q,–query | 用于搜索包进行查询 |
-h,–help | 用于查询其他参数或选项 |
示例:
winget install -q 软件包名称
选项:
选项 | 说明 |
---|---|
-m,–manifest | 用于指定本地安装清单需要时YMAL文件 |
–id | 指定程序ID进行安装 |
–name | 安装时搜索现在为按名称进行搜索对应安装,有多个会列出让你选择进行重新执行命令 |
–moniker | 按名字对象来进行搜索对应程序进行安装 |
-v,-version | 指定版本号进行安装,不指定则安装最新版 |
-s,–source | 用于指定安装源仓库 |
–scope | 选择安装到哪里,可以是计算机也可以是某个用户 |
-a,–architecture | 选择要安装的体系结构 |
-e,–exact | 使用精准匹配进行安装 |
-i,–interactive | 进行交互式安装,但是有些程序为静默安装不可用 |
-h,–silent | 选择静默安装,所有选择将为默认值 |
–locale | 要使用的区域设置(BCP47 格式),这个参数一直没弄明白,理解不了 |
-o,–log | 选择安装日志存放位置 |
–override | 覆盖待传递的参数至安装程序 |
-l,–location | 设置安装路径 |
–force | 覆盖安装程序哈希检查 |
–dependency-source | 如果需要安装依赖包时,指定依赖包安装的源仓库 |
–accept-package-agreements | 接受所有许可协议 |
–header | 可选的 Windows-Package-Manager REST 源 HTTP 标头 |
–accept-source-agreements | 接受所有源协议 |
-r,–rename | 要重命名可执行文件的值 |
4.list
用于列出已安装的程序
winget list 参数
参数:
参数 | 说明 |
---|---|
-q,–query | 用于搜索包进行查询 |
-h,–help | 用于查询其他参数或选项 |
示例:
winget list -q Edge
选项:
选项 | 说明 |
---|---|
–id | 按照ID进行筛选 |
–name | 按照名称进行筛选 |
–moniker | 按照名字对象机械能筛选 |
-s,–source | 指定安装源进行筛选 |
–tag | 按照标签进行筛选 |
–command | 按命令进行筛选,相对于linux的which |
-n,–count | 指定显示数量 |
-e,–exact | 用于精准匹配 |
–header | 可选的 Windows-Package-Manager REST 源 HTTP 标头 |
–accept-source-agreements | 接受所有开源协议 |
5.serch
用于查找所需要的安装程序,可以用来判断仓库是否有这个程序,或查看程序的相关信息
winget search 参数
参数:
参数 | 说明 |
---|---|
-q,–query | 用于搜索包进行查询 |
-h,–help | 用于查询其他参数或选项 |
示例:
选项:
选项 | 参数 |
---|---|
–id | 按照ID进行查找程序 |
–name | 按照名称进行查找程序 |
–moniker | 按照名字对象来查找程序 |
-s,–source | 指定仓库来查找程序 |
–tag | 按照标签来查找程序 |
–command | 按照命令来查找程序 |
-n,–count | 指定列出几行数据 |
-e,–exact | 使用精准匹配程序 |
–header | 可选的 Windows-Package-Manager REST 源 HTTP 标头 |
–accept-source-agreements | 接受所有开源协议 |
6.show
用于查看应用程序的详细信息
winget show 参数
参数:
参数 | 说明 |
---|---|
-q,–query | 用于搜索包进行查询 |
-h,–help | 用于查询其他参数或选项 |
示例:
winget show -q Edge
选项:
选项 | 说明 |
---|---|
-m,–manifest | 用于指定本地安装清单需要时YMAL文件 |
–id | 按照程序ID进行筛选 |
–name | 按照程序名称进行筛选 |
–moniker | 按照名字对象进行筛选 |
-v,–version | 指定版本,默认为最新版 |
-s,–source | 指定仓库进行筛选 |
-e,–exact | 进行精准匹配 |
–versions | 显示程序可用的版本 |
–header | 可选的 Windows-Package-Manager REST 源 HTTP 标头 |
–accept-source-agreements | 接受所有开源协议 |
7.source
用于管理你的程序仓库,默认微软只提供两个msstore和winget这两个,你可以用source来添加你的源仓库
winget source 子命令 参数
参数:
参数 | 说明 |
---|---|
-h,–help | 用于查询其他参数或选项 |
子命令:
选项 | 说明 |
---|---|
add | 添加新的安装来源 |
list | 列出所有安装来源 |
update | 更新当前来源 |
remove | 删除当前来源 |
reset | 重置当前来源 |
export | 导出当前来源 |
示例:
winget source list //列出当前来源
winget source update //更新当前来源
winget source reset --force //重置当前来源
这个命令需要管理员才能执行的
8.uninstall
用于卸载已安装的应用程序
winget uninstall 参数
参数:
参数 | 说明 |
---|---|
-q,–query | 用于搜索包进行查询 |
-h,–help | 用于查询其他参数或选项 |
示例:
winget uninstall -q 程序名称
选项:
选项 | 说明 |
---|---|
-m,–manifest | 用于指定本地安装清单需要时YMAL文件 |
–id | 按照程序ID进行筛选 |
–name | 按照程序名称进行筛选 |
–moniker | 按照名字对象进行筛选 |
-v,–version | 指定版本,默认为最新版 |
-s,–source | 指定仓库进行筛选 |
-e,–exact | 进行精准匹配 |
–versions | 显示程序可用的版本 |
–accept-source-agreements | 接受所有开源协议 |
–product-code | 按照指定产品代码来查找 |
-i,–interactive | 进行交互式卸载 |
-h,–silent | 进行静默安装 |
–force | 覆盖安装程序哈希检查 |
–purge | 删除安装目录中的所有文件 |
–preserve | 保留安装目录中的所有文件 |
-o,–log | 指定卸载日志存放位置 |
–header | 可选的 Windows-Package-Manager REST 源 HTTP 标头 |
9.upgrade
用于升级应用程序
winget upgrade 参数
参数:
参数 | 说明 |
---|---|
-q,–query | 用于搜索包进行查询 |
-h,–help | 用于查询其他参数或选项 |
示例:
winget upgrade -q 程序名称 //升级所对应的程序
选项:
选项 | 说明 |
---|---|
-m,–manifest | 用于指定本地安装清单需要时YMAL文件 |
–id | 按照程序ID进行筛选 |
–name | 按照程序名称进行筛选 |
–moniker | 按照名字对象进行筛选 |
-v,–version | 指定版本,默认为最新版 |
-s,–source | 指定仓库进行筛选 |
-e,–exact | 进行精准匹配 |
-i,–interactive | 进行交互式卸载 |
–versions | 显示程序可用的版本 |
-h,–silent | 进行静默安装 |
–purge | 删除包目录中的所有文件和目录 |
-o,–log | 指定卸载日志存放位置 |
–override | 覆盖待传递的参数至安装程序 |
-l,–location | 指定安装位置 |
–force | 覆盖安装程序哈希检查 |
–accept-package-agreements | 接受所有协议 |
–accept-source-agreements | 接受所有开源协议 |
–header | 可选的 Windows-Package-Manager REST 源 HTTP 标头 |
–all | 升级所有可升级的程序 |
–include-unknown | 即使无法确定其当前版本,也可升级包 |
以上基本上就是比较常用的几个winget的参数或者选项了
来总结下吧也算是一个和linux系统的对比,在我使用的过程中发现用winget安装一些已知的程序的时候还是比较方便的,但是安装微软仓库里面没有的软件的时候就会很麻烦,有时候感觉还不如去官网下载再安装来的更直观更暴力一些,也可能是我刚入门的原因不知道用时间久了会怎么样,既然windows有了winget建议微软仓库的开源程序更多一点,或者网易或者阿里也能有一个winget的开源仓库,这样一个是可用有选择性另外一个就是可以不用再受github下载慢的问题了