Loading

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

问题描述

在 WinGet 中,运行涉及应用的命令,会出现长时间等待,无法进行下一步操作,只能通过关闭终端结束运行。

这是我最近遇到的一个问题,当我想使用 WinGet 安装软件时,会一直停留在加载中,哪怕使用 ctrl + c 也无法终止操作。

❯ winget install golang
   \ 正在取消操作

随后,我又尝试了其他命令(如 listsearchshow),发现也会出现类似的情况。

排查错误过程

据我回忆,这种情况是在我重置 WinGet 源后,才出现的。可是,我之前也重置过,当时并没有出现这种情况。

这就是让我苦恼的地方了,同时在网络上也没有搜到适合的解决方案。

为了快速解决这个问题,我选择了最简单的方式,直接重新安装 WinGet,希望新的 WinGet 不会再出现类似的情况。但很可惜的是,这并没有带来多少改变,依旧是长时间的“加载中”。

后续,我通过检查运行日志,发现 WinGet 的运行似乎停留在了 WinGet 源检查更新。

[REPO] Adding to source references winget
[CLI ] Created authentication arguments. Mode: silentPreferred, Account: 
[CORE] Examining extension: PFN = Microsoft.Winget.Source_8wekyb3d8bbwe, ID = IndexDB
[CORE] Found matching extension.
[REPO] Source `winget` after auto update time [15 mins]; it has been at least 637 mins
[CORE] Examining extension: PFN = Microsoft.Winget.Source_8wekyb3d8bbwe, ID = IndexDB
[CORE] Found matching extension.

这不禁让我怀疑,是不是 WinGet 软件源出现了问题?按照这个疑问,我去检查了 WinGet 默认提供的两个源。

❯ winget source list
名称    参数                                          显式
-----------------------------------------------------------
msstore https://storeedgefd.dsx.mp.microsoft.com/v9.0 false
winget  https://cdn.winget.microsoft.com/cache        false

经过简单的判断,这两个域名都可以 ping 通,那么下面就是单个排查,依次移除两个软件源,看一看是哪个不能使用。

经过简单的判断,这两个域名都可以 ping 通,证明我的网络是可以正常访问的。

既然在这方面找不到错误,就对这两个软件源进行单个排查,依次移除,验证这两个源是否相互影响,又或者是某个源在运行时会导致错误。

经过对比后,发现 msstore 源是可以正常使用的,不会导致长时间的加载,而 winget 则是罪魁祸首。

原因

WinGet 在涉及应用的命令时,似乎都会尝试更新源,而 winget 源会出现无法访问的情况,这就导致了尝试请求,然后等待回应,却又一直得不到回应,阻塞了接下来的操作。

同时在断网测试之后,出现了“尝试更新源失败: winget”的报错信息,从侧面印证了只要涉及应用的命令,WinGet 都会尝试更新源。

其实我不太理解,为什么当我查看本地已安装软件列表时,还要更新源?

❯ winget list
尝试更新源失败: winget
搜索源时失败;结果将不包括在内: msstore

根据官方文档给出的说明,仅当使用源时,才会检查更新,差不多印证了上面的说法。

解决方法

经过梳理之后,可以得出结论,只要不进行更新源,或者更改 winget 源(使其可以访问),就可以解决这个问题。

推荐直接将 winget 源更改为国内镜像,进行根治。

更改 winget

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

  1. 打开拥有管理员权限的终端
  2. 输入以下命令:
winget source remove winget
winget source add winget https://mirrors.cernet.edu.cn/winget-source --trust-level trusted

设置源更新

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

  1. 彻底引用自动更新

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

    • 运行 winget settings,打开 WinGet 设置文件
    • 添加如下内容
    "source": {
        "autoUpdateIntervalInMinutes": 10080
    },
    

正整数表示更新间隔(以分钟为单位), 将值设为零会禁用对源更新的检查。

引用

posted @ 2025-08-28 08:21  Abaiami  阅读(46)  评论(0)    收藏  举报