1、问题
WSL2 无法启动,在终端 wsl -l -v
发现是升级更新失败了,报错如下,其中详细信息说无法写入注册表键值。
PS C:\WINDOWS\System32> wsl -l -v
WSL 正在完成升级...
Could not write value to key \SOFTWARE\Classes\Directory\shell\WSL. Verify that you have sufficient access to that key, or contact your support personnel.
更新失败(退出代码: 1603)。
错误代码: Wsl/CallMsi/Install/ERROR_INSTALL_FAILURE
2、解决方法
打开注册表编辑器,找到对应项 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell\WSL
,右键打开权限
,上面选中 SYSTEM
用户(注意别选错!),给它加上 允许完全控制 的权限(如下图),就好了(即时生效,无需重启等等)!
3、后续
重新运行 wsl -l -v
,发现还是不行?细瞅一眼,虽然还是报错,但报的注册表键变了!又有一个键无法写入,同理,再去注册表找到这个键(文件夹),修改权限,允许 SYSTEM
用户完全控制。
PS C:\WINDOWS\System32> wsl -l -v
WSL 正在完成升级...
Could not write value to key \SOFTWARE\Classes\Directory\shell\WSL\command. Verify that you have sufficient access to that key, or contact your support personnel.
更新失败(退出代码: 1603)。
错误代码: Wsl/CallMsi/Install/ERROR_INSTALL_FAILURE
再重试 wsl -l -v
,还会报另一个键(文件夹)有同样问题,同样修改权限……
4、总结
总共有 6 个注册表键(文件夹)的权限,在 wsl 升级过程中, SYSTEM
用户缺少对它们的写入权限(github 上这问题出现好久了,不知道微软啥时候能修上 bug ),修改加上即可。
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell\WSL
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell\WSL\command
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\Background\shell\WSL
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\Background\shell\WSL\command
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Drive\shell\WSL
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Drive\shell\WSL\command