【问题标题】:PrivateFontCollection.AddFontFile() throws generic GDI+ error exceptionPrivateFontCollection.AddFontFile() 抛出通用 GDI+ 错误异常
【发布时间】:2016-10-03 11:31:17
【问题描述】:

在装有 Windows 10 Pro 的本地开发机器上添加私有字体可以正常工作。但是在 Windows Server 2012 R2 上,相同的代码会导致以下错误:

System.Runtime.InteropServices.ExternalException:一般错误 发生在 GDI+。在 System.Drawing.Text.PrivateFontCollection.AddFontFile(字符串文件名)

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

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

有没有人解决这个问题? 生产机器上的服务用户是否可能缺少“安装”私有字体所需的其他一些权限?也许字体被安装到一个不允许的特定目录 - 但我找不到它会在哪里。 请帮我解决这个自我解释的“一般错误”。

【问题讨论】:

    标签: c# gdi+ privatefontcollection


    【解决方案1】:

    不使用绝对路径似乎是个问题。一开始没有想到,因为删除文件导致了显式的FileNotFound。 使用绝对路径就可以了。

    【讨论】:

    • 它确实变得越来越糟,直到您调用 PrivateFontCollection.Dispose() 之后,您才能调用 FreeCoTaskMem()。内存损坏错误通常太微妙而无法注意到,它不会经常抛出 AVE。最初的问题可能是非常愚蠢的,但直到你使用 File.ReadAllBytes(path) 来获得更好的异常时才会发现。 总是使用完整的路径名,c:\foo\bar\baz.ttf 而不是 baz.ttf。
    • 谢谢!嗯...“找不到文件”可能作为异常消息很有用...
    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    相关资源
    最近更新 更多