标题: 程序员的片段(5)--GoogleUpdate.exe忽略了IE代理设置
创建: 2015-12-14 18:39 更新: 链接: http://scz.617.cn/windows/201512141839.txt
Chrome->帮助->关于,点击这个地方会手工启动GoogleUpdate.exe,检查Chrome的最 新版本并自动升级。没有任何代理设置介入的情况下,GoogleUpdate.exe会直接访问 类似"74.125.23.138:443"这种目标,由于GFW的存在,这种访问只会永远停留在 SYN_SENT状态,在Chrome里看到的就是永远显示"正在检查更新"。
不考虑第三方插件或其他奇技淫巧的情况下,Chrome实际使用IE代理设置,可以使用 HTTP、HTTPS、SOCKS代理中的任一种。但我发现,GoogleUpdate.exe并不会像 chrome.exe一样使用SOCKS代理,它忽略了我的SOCKS代理,直接访问GIP的443,这是 件令人悲伤的事。
发现小钻风的GoogleUpdate.exe使用IE代理设置,仔细查看后,他只设置了HTTPS代 理。换句话说,GoogleUpdate.exe同chrome.exe一样,也认IE代理设置,但它只认 HTTPS代理。如果你主要使用SSH Tunnel创建的SOCKS代理,这个时候就悲剧了。
利用privoxy将SOCKS5代理转换为HTTP/HTTPS代理,在IE中只设置HTTPS代理, GoogleUpdate.exe仍然忽略IE代理设置,无法检查更新。这是更加令人悲伤的事。说 实话,如果小钻风那儿也失败,我就不那么悲伤了。嗯,这是一种不健康的阴暗心理, 大家不要学我。
我不甘心啊,可我又不想上调试器啊,总觉得这事儿没那么复杂。
用Prcocess Explorer仔细查看处于SYN_SENT状态的GoogleUpdate.exe,看到:
Version 1.3.26.9
Path C:\Program Files (x86)\Google\Update\GoogleUpdate.exe
Command line "C:\Program Files (x86)\Google\Update\GoogleUpdate.exe" /ondemand
Current directory C:\Program Files (x86)\Google\Update\1.3.28.15
Autostart Location Task Scheduler\GoogleUpdateTaskMachineCore
GoogleUpdateTaskMachineCore这个任务计划已被我禁用,按我理解,它只是起一个 定期检查更新的作用,与我现在面临的问题无关。事实上这些东西被禁用都与我的问 题无关:
gupdate gupdatem GoogleUpdateTaskMachineCore GoogleUpdateTaskMachineUA
异常之处是,当前启动的GoogleUpdate.exe版本是1.3.26.9,而它的工作目录版本是 1.3.28.15。我去看了一下版本与修改时间:
C:\Program Files (x86)\Google\Update\GoogleUpdate.exe
1.3.26.9
2015.7.28
C:\Program Files (x86)\Google\Update\1.3.28.15\GoogleUpdate.exe
1.3.28.15
2015.9.20
这两个版本的修改时间都不是2015.12.14,而我在这天刚刚用Chrome的离线安装包升 级到最新版本,看上去Chrome与GoogleUpdate的升级并不同步。既然二者升级不同步, 为何在"添加删除"里没有单独的GoogleUpdate项?
好了,不管那么多了。我用1.3.28.15版覆盖了1.3.26.9版,在IE中重新设置HTTPS代 理,这次检查更新成功。同时设置IE的HTTP、HTTPS、SOCKS代理,仍然成功。说明只 要有HTTPS代理即可,并不要求只设置HTTPS代理。
回顾一下,首先我不知道GoogleUpdate只认IE的HTTPS代理,其次未知原因导致我的 GoogleUpdate.exe本身出现版本混乱,两大原因导致GoogleUpdate.exe忽略IE代理设 置的假象。
后面是一些扯淡,不用看。
很多年前我在CERNET的BBS上灌水时,喜欢问一句,你的原始需求是什么?因为有可 能TA比较弱,自认为所提出的问题是解决原始需求的必由之路,而TA真正关心的是用 任一办法解决原始需求,甚至出现TA的最初提问与原始需求并不相干的极端情况。如 果TA补充清楚了原始需求,我会忽略TA最初的提问,直接回答如何满足原始需求。还 有一种可能,TA最初的提问就是TA想问的东西,TA确认这就是TA的原始需求。这种情 况下我不假设TA水平的强弱高低,不作发散,不问TA为什么要问这个问题而不是别的 blahblah,不提任何与TA最初提问不直接相干的东西,直接就事论事地回复最初提问, 简简单单。我不会假设TA是SB,给TA一些更SB的发散,并进入比拼智商下限的节奏。 我有一个原则,三次握手之后就可以传输数据了,我不是上帝,不用上帝视角看人。 即使TA在瞎握手,那我也尽力了,否则就会陷入无限递归。
时至今日,如果参与技术讨论,我都会问且只问一次,你的原始需求是什么?