• Добро пожаловать на WYLEK.ru. Пожалуйста, войдите или зарегистрируйтесь.
 
100 гостей, 2 пользователей

avatar_WYLEK

Патч-русификатор средствами NSIS

Автор WYLEK, 25 февраля 2016, 17:11:46

« предыдущая - следующая »

Leserg

Тема создана 25 февраля 2016, 17:11:46 Последнее редактирование: 03 августа 2018, 23:35:23 от WYLEK
Патч-русификатор средствами NSIS.


Предлагаю вашему вниманию небольшой пример по созданию установщика языкового файла для программ от разработчика FRANZIS, а именно "BLACK WHITE projects", "COLOR projects", "HDR projects", "ANALOG projects", "FOCUS projects", "DENOISE projects" и "SHARPEN projects". Если эта серия программ продолжится, где используются общие языковые файлы, то наш русификатор подойдет и для неё. Дополнительной опцией нашего установщика мы сделаем возможность эксплуатировать эти программы в полной мере, без каких-либо ограничений. Создавать патч-русификатор будем средствами конструктора инсталляторов NSIS в комплекте с плагинами, расширяющими его возможности.
Что нам понадобится? Во-первых, знания по скриптовому языку NSIS, без них ничего не получится. Во-вторых, конечно же сам NSIS плюс плагины (о них будет рассказано ниже). В-третьих, пути установки программ, соответственно на 32-бит и 64-бит системах. Это можно выяснить при тестовой установке. В-четвертых, конечно же готовый языковой файл, который мы хотим установить. В-пятых, определенные байты для патча исполняемых файлов, которые помогут раскрыть весь потенциал программ. Эти данные можно получить, занимаясь исследованием и анализом исполняемого кода.

Инструменты:

1) NSIS v3.0b3 с поддержкой 8192 символов. Можно использовать другую версию NSIS, но тогда, возможно, в код сценария нужно будет внести некоторые изменения.
2) Плагин Linker v1.2, автор Slappy, модифицированный Flix (Войдите на сайт для перехода по ссылке). Используется для создания кликабельного брандинг текста на страницах инсталлятора (по желанию).
3) Плагин nsisFile v1.0, автор Olivier Marcoux (Войдите на сайт для перехода по ссылке). Используется для патчинга исполняемых файлов.
4) Плагин AdvSplash и др. из комплекта стандартной поставки NSIS.
5) Заголовочный файл ProcessFunc.nsh (для NSIS v3.0), автор kotkovets (Войдите на сайт для перехода по ссылке). Используется для завершения запущенных процессов.
6) Дизайнер диалогов NSIS Dialog Designer v1.4.1 (Войдите на сайт для перехода по ссылке). Используется для создания собственных (дополнительных) страниц инсталлятора.
7) Ваш любимый графический редактор, например, Войдите на сайт для перехода по ссылке (Войдите на сайт для перехода по ссылке), для создания изображения мастера установки, заставки и прочей графики.
8) Редактор ресурсов, например, Resource Hacker или Restorator. Рекомендую использовать Resource Hacker v3.6.0.92. Новая версия (из последних) может испортить файл, проверено. Restorator хорош, но лепит везде свои метки "BOME", типа "Здесь был Вася!". В принципе, если это для вас несущественно, то можете использовать и его. Редактор нужен для модификации ресурса диалогов инсталлятора для возможности использования плагина Linker. Если не будете применять этот плагин, то и редактировать ничего не нужно.
9) Любой текстовый редактор для создания сценария NSIS (или среда разработки HM NIS EDIT (Войдите на сайт для перехода по ссылке), а также сопутствующих документов TXT, RTF.

Вот, пожалуй, и всё. Если что забыли, по ходу изложения добавим.

Алгоритм

Прежде чем садиться за написание кода сценария, нужно сначала продумать алгоритм работы будущего инсталлятора, что он должен делать и как. Установить языковой файл -- это понятно, но куда? Если бы у нас была одна программа, то все довольно просто -- указал путь установки и поехали. У нас же программ несколько,.. а если у пользователя установлены не все из них, а только некоторые... Вариантов решения такой задачи может быть несколько, предлагаю вам следующий.
Инсталляторы FRANZIS содержат обе редакции программ: 32-бит и 64-бит. Соответственно выполняется их установка: на 32-бит ОС устанавливается 32-бит версия программы, а на 64-бит ОС -- 64-бит версия. Путь установки по умолчанию стандартный -- программная группа файлов, папка с именем поставщика, плюс папка с именем программы. Т.е. вот так
- на 32-бит ОС: $PROGRAMFILESFranzis{папка с именем программы}
- на 64-бит ОС: $PROGRAMFILES64Franzis{папка с именем программы}

Чтобы облегчить себе задачу, будем считать, что у пользователя все программы FRANZIS (или некоторые из них) установлены в каталоге по умолчанию. По этой причине наш инсталлятор не будет предлагать выбрать путь установки. Чтобы не прописывать в коде имя папки для каждой из программ (мы не знаем, какие из них установлены у пользователя), то будем определять полные пути при работе нашего патч-русификатора. Для этого воспользуемся именами исполняемых файлов программ и поручим нашему инсталлятору произвести их поиск в подкаталогах папки "Franzis". Этим мы можем убить сразу несколько зайцев. Во-первых, найдя такой файл, мы узнаем путь для установки языкового файла, Во-вторых, мы можем модифицировать его на предмет некоторых улучшений. В-третьих, если ничего не будет найдено, значит ни одна программа от FRANZIS не установлена. Возможно пользователь установил их в другим месте, но этот вариант мы рассматривать не будет. Упрощенная блок-схема алгоритма выглядит следующим образом:

Рисунок 1

Продолжение следует...
Кто ищет, тот всегда найдет!

Leserg

Ответ #1 : 25 февраля 2016, 17:15:02 #1 Последнее редактирование: 03 августа 2018, 23:47:27 от WYLEK
Продолжение

Сценарий

Ниже приведен полный текст сценария с подробными комментариями. Если вам какие-то команды не понятны, обратитесь к справочной документации NSIS.
Извините, вам запрещён просмотр содержимого спойлеров.


Продолжение следует...
Кто ищет, тот всегда найдет!

Leserg

Ответ #2 : 25 февраля 2016, 17:17:19 #2 Последнее редактирование: 02 марта 2019, 14:39:47 от WYLEK
Продолжение

Пояснения

Инсталлятор показывает пользователю заставку и проигрывает звуковой файл. За эти функции отвечает плагин AdvSplash. После заставки отображается страница приветствия.

Рисунок 2


Это дополнительная страничка и для её создания был использован редактор NSIS Dialog Designer (файл странички welcome.nsdinc).

Далее идет страница для отображения текста лицензионного соглашения. Страница стандартная и не имеет каких-либо особенностей.


Рисунок 3


Наконец, завершающая страница -- установка русификатора и применение патча.

Рисунок 4


Для интерфейса инсталлятора выбран тип sdbarker_tiny: небольшой размер диалогов, минималистский дизайн. При этом файл с ресурсами интерфейса был модифицирован для применения плагина Linker. Для этого откройте файл sdbarker_tiny.exe (находится в каталоге NSIS по пути ..ContribUIs) в редакторе ресурсов, перейдите на диалог с ID 105 и в тексте формы найдите элемент управления 1028. По умолчанию этот элемент не активный и недоступен для перехвата фокуса. Чтобы сделать его активным и доступным для кликом мышкой, необходимо удалить флаг WS_DISABLED.

Рисунок 5


У вас должно получиться вот так:

Рисунок 6


Нажмите "Compile Script" и сохраните файл под новым именем -- sdbarker_tiny_modl.exe. Готово.

Для локализации строк интерфейса и сообщений инсталлятора патч-русификатора используется модифицированный языковой файл Russian.nlf (находится в каталоге NSIS по пути ..ContribLanguage files). В нём слово "Установка" заменено на "Русификация" и сделаны ещё незначительные правки. Файл сохранён под именем Russian_rus.nlf и используется в сценарии.
Поиск исполняемых файлов программ выполняется по маске *projects*.exe. Часть имени "projects" является общей у всех файлов для всей линейки продуктов FRANZIS. Других исполняемых файлов с такой частью имени в каталогах установки нет, поэтому будут найдены именно те файлы, которые нам нужны. В функции FindFilesEXE найденные полные пути к исполняемым файлам сохраняются в одну переменную $R0, которая выполняет функцию мнимого одномерного массива. Данные в нём записываются в формате /{индекс}={полный_путьимя_файла}. Этот способ временного хранения данных предложил пользователь K.A.V. на форуме Войдите на сайт для перехода по ссылке[/b][/size][/color]
Кто ищет, тот всегда найдет!

Metabolic

Ответ #3 : 26 февраля 2016, 22:51:21 #3 Последнее редактирование: 03 августа 2018, 23:50:50 от WYLEK
ЦитироватьRestorator хорош, но лепит везде свои метки "BOME", типа "Здесь был Вася!"
Чтоб программа не метила модифицированные ресурсы, необходимо отключить в настройках функцию:
"Основные настройки -> Сохранение файлов -> Создавать метки на измененных ресурсах [стрелочка]"
 

Leserg

Ответ #4 : 27 февраля 2016, 01:33:19 #4 Последнее редактирование: 03 августа 2018, 23:51:28 от WYLEK
Тю, блин, действительно. Верное замечание, спасибо.
Кто же знал, что визуальная метка изменённого ресурса привязана к "BOME". Фиг догадаешься.
Кто ищет, тот всегда найдет!

AlexSergeev

Ответ #5 : 01 октября 2016, 16:31:18 #5 Последнее редактирование: 03 августа 2018, 23:51:59 от WYLEK
Цитата: MetabolicЧтоб программа не метила модифицированные ресурсы, необходимо отключить в настройках функцию:"Основные настройки -> Сохранение файлов -> Создавать метки на измененных ресурсах [стрелочка]"
Осмелюсь спросить -- отключить в настройках СИСТЕМЫ? Тогда конкретно где и как? Или при установке патча-русификатора -- в его настройках?
С уважением

WYLEKАвтор темы

Ответ #6 : 01 октября 2016, 17:11:10 #6 Последнее редактирование: 02 марта 2019, 14:40:22 от WYLEK
Цитата: AlexSergeevотключить в настройках СИСТЕМЫ? Тогда конкретно где и как? Или при установке патча-русификатора -- в его настройках?

В настройках Restorator


* Ваши права на сайте

    TinyPortal

  • Вы не можете создавать статьи.
  • Вы не можете изменять свои статьи.
  • Вы не можете писать комментарии.
  • Вы не можете управлять статьями.
  • Вы не можете загружать файлы в TPdownloads.
  • Вы не можете управлять TPlistimages.

    Simple Machines

  • Вы не можете удалять темы.
  • Вы не можете создавать темы.
  • Вы не можете отвечать на сообщения.
  • Вы не можете прикреплять файлы.
  • Вы не можете изменять свои сообщения.
  • Вы не можете удалять свои сообщения.

 аталог@MAIL.RU - каталог ресурсов интернет Яндекс.Метрика