一、问题出现
问题源自之前做的一个项目,客户换了新电脑之后,无论如何都打不开软件。
在多台电脑上测试后,都可以正常运行,唯独客户打不开,简单检查排除了软件自身的原因。
之后经过长时间检查,发现是客户新电脑网络配置的问题,以此文来记录下排查故障的过程和问题解决的方式。
二、基本环境
- 项目基础:
Python3
+PyQt5
制作的桌面应用程序,在win10系统下使用,主要使用的模块还有requests
;- 使用
pyinstaller
打包成单个exe程序,无需客户配置程序运行环境;
- 客观因素:客户网络不是很好,网速比较慢
三、排查故障及解决过程
-
错误提示
客户每次运行软件,都会弹出Failed to execute script ***
的错误提示窗口,此外没有其他信息。 -
重新打包
之前的打包方式为pyinstall -F -w ***.py
,生成的为不带命令行窗口的单个EXE文件。为了查看更多、更详细的错误提示信息,需要重新打包软件,使用以下命令可以打包成使用命令行窗口执行的EXE文件。
pyinstall -F -c ***.py
在命令行窗口中再次运行程序,观察命令行窗口错误信息,主要有如下信息:
发现是在通过requests
库连接目标网址的时候,连接失败了。考虑到客户说他网络不好,首先怀疑是网速的原因,但通过在浏览器网页打开目标网站的速度来看,应该不是由网速引起的,决定进一步排查。
-
检查网络配置
借助win10 自带工具ping
和telnet
在命令行窗口排查故障- 在命令行中
ping www.目标网址.com
:提示找不到主机,请检查名称,然后重试。(博主自己的电脑可以) - 在命令行中
ping www.baidu.com
:ping 不通,同样的提示信息。 - 在命令行中
telnet www.目标网址.com 443
:提示无法打开到主机的连接,在端口443,连接失败。(博主自己的电脑可以) - 在命令行中
ping 221.**.**.190(目标网址IP)
:可以ping通 - 在命令行中
ping 111.206.223.172(百度网址的IP)
:可以ping通
可以发现客户电脑在
ping
域名时无法ping通,在直接ping
IP地址时可以ping通。推测是客户电脑在解析域名为IP地址时发生问题。- 在命令行中
nslookup www.目标网址.com
:失败(意料之中) - 在命令行中
nslookup www.baidu.com
:失败
由此可以判断是客户电脑DNS配置有问题,在解析域名时失败。
- 在命令行中
-
解决方法
- 配置DNS服务器手动模式,输入
8.8.8.8
- 在命令行中刷新DNS缓存,执行
ipconfig /flushdns
- 在命令行中(管理员身份)重置网络配置,执行
netsh winsock reset
- 重新启动
- 配置DNS服务器手动模式,输入
四、事后
通过一步一步的排查故障,到最后解决之后,感觉浑身通畅、无比舒服,也许这就是计算机的魅力之处吧
文中有什么错误或不足之处,欢迎指出~~~