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

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

Я использовал указанный здесь код «Проверьте, установлен ли шрифт», и он работает на моем компьютере с 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
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
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

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