Google Chrome 更新器

五月 12, 2015 | 38 评论 | C#, 原创软件

锵锵锵!时隔一年,Chrome更新器终于又更新啦!
Chrome更新器,顾名思义,就是更新Chrome的工具,为什么Chrome需要工具来更新呢?难道谷歌自己就不能更新吗?这个嘛,呵呵

可能有些用过耍下(shuax)的ChromeUpdater的朋友会纳闷了,人家有一个更新器了你怎么又去写一个?我又该如何选择?那么我们在这里先来聊聊两者的异同:

  • 本文中的更新器(以下简称CU#)是用C#写的,而耍下的ChromeUpdater(以下简称CU)是用C++写的,两者对系统运行环境的依赖不同。
  • CU#的核心功能是”静默更新”,而CU的核心是便携(因为其内置了对应版本的GreenChrome)。
  • CU#可以集成迅雷下载插件,从而达到脱离代理进行更新的目的。
  • CU#的静默更新功能依赖GreenChrome (下文简称GC),所以也集成了对GC的更新及下载功能;虽然CU不依赖GC,但CU内嵌GC,在解压时也可以选择释放。

简要更新日志:

  • v.9:首个版本
  • v1.0:将解压过程改为异步,取消了文本框的限制,在没有输入目录的情况下也可以获取。
  • v1.1:修复在没有填写目录的情况下点获取会闪退的问题。
  • ————————————————————————
  • v2.0:步子迈太大扯到蛋了,其实  1.1  和  2.0  是2个完全不同的程序。
  • v2.1:
    ·字体调大,增加缓存清理功能;
    ·之前有朋友批评我说,“解压的时候弹个7z出来,吓死个仙人板板,感觉跟中毒了一样”,对此经过我慎密地分析以及结合了人体工程学和广义相对论得出的结论是,的确没啥意思,所以我将整个解压过程隐藏掉了。
  • v2.2:
    ·群友反馈说是在没有预先检测到安装目录的时候点击查询,会出现一片空白,根据我多年的临床经验,这是个bug,但是已经修复。
    ·耍下表示有时候chrome的环境目录不是chrome.exe所在的目录,在唤醒时如果用相对路径的话可能会说找不到对应的文件,所以在关闭唤醒路径里加上%app%;
    ·从这个版本开始更新器自己检查到自己的更新的时候会更新自己(在非静默模式下);
    ·我发现有时候chrome会需要重启(比如修改了flags里面的某些项),但是如果恰好碰到了更新,chrome一关闭就会唤醒CU#来解压新版,这时候旧版chrome启动,就会导致解压失败。所以在被chrome的关闭事件唤醒的时候,CU#会等待5秒,如果5秒之后发现浏览器又启动了,就会放弃解压,反之则会开始解压。
  • v2.2.2:
    ·有朋友反映说是自动识别的时候会把“2个180浏览器”识别成chrome,我去询问了一下安装了该浏览器的老司机,他表示其进程名中带有chrome…难怪会误判,好吧,那就把判断条件收紧一点。
    ·前几天我入手了个高分屏的电脑,发现运行程序的时候主窗体居然莫名其妙跑到其他地方去了,仔细一看,原来是程序居中的时候,是以屏幕分辨率来居中的,而不是以显示分辨率来的(高分屏的话系统是需要缩放的,要不然字会小得跟蚂蚁一样),所以重新搞一搞,让程序能一直乖乖躺在屏幕中间。(顺便把任务栏图标也换了)
  • v2.2.2.1:
    ·耍下一声令下,winmm.dll要改名成wtsapi32.dll了,这边也要跟进
    ·耍下的更新器唤醒参数后面加了pe架构(例如Dev x64),而CU#是通过exe来直接判断架构的(例如Dev),所以在GreenChrome里设置了更新的版本以后(例如从Canary换到Dev),可能会导致CU#唤醒失败,所以这里进行检查,忽略掉参数里的架构。
  • v2.2.3.1:
    ·完善版本号的判断,之前会在有些情况下误判。
    ·修正在有些系统下被GC关闭事件唤醒会报错的问题。
    ·修正在有些情况下无法静默更新GC的问题。
  • v2.2.4.1:
    ·耍下表示:Chrome又双叒没法注入了,所以要换入口,dll名从wtsapi32要变成version,于是我跟他商量了一下,我这边不再默认配置dll的名字了,名字从他那里读取。
    ·之前在删chrome_old.exe的时候,会忘了删相应版本号的文件夹,现在更正,一并删除。
  • v2.2.5.0:
    ·加入强插DLL选项,通过内嵌https://www.shuax.com/archives/setdll.html中的工具实现,如果勾选了“GC强插”,那么每次更新了Chrome都会将GC强插进Chrome。
    ·接入了耍下的超合金量子核心奥氏体302质子静电回旋加速节点,下载速度可以有实质性飞跃。
  • v2.2.5.5:
    ·群里有人报告说在CU#的上一层文件夹看到个文件夹+installer的文件夹,这是在自更新的时候路径相加的误判导致的,虽然这是个小bug不影响功能使用,但是影响了美观,故修复。
    ·在国内搞了个缓存反代服务器,启动速度跟获取速度应该会变快。
  • v2.3.0.0:
    ·不知道是运营商缓存的功劳还是谷歌大佬放了大招,不使用代理从gvt1.com下载谷歌浏览器的速度也是跟飞一样,有时候甚至挂上代理反而更慢了,所以就没有黑科技加速的必要,目前已经不再使用国内第三方加速节点,而是直接下载,个人建议如果你还在使用迅雷模块也可以删掉了,因为大体上来说它已经没有存在的意义了,目前我还保留了迅雷模块的识别,但是未来可能会取消支持。
    ·我发现基本上能越过高墙满天飞的人基本上都喜欢用谷歌自己的更新服务来更新,所以没有从谷歌官方查询的必要,现在程序已经不会再通过tools.google.com查询更新了。
    ·谷歌不久前更新了appid,url地址也变短了,而且也加上了sha1、sha256的校验码,所以我也加上了校验,下载来的文件如果和校验码不匹配则会放弃更新(理论上来说这种情况出现的几率很低,因为我从没见过哪家运营商敢往这上面投毒)。
    ·根据群里的人反馈,很多人其实根本不在电脑上装winrar或是7zip,而是喜欢装一些类似“快鸭”、“6789好呀”、“180押梭”等国产解压软件,CU#不能识别出它们,有时可能会影响解压,所以我在程序里内嵌了一个lzma.dll来解压缩,可以在%Temp%目录下找到,240KB。
    ·由于shuax经常嘴上说甩手不管了但是身体很诚实,更新从来没落下。谷歌换入口了基本他也是实时跟进的,所以我“移除”了GC强插这个选项,因为没有它出场的机会。
    ·除了上面几点,代码层面我已经把ui库更新到了最新版,据疯哥所说解决了很多问题。
    ·工具类也进行了一定的调整,现在的工具类充当了整个更新器的骨架(作为MVVM的ViewModel存在)实现前后分离,部分已经移除的功能在工具类里面仍有保留(例如谷歌官方查询途径),如果大家想研究可以移步我的github。
  • v2.4.0.0:<=当前版本
    ·有哥们反馈说静默更新的时候会“无限更新”,我仔细研究了一下,导致这个现象的原因应该是当时重写逻辑的时候将分支存到chrome目录下的branch文件里面去了,但是gc唤醒更新器的时候的参数来源于GreenChrome.ini的“检查更新”的“检查版本”,所以造成了版本错乱。该问题已修复,在保存branch时会自动同步将分支写入GreenChrome.ini。
    ·为了方便道友们归纳安装包,在installer目录下的安装包文件名前面会加上分支,这样在管理的时候会比较方便。

一些善意的建议:

  • 老子一更新或者解压程序就会崩溃,这是咋回事?
    贫道掐指一算,大概有2方面原因:1、系统UAC保护了这个文件夹,程序没有权限操作(通常是Win8以上的系统会遇到,个人建议如果不是使用安装版的话,还是尽量将浏览器放在别处,例如D盘之类的);2、某些比较厉害的“杀毒软件”检测到了“高危操作”所以将其拦截了。
  • 启动chrome的时候,会弹出一个警告,说“Windows 找不到文件 ‘OOXX XXOO\ChromeUpdaterOOXX XXOO.exe’ 请确认文件名是否正确”
    出现这种情况,一般是因为你之前在CU#里勾选了“随GC启动”,然后在不经意间移动了CU#的位置或者把CU#的名字改了,GC根据配置文件来运行程序,结果发现找不到,故报错。这个时候找到chrome目录下的”GreenChrome.ini”文件,打开它,然后删除“[关闭时运行]”和“[检查更新]”两个节点里错误的路径并保存,再重新在CU#里勾选一次“随GC启动”即可。
  • 最近gvt1.com这个域名貌似解封了,所以大部分情况下可以不用“帆樯”就能下载。
  • 关于“自动清缓存”这个选项,很多朋友表示疑惑,我在这里稍微解释一下,勾上这个以后,程序会删除你当前所选目录下“User Data\Default\Cache”文件夹里面的东西,有2种情况会触发它,第一是在点击“查询”的时候,第二是在静默更新的情况下,谷歌浏览器关闭后GreenChrome会唤醒本程序,此时也会触发清理,当然,前提是你得勾上“自动清缓存”。
  • 请一定注意,一定注意,注意!如果你比较喜欢DIY文件夹结构(例如把版本号文件夹内的东西移出来放到chrome.exe那一层),请不要使用本工具,本工具只能更新默认文件夹结构。

CU#功能简介:

下载好CU#之后双击运行,程序会检查网络连接,如果没有网络连接就会退出。

在完成网络检查之后,就会看到程序的主界面,如果你的系统已经安装有Chrome并将其设置为默认的html打开工具,那么程序将自动把路径填写上去,当然,如果你没有将Chrome设置为默认,将CU#复制到Chrome的所在目录中运行,也可以自动识别。如果你没有安装过chrome,可以通过右边的“浏览”按钮来选择或者新建一个目录。

选择你想安装或下载的Chrome版本及架构,点击查询,就会出现文章开头那张图的内容,点击相应的链接可以复制这个链接,这就是最基本的查询功能了。

如果你填写了一个正确的路径,那么在上方你会看到2个按钮:下载并解压(那坨蓝色的云)和仅下载(那坨白色的云),如果没有路径或者路径错误,将会只看到后者。

下载的安装文件会被放置在CU#所在目录的installer文件夹下,如果你点击了下载并解压的话,在下载完成以后会自动将文件解压到你所选择的目录中,如果你没有勾选“保留安装包”,那么在解压完成以后安装包会自动删除。如果勾选了“保留上版本”,那么会将你的老版本的chrome.exe更名为old_chrome.exe。

值得注意的是,为了避免解压chrome的时候遇到chrome正在运行而导致解压失败,请在解压之前关闭你的chrome;到这里,也就算是最基本的更新了。

在解压完成之后你会看到类似这样的界面:

see gc

如果你之前没有见过GC,可以先去GC的主页先了解一下它的功能,再考虑是否使用。

在下载完成GC以后就可以在右边勾选“静默更新”及“随GC启动”了。如果只勾选了后者,那么在检查到更新的时候你会收到如下提示信息:

YouHaveUpdate

点击Yes(是)会启动CU#,点No(否)那么将不再提示这个版本的更新。

下面再来简要说说CU#的静默更新实现原理:

在被GC唤醒之后,CU#会隐藏运行,如果没有更新会直接退出,如果有更新则会在后台静默地下载更新安装包,下载完成之后退出。在你的chrome关闭的时候,GC会再次运行CU#,这个时候CU#如果发现刚刚下载的安装包,就会自动解压并更新。整个过程完全静默。

下载:

下载地址:

本地下载
百毒盘

请注意: 本程序需要.NET Framework 4.5运行环境(Win8及以后的系统自带) ,Win7可以在这里可以下载到;

关于开源:

在我的怂恿下,疯哥(ONEO)已经将本程序所使用的UI库“二傻子”开源(https://github.com/1217950746/Arthas-WPFUI),在这里首先要感谢一下他的无私奉献。

本着好玩的东西要一起玩的精神,我也已经将本程序的核心库开源(https://github.com/TkYu/ChromeUpdater),并且附上了一个以MVVM作为架构的简要示例程序。

这个库里包含了几乎所有的更新器的逻辑,你可以:

  • 使用 ChromeUpdaterCore.GetUpdateFromGoogle 函数直接向谷歌发送更新查询请求。
  • 使用 ChromeUpdaterCore.GetUpdateFromShuax 函数向shuax的服务器发送更新查询请求(会优先尝试国内的反代服务器)
  • 使用 ChromeUpdaterCore.DownloadFile 函数来下载一个文件并检查它的sha1值,下载默认会载入系统配置的代理,如果将迅雷模块放在更新器目录下会优先调用迅雷模块来下载
  • 使用 ChromeUpdaterCore.Extract 函数解压一个文件,如果你的系统有安装WinRAR或者7Zip并且将其设置为默认解压工具的话,会优先调用;如果没有则下载一个7za文件来进行解压

你还可以通过将一个ChromeUpdaterCore的实例绑定到wpf的DataContext上:

  • 绑定 CmdCheckUpdate 命令来检查更新
  • 绑定 CmdDownload 命令来下载chrome安装包
  • 绑定 CmdDownloadAndExtract 命令来下载并解压chrome安装包
  • 其他的绑定属性可以自行查看源代码

有人可能要问了,我下载来的代码编译以后画风怎么跟你发布的不一样呢?

这个有2方面原因,
首先,我这个程序也做了2年多了,在最“休闲”的情况下也都已经大大小小修改了上百次,期间往里面填了各式各样乱七八糟的代码,连我自己都看着都头晕,所以也没必要拿出来晕别人。
其次,开源版闭原版使用的都是同一个工具类,我能实现的这些花哨小窍门我相信大家也可以实现,开源代码已经实现了更新器最基本的“查询”、“下载”、“解压”三大核心功能,抛砖引玉的目的已经达到,这个程序再怎么玩花样,无非也是围绕着这三个功能来的,点到为止即可。

说句心里话,个人认为开源真正的意义并不是copy-paste,而是共同学习和交流进步,哪怕是抄,也得把它抄明白了,而不是囫囵吞枣。能举一反三,才是学习的理想状态,不是吗?

仅获取下载地址的核心程序说明:

本程序已停止维护,下载地址请前往 https://api.shuax.com/tools/getchrome 获取

鉴于很多人说集成迅雷或者做UI会让程序变得很大,而且考虑到其实大家基本上都装了迅雷,所以我就做了这么个东西,仅获取地址,不加任何其他功能。(只需要.net 2.0的框架。)

GoogleUpdateFetchOnly

最后:

各位如果有好的建议可以提出,但是可能不会马上就作修改。因为博主我平时下班回来都比较晚,研究这个的时间比较少。

可以前往 耍下的交流群(14724233) 交流,那里面的老司机比较多,都很熟练,耍下也会在群里解答大家关于Chrome及GreenChrome的问题。

在这里也要感谢耍下以及群里的各位朋友提出的宝贵建议;

当然也感谢所有支持我的人。



分享到:

38 Comments

  1. Posted by Cloud on

    工具还不错,界面也好看,但提几点意见:
    1、是否能够弄个代理开关,毕竟有些机友们电脑已经有了代理,可以自行决定是否开关,
    如作者你的代理失效的话,还能有另外的渠道查询,否则就是变成不可用的查询器了。
    2、打开更新器,已经获取目录的情况下,是否能够显示当前安装的版本?
    3、能否在界面上加一些使用小tips操作提示,比如我刚用的时候就不知道双击可以直接复制地址。
    4、能否出多版本,主模块版本(不包含解压和迅雷模块),和全模块版本(包含解压和迅雷模块),方便机友们选择下载?

      • 谢谢支持,部分提议会考虑加入下个版本。至于第二点,我刚刚去找了台电脑试了一下,只要填入了正确的路径并且chrome.exe是可读取状态,版本号就会显示在下方状态条上。

      • Posted by Google on

        非常感谢,耍下的失效了!追溯的这里,同意楼上的建议~

        • Posted by LookBack on

          能否告知x64位版本 查询方法,不是说您的程序使用方法。

          • Posted by 内向的洋葱 on

            英文字体很赞,载入动画很赞!

            • Pingback: Google Chrome 更新器 3.4,亲测可用

            • Posted by sdjk on

              那个脚本程序挺好用的!另外反馈两个bug:
              1,在中文输入法下输入编号“1”会无法获取下载地址
              2,怎么设置代理地址,文件名中不能输入“:”?

              • Posted by yihua_h on

                提个小小的建议,就是程序的字号太小了,看得很吃力,

                  • 你好,感谢反馈,2.1版本字体已经稍微调大,你可以看看是否还是小。

                  • Posted by 444444444 on

                    能开源吗????想学习学习,只会c# vb

                      • 文章已经更新,你可以看看。

                      • Posted by 随便 on

                        我已经关闭了uac,为什么还是提示“提示:程序无权对目录:C:\Program Files (x86)\Google\Chrome\Application 进行操作,故无法进行一键更新!”

                          • 从 windows 8开始 用户帐户的权限就缩紧了,即使你的用户在管理员组,很多操作依然需要审批。如果想彻底关闭审批,那么就要启用administrator用户,而且不能去开启管理员批准模式,只有这样才不会影响到普通程序对于系统级文件夹的访问,当然,如果这么做的话metro应用就相当于废了。个人建议还是放在其他盘符吧。

                          • Posted by 熊 on

                            不支持XP吗?一打开就报错。

                              • 这个程序是运行在.Net Framework 4.5下的,xp无法安装4.5的.net框架,换言之就是xp不能运行。xp用户可以使用文中的Shuax写的ChromeUpdater,那个可以在xp下运行。

                              • Posted by llleif on

                                我电脑装了360极速和chrome,自动检测到的是360的,卸载了360后。。。更新器直接打开就闪退了,是检测不到网络吗?

                                  • 好像是会检测到360极速,貌似是因为它的进程名里也带了chrome的缘故,我刚刚已经更新了一下,让它强匹配。

                                  • Posted by Bangerz on

                                    请问chomerupdaterMVVM已停止工作是什么问题????????

                                      • 这种问题一般很难定位,要么可能是系统没有安装相应的运行库,要么就是在运行的时候发生了非托管的错误,可以尝试一下在win7以后的系统上安装相应的运行库,然后再试试。

                                          • Posted by Bangerz on

                                            谢谢,用以前的版本能用。。就这个最新的版本不能用

                                        • Posted by ting on

                                          希望能增加一个设置默认chrome路径
                                          因为我目前有多个版本,我想把其它一个设置为默认的.但是每次打开cu#时,提示我的默认chrome是另外一个版本.我想用最新的做默认版本.但是发现无法获取.
                                          cu#能获取默认路径.肯定也有办法设置为默认版本的吧?

                                            • Posted by ting on

                                              不过我发现用注册表方式就可以注册成功,目标是把这个设置为默认打开.
                                              Windows Registry Editor Version 5.00

                                              [HKEY_USERS\S-1-5-21-1189282969-889249992-3764713107-500\Software\Classes\ChromeHTML\shell\open\command]
                                              @=”\”C:\\Program Files (x86)\\Google Chrome\\51.0.2704.103\\chrome.exe\” — \”%1\””

                                              如果能在软件中这样注入就更方便了,免得我又要另外弄一个reg文件.

                                                • 聪明,默认就是从这里读取的

                                              • Posted by BRO.BIRD on

                                                狂闪更新,闪退又重启,是什么鬼……完全用不了啊

                                                  • 感谢反馈,是我忘了把exe的版本跟着改上去导致的,下次一定注意 🙂

                                                  • Posted by magsom on

                                                    今天运行ChromeUpdaterSharp发现会无限反复自动更新自己……死循环了……希望能不要强制自动更新

                                                      • 哈哈,抱歉我的错,服务器版本号提上去了但是exe的版本号没跟着更新,我已经把版本号先退回来了。

                                                      • Posted by BRO.BIRD on

                                                        还是要膜拜一下大佬~!

                                                        • Posted by zif68 on

                                                          以前可以自动更新。现在不行了
                                                          还有自己动手用 ChromeUpdater这个下载安装更新新版本。

                                                            • 怎么个不行法,提示错误还是?

                                                            • Posted by 时空断裂 on

                                                              为什么不能选择随gc启动呢?

                                                                • 选择的那个目录下要有gc的dll才行哦,没有的话可以在更新器里面下载一个

                                                                • Posted by libragilmer on

                                                                  1、你好,程序界面“观摩学习”里面的“安装版下载(需翻腔)”,默认下载下来的 “ChromeStandaloneSetup64.exe” 会自动把自己设置为默认浏览器。
                                                                  在Chrome离线完整安装包的官方下载页面,手动点击下载时,可以选择勾选是否设置为默认浏览器。
                                                                  通过分析,是否勾选设置为默认浏览器,下载得到的 “ChromeStandaloneSetup64.exe” 并不同。分析下载链接发现,二者的下载链接不同,是否勾选默认浏览器,得到的下载链接的区别在于链接中有 “defaultbrowser” 这样的字符。
                                                                  建议,把设置默认浏览器的下载地址和不设置默认浏览器的下载地址都收录到“观摩学习”里面。
                                                                  Chrome离线完整安装包的官方下载页面:https://www.google.com/intl/zh-CN/chrome/browser/desktop/index.html?standalone=1
                                                                  2、建议出一个集成 迅雷模块 和 解压模块 的完整包下载。

                                                                    • 看了一下,现在在有些平台下访问下载页,设为默认浏览器的选项会被直接隐藏,并且defaultbrowser会被默认加上去,我目前还没找到一个比较确定的规律。

                                                                    • Posted by dianso on

                                                                      很实用的工具,赞!

                                                                      • Pingback: So 推荐一个Chrome更新工具无需梯子 - 小败部落格


                                                                      发表评论

                                                                      电子邮件地址不会被公开。 必填项已用*标注

                                                                      注意: 评论者允许使用[email protected]'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,[email protected] '(不包括单引号)[email protected] ',将会将评论发送给之前所有其它评论者。请务必注意user必须和评论者名相匹配(大小写一致)。

                                                                      无觅相关文章插件,快速提升流量