2016-10-03 105 views
0

添加一个私人字体在Windows 10 Pro的本地开发机器上工作正常。但是在Windows Server 2012 R2非常相同的代码产生以下错误的:PrivateFontCollection.AddFontFile()抛出通用的GDI +错误异常

System.Runtime.InteropServices.ExternalException: A generic error occurred in GDI+. at System.Drawing.Text.PrivateFontCollection.AddFontFile(String filename)

var privateFontCollection = new PrivateFontCollection(); 
privateFontCollection.AddFontFile("Roboto-Regular.ttf"); 

当我删除它导致NotFoundException文件,这样的文件路径必须是正确的。我确保每个用户都拥有文件的所有权限。 (我发现如果我拒绝我本地win 10机器上的所有权限,就会发生同样的“通用错误” - 因此它可能是权限问题)

有没有人为此问题提供解决方案? 生产机器上的服务用户是否有可能缺少“安装”私人字体所必需的其他权限?也许字体被安装到不允许的特定目录 - 但我无法找到这将是什么。 请帮我解释这个非常自我的“一般错误”。

回答

0

这似乎是不使用绝对路径的问题。起初没有想到,因为删除文件导致显式的FileNotFound。 使用绝对路径做了诀窍。

+0

它的情况越来越糟糕,在调用PrivateFontCollection.Dispose()之前,您不能调用FreeCoTaskMem()。内存损坏错误通常太微妙而无法察觉,它不会经常引发AVE。原始问题可能非常愚蠢,但在使用File.ReadAllBytes(路径)以获得更好的异常之前,您无法找到它。 *总是*使用完整路径名称,c:\ foo \ bar \ baz.ttf而不是baz.ttf。 –

+0

感谢您指出@HansPassant。 –