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

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.
Показать / Скрыть текст
Показать / Скрыть текст
# Русификатор программ FRANZIS (http://www.projects-software.de/):
# "BLACK WHITE projects"; "COLOR projects"; "HDR projects"; "ANALOG projects";
# "FOCUS projects"; "DENOISE projects"; "SHARPEN projects".
#
# Автор сценария: Leserg
# © 2016
# ------------------------------------------------------------------------------
# Для сборки сценария необходим NSIS v3.0b3 с поддержкой 8192 символов.
# В сценарии использованы плагины сторонних разработчиков:
# - Linker v1.2 by Slappy (http://graphical-installer.com), modded by Flix
# - nsisFile v1.0 by Olivier Marcoux (http://wiz0u.free.fr/prog/nsisFile)
#
# Кроме того применен модифицированный языковой файл Russian_rus.nlf и файл
# sdbarker_tiny_modl.exe с ресурсами интерфейса (активирован элемент).
#   Ресурсы инсталлятора находятся в папке "RES".
#   Файлы для установки находятся в папке "FILES".
#   Все пути указаны относительно файла сценария.
# ------------------------------------------------------------------------------
# Юникодная версия инсталлятора
  Unicode true
# Переменные
  var FileNum ; счетчик файлов
# Константы
  !define PRODUCT_PUBLISHER "Franzis" ; название компании (разработчик)
# Используемые библиотеки
  !include "nsDialogs.nsh"     ; создание диалогов
  !include "FileFunc.nsh"      ; операции с файлами (by Instructor)
  !include "ProcessFunc.nsh"   ; завершение процессов (by kotkovets)
  !include "x64.nsh"           ; поддержка 64-бит систем
  !include "LogicLib.nsh"      ; логические конструкции
# Метод сжатия данных инсталлятора
  SetCompressor /SOLID lzma
# Поддержка русского языка для инсталлятора
  LoadLanguageFile "${NSISDIR}ContribLanguage filesRussian_rus.nlf"
# Изменение шаблона диалогов инсталлятора
  ChangeUI all "${NSISDIR}ContribUIssdbarker_tiny_modl.exe"
# Параметры инсталлятора
  Name "${PRODUCT_PUBLISHER}"  ; имя инсталлятора
  OutFile "${PRODUCT_PUBLISHER}_rus.exe"  ; имя файла инсталлятора
  LicenseBkColor -FFFF00       ; цвет фона для текста с лицензией
  ShowInstDetails show         ; отображение деталей установки
  SetDatablockOptimize on      ; оптимизация данных инсталлятора
  CRCCheck on                  ; проверка CRC инсталлятора (защита от изменений)
  RequestExecutionLevel admin  ; права запуска (Администратор)
  XPStyle on                   ; поддержка стиля XP (для Windows 2000/XP)
  Icon "RESRU.ico"            ; значок инсталлятора
  BrandingText /TRIMCENTER "www.wylek.ru"  ; фирменная надпись
# Сведения для свойств файла инсталлятора
  VIProductVersion "1.0.0.0"
  VIAddVersionKey /LANG=${LANG_RUSSIAN_RUS} ProductName "${PRODUCT_PUBLISHER}® [RUS]"
  VIAddVersionKey /LANG=${LANG_RUSSIAN_RUS} Comments "Автор перевода: WYLEK. Русификация программ: http://www.wylek.ru/."
  VIAddVersionKey /LANG=${LANG_RUSSIAN_RUS} CompanyName "© 2016, WYLEK"
  VIAddVersionKey /LANG=${LANG_RUSSIAN_RUS} LegalTrademarks "WYLEK©"
  VIAddVersionKey /LANG=${LANG_RUSSIAN_RUS} LegalCopyright "© 2016, WYLEK"
  VIAddVersionKey /LANG=${LANG_RUSSIAN_RUS} FileDescription "Русификация продуктов ${PRODUCT_PUBLISHER}®"
  VIAddVersionKey /LANG=${LANG_RUSSIAN_RUS} FileVersion "1.0.0.0"
# Резервирование файлов необходимых для работы инсталлятора
  ReserveFile "RESwylek.bmp"
  ReserveFile "RESSplash.wav"
  ReserveFile "RESwizard.bmp"
  ReserveFile /plugin "${NSISDIR}Pluginsx86-unicodelinker.dll"
  ReserveFile /plugin "${NSISDIR}Pluginsx86-unicodeadvsplash.dll"
  ReserveFile /plugin "${NSISDIR}Pluginsx86-unicode
sDialogs.dll"
  ReserveFile /plugin "${NSISDIR}Pluginsx86-unicodeSystem.dll"
# Сценарии диалогов
  !include RESwelcome.nsdinc  ; собственный диалог приветствия
# Диалоги установки
  ; Страница приветствия (описана в файле welcome.nsdinc)
  Page custom fnc_welcome_Show
  ; Страница с лицензией
  PageEx license
    LicenseText "Перед началом установки ознакомьтесь со следующей информацией.
                 Если вы не передумали и хотите продолжить, нажмите $"ОК$"." "OK"
    ; Текст с лицензионным соглашением (документ RTF).
    LicenseData "RESLicense.rtf"
  PageExEnd
  ; Страница установки файлов
  Page instfiles
# Секции установки
  Section "Franzis"
    DetailPrint "Каталог установки: $INSTDIR"
    ; Присваиваем начальное значение переменной $FileNum = 0.
    StrCpy $FileNum 0
    ; Выполняем поиск исполняемых файлов Franzis по маске.
    ${Locate} "$INSTDIR" "/M=*projects*.exe" "FindFilesEXE"
    ; Если путь не существует, то прекращаем установку (0), иначе - продолжаем (+2).
    IfErrors 0 +2
    MessageBox MB_OK "Каталог Franzis не существует!$$

                      Работа инсталлятора будет прекращена." IDOK nopatch
    
    ; Проверяем значение переменной $R0 с массивом полных путей к файлам ЕХЕ.
    ; Если переменная пустая, то прекращаем установку (0), иначе - продолжаем (+2).
    StrCmp $R0 "" 0 +2
    MessageBox MB_OK "В папке Franzis не найдено ни одной программы.$$

                      Работа инсталлятора будет прекращена." IDOK nopatch
    
    ; Считываем поочередно строки с путями к файлам и обрабатываем их в цикле.
    ${For} $4 1 $FileNum
    DetailPrint "--------------------- Начало ---------------------"
      ; Получаем индексный путь из переменной $R0
      ${GetOptions} "$R0" "/$4=" $5
      DetailPrint "$5"
      ${If} ${RunningX64}
        ; Получаем имя исполняемого файла.
        ${GetFileName} "$5" $6
        ; Убиваем процесс запущенной программы.
        ${KillProcess} "$6" $6
        ; Вызываем функцию патча исполняемого файла 64-бит.
        Call PatchFile64x
      ${Else}
        ; Получаем имя исполняемого файла
        ${GetFileName} "$5" $6
        ; Убиваем процесс запущенной программы.
        ${KillProcess} "$6" $6
        ; Вызываем функцию патча исполняемого файла 32-бит.
        Call PatchFile32x
      ${EndIf}
      ; Получаем путь к папке исполняемого файла.
      ${GetParent} "$5" "$5"
      ; Устанавливаем языковой файл.
      DetailPrint " +++"
      ; Объявляем каталог установки.
      SetOutPath "$5  ranslations"
      ; Переименовываем языковой файл при установке (замена исходного файла).
      File "/oname=hdrprojects_en.qm" "FILEShdrprojects_ru.qm"
      DetailPrint "Установлен языковой файл Russian."
      DetailPrint "--------------------- Конец ----------------------"
      DetailPrint ""
    ${Next}
    ; Переходим на конец секции (обход команды завершения)
    Goto +2
    ; Метка перехода, если ничего не найдено.
    nopatch:
    ; Завершаем работу инсталлятора
    Quit
  SectionEnd
# Функция инициализации инсталлятора
  Function .onInit
    InitPluginsDir
    SetOutPath $PLUGINSDIR
    File /oname=$PLUGINSDIRsplash.bmp "RESwylek.bmp"
    ; Подключаем звуковой файл
    File /oname=$PLUGINSDIRsplash.wav "RESSplash.wav"
    ; Параметры вывода картинки
    advsplash::show 2000 600 400 -1 $PLUGINSDIRsplash
    Pop $0
    ; Удаляем файлы сплешскрина (изображение и аудио)
    Delete $PLUGINSDIRsplash.bmp
    Delete $PLUGINSDIRsplash.wav
    ; Назначаем каталог установки русификатора в зависимости от разрядности ОС
    ; (в процессе работы этого инсталлятора изменить заданный каталог нельзя).
    ${If} ${RunningX64}
       StrCpy $INSTDIR "$PROGRAMFILES64${PRODUCT_PUBLISHER}"
    ${Else}
       StrCpy $INSTDIR "$PROGRAMFILES${PRODUCT_PUBLISHER}"
    ${EndIf}
  FunctionEnd
# Функция обработки найденных файлов
  Function FindFilesEXE
    ; Проверяем, что переменная $R9 (путь/имя_файла) существует.
    StrCmp $R9 "" +4 0
    ; Увеличиваем значение счетчика файлов $FileNum на 1.
    IntOp $FileNum $FileNum + 1
    ; Сохраняем найденный путь и имя файла в переменную $R0 в виде массива строк.
    StrCpy $R0 "$R0 /$FileNum=$R9"
    ; Продолжаем поиск ехе-файлов.
    Goto +2
    ; Если переменная $R9 пустая, то завершаем поиск.
    StrCpy $0 StopLocate
    Push $0
  FunctionEnd
# Функция пропатчивания файла 32-бит приложения
  Function PatchFile32x
    ; Очищаем буфер ошибок.
    ClearErrors
    ; Открываем файл в режиме чтения/записи.
    FileOpen $0 "$5" "a"
    ; Если файл не удалось открыть (ошибка) -> 0, иначе +3.
    IfErrors 0 +3
      DetailPrint "  >> не удалось открыть файл"
    Goto +11 ; переход к команде сообщения и закрытия файла
    DetailPrint "  >> ID файла: $0"
    ; Поиск последовательности НЕХ в файле.
    nsisFile::FileFindBytes "$0" "{исходная сигнатура}" "-1"
    Pop $2
    ; Если найдено, то $2 = смещение в файле (десятичный формат) (0).
    ; Если не найдено, то $2 = -1 (+7).
    StrCmp $2 -1 +7 0
      DetailPrint "  >> смещение: $2"
      ; Запись последовательности НЕХ по указанному смещению.
      ; Если смещение не указано, запись с начала файла.
      ; При использовании команды FileFindBytes запись будет по найденному смещению.
      ; Если ничего не найдено, то указатель поиска находится в конце файла.
      ; В результате запись будет выполнена в конец файла, т.е. байты будут добавлены.
      nsisFile::FileWriteBytes "$0" "{новая сигнатура}"
      Pop $3
      DetailPrint "  >> записано байт: $3"
      DetailPrint "Обновление файла выполнено успешно! :)"
    Goto +3 ; переход к команде закрытия файла
      ; Ничего не найдено и не пропатчено.
      DetailPrint "  >> искомая сигнатура не найдена: $2"
      DetailPrint "Не удалось обновить файл!  :("
    ; Закрываем файл.
    FileClose $0
  FunctionEnd
# Функция пропатчивания файла 64-бит приложения
  Function PatchFile64x
    ; Очищаем буфер ошибок.
    ClearErrors
    ; Присваиваем начальное значение переменной $7 = 0 (счетчик сигнатур).
    StrCpy $7 0
    ; Открываем файл в режиме чтения/записи.
    FileOpen $0 "$5" "a"
    ; Если файл не удалось открыть (ошибка) -> 0, иначе +3.
    IfErrors 0 +3
      DetailPrint "  >> не удалось открыть файл"
    Goto nopatch64 ; переход к команде сообщения и закрытия файла
    DetailPrint "  >> ID файла: $0"
  
  ; -< 1 >----------------------------------------------------------------------
    ; Первая сигнатура
    IntOp $7 $7 + 1
    ; Поиск последовательности НЕХ в файле
    nsisFile::FileFindBytes "$0" "{исходная сигнатура}" "-1"
    Pop $2
    ; Если найдено, то $2 = смещение в файле (десятичный формат) (0).
    ; Если не найдено, то $2 = -1 (nohex64).
    StrCmp $2 -1 nohex64 0
      DetailPrint "  >> смещение[$7]: $2"
      ; Запись последовательности НЕХ по указанному смещению.
      nsisFile::FileWriteBytes "$0" "{новая сигнатура}"
      Pop $3
      DetailPrint "  >> записано байт: $3"
      DetailPrint "  ..."  
  ; -< 2 >----------------------------------------------------------------------
    ; Вторая сигнатура
    IntOp $7 $7 + 1
    ; Поиск следующей последовательности НЕХ в файле
    nsisFile::FileFindBytes "$0" "{исходная сигнатура}" "-1"
    Pop $2
    ; Если найдено, то $2 = смещение в файле (десятичный формат) (0).
    ; Если не найдено, то $2 = -1 (nohex64).
    StrCmp $2 -1 nohex64 0
      DetailPrint "  >> смещение[$7]: $2"
      ; Запись последовательности НЕХ по указанному смещению.
      nsisFile::FileWriteBytes "$0" "{новая сигнатура}"
      Pop $3
      DetailPrint "  >> записано байт: $3"
      DetailPrint "  ..."
  ; -< 3 >----------------------------------------------------------------------
    ; Третья сигнатура
    IntOp $7 $7 + 1
    ; Поиск следующей последовательности НЕХ в файле
    nsisFile::FileFindBytes "$0" "{исходная сигнатура}" "-1"
    Pop $2
    ; Если найдено, то $2 = смещение в файле (десятичный формат) (0).
    ; Если не найдено, то $2 = -1 (nohex64).
    StrCmp $2 -1 nohex64 0
      DetailPrint "  >> смещение[$7]: $2"
      ; Запись последовательности НЕХ по указанному смещению.
      nsisFile::FileWriteBytes "$0" "{новая сигнатура}"
      Pop $3
      DetailPrint "  >> записано байт: $3"
      DetailPrint "  ..."
  ; -< 4 >----------------------------------------------------------------------
    ; Четвертая сигнатура
    IntOp $7 $7 + 1
    ; Поиск следующей последовательности НЕХ в файле
    nsisFile::FileFindBytes "$0" "{исходная сигнатура}" "-1"
    Pop $2
    ; Если найдено, то $2 = смещение в файле (десятичный формат) (0).
    ; Если не найдено, то $2 = -1 (nohex64).
    StrCmp $2 -1 nohex64 0
      DetailPrint "  >> смещение[$7]: $2"
      ; Запись последовательности НЕХ по указанному смещению.
      nsisFile::FileWriteBytes "$0" "{новая сигнатура}"
      Pop $3
      DetailPrint "  >> записано байт: $3"
      DetailPrint "Обновление файла выполнено успешно! :)"
    Goto endhex64
      nohex64:
      ; Ничего не найдено и не пропатчено.
      DetailPrint "  >> сигнатура[$7] не найдена: $2"
      nopatch64:
      DetailPrint "Не удалось обновить файл!  :("
    endhex64:
    ; Закрываем файл.
    FileClose $0
  FunctionEnd
# Функция инициализации графического интерфейса инсталлятора
  Function .onGUIInit
    ; Получение дескриптора элемента с ID=1028 (фирменная надпись).
    GetDlgItem $5 $HWNDPARENT 1028
    ; Вызов библиотеки Linker для создания кликабельной URL-ссылки.
    Linker::link /NOUNLOAD $5 "http://www.wylek.ru/"
  FunctionEnd
# Функция выгрузки графического интерфейса инсталлятора
  Function .onGUIEnd
    Linker::unload ; выгрузка плагина Linker
  FunctionEnd
[свернуть]
[свернуть]

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

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 - каталог ресурсов интернет Яндекс.Метрика