Войти
  1. ВКонтакте
  2. Facebook
  1. »
  2. »
  3. »
  4. Патч-русификатор средствами NSIS
Скрыть панель справаПоказать панель справа

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

Мастер
  1. Офлайн
  2. Команда сайта.
  3. 901 сообщений
  4. Репутация: 9
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 1 отправлено 17:11, 25.02.2016
Патч-русификатор средствами 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 (http://forum.oszone.net/post-2412784-1327.html). Используется для создания кликабельного брандинг текста на страницах инсталлятора (по желанию).
3) Плагин nsisFile v1.0, автор Olivier Marcoux (http://wiz0u.free.fr/prog/nsisFile). Используется для патчинга исполняемых файлов.
4) Плагин AdvSplash и др. из комплекта стандартной поставки NSIS.
5) Заголовочный файл ProcessFunc.nsh (для NSIS v3.0), автор kotkovets (http://forum.oszone.net/post-2390157-1284.html). Используется для завершения запущенных процессов.
6) Дизайнер диалогов NSIS Dialog Designer v1.4.1 (http://coolsoft.altervista.org/en/nsisdialogdesigner). Используется для создания собственных (дополнительных) страниц инсталлятора.
7) Ваш любимый графический редактор, например, Paint.Net (http://www.getpaint.net), для создания изображения мастера установки, заставки и прочей графики.
8) Редактор ресурсов, например, Resource Hacker или Restorator. Рекомендую использовать Resource Hacker v3.6.0.92. Новая версия (из последних) может испортить файл, проверено. Restorator хорош, но лепит везде свои метки "BOME", типа "Здесь был Вася!". В принципе, если это для вас несущественно, то можете использовать и его. Редактор нужен для модификации ресурса диалогов инсталлятора для возможности использования плагина Linker. Если не будете применять этот плагин, то и редактировать ничего не нужно.
9) Любой текстовый редактор для создания сценария NSIS (или среда разработки HM NIS EDIT (http://hmne.sourceforge.net/), а также сопутствующих документов TXT, RTF.

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

Алгоритм

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

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

Рисунок 1



Продолжение следует...

Последний раз редактировал WYLEK 15:20, 24.04.2017

------------------------------------------
Кто ищет, тот всегда найдет!
Мастер
  1. Офлайн
  2. Команда сайта.
  3. 901 сообщений
  4. Репутация: 9
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 2 отправлено 17:15, 25.02.2016
Продолжение

Сценарий

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



Продолжение следует...


------------------------------------------
Кто ищет, тот всегда найдет!
Мастер
  1. Офлайн
  2. Команда сайта.
  3. 901 сообщений
  4. Репутация: 9
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 3 отправлено 17:17, 25.02.2016
Продолжение

Пояснения

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

Рисунок 2


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

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


Рисунок 3


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

Рисунок 4


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

Рисунок 5


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

Рисунок 6


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

Для локализации строк интерфейса и сообщений инсталлятора патч-русификатора используется модифицированный языковой файл Russian.nlf (находится в каталоге NSIS по пути ..\Contrib\Language files\). В нём слово "Установка" заменено на "Русификация" и сделаны ещё незначительные правки. Файл сохранён под именем Russian_rus.nlf и используется в сценарии.
Поиск исполняемых файлов программ выполняется по маске *projects*.exe. Часть имени "projects" является общей у всех файлов для всей линейки продуктов FRANZIS. Других исполняемых файлов с такой частью имени в каталогах установки нет, поэтому будут найдены именно те файлы, которые нам нужны. В функции FindFilesEXE найденные полные пути к исполняемым файлам сохраняются в одну переменную $R0, которая выполняет функцию мнимого одномерного массива. Данные в нём записываются в формате /{индекс}={полный_путь\имя_файла}. Этот способ временного хранения данных предложил пользователь K.A.V. на форуме OSzone.net, рекомендую взять на заметку, очень удобно. Затем в цикле, пробежав по индексам, мы можем получить строку с путём к каждому файлу и соответственно выполнить определенные действия (в нашем случае установить языковой файл и пропатчить исполняемый).
Модификация исполняемых файлов выполняется при помощи функций плагина nsisFile. В стандартной поставке NSIS уже имеется инструмент (GenPat.exe) для создания файла различий, а также соответствующий плагин Vpatch. Но в нашем случае плагин nsisFile был выбран из следующих соображений: отсутствует привязка к конкретному файлу (по версии, контрольной сумме), одни и те же сигнатуры (низменная последовательность байт) у всех исполняемых файлов (соответственно для 32-бит и 64-бит приложений) проекта, возможность применения патча на будущую версию программ при условии, что разработчик не изменит алгоритма защиты. Таким образом, работа нашего русификатора будет похожа на патчи, которые можно создать при помощи инструментов "diablo2oo2's Universal Patcher", "AT4RE Patcher" и им подобных. При желании и необходимости можно навесить дополнительные проверки или определенные ограничения, к примеру, в нашем сценарии не предусмотрена функция создания резервных копий файлов перед их последующей модификации. Попробуйте сделать это самостоятельно. Замечу, что вместо плагина nsisFile можно использовать плагин Vpatch, но тогда наш патч-русификатор не будет таким гибким.
В приведенном выше тексте сценария вместо выражения {исходная сигнатура} необходимо поставить реальные данные сигнатур, а вместо {новая сигнатура} — те, которые нужно записать в файлы. Все эти данные определяются при помощи отладчика (дизассемблера), и те из вас, кто занимался созданием патчей, например, в dUP, прекрасно знают, как это делается. Модификация файла не будет выполнена: 1) если по каким-то причина не удалось открыть файл (например, занят другим процессом); 2) если не удалось найти заданную сигнатуру.

ЗАКЛЮЧЕНИЕ:

В итоге у нас получился небольшой, компактный инсталлятор для программ FRANZIS, который выполняет установку языкового файла и модифицирует исполняемые файлы. Единственным условием его успешного применения является установка всех программ ("BLACK WHITE projects", "COLOR projects", "HDR projects", "ANALOG projects", "FOCUS projects", "DENOISE projects" и "SHARPEN projects") в каталогах по умолчанию. Не имеет значения одна программа установлена, две, три или все: установщик выполняет поиск определённых исполняемых файлов, и если таковые были найдены, то выполняет заданные действия. Если ничего не было найдено, значит ни одной программы FRANZIS не установлено или они были установлены пользователем в другие каталоги. Как было сказано ранее, наш патч-русификатор не имеет какой-либо привязки к версии программы, размерам или контрольной сумме файлов, также не проверяет наличие уже установленного языкового файла. Поэтому при повторных запусках установщика языковой файл будет просто перезаписан, а модификация исполняемых файлов будет выполнена только при соблюдении заданных условий, в противном случае — пропущена. Обращаю ваше внимание, что создание резервных копий не предусмотрено. Это касается как языкового файла (перезаписывается оригинальный файл hdrprojects_en.qm), так и исполняемых файлов. Также не предусмотрена функция удаления русификатора. При желании или необходимости предлагаемый код сценария может быть доработан с учётом необходимых требований и задач.

Патч-русификатор: скачать

Последний раз редактировал WYLEK 15:28, 24.04.2017

------------------------------------------
Кто ищет, тот всегда найдет!
Прибывший
  1. Офлайн
  2. Участники
  3. 15 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 4 отправлено 22:51, 26.02.2016
Цитата
Restorator хорош, но лепит везде свои метки "BOME", типа "Здесь был Вася!"

Чтоб программа не метила модифицированные ресурсы, необходимо отключить в настройках функцию:
"Основные настройки -> Сохранение файлов -> Создавать метки на измененных ресурсах [стрелочка]"
biggrin
Мастер
  1. Офлайн
  2. Команда сайта.
  3. 901 сообщений
  4. Репутация: 9
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 5 отправлено 01:33, 27.02.2016
Тю, блин, действительно. Верное замечание, спасибо. beer
Кто же знал, что визуальная метка изменённого ресурса привязана к "BOME". Фиг догадаешься. biggrin


------------------------------------------
Кто ищет, тот всегда найдет!
Охотник
  1. Офлайн
  2. Проверенные
  3. 164 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 6 отправлено 16:31, 01.10.2016
Metabolic (26.02.2016, 22:51) писал:Чтоб программа не метила модифицированные ресурсы, необходимо отключить в настройках функцию:"Основные настройки -> Сохранение файлов -> Создавать метки на измененных ресурсах [стрелочка]"

Осмелюсь спросить — отключить в настройках СИСТЕМЫ? Тогда конкретно где и как? Или при установке патча-русификатора — в его настройках?
С уважением
Легенда
  1. Офлайн
  2. Админ
  3. 1624 сообщений
  4. Репутация: 2
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 7 отправлено 17:11, 01.10.2016
AlexSergeev (01.10.2016, 16:31) писал:отключить в настройках СИСТЕМЫ? Тогда конкретно где и как? Или при установке патча-русификатора — в его настройках?


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


Последний раз редактировал WYLEK 09:30, 14.11.2016
 
Перейти
Найти

Доступ закрыт.

  1. Вам запрещено отвечать в темах данного форума.

Последние темы

  1. Help & Manual 7.2.0 4035 rus
    Автор: druc Вчера, 18:38
  2. MiniTool Partition Wizard Technician...
    Автор: WYLEK 20:31, 18.09.2017
  3. Справка для MiniTool Partition Wizard
    Автор: WYLEK 13:20, 17.09.2017
  4. TeoreX PhotoScissors 4.0 Rus Portable...
    Автор: Valx 13:17, 16.09.2017
  5. TeoreX PhotoScissors 4.0 RUS
    Автор: AlexSergeev 13:58, 15.09.2017
  6. PE Explorer v1.99 R6 Rus
    Автор: gazon01 20:33, 13.09.2017

Изменения статуса

  1. Никто не менял личный статус.