尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Windows下Chrome安装目录迁移到D盘:目录联接与更新兼容指南

Windows下Chrome安装目录迁移到D盘:目录联接与更新兼容指南 上个月把系统盘从 256G 换到 1T 之前C 盘红了整整两周。翻了一遍占用排行Windows 自己占 40G而Chrome一个人吃掉 9.3G其中 7G 是AppData里的用户数据和历次版本残留。第一反应当然是打开设置 - 应用看看能不能移动结果发现 Chrome 的卸载项挂在HKCU下面压根没有更改安装位置这个入口。于是就有了这篇东西在Windows上把Chrome的安装目录挪到 D 盘并且保证它在后续自动更新之后还能正常工作。整个过程我踩了三个坑也复现过同事电脑上两种失败方案下面把能用的、不能用的、以及为什么不能一次讲明白。1. 先接受一个事实Chrome 的安装路径是写死的1.1 用户级安装默认躺在 AppData 里从官网下载的ChromeSetup.exe是用户级安装包per-user它不往C:\Program Files放任何东西而是把程序装到这里%LOCALAPPDATA%\Google\Chrome\Application # 展开后就是 C:\Users\你的用户名\AppData\Local\Google\Chrome\Application这条路径下面有版本号子目录形如131.0.6778.86、chrome.7z压缩包、Installer目录以及一个指向当前版本的小入口。用户数据——书签、密码、扩展、缓存——则放在同级的User Data目录里。为什么偏偏是这里因为用户级安装不需要管理员权限双击就能装完企业里普通员工账号也能自助安装。代价是所有数据都堆在系统盘。很多人有个错觉觉得AppData里的东西不算安装实际上 Chrome 的缓存加历史版本残留几个月就能吃到 10G 以上比很多正经软件还狠。1.2 系统级安装能进 Program Files但依然不能自选盘符如果你用企业版 MSIGoogleChromeStandaloneEnterprise64.msi或者在安装命令后面跟上--system-levelChrome 会走系统级安装落到C:\Program Files (x86)\Google\Chrome\Application看起来正规多了但它同样不给浏览对话框。Chromium 的安装器里根本没有选择目标文件夹这一步INSTALLDIR之类的参数在官方包里基本属于摆设。原因并不复杂Chrome 的自动更新由 OmahaGoogle Update负责它需要在固定的相对位置找到版本目录、chrome.7z和更新清单。一旦允许用户随便放更新链路就要处理无数种路径组合出错概率直线上升。Google 的选择很干脆——不让你选。1.3 为什么剪切 粘贴必然翻车这是最多人踩的第一个坑既然不让选那我装完手动拖过去总行吧拖动的一瞬间Chrome 就打不开了或者打开了但扩展全消失、提示配置文件损坏。原因有三层一层比一层深。第一层是快捷方式。桌面、任务栏、开始菜单里的快捷方式写的是绝对路径文件一走指向的就是空气。第二层是注册表记录。Chrome 和 Google Update 会在HKCU\Software\Google\Update与HKLM\SOFTWARE\WOW6432Node\Google\Update下面登记客户端信息里面有版本号、安装路径、卸载串。系统的应用和功能列表、更新器的自检逻辑读的都是这些值。文件搬走了值还指着老地方于是应用和功能里点卸载直接报错更新器则认为这次安装已经损坏。第三层是通用规律Office、WPS、通达信这类软件都依赖注册表登记安装信息不只是 Chrome 有这个问题。任何手动把安装目录搬走的做法都绕不开上面三层。所以正确的思路不是搬走文件而是让原来的路径依然能找到文件——这就引出了下面要讲的目录联接。2. 三条路摆在面前只有一条能长期用2.1 重装法能换级别换不了盘符网上流传最广的说法是卸载重装用 MSI 就能自定义路径。实测下来MSI 只能把你从用户级带到系统级路径依然锁死在Program Files。它真正有价值的地方在于多用户共用一份程序、配合组策略统一管理、卸载更干净。所以结论很清楚——只想让 Chrome 从AppData挪到Program Files重装法有效目标是挪到 D 盘重装法帮不上忙。2.2 目录联接法唯一能做到路径不变、文件在别处NTFS 的**目录联接Junction**是一种重解析点。可以把它理解成给文件夹挂一个传送门C:\Users\你\AppData\Local\Google\Chrome这个位置看起来还在程序访问它的时候系统会把请求转发到D:\Apps\Chrome。关键点有这么几个对 Chrome 来说路径没变注册表、快捷方式、更新器全部照旧工作对磁盘来说实际数据落在 D 盘创建联接不需要管理员权限这点和符号链接不同符号链接要提权或开开发者模式删除联接本身不会连带删除目标数据但命令写错就不好说了后文会专门讲。这是我实际用下来最稳的方案也是下面实操部分的主线。2.3 只改注册表路径看着最正宗其实最脆还有一套方案是文件搬到 D 盘然后把更新器记录里的安装路径值改成新路径。理论成立实操有两个问题。一是路径记录散落在多个键下面漏改一个就出问题二是 Chrome 自动更新时会重新校验并可能写回原值下次更新完你就得到一个半残的安装。单独用这一招我不推荐。2.4 三条路的横向对比方案能否换盘更新后是否稳定需要管理员回滚难度适用场景卸载重装为系统级只能到 Program Files稳定是低多用户共用一台机器目录联接Junction任意本地 NTFS 盘稳定否低个人机省 C 盘空间只改注册表路径能不稳定是高不推荐单独使用3. 动手之前把这几件事先做掉3.1 彻底退出 Chrome包括背后那两个幽灵进程只关窗口是不够的。Chrome 默认开启关闭后继续运行后台应用托盘里可能还挂着图标更新器GoogleUpdate.exe也可能正在后台检查。操作顺序建议这样走地址栏输入chrome://settings/system关掉关闭 Google Chrome 后继续运行后台应用打开任务管理器找chrome.exe、GoogleUpdate.exe、GoogleCrashHandler.exe全部结束在任务计划程序里找名字带GoogleUpdateTaskUser的计划任务先禁用——这一步不是必须但能避免复制过程中更新器突然干活把文件锁住。提示复制时如果提示文件正在使用八成是还有 chrome.exe 没退干净或者某个扩展的进程在跑。别用强制结束硬扛先把浏览器真的关干净。3.2 备份真正值钱的东西User Data目录里真正不能丢的是这几样User Data\Default\Bookmarks——书签一个无扩展名的 JSON 文件User Data\Default\Login Data——保存的密码SQLite 数据库需要和Login Data For Account一起带走User Data\Default\Preferences——设置项User Data\Default\Extensions——本地解包的扩展商店装的不必管User Data\Local State——加密密钥脱离它密码库解不开。最省事的做法是把整个User Data目录复制一份到别的盘。不要用剪切复制完成、验证 Chrome 能正常打开、书签密码都在之后再决定要不要清理老目录。3.3 目标盘的两个硬条件必须是本地卷。联接不能指向网络共享路径也不要指向 U 盘或移动硬盘——拔盘就崩。文件系统用 NTFS。exFAT 和 FAT32 不支持重解析点权限行为也对不上。顺手看一眼剩余空间按 Chrome 目录当前大小乘以 1.2 留余量因为更新时会临时解压chrome.7z。4. 完整实操把 Chrome 搬到 D:\Apps\Chrome4.1 第一步复制而不是剪切先建目标目录比如D:\Apps\Chrome然后把整个C:\Users\用户名\AppData\Local\Google\Chrome的内容复制过去。推荐用robocopy而不是鼠标拖拽因为 Chrome 目录里有大量小文件和深层路径资源管理器偶尔会静默跳过robocopy %LOCALAPPDATA%\Google\Chrome D:\Apps\Chrome /E /COPYALL /R:1 /W:1 /NFL /NDL参数逐个说明/E复制所有子目录包含空目录/COPYALL保留权限、属性、时间戳Chrome 对目录权限比较敏感/R:1 /W:1出错只重试一次、等一秒避免卡在某个被占用的文件上/NFL /NDL不刷屏列文件名日志干净好读。复制完之后对比两边的大小。差几 MB 可能是缓存文件在变差几百 MB 就是没复制全回头重来。4.2 第二步把原目录改名而不是删除把%LOCALAPPDATA%\Google\Chrome重命名为Chrome_bak。这一步的意义在于联接创建失败、Chrome 起不来的时候你还有一条退路。注意改名之前确认 Chrome 已经彻底退出。如果改名提示文件夹正在使用回到 3.1 重新清一遍进程。4.3 第三步创建目录联接用普通命令提示符就行Junction 不需要提权mklink /J %LOCALAPPDATA%\Google\Chrome D:\Apps\Chrome看到为 xxx xxx 创建的联接就成功了。PowerShell 下的等价写法New-Item -ItemType Junction -Path $env:LOCALAPPDATA\Google\Chrome -Target D:\Apps\Chromemklink的参数顺序是先链接、后目标写反了会报错。另外链接路径必须不存在所以务必先把原来的Chrome目录改名。如果只想搬程序、把User Data留在 C 盘也可以只对Application子目录做联接。但多数人的痛点是用户数据太大整体搬更划算。4.4 第四步验证别只看能不能打开打开 Chrome然后依次确认这几件事地址栏输入chrome://version看配置文件路径和可执行文件路径。走联接的情况下这里通常仍然显示C:\Users\...\AppData\Local\Google\Chrome\...这是正常的因为联接对上层应用是透明的书签、密码、扩展是否都在打开D:\Apps\Chrome确认文件确实在活动浏览几个网页后 Cache 目录应该变大打开chrome://settings/help触发一次更新检查看能否正常下载并重启生效。如果你非要在界面上看到 D 盘路径那就只能用改注册表那条野路子代价就是 2.3 里说的不稳定。4.5 第五步注册表到底要不要动走完整的目录联接一个字都不用改。因为 Chrome 和 Google Update 记录的路径依然是%LOCALAPPDATA%\Google\Chrome\...而这个路径通过联接依然有效。只有当目标是只搬 Application、不搬 User Data并且想让更新器直接认 D 盘时才需要去碰Google\Update下面的客户端记录。即便这样我也建议先跑一段时间观察每次 Chrome 大版本更新后回来看一眼chrome://version和D:\Apps\Chrome里的版本号子目录是不是同步出现了。5. 这几个坑我在真实机器上全撞过5.1 更新后 C 盘又长出一个 Chrome 目录现象迁移完过了一两周C 盘空间又少几个 G一看AppData\Local\Google下面出现了两个 Chrome 目录。原因基本是两种一是当初只联接了Chrome的一部分路径Installer之类没覆盖到更新器在缺失的位置重建了目录二是复制时漏了隐藏文件更新器校验不过干脆重新下载了一份。排查方法很直接先看D:\Apps\Chrome里的版本子目录是不是最新的。如果 D 盘版本落后说明更新其实写到了 C 盘那个新目录里那就把新目录删掉重新做一次完整联接。5.2 杀软和清理大师会把联接当成异常部分安全软件、系统优化工具会把重解析点识别为可疑的目录伪装然后顺手帮你修复——修复的结果就是联接被删、目录被重建Chrome 又回到了 C 盘。处理办法是在防护规则里把%LOCALAPPDATA%\Google和你的目标盘目录加白名单。企业环境更要留意终端管控策略可能直接禁止重解析点这种情况只能退回系统级安装到 Program Files。5.3 别把目标目录放进 OneDrive 之类的同步盘有人图省事把目标设成OneDrive\Apps\Chrome。结果是同步客户端疯狂上传Cache、Code Cache、GPUCache这几个目录几十万个小文件排队同步网盘直接卡死Chrome 也因为文件被锁频繁报错。要搬就搬到不参与同步的本地目录D:\Apps\...这种最省心。5.4 多用户登录的场景一台机器上有多个 Windows 账号时每个账号的%LOCALAPPDATA%是独立的。你只做了当前账号的联接换个人登录他还是往自己的AppData里装。只给一个账号做联接不会影响其他人但磁盘占用统计会很乱。真正的多用户场景建议直接用系统级 MSI 装到Program Files再对Program Files\Google\Chrome做一次全局联接。5.5 Chrome 109 与老系统迁移时顺手能做的事还在用 Windows 7 / 8.1 的机器通常被固定在 Chrome 109 这个最后的兼容版本上。这类机器做目录迁移有个额外好处可以把自动更新彻底关掉避免更新器把不兼容的新版本推下来。关更新的常见做法是禁用GoogleUpdate相关的计划任务和服务再配合组策略把更新地址指向空。这里必须提醒一句关掉更新等于放弃安全修复只在完全离线、内网隔离的机器上这么干联网机器别图省事。6. 想反悔怎么办以及这套路还能用在哪些软件上6.1 三步回滚完全退出 Chrome 和更新器删掉联接rmdir %LOCALAPPDATA%\Google\Chrome。注意是rmdir不是rmdir /s因为联接本身不是真目录rmdir只会摘掉链接不会删 D 盘里的数据保险起见先把 D 盘目录再备份一份把之前的Chrome_bak改回Chrome启动验证。如果第 2 步手抖加了/s数据可能真的被删。这条命令执行前务必再确认一次目标盘的数据有备份。6.2 图形化的小工具值不值得用不想记命令的话Link Shell Extension这类资源管理器扩展挺好用选中目标文件夹右键选择链接源再到目标位置右键创建联接。适合偶尔用一次的人。但它有个习惯性风险——菜单里 Symbolic Link、Hardlink、Junction 挨在一起点错一个创建出来的东西行为完全不同。如果指望它长期维护多台机器我还是建议写一个批处理脚本固定下来参数不用记双击就跑。6.3 这套联接大法的通用版理解了原理之后会发现它不只能用在 Chrome 上。凡是安装路径写死、又不给改目录、同时又很占空间的软件都可以这么办软件默认占位大户迁移建议Chrome / Edge%LOCALAPPDATA%下的程序与缓存整体联接避开同步盘VS Code%USERPROFILE%\.vscode\extensions单独联接扩展目录更稳Docker Desktop%LOCALAPPDATA%\Docker与虚拟磁盘优先在设置里改磁盘映像位置Elasticsearchdata与logs目录改配置文件而不是做联接各类开发工具链npm / pip / Maven 缓存用环境变量或配置指定路径这里有个原则值得记下来软件自己提供了改路径的配置项就优先用配置项比如 Elasticsearch 的path.data、Docker 的磁盘映像设置。只有当软件压根不提供或者提供了但路径写死在注册表里才动用联接。联接是兜底手段不是第一选择。6.4 最后一点个人经验我手上三台开发机都做了 Chrome 迁移最久的一台跑了两年多中间经历了二十来次大版本更新没出现过版本错乱。唯一一次翻车是同事的机器上装了某款系统加速工具悄悄把联接清理掉了表现是Chrome 突然变回 C 盘、书签还在但缓存全空。所以迁移完成之后我建议你过两周回来看一眼D:\Apps\Chrome的版本子目录有没有跟着更新。这一步花十秒钟能省掉后面半小时的排查。
返回列表