另辟蹊徑解決 Windows 初始用戶名為中文導致部分程序運行出錯的問題
如果你的微軟賬號名含有中文,建議在安裝?Windows 時跳過登陸微軟賬號的步驟(例如可以shift+f10打開命令行執(zhí)行 oobe\bypassnro.cmd,跳過強制網絡連接),并在新建用戶時使用英文用戶名!后續(xù)可以在設置中手動登陸微軟賬號。

這天我在電腦上安裝 IDA,安裝完我打開軟件測試了一下,發(fā)現 log 里有幾個庫加載錯誤,報的是找不到模塊

于是我循著這個路徑找了一下,發(fā)現這幾個文件實際都存在,那為什么還會報錯呢?仔細看了下這個路徑,可以發(fā)現他處在用戶目錄下,由于我在安裝 Windows 時設置的初始用戶名是中文的,直覺告訴我這八成就是因為編碼錯誤導致的。
這種問題在 Windows 中其實很常見,一般來說有兩種解決方法:
一種是直接改注冊表用戶文件夾路徑然后重命名文件夾,據我的搜索結果來看,目前網上類似問題的解決方法基本只有這個,不過這個方式有一定的風險,畢竟很難確保其中所有的依賴關系都能很好的對上,而且對我這種懶得重啟電腦的人來說也有點麻煩
另一種是直接創(chuàng)建一個新的英文名用戶,在它上面運行程序,嗯不過這種方法因為必須切換用戶,除非是只要用那一個程序不然實際用起來很麻煩,尤其是需要和原本用戶上的程序交互的情況
總之兩種方案都各有各的麻煩,我就一邊思考怎么辦一邊翻那幾個目錄,突然我注意到 User 目錄下除了幾個常見的用戶的目錄,還有一個亂碼目錄(實際是用 utf-8 編碼的正常名字用 gb18030 錯誤解碼得到的),里面是 nvidia 的 dxcache 和 Adobe 的 log,大概也是因為編碼問題所以被錯誤的創(chuàng)建在了這里

于是我突然就有了靈感,如果這個目錄恰好是編碼錯誤后訪問的目錄,那么這個目錄下沒有那幾個庫就很合理,那我干脆把這個目錄刪掉建一個鏈接在這不就好了,不過我也不太確定 IDA 是不是訪問的這里,總之先試一下
刪掉亂碼目錄,在 USER 目錄下打開有管理員權限的 cmd(mklink 這個命令是 cmd 的內建命令,所以不能用 powershell),運行?mklink /j?"亂碼用戶名"?"原本的用戶名"

再次運行 IDA 試了一下,果真沒有再報錯了,可見它也是因為類似的原理訪問了同樣的錯誤路徑。
于是我想試試這個方法的通用性怎么樣,于是我盯上了之前玩的破解版 GTA5,這個東西就有類似的問題,具體表現是中文用戶名運行后會顯示激活錯誤??上以囍\行了一下發(fā)現并沒有解決它的問題
不過既然走到這了那不解決一下實在可惜,于是我拿出了 Process Monitor 過濾了一下他訪問的文件,從訪問路徑和返回值來推斷應該就是下面這條


啊這,看起來錯誤編碼已經被替換成了替換符號,把這個事件導出成 xml 也是替換符,猜測可能這個完全錯誤的路徑名已經不屬于文件系統(tǒng)合法文件名所以被替換了?于是抱著試一試的態(tài)度我把這4個替換符也給鏈接了,再次運行試了一下問題還真就解決了。

看來這種思路還是能普遍解決類似問題的,不過問題的關鍵可能就是找到這個錯誤的目錄名是什么。。 當然我也不能肯定的說所有情況都能用這種方法解決就是了。
總結:雖然算是成功解決了,不過下次設置系統(tǒng)時還是記得千萬不要再設置中文用戶名了