如何测试是否安装了字体?

时间:2018-10-26 05:48:54

标签: c# .net windows fonts

我无法确定是否在一组计算机上安装了自定义字体(Euclid Triangle)。

我使用了此处列出的代码 “ Test if a Font is installed”,它可以在我的Windows 10计算机上使用。但是它不适用于Windows 7计算机和一堆我的客户计算机。

所有计算机都具有.Net 4.5及更高版本。

如果我尝试列出计算机上的所有字体,则不会列出该字体:

    static void ListFonts()
    {
        try
        {
            using (InstalledFontCollection fontsCollection = new InstalledFontCollection())
            {
                FontFamily[] fontFamilies = fontsCollection.Families;
                var fonts = new List<string>();
                foreach (FontFamily font in fontFamilies)
                    fonts.Add(font.Name);
                var file = new FileInfo(Assembly.GetExecutingAssembly().Path() + "\\fonts.txt");
                Serializer.SerializeToFile(fonts, file.FullName);
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString(), "Printer Configuration", MessageBoxButtons.OK, MessageBoxIcon.Error);
            var file = new FileInfo(Assembly.GetExecutingAssembly().Path() + "\\log.txt");
            File.WriteAllText(file.FullName, ex.ToString());
            Console.WriteLine(ex.ToString());
        }
    }

编辑:我已经以管理员身份运行代码,以确认该问题与权限无关。

1 个答案:

答案 0 :(得分:0)

使用LINQ,迭代已安装字体的列表,并检查它是否包含特定字体,从本质上讲应该是一种格式(加上不可避免的样板):

static bool IsFontInstalled(string fontname)
{
    using (var ifc = new InstalledFontCollection())
    {
        return ifc.Families.Any(f => f.Name == fontname);
    }
}