我无法确定是否在一组计算机上安装了自定义字体(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());
}
}
编辑:我已经以管理员身份运行代码,以确认该问题与权限无关。
答案 0 :(得分:0)
使用LINQ,迭代已安装字体的列表,并检查它是否包含特定字体,从本质上讲应该是一种格式(加上不可避免的样板):
static bool IsFontInstalled(string fontname)
{
using (var ifc = new InstalledFontCollection())
{
return ifc.Families.Any(f => f.Name == fontname);
}
}