Вопрос Установка и удаление шрифта

Хамик

Старожил
Подскажите, как в nsis прописать установку и удаление своего шрифта?
 

MaGoth

Новичок
Хамик,

Самое простое это скопировать их в каталог $Fonts ($WINDIR\Fonts) и операционная система их сама там подключит, либо как вариант положить их в каталоге рядом с исполняемым модулем - это уже из MSDN:

Путь поиска, используемый Windows для обнаружения библиотеки DLL
_http://msdn.microsoft.com/ru-ru/library/7d83bc18.aspx

Используя механизмы явного и неявного связывания, Windows сначала выполняет поиск "известных библиотек DLL", таких как Kernel32.dll и User32.dll. Затем Windows выполняет поиск библиотек DLL в следующей последовательности:

1) Каталог, в котором находится исполняемый модуль текущего процесса.
2) Текущий каталог.
3) Системный каталог Windows. Путь к этому каталогу извлекается с помощью функции GetSystemDirectory.
4) Каталог Windows. Путь к этому каталогу извлекается с помощью функции GetWindowsDirectory.
5) Каталоги, указанные в переменной среды PATH.

Примечание

Переменная среды LIBPATH не используется.

Если стоит примерно такая задача:
  • Имеем папку с системными шрифтами Arial, Calibri, Cambria, Consolas, Courier, Meiryo, Segoe UI, Tahoma, Times New Roman
  • Необходимо обновить их в системе.
  • Если в системе присутствует более свежая версия шрифта, то не заменять.
  • Почти все они заблокированы системой, поэтому замена должна быть с перезагрузкой компа
  • Если шрифта не было в системе, то корректно зарегистрировать его в реестре.

То достаточно поставить условие перезаписи:

Код:
SetOverwrite ifnewer
SetOutPatch $FONTS
...
IfFileExists $FONTS\<fontfil.ext> +
File /oname=<source_dir>\<fontname.ext>
Goto +4
Rename $FONTS\<fontname.ext> $FONTS\<fontname.ext.bak>
Rename /REBOOTOK <SOURCE_DIR>\<fontname.exe> $FONTS\<fontname.ext>
...
и в скрипте нужна функция отработки события REBOOT в которой ставим как одну из команд Delete $FONTS\*.bak для чистки мусора. В общем и целом идея такая. Блок кода что я привёл есть смысл оформить как функцию получающую как параметр имя обновляемого шрифтового файла. Это сократит размер кода, а главное число возможных ошибок в нём.

Что до самого вопроса, то при копировании шрифта в каталог Фонт, винда сама его должна актуализировать и установить, удаление также, Делит/папка/имя фонта..
Ну, как-то так...
 
Сверху