找回密码
 立即注册
首页 业界区 安全 WinGet 在涉及查询应用的命令时,会处于长时间加载,无 ...

WinGet 在涉及查询应用的命令时,会处于长时间加载,无法进行下一步操作

归筠溪 4 天前
问题描述

在 WinGet 中,运行涉及应用的命令,会出现长时间等待,无法进行下一步操作,只能通过关闭终端结束运行。
这是我最近遇到的一个问题,当我想使用 WinGet 安装软件时,会一直停留在加载中,哪怕使用 ctrl + c 也无法终止操作。
  1. ❯ winget install golang
  2.    \ 正在取消操作
复制代码
随后,我又尝试了其他命令(如 list、search、show),发现也会出现类似的情况。
排查错误过程

据我回忆,这种情况是在我重置 WinGet 源后,才出现的。可是,我之前也重置过,当时并没有出现这种情况。
这就是让我苦恼的地方了,同时在网络上也没有搜到适合的解决方案。
为了快速解决这个问题,我选择了最简单的方式,直接重新安装 WinGet,希望新的 WinGet 不会再出现类似的情况。但很可惜的是,这并没有带来多少改变,依旧是长时间的“加载中”。
后续,我通过检查运行日志,发现 WinGet 的运行似乎停留在了 WinGet 源检查更新。
  1. [REPO] Adding to source references winget
  2. [CLI ] Created authentication arguments. Mode: silentPreferred, Account:
  3. [CORE] Examining extension: PFN = Microsoft.Winget.Source_8wekyb3d8bbwe, ID = IndexDB
  4. [CORE] Found matching extension.
  5. [REPO] Source `winget` after auto update time [15 mins]; it has been at least 637 mins
  6. [CORE] Examining extension: PFN = Microsoft.Winget.Source_8wekyb3d8bbwe, ID = IndexDB
  7. [CORE] Found matching extension.
复制代码
这不禁让我怀疑,是不是 WinGet 软件源出现了问题?按照这个疑问,我去检查了 WinGet 默认提供的两个源。
  1. ❯ winget source list
  2. 名称    参数                                          显式
  3. -----------------------------------------------------------
  4. msstore https://storeedgefd.dsx.mp.microsoft.com/v9.0 false
  5. winget  https://cdn.winget.microsoft.com/cache        false
复制代码
经过简单的判断,这两个域名都可以 ping 通,那么下面就是单个排查,依次移除两个软件源,看一看是哪个不能使用。
经过简单的判断,这两个域名都可以 ping 通,证明我的网络是可以正常访问的。
既然在这方面找不到错误,就对这两个软件源进行单个排查,依次移除,验证这两个源是否相互影响,又或者是某个源在运行时会导致错误。
经过对比后,发现 msstore 源是可以正常使用的,不会导致长时间的加载,而 winget 则是罪魁祸首。
原因

WinGet 在涉及应用的命令时,似乎都会尝试更新源,而 winget 源会出现无法访问的情况,这就导致了尝试请求,然后等待回应,却又一直得不到回应,阻塞了接下来的操作。
同时在断网测试之后,出现了“尝试更新源失败: winget”的报错信息,从侧面印证了只要涉及应用的命令,WinGet 都会尝试更新源。
其实我不太理解,为什么当我查看本地已安装软件列表时,还要更新源?
  1. ❯ winget list
  2. 尝试更新源失败: winget
  3. 搜索源时失败;结果将不包括在内: msstore
复制代码
根据官方文档给出的说明,仅当使用源时,才会检查更新,差不多印证了上面的说法。
解决方法

经过梳理之后,可以得出结论,只要不进行更新源,或者更改 winget 源(使其可以访问),就可以解决这个问题。
推荐直接将 winget 源更改为国内镜像,进行根治。
更改 winget 源

将 winget 源添改为国内镜像源,步骤如下:

  • 打开拥有管理员权限的终端
  • 输入以下命令:
  1. winget source remove winget
  2. winget source add winget https://mirrors.cernet.edu.cn/winget-source --trust-level trusted
复制代码
设置源更新

可以选择彻底禁用自动更新,或减少检查更新的频率。

  • 彻底引用自动更新

    • 运行 winget settings,打开 WinGet 设置文件
    • 添加如下内容
    1. "source": {
    2.     "autoUpdateIntervalInMinutes": 0
    3. },
    复制代码
  • 减少检查更新的频率

    • 运行 winget settings,打开 WinGet 设置文件
    • 添加如下内容
    1. "source": {
    2.     "autoUpdateIntervalInMinutes": 10080
    3. },
    复制代码
正整数表示更新间隔(以分钟为单位), 将值设为零会禁用对源更新的检查。
引用


  • WinGet 软件仓库索引镜像使用帮助 - MirrorZ Help
  • settings 命令 | Microsoft Learn

来源:豆瓜网用户自行投稿发布,如果侵权,请联系站长删除

相关推荐

您需要登录后才可以回帖 登录 | 立即注册