02 июня 2019

Разборки со шрифтами в Windows 10.



Сломались у меня как-то шрифты. Каким-то ветром занесло старую версию шрифта Roboto в систему, из-за чего сайты Google местами стали выглядеть очень некрасиво: буквы слипались, текст стал читаться хуже. В полной мере ощутил на себе понятие "кровь из глаз".
Решение проблемы я начал с загрузки самой последней версии. Веселье началось дальше.

Оказалось, что в Windows 10 шрифты ставятся не только по привычному пути "C:\Windows\Fonts", но и у каждого пользователя теперь есть свой каталог со шрифтами по пути "%userprofile%\AppData\Local\Microsoft\Windows\Fonts".
Проблемный шрифт нашёлся по второму пути, но заменить его просто так не получалось, потому что файлы использовались другими программами. Обычная установка шрифта добавляла новые файлы с суффиксом "_1" после имени перед расширением. По идее можно подменить файлы, загрузившись с какого-нибудь LiveCD/LiveDVD/LiveUSB, но после перезагрузки файлы всё же освобождаются, и их можно удалить.
Но я всё же решил выяснить, откуда система берет информацию о шрифтах. Сделать я это решил поиском по имени файла шрифта в реестре. Упоминание файла попалось в разделе "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Fonts".
Я попробовал удалить из раздела несколько параметров с именами шрифтов, которые я ставил самостоятельно. После перезагрузки шрифты из системы пропадали, но сами файлы оставались на месте.
Далее я захотел удалить несколько проблемных шрифтов уже из системного каталога. У меня стояла старая версия шрифта "Times New Roman" и ещё нескольких. В панели управления существовали вместе шрифты "Times New Roman" и "Times New Roman Обычный". Второй брался из файла под именем "times_0.ttf".
Удалял я их тем же способом, только список шрифтов брал уже из раздела "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts". После перезагрузки ненужные шрифты опять же чудесным образом исчезли из системы, а файлы я уже вручную удалил.

Ещё я нашёл инструкцию по принудительной перестройке кэша шрифтов, но она у меня не заработала. Скорее всего все операции надо производить из другой системы.
  1. Остановить службу "Служба кэша шрифтов Windows";
  2. Удалить содержимое каталога "\Windows\ServiceProfiles\LocalService\AppData\Local\FontCache";
  3. Удалить файл "%WinDir%\System32\FNTCACHE.DAT";
  4. Перезагрузить компьютер. 
Проблема в том, что после остановки служба тут же запускается системой.