Установка кастомного шрифта с помощью Inno Setup: сравнение версий файлов
При разработке программного обеспечения часто возникает необходимость установить кастомный шрифт, который будет использоваться в приложении. Одним из популярных инструментов для создания установщиков является Inno Setup. В этой статье мы рассмотрим, как установить кастомный шрифт с помощью Inno Setup, а также как сравнить версии файлов шрифтов, чтобы переустановить только те, которые были обновлены.
Проблема
Разработчик программного обеспечения Оливье столкнулся с проблемой, когда ему нужно было установить кастомный шрифт с помощью Inno Setup, но только в том случае, если версия шрифта в установщике была обновлена по сравнению с уже установленным шрифтом. Он пытался получить версию файла шрифта с помощью функций GetVersionNumbersString или GetFileVersionString, но безуспешно, так как эти функции работают только с exe или dll файлами.
Решение
Чтобы сравнить версии файлов шрифтов, мы можем использовать функцию GetShellItemVersion, которая извлекает версию файла из свойств файла в операционной системе. Вот пример кода на Object Pascal, который демонстрирует, как использовать эту функцию:
function GetShellItemVersion(const FilePath: string): string;
var
Shell, Folder, Item, Version: Variant;
FolderPath: string;
begin
Shell := CreateOleObject('Shell.Application');
FolderPath := ExtractFilePath(FilePath);
Folder := Shell.NameSpace(FolderPath);
if VarIsClear(Folder) then
begin
Log(Format('Error reading folder "%s"', [FolderPath]));
Exit('');
end;
Item := Folder.ParseName(ExtractFileName(FilePath));
if VarIsClear(Item) then
begin
Log(Format('Error accessing "%s"', [FilePath]));
Exit('');
end;
Version := Folder.GetDetailsOf(Item, 166);
if VarIsClear(Version) then
begin
Log(Format('Error reading version of "%s"', [FilePath]));
Exit('');
end;
Result := Version;
end;
Функция GetShellItemVersion принимает в качестве аргумента путь к файлу шрифта и возвращает его версию в виде строки. Внутри функции мы создаем объект Shell.Application и используем его для получения доступа к свойствам файла. Мы извлекаем путь к папке, в которой находится файл, и получаем экземпляр объекта Folder для этой папки. Затем мы получаем экземпляр объекта Item для файла и извлекаем его версию с помощью свойства GetDetailsOf.
После того как мы получили версию файла шрифта, мы можем сравнить ее с версией уже установленного шрифта и решить, нужно ли переустанавливать шрифт или нет. Для этого можно использовать следующий код в секции [Code] в скрипте Inno Setup:
procedure CurStepChange(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
// Получаем версию уже установленного шрифта
var CurrentFontVersion: string;
CurrentFontVersion := GetShellItemVersion('C:\Windows\Fonts\YourFont.ttf');
// Получаем версию шрифта в установщике
var SetupFontVersion: string;
SetupFontVersion := GetShellItemVersion('YourSetupPath\YourFont.ttf');
// Сравниваем версии шрифтов
if CompareText(CurrentFontVersion, SetupFontVersion) = 0 then
begin
// Версии шрифтов совпадают, не нужно переустанавливать шрифт
Log('Font versions match, skipping installation');
end
else
begin
// Версии шрифтов отличаются, нужно переустановить шрифт
Log('Font versions differ, installing new font');
// Добавляем код для установки шрифта здесь
end;
end;
end;
В этом примере мы используем функцию GetShellItemVersion для получения версий уже установленного шрифта и шрифта в установщике. Мы сравниваем эти версии с помощью функции CompareText и решаем, нужно ли переустанавливать шрифт или нет. Если версии совпадают, мы просто записываем лог-сообщение и пропускаем установку шрифта. Если версии отличаются, мы снова записываем лог-сообщение и добавляем код для установки шрифта.
Вывод
В этой статье мы рассмотрели, как установить кастомный шрифт с помощью Inno Setup и сравнить версии файлов шрифтов, чтобы переустановить только те, которые были обновлены. Мы использовали функцию GetShellItemVersion для извлечения версии файла шрифта из свойств файла в операционной системе и сравнили ее с версией уже установленного шрифта.
Статья описывает процесс установки кастомного шрифта с помощью Inno Setup и сравнения версий файлов шрифтов для переустановки только обновленных версий.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.