最近我被一个屁大点事儿给彻底搞烦了。我们公司这“公寓大楼”里,每个部门都跟一个个住户似的,虽然数据隔离得挺但有些通用的系统工具,我得负责给他们装上、维护这回要搞的是那个文档管理客户端,足足要推到二十多台机器上。
为什么非得搞“绿色下载”?
刚开始,我寻思着不就是装个软件嘛能有多难?我就拿官方那个安装包,挨个机器跑了一遍。第一台,管理员权限,允许。第二台,还得找IT部门申请临时的本地管理员密码。第三台,系统版本不对,报错。到了第五台,我TM就已经要崩溃了。
你别看这安装包只有一百多兆,但是它必须得在C盘留下几个关键文件,然后往注册表里写几百个键值,特别是那个授权信息,每装一台机器都得手动输入一次。我算了一下,如果用传统的安装方式,我半天的时间就得浪费在跟“下一步”、“同意协议”和“权限申请”这些破事儿上。
我这人最讨厌重复劳动,简直是在磨洋工。我当时就拍了桌子,心里寻思着,必须得找个办法,一键搞定,最好是解压了就能用,这就是我开始琢磨“公寓大楼_安装包_绿色下载”的起因。
撸起袖子干——抠包的过程
既然官方包不能用,我就得自己动手做一个“绿色包”。
第一步,我找了一台干净的虚拟机,保证它除了系统什么都没有。我把官方安装包扔进去,运行它,注意,运行到一步,不要点“完成”,先暂停。
第二步,祭出神器——文件系统监控工具。我启动它,开始实时记录这个安装程序到底往硬盘的哪个角落里塞了文件,又往注册表里写了什么。这东西就像一个贼,我得盯着它把赃物藏在哪儿。
我发现,核心的程序文件全部都在安装目录里,这没问题。但关键在于两处:
- 它在C:\Users\[User]\AppData\Roaming 下面创建了一个隐藏文件夹,用来放用户的临时缓存和配置。
- 它在HKEY_LOCAL_MACHINE\Software 下面写了一堆授权信息,这个最TM烦人,因为它需要管理员权限才能写入。
我立马就有了主意。既然HKEY_LOCAL_MACHINE需要权限,那我就让它写到HKEY_CURRENT_USER下面去!HKEY_CURRENT_USER是用户自己的配置,不需要管理员。我只需要研究清楚它读写注册表的那部分逻辑。
第三步,开始“绿色化”。我先把安装目录下所有文件都打包,搞成一个自解压的压缩包。然后重点来了,我得写一个批处理脚本(bat文件),让它干两件事:
- 自解压到用户想放的位置(比如桌面或者D盘的某个目录)。
- 用命令行往 HKEY_CURRENT_USER 下面写入关键的配置和授权信息,完美避开管理员权限的限制。
反复调试和的实现
说起来简单,做起来又是他妈的一堆坑。第一次测试,我双击运行了我的绿色包,脚本跑完了,程序也成功解压了。但我运行客户端,它提示“授权失败”。
我盯着那个注册表监控工具看了半天,发现问题出在路径上。原来官方程序在安装时,会根据机器的SID(安全标识符)生成一个独特的键值。我直接照搬这个键值是没用的,因为每台机器的SID都不一样。
我琢磨了半宿,发现,只要在程序启动前,先执行一个特殊的初始化命令,让程序自己去生成那个SID对应的键值,然后我再用我的脚本把核心授权数据覆盖进去,就能骗过客户端。
最终的“绿色包”长这样:
一个不到200M的自解压程序,里面包含了所有的文件,和一个我精心编写的bat脚本。用户拿到手,只需要双击运行,解压完成后,脚本会在后台闪一下,执行那三条关键的注册表写入命令,然后自动关闭。
我在“公寓大楼”里随便挑了五台不同配置的电脑进行测试,从老掉牙的Windows 7到最新的Windows 10,全部一次成功,全程不到五秒钟,不需要任何管理员权限,不需要点“下一步”,更不需要找IT部门扯皮。
这下爽了。我把这个“绿色下载”包发给了各部门负责人,告诉他们:自己搞定,有问题再找我。从那以后,再也没人因为安装权限或者步骤问题来烦我了。你说我为啥热爱分享这些折腾的记录?因为这种绕开大厂傻逼限制、自己找到捷径的感觉,真TM带劲!