另辟蹊径解决 Windows 初始用户名为中文导致部分程序运行出错的问题
如果你的微软账号名含有中文,建议在安装 Windows 时跳过登陆微软账号的步骤(例如可以shift+f10打开命令行执行 oobe\bypassnro.cmd,跳过强制网络连接),并在新建用户时使用英文用户名!后续可以在设置中手动登陆微软账号。

这天我在电脑上安装 IDA,安装完我打开软件测试了一下,发现 log 里有几个库加载错误,报的是找不到模块

于是我循着这个路径找了一下,发现这几个文件实际都存在,那为什么还会报错呢?仔细看了下这个路径,可以发现他处在用户目录下,由于我在安装 Windows 时设置的初始用户名是中文的,直觉告诉我这八成就是因为编码错误导致的。
这种问题在 Windows 中其实很常见,一般来说有两种解决方法:
一种是直接改注册表用户文件夹路径然后重命名文件夹,据我的搜索结果来看,目前网上类似问题的解决方法基本只有这个,不过这个方式有一定的风险,毕竟很难确保其中所有的依赖关系都能很好的对上,而且对我这种懒得重启电脑的人来说也有点麻烦
另一种是直接创建一个新的英文名用户,在它上面运行程序,嗯不过这种方法因为必须切换用户,除非是只要用那一个程序不然实际用起来很麻烦,尤其是需要和原本用户上的程序交互的情况
总之两种方案都各有各的麻烦,我就一边思考怎么办一边翻那几个目录,突然我注意到 User 目录下除了几个常见的用户的目录,还有一个乱码目录(实际是用 utf-8 编码的正常名字用 gb18030 错误解码得到的),里面是 nvidia 的 dxcache 和 Adobe 的 log,大概也是因为编码问题所以被错误的创建在了这里

于是我突然就有了灵感,如果这个目录恰好是编码错误后访问的目录,那么这个目录下没有那几个库就很合理,那我干脆把这个目录删掉建一个链接在这不就好了,不过我也不太确定 IDA 是不是访问的这里,总之先试一下
删掉乱码目录,在 USER 目录下打开有管理员权限的 cmd(mklink 这个命令是 cmd 的内建命令,所以不能用 powershell),运行 mklink /j "乱码用户名" "原本的用户名"

再次运行 IDA 试了一下,果真没有再报错了,可见它也是因为类似的原理访问了同样的错误路径。
于是我想试试这个方法的通用性怎么样,于是我盯上了之前玩的破解版 GTA5,这个东西就有类似的问题,具体表现是中文用户名运行后会显示激活错误。可惜我试着运行了一下发现并没有解决它的问题
不过既然走到这了那不解决一下实在可惜,于是我拿出了 Process Monitor 过滤了一下他访问的文件,从访问路径和返回值来推断应该就是下面这条


啊这,看起来错误编码已经被替换成了替换符号,把这个事件导出成 xml 也是替换符,猜测可能这个完全错误的路径名已经不属于文件系统合法文件名所以被替换了?于是抱着试一试的态度我把这4个替换符也给链接了,再次运行试了一下问题还真就解决了。

看来这种思路还是能普遍解决类似问题的,不过问题的关键可能就是找到这个错误的目录名是什么。。 当然我也不能肯定的说所有情况都能用这种方法解决就是了。
总结:虽然算是成功解决了,不过下次设置系统时还是记得千万不要再设置中文用户名了