Как проверить, установлен ли шрифт?

У меня проблемы с определением, установлен ли пользовательский шрифт (треугольник Евклида) на коллекции машин.

Я использовал указанный здесь код «Проверьте, установлен ли шрифт», и он работает на моем компьютере с 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());
        }
    }

Обновлено: я запустил свой код в качестве администратора, чтобы убедиться, что проблема не связана с разрешениями.

Просто догадываюсь: недостаточно прав на других машинах?

Alexander Schmidt 26.10.2018 08:41

Ваш код не ищет конкретный шрифт, он только добавляет их в список и записывает в файл ...

dumetrulo 26.10.2018 12:35

Я знаю, что указанный мной код не выполняет поиск определенного шрифта. Сообщение, на которое я ссылаюсь, содержит множество примеров этого - я перепробовал их все, и ни один из них не работает на целевых машинах.

Matt Fitzmaurice 29.10.2018 00:52

Итак, если я правильно прочитал ваш отредактированный пост, вы говорите, что шрифт установлен (то есть может использоваться, скажем, из WordPad), но не отображается, когда вы перечисляете шрифты с помощью кода?

dumetrulo 29.10.2018 09:45

Верный. Шрифт появляется в MS Word и т. д. И может быть использован. Шрифт не может быть найден при перечислении шрифтов с помощью кода.

Matt Fitzmaurice 29.10.2018 22:50
0
5
639
1

Ответы 1

Использование LINQ для перебора списка установленных шрифтов и проверки того, содержит ли он конкретный шрифт, должно быть по сути однострочным (плюс неизбежный шаблон):

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

Сообщение, на которое я ссылаюсь, содержит ваш пример - я пробовал его, и он не работает на целевых машинах.

Matt Fitzmaurice 29.10.2018 00:53

Другие вопросы по теме