У меня проблемы с определением, установлен ли пользовательский шрифт (треугольник Евклида) на коллекции машин.
Я использовал указанный здесь код «Проверьте, установлен ли шрифт», и он работает на моем компьютере с 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());
}
}
Обновлено: я запустил свой код в качестве администратора, чтобы убедиться, что проблема не связана с разрешениями.
Ваш код не ищет конкретный шрифт, он только добавляет их в список и записывает в файл ...
Я знаю, что указанный мной код не выполняет поиск определенного шрифта. Сообщение, на которое я ссылаюсь, содержит множество примеров этого - я перепробовал их все, и ни один из них не работает на целевых машинах.
Итак, если я правильно прочитал ваш отредактированный пост, вы говорите, что шрифт установлен (то есть может использоваться, скажем, из WordPad), но не отображается, когда вы перечисляете шрифты с помощью кода?
Верный. Шрифт появляется в MS Word и т. д. И может быть использован. Шрифт не может быть найден при перечислении шрифтов с помощью кода.





Использование LINQ для перебора списка установленных шрифтов и проверки того, содержит ли он конкретный шрифт, должно быть по сути однострочным (плюс неизбежный шаблон):
static bool IsFontInstalled(string fontname)
{
using (var ifc = new InstalledFontCollection())
{
return ifc.Families.Any(f => f.Name == fontname);
}
}
Сообщение, на которое я ссылаюсь, содержит ваш пример - я пробовал его, и он не работает на целевых машинах.
Просто догадываюсь: недостаточно прав на других машинах?