请求的文件不是有效的字体文件的一个解决思路

昨天在使用字由软件的时候,发现字由软件需要长期在后台运行才能使得激活的字体有效,一旦退出后则无法显示的情况。于是想到把字体保存到本地再安装到windows下的fonts文件夹里面,但其间遇到不是有效字体文件的问题,花了一点时间来解决。因为网络上的解决方法大同小异而且并没有效果,因此秉着“好记性不如烂笔头”把它记录下了,方便以后学习。

一、问题出现:

使用了Listray这个强大的搜索工具在本机硬盘找到了相应的字体问题,文件类型为TTF格式或者OTF格式。

图1.在本机硬盘找到的字体文件

字体文件看上去正常,文件创建时间、文件大小都与真实文件一致。而且都跟刚刚安装的字体文件名存在习惯性,把拼音拼一下得到的字体名称。于是双击安装、或者右键安装,均不成功,系统提示不是有效的字体文件。

字体文件看上去正常,文件创建时间、文件大小都与真实文件一致。而且都跟刚刚安装的字体文件名存在相关性,把拼音拼一下得到的字体名称。于是双击安装、或者右键安装,均不成功,系统提示不是有效的字体文件。

图2.系统提示字体文件无效

二、网络搜索:

发现了问题,那么就上网搜索下,看看有没有类似的问题,一查,还真有,找到非常多的结果。

图3.百度搜索win10不是有效的字体文件

 

网上提供的解决方案基本都是类似如下:

安装ttf字体时出现“不是有效字体的文件”错误的简单解决方法,通过系统开启win10防火墙服务即可解决:

 1、首先在电脑键盘按快捷键: win+x ,跳出运行界面,输入:services.msc

 2、找到windows Firewall,有些win10系统找不到windows firewall,那是要先运行Internet Connection Sharing,才能找到Windows Firewall。

3、找到后左上角启动这个服务就可以了

甚至微软官方的社区也是类似的回答:

尝试打开Windows firewall ,打开之后再尝试安装这些字体,看下安装效果。

或者还有提示要求打开windows updata、windows install等 服务的。

图4.微软社区对问题的回答

四、按图索骥,尝试解决:

既然这样,那就打开服务看看。其实win10已经默认打开了防火墙的,名称为Windows Defender Firewall,已经跟windows Defender 无缝集成,默认打开。既然网上提供的方案如此,那就重新启动下服务,结果依然一样的提示。

那看来问题并非在服务上了,又想到字由软件是否利用了windows的字体缓存功能,软件把字体文件映射到了系统盘,实际这个文件夹只是个临时文件夹,当前的用户并没有使用的权限。于是又用管理员权限运行浏览器打开,还是一样。接着又尝试将文件复制到其他地方,无法复制,提示:意外错误的发生,错误0x80070780:系统无法访问此文件。

图5.文件复制失败

这下看上去印证了原来的猜想,原来是权限不足的问题,导致无法复制,当然无法访问该文件,自然安装不成功了。那没有权限就赋予权限吧。

图6.文件的所有者就是本用户

更奇怪的事情发生了——通过文件夹的安全选项卡的高级选项,可以看到文件夹的所有者就是本机的用户,并且拥有了完全控制的权限。这实在令人傻眼了,什么情况?所有者无法复制文件?逻辑不符啊!

一下子又陷入了僵局。

五、灵光乍现,问题解决:

突然之间,在设置单个文件的安全属性的时候,看到了文件的大小虽然正常,但占用的空间居然是0字节!这一下子就想到了这里的文件并非真实的文件,只是一个根本不存在的文件。一个正常再小的文件也得占用4KB的空间的吧?就是没有找到真正的字体文件,而只是找到了一个表象,自然无法安装。那么就继续在硬盘找找字体文件看看了。这里已经发现文件名称,那么找起来容易的多了。还是神器出手,立马就有了。真正的文件在C:\Users\【用户名】\AppData\Roaming\SystemData\Temp 中。

图7.文件属性-占用空间0字节
图8.找到真正的字体文件所在

那么找到了相应的字体文件,安装起来自然没有问题了。

总结:

发现了不是有效字体文件的问题,上网查找解决方案,但网上的解决方案都是一个套路,打开某些服务,并没有解决问题。通过查证文件的情况,发现文件的异常,才得以重新找到真正字体问题,解决了问题。