疑似 PCL 检查更新时 有可能 在 网络异常的情况下 显示“已是最新版”,而不是“无法检查更新”
检查项
- [x] 我已在 Issues 页面 和 常见&难检反馈及问题列表 中搜索,确认了这一 Bug 未被提交过。
描述
我在 PCL2 x4 群中帮助其他用户排查问题时,发现一位用户使用的明明是爱发电私信链接中下载的 快照版 2.10.8 ,但检查更新依然提示 「已经是最新版」。 查看其 PCL 日志后发现,日志中存在 DNS 解析失败 连接服务器超时 等错误信息,说明是网络无法访问PCL的服务器导致的。 但 PCL 并未提示 「无法检查更新」,而是直接显示 「已是最新版」。
进一步查看 2.10.8 的更新日志,发现其中有一条:
在内部 DNS 解析失败时不再直接报错
可能是这项改动引起的问题
注:此问题基于日志分析与群内反馈推测,我暂时没能力复现,且该问题来自2.10.8,不能确定是否已在最新版被解决。 不过从 2.10.9 到 2.11.0 的 更新日志 里看貌似没有提到相关的改动,所以这个问题 可能 仍存在,故来提交issue。
~当然,不排除本来就是这么设计的。~ ~不过 如果该问题确实存在的话 ,我还是希望将提示改一下,毕竟这样可能会误导用户,并且造成一些困扰。~ edit: 好像确实是有问题(?但仍无法确定是否在最新版中被修复
重现步骤
在网络异常的情况下点击检查更新(应该是?)
日志与附件
附上PCL2 x4群用户提供的日志和截图 Log1.txt Log2.txt
另外,刚在PCL2 xB群中,也有群友在相同版本(2.10.8)遇到 DNS 解析失败 连接服务器超时 等错误,导致无法连接至PCL服务器的情况,但他并没有提示 「已经是最新版」 而是正常弹出 「连接 PCL 服务器失败」。
日志中的唯一区别在于,这个用户的日志里多了一行:
[21:17:56.963] <Invoke 382> [System] 欲读取的文件不存在,已返回空内容:C:\Users\ASUS\AppData\Local\Temp\PCL\Cache\Notice.cfg
而上面的日志里没有
附日志: Log1.txt
目前来看应该是本地缓存导致的,给龙猫看看
[21:17:18.902] <L/PCL 服务> [Net] 发起网络请求(GET,https://pcl2-server-1253424809.file.myqcloud.com/notice.cfg{CDN}),最大超时 10000
[21:17:18.911] <主线程> [UI] 弹出提示:正在检查更新,请稍候!
[21:17:19.231] <L/PCL 服务> DNS 解析失败(pcl2-server-1253424809.file.myqcloud.com):发生一个或多个错误。
在 System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
在 System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
在 PCL.ModNet.DNSLookup(HttpRequestMessage Request, CancellationTokenSource CancelToken)
错误类型:System.AggregateException
→ 不知道这样的主机。
在 System.Net.Dns.HostResolutionEndHelper(IAsyncResult asyncResult)
在 System.Net.Dns.EndGetHostAddresses(IAsyncResult asyncResult)
在 System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization)
错误类型:System.Net.Sockets.SocketException
题外话:这个网络多少有点问题....
题外话:这个网络多少有点问题....
是有问题,不过已经帮他解决了,这个issue中描述的问题是我翻他日志的时候意外发现的。
我也是这样的在更新的时候提示已经是最新版本来看github去看了日志版本是2.10.6
[23:23:36.712] <L/PCL 服务> [Net] 发起网络请求(GET,https://pcl2-server-1253424809.file.myqcloud.com/notice.cfg{CDN}),最大超时 10000
[23:23:36.723] <L/PCL 服务> 网络请求失败:你的网络环境不佳,导致难以连接到服务器。请稍后重试,或使用 VPN 以改善网络环境。
————————————
详细错误信息:
网络请求出现意外异常(GET, https://pcl2-server-1253424809.file.myqcloud.com/notice.cfg?sign=1761924217-0437a050-0-8ce191bd1d87c7130ca68d8c333bbd07)
在 PCL.ModNet.SendRequest(String Url, HttpMethod Method, Object Content, Dictionary`2 Headers, Boolean UseBrowserUserAgent, Int32 Timeout, Encoding Encoding)
在 PCL.ModNet.NetRequestByClient(String Url, HttpMethod Method, Object Content, String ContentType, String Accept, Int32 Timeout, String[,] Headers, Encoding Encoding, Boolean UseBrowserUserAgent, Boolean MakeLog)
→ 发送请求时出错。
在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
在 CacheCow.Client.CachingHandler.<SendAsync>d__46.MoveNext()
--- 引发异常的上一位置中堆栈跟踪的末尾 ---
在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
在 PCL.ModNet.SendRequest(String Url, HttpMethod Method, Object Content, Dictionary`2 Headers, Boolean UseBrowserUserAgent, Int32 Timeout, Encoding Encoding)
错误类型:System.Net.Http.HttpRequestException
→ 未能解析此远程名称: 'pcl2-server-1253424809.file.myqcloud.com'
在 System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
在 System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar)
错误类型:System.Net.WebException
[23:23:36.734] <主线程> [UI] 弹出提示:正在检查更新,请稍候!
[23:23:37.235] <L/PCL 服务> [Net] 发起网络请求(GET,https://pcl2-server-1253424809.file.myqcloud.com/notice.cfg{CDN}),最大超时 30000
[23:23:37.242] <L/PCL 服务> 网络请求失败:你的网络环境不佳,导致难以连接到服务器。请稍后重试,或使用 VPN 以改善网络环境。
————————————
详细错误信息:
网络请求出现意外异常(GET, https://pcl2-server-1253424809.file.myqcloud.com/notice.cfg?sign=1761924217-3b466867-0-43a3dbc4f80b5849a2fbaed49be237bc)
在 PCL.ModNet.SendRequest(String Url, HttpMethod Method, Object Content, Dictionary`2 Headers, Boolean UseBrowserUserAgent, Int32 Timeout, Encoding Encoding)
在 PCL.ModNet.NetRequestByClient(String Url, HttpMethod Method, Object Content, String ContentType, String Accept, Int32 Timeout, String[,] Headers, Encoding Encoding, Boolean UseBrowserUserAgent, Boolean MakeLog)
→ 发送请求时出错。
在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
在 CacheCow.Client.CachingHandler.<SendAsync>d__46.MoveNext()
--- 引发异常的上一位置中堆栈跟踪的末尾 ---
在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
在 PCL.ModNet.SendRequest(String Url, HttpMethod Method, Object Content, Dictionary`2 Headers, Boolean UseBrowserUserAgent, Int32 Timeout, Encoding Encoding)
错误类型:System.Net.Http.HttpRequestException
→ 未能解析此远程名称: 'pcl2-server-1253424809.file.myqcloud.com'
在 System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
在 System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar)
错误类型:System.Net.WebException
[23:23:37.243] <L/PCL 服务> 获取 PCL 服务器状态失败:你的网络环境不佳,导致难以连接到服务器。请稍后重试,或使用 VPN 以改善网络环境。
————————————
详细错误信息:
网络请求出现意外异常(GET, https://pcl2-server-1253424809.file.myqcloud.com/notice.cfg?sign=1761924217-0437a050-0-8ce191bd1d87c7130ca68d8c333bbd07)
在 PCL.ModNet.NetRequestByClientRetry(String Url, HttpMethod Method, String BackupUrl, Object Content, String ContentType, String Accept, String[,] Headers, Encoding Encoding, Boolean UseBrowserUserAgent)
在 PCL.ModSecret.ServerSubReal()
→ 发送请求时出错。
在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
在 CacheCow.Client.CachingHandler.<SendAsync>d__46.MoveNext()
--- 引发异常的上一位置中堆栈跟踪的末尾 ---
在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
在 PCL.ModNet.SendRequest(String Url, HttpMethod Method, Object Content, Dictionary`2 Headers, Boolean UseBrowserUserAgent, Int32 Timeout, Encoding Encoding)
错误类型:System.Net.Http.HttpRequestException
→ 未能解析此远程名称: 'pcl2-server-1253424809.file.myqcloud.com'
在 System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
在 System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar)
错误类型:System.Net.WebException
[23:23:37.244] <L/PCL 服务> [Loader] 加载器 PCL 服务 状态改变:Finished
[23:23:37.300] <主线程> [UI] 弹出提示:已经是最新快照版 2.10.6,不需要更新啦,可以直接使用!
后续我关掉了adguard的加密dns就可以成功更新了更新后的版本是2.11.0
后续我关掉了adguard的加密dns就可以成功更新了更新后的版本是2.11.0
因为你这样做,相当于解决了网络异常的情况,PCL可以正常访问到公告服务器,自然不会遇到本issue中提到的问题