vbr9d
发表于 2019-5-8 14:05:58
本帖最后由 vbr9d 于 2019-5-8 21:52 编辑
不知道什么时候开始aegisub就没法正常更新字体缓存,没法检查字体了,感觉有可能是因为这软件影响?想请问有什么解决办法吗?我已经尝试过手动删除C:\Windows\System32\FNTCACHE.DAT和C:\Windows\ServiceProfiles\LocalService\AppData\Local\FontCache下的所有文件,重启过,开关过windows font cache service,依然是检查就秒说无法找到字体,安装新字体以后也没用
-------------------------
https://github.com/Aegisub/Aegisub/issues/92
抱歉,好像不是这软件导致,发现貌似是win10 更新后导致?不知道怎么解决...不太想把win10回滚,不知道有没有其他检查字体缺字的软件...?
yzwduck
发表于 2019-5-8 21:55:14
vbr9d 发表于 2019-5-8 14:05
不知道什么时候开始aegisub就没法正常更新字体缓存,没法检查字体了,感觉有可能是因为这软件影响?想请问 ...
这个锅需要让 aegisub/Windows 来背。
正常系统全局安装字体时,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts 会保存字体名称与其文件路径,aegisub 它们只读取了这个列表。
但是最近(两、三个月?) Windows 的字体配置有些变化,允许普通用户把字体安装到用户目录下,这些信息保存在 HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Fonts,所以那些软件已经少考虑了这部分情况。
而更复杂的是,如果使用 FontLoader(Sub)/其他字体管理工具“临时加载字体”,我不知道现在 Windows 把这部分信息保存在哪里,但测试发现,只有 GDI 接口,以及开了字体缓存情况下的 DirectWrite 接口,才能访问到这部分信息。
FontLoaderSub 使用 GDI 接口来判断系统是否存在字体、临时加载字体,所以字体的加载与枚举是吻合的,可以通过重复加载同一套字幕字体,看它们的输出结果来判断。
解决方法:让 aegisub 等软件使用更合理的 API 来枚举系统中的字体。
@tonyhsie 大佬怎么看这个问题?
tonyhsie
发表于 2019-5-9 01:17:19
vbr9d 发表于 2019-5-8 14:05
不知道什么时候开始aegisub就没法正常更新字体缓存,没法检查字体了,感觉有可能是因为这软件影响?想请问 ...
解決方式很簡單
把
C:\Users\<用户名>\AppData\Local\Microsoft\Windows\Fonts
裡面的所有字型檔案拷貝出來,然後刪除掉這些字型
然後重新安裝,安裝時記得選擇 "為所有使用者安裝",而不是 "安裝"
這樣一切字型程式都會和以前一樣正常運作
tonyhsie
发表于 2019-5-9 01:27:28
yzwduck 发表于 2019-5-8 21:55
这个锅需要让 aegisub/Windows 来背。
正常系统全局安装字体时,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ ...
Windows 10 1809 版開始,允許使用者自行安裝字型到自己的使用者帳戶裡 (不再需要系統管理者權限,以下簡稱這種字型為 user font)
這種安裝方式是以前沒有的,所以大部分舊的字型相關程式 (如 Aegisub) / API 並不支援
新的字型安裝方式,便是在字型檔案上按滑鼠右鍵,選 "安裝"
舊的字型安裝方式,現在改叫 "為所有使用者安裝" (需系統管理者權限)
如圖
在 ListAssFonts 的討論串裡也有討論過相關問題兩次,分別是
http://bbs.acgrip.com/forum.php?mod=viewthread&tid=1894&page=17#pid41025
http://bbs.acgrip.com/forum.php?mod=redirect&goto=findpost&ptid=1894&pid=43190&fromuid=8179
目前 ListAssFonts 可以辨識出系統安裝的 user font 字型(這是因為 .NET API 支援 user font 的關係,非程式本身的特殊支援)
但無法拷貝(這功能就需要改程式了,對 這裡的 user font 作特別處理)
我個人是建議一般用戶 "別使用這種新的字型安裝方式" 以免造成自己的不便與麻煩(像 Aegisub 裡,跟字型檔案相關的功能,遇到 user font 都會失效)
至於現有的字型程式該不該去支援 user font,我想這就看開發者個人的想法了
yzwduck
发表于 2019-5-9 06:19:55
tonyhsie 发表于 2019-5-9 01:27
Windows 10 1809 版開始,允許使用者自行安裝字型到自己的使用者帳戶裡 (不再需要系統管理者權限,以下簡 ...
作为开发者而言,我觉得限制用户使用系统的新特性,只能作为临时的应对措施;让代码适应新系统特性,才是解决问题的方法。
如果“在 win10 1809 下使用各种字体加载位置”、“查找字幕指定字体是否缺字”这个需求,目前没有工具能实现的话,也许有将其实现的价值,来写一个新的/整合到已有工具里。
可以确认的是,这个功能不会出现在 FontLoaderSub 里;如果(很久之后,比如半年)我把这工具做出来的话,感觉会和 ListAssFonts 有很多重复的地方,所以想打听一下大佬的想法。
注:通过 AddFontResource 临时加载的字体,貌似目前只有开了字体缓存的 DirectWrite 才能获取到它的路径信息。
vbr9d
发表于 2019-5-9 10:42:00
yzwduck 发表于 2019-5-8 21:55
这个锅需要让 aegisub/Windows 来背。
正常系统全局安装字体时,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ ...
感谢解释~理解原因了
vbr9d
发表于 2019-5-9 10:43:38
tonyhsie 发表于 2019-5-9 01:17
解決方式很簡單
把
感谢解决方法!!现在弄好了{:4_683:}
tonyhsie
发表于 2019-5-10 01:53:26
yzwduck 发表于 2019-5-9 06:19
作为开发者而言,我觉得限制用户使用系统的新特性,只能作为临时的应对措施;让代码适应新系统特性,才是 ...
作为开发者而言,我觉得限制用户使用系统的新特性,只能作为临时的应对措施;让代码适应新系统特性,才是解决问题的方法。
您這個想法,原則上我是完全同意的
不過針對 user font 這個個案來說,個人是覺得,這個設計,並不是很完善的一套字型機制
很容易造成用戶在 Win10 1809 之後安裝的 user font,無法使用舊字型軟體來處理的問題
(而且直接把 user font 這種新機制作到舊選項裡面,舊的字型安裝機制反而變成新選項,對 MS 這種作法我也覺得不太妥當)
(因為用戶自己可能也無法知道問題出在哪:明明自己安裝字型的方式跟以前一模一樣,怎麼突然 Aegisub 就出問題了?)
所以我個人會比較傾向暫時保持觀望態度,同時建議用戶 "非必要的話,還是別使用 user font 為上策"
如果“在 win10 1809 下使用各种字体加载位置”、“查找字幕指定字体是否缺字”这个需求,目前没有工具能实现的话,也许有将其实现的价值,来写一个新的/整合到已有工具里。
可以确认的是,这个功能不会出现在 FontLoaderSub 里;如果(很久之后,比如半年)我把这工具做出来的话,感觉会和 ListAssFonts 有很多重复的地方,所以想打听一下大佬的想法。
如果您的意思是,"某字幕使用了已安裝的 user font,但想判斷此字體是否有缺字幕用到的字"
那目前 Aegisub & ListAssFonts 都沒有這樣的功能,ListAssFonts 目前也不打算增加這方面的特性
不過 Aegisub 是開源軟件,或許您可以考慮直接修改它的源碼,來實現這個功能,不用從頭打造一個新的工具
yzwduck
发表于 2019-5-10 06:28:47
tonyhsie 发表于 2019-5-10 01:53
您這個想法,原則上我是完全同意的
如果只是考虑 user font 的话,直接改 aegisub 貌似不难,但如果要把字体引擎换成 directwrite,来更彻底解决这问题的话,貌似工作量不小。
最近三次元比较忙,只能暂时把这事鸽着。
Rikkano
发表于 2019-5-10 20:49:40
页:
1
2
[3]
4
5
6
7
8
9
10
11
12