ブログ

Google Chrome 更新器

原创小工具
68条评论

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

据我所知有些哥们觉得带个exe到处跑还达不到“绿色”标准,于是在下准备了一个比较绿色的安装方法给Win7以上用户们:

  1. 找个你有权限读写的文件夹,新建一个空文件夹,然后双击进入到该文件夹
  2. 按住Shift单击滑鼠右键,点击’在此处打开PowerShell窗口’或者’在此处打开命令行窗口’
  3. 如果你打开的是PowerShell,运行以下语句:
  4. 如果你打开的是CMD,运行以下语句:

如果想附带上GreenChrome,就把上述脚本中的Chrome.ps1替换为ChromeWithGreenChrome.ps1即可

如果想自定安装分支及架构版本,可以前往 https://github.com/TkYu/PowerShellScripts 查看详情

可能有些用过耍下(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目录下的安装包文件名前面会加上分支,这样在管理的时候会比较方便。
  • v2.4.2.0:
    ·修复将架构从32位改为64位的时候GreenChrome无法更新的问题。
    ·非静默状态被GC唤醒检测到更新时的消息框启用系统视觉风格。
    ·将强插功能彻底删除(什么?你说你之前没找到在哪?),因为真的几乎用不上。
    ·修复部分系统复制内容到剪贴板时提示“出错了”。
    ·由于我和耍下的博客都进行了一次大搬家,所以程序内的部分链接也跟着换了,老版本的更新器可能无法自动更新自己,这种情况还请各位手动下载一下最新版本。
  • v2.4.5.0:<=当前版本
    ·群友提出有时候在解压过程中关机会导致解压不完整,希望能解决,于是加入了静默解压时对注销/关机事件进行阻止,届时会在关机/注销界面会出现相关信息并显示当前解压进度,解压完成之后系统会继续完成注销/关机,不需要点取消返回桌面,耐心等候几秒即可。在默认Win10系统上测试正常,之前在另一台电脑上测试无法阻挡,最后发现是开启了“关闭会阻止或取消关机的应用程序的自动终止功能”。
    ·程序在远程桌面运行会很卡,所以加入了对远程桌面的探测,在远程桌面上运行会取消模糊特效。
    ·从此版本开始GreenChrome使用国内的节点来下载。
    ·静默更新的等待时间从5秒下调到2秒,因为自动重启一个浏览器不需要这么久,而手动重启的话5秒又显得太少。
    ·程序欢迎页显示程序的版本号。

一些善意的建议:

  • 老子一更新或者解压程序就会崩溃,这是咋回事?
    贫道掐指一算,大概有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那一层),请不要使用本工具,本工具只能更新默认文件夹结构。
  • 如果你在使用过程中遇到了问题:请不要惊慌,将错误日志收集下来然后在耍下群里面发给我,或者直接发送到我的邮箱,如果在我能力范围内我会尽量处理。
  • 收集日志的方法:在更新器当前的文件夹中建立一个新的文本文档,然后将其改名为你的exe文件名相同的log文件(例如更新器是ChromeUpdateSharp.exe,那么这个文本文件就改为ChromeUpdateSharp.log),然后重启程序复现问题。

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#如果发现刚刚下载的安装包,就会自动解压并更新。整个过程完全静默。

下载:

当前版本2.4.5:

本地下载
百毒盘

请注意: 本程序需要.NET Framework 4.5运行环境(Win8及以后的系统自带) ,Win7可以前往http://www.microsoft.com/zh-cn/download/details.aspx?id=30653下载;

关于开源:

在我的怂恿下,疯哥(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

最后:

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

可以前往 耍下的交流群(40313,213,8) 进行纯真交流,那里面的老司机比较多,都很熟练,耍下也会根据当天的天气以及心情在群里解答大家关于Chrome及GreenChrome的问题。

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

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

说点题外话:上面的群号已经加密,本来耍下要求不再显示的,但是考虑到真正有技术的人其实我们也还是很欢迎的,所以就稍微加密一下。

至于为什么他会解散掉GreenChrome的群,并且隐藏这个交流群,其实我在这里可以简要阐述一下:

  • 有人加群就请求帮助,耍下或者群友帮助完了就再也不说话了
  • 有人并没在用GreenChrome或者更新器,但是错把这个群当成了别的群(甲铁虫之类的?),然后进来寻求帮助
  • 有人自己觉得很聪明,截了安全软件拦截GreenChrome的图,然后说这软件有问题,耍下说解决不了,那人就破口大骂然后愤然离群
  • 其他的个别比较极端的例子我就不提了,大家自行体会就好

其实作为一个开发者,我深知开发一个这样的软件的难度,更何况还是一个维护了这么多年的软件,我很不理解为什么会有人把“免费软件”的维护当成是一种天经地义。

不仅是耍下,包括我自己,也只是工薪阶层,平时就那么点工资,花那些精力去维护一个免费软件,没有所谓的盈利,甚至很多时候连一句感谢都得不到,服务器之类的那些杂七杂八的费用呢?反而得自己掏腰包。

所以我在这里也倡导一下,理性一点,问题谁都会遇到,谁都希望能够在自己遇到问题的时候被帮助一把,但是同时也要理性一点,帮忙不是义务的,哪怕没有得到帮助,也不要去迁怒于别人,正所谓:己所不欲勿施于人。不是吗?

,
上一篇文章
【原创小工具】Post请求发送器
下一篇文章
种子文件转磁力小工具

Related Posts

No results found

68条评论. Leave new

发表评论

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

Fill out this field
Fill out this field
请输入正确的电子邮件地址。

菜单