Войти
  1. ВКонтакте
  2. Facebook
  1. »
  2. »
  3. »
  4. Делаем патч в Inno как на PatchWise Free…
Скрыть панель справаПоказать панель справа

Делаем патч в Inno как на PatchWise Free…

Легенда
  1. Офлайн
  2. Админ
  3. 1606 сообщений
  4. Репутация: 2
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 1 отправлено 22:55, 14.06.2011
Делаем патч в Inno как на PatchWise Free…

От меня: я не создаю скрипты для Inno, я ими пользуюсь!

При создании установщика была поставлена задача в контейнер запхнуть три установщика. И чтобы они по очереди запускались. Извращения эти делались во благо конечного пользователя, потому что Photoshop(х86) и Photoshop(х64) устанавливается куда попало в разных выпусках. А для уменьшения размера надо было сделать патч в PatchWise Free. Я себе установил 64 битную версию оси, и каково же было у меня удивление, что PatchWise Free не понимает пути Program Files (x86)?! Но наработки рабочие уже были у меня, вдобавок прошерстил инет и собрал скрип для Inno. Что он может – патчить файлы как PatchWise Free, искать файл оригинала, проверять хеш-суммы файла и делать бэкап файлов!!! Инфа эта давняя, но общего рабочего скрипта и самой процедуры патчинга вы нигде не найдете – видать, червям лучше скормить свои знания, чем поделиться с народом. Я предоставляю на общее пользование полный комплект файлов для сборки установщика как PatchWise Free.

Поплакали, и хватит, теперь подробное описание сборки патча.

Чё надо:

Кролик – http://letitbit.net/downloa....ar.html
Можно свою локализованную программу
Полный пакет для патча – Доступно только для пользователейPеееatchSetup.rar
Пакет для этих целей - ISPack_5.3.9_Full_Unicode_FULL+Plugs-I-S

Скачайте и распакуйте архив в корень диска С. Разложите файлы по папкам : в Modified Files вставьте переведенный файл а в Original Files конечно исходный файл (не переведенный). В моем примере установите программу ThemesCreator-v4.16.2.6_RuPack и скопируйте файл ThemesCreator.exe в папку Modified Files. В этой же директории в папке PatchWise.bak скопируйте файл ThemesCreator.exe в папку Original Files.



Открываем файл WYLEK.bat - правый клик и выберите Изменить.
Сотрите лишнюю строку – здесь можно добавлять файлы, сколько вам надо.



Зайдите в папку Modified Files и скопируйте полное имя файла - ThemesCreator.exe и вставьте как на картинке.



Теперь сохраните изменения и запускайте батник на выполнение.



Выскочит окошко с процедурой выполнения и создаст файл MyPatch.dat, расположенный в папке PatchSetup. И я Вас прошу – не меняйте расположение и названия папок!!!



Зайдите в папку PatchSetup и откройте файл сценария Themes Creatorl.iss в Inno Setup Compiler.
Все что светится зеленым цветом это подсказка и на работу скрипта не влияет. Написано на русском и обязательно к прочтению перед изменением сценария!!!
Найдите это место и вставьте полное имя файла - ThemesCreator.exe вместо исходного. Вставлять надо аккуратно без лишних пробелов и символов!



Теперь замените на этом месте также вместо исходного файла на ThemesCreator.exe.



Сейчас у каждого виндоуса есть калькулятор подсчета хеша. Сделайте настройки как на скрине и вставьте MD5 исходного файла ThemesCreator.exe в строку выше.



Еще поменяйте полное имя здесь на ThemesCreator.exe в самом конце сценария. Это процедура патча и бэкапа файла.
Сколько у вас файлов для патчинга, столько надо прописать этих процедур. У нас одна и больше писать ничего не надо.



Вот для примера пропатчено три файла и количество процедур надо прописать три.



Делайте сохранение скрипта, желательно под другим именем, и запускайте компилирование. Если ничего не натворили, то все будет удачно и установщик будет создан в папке Output. Заходите туда и запускайте на исполнение. Не забудьте перед запуском установщика в директории Sony Ericsson\Themes Creator заменить файл ThemesCreator.exe на исходный!!! Все должно установиться без проблем.

Теперь повторно запустите и вы должны будете увидеть такую картину.



Я думаю, вы знаете, почему выскочило это предупреждение. Если нет, то вам поможет только Господь Бог. Кстати вы можете сделать эксперимент с папкой расположения. Тоже программа облает ваши руки. А тем парням кто русский язык не желает использовать, в директории программы создастся папка PatchBackup с исходным файлом. Нужно просто заменить в основной папке русифицированный и усЁ. Вот в принципе и вся процедура создания бэкапа – легко, просто и не принужденно…

Кстати патч созданный на эту программу в PatchWise Free весит 9.67 мб
Патч созданный на эту программу в Inno Setup весит 1.18 мб

Вот такой прикол…
Мастер
  1. Офлайн
  2. Команда сайта.
  3. 892 сообщений
  4. Репутация: 9
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 2 отправлено 03:15, 15.06.2011
Классный материал! Теперь для полной картины осталось еще сделать деинсталлятор русификатора (удаление файлов русификации и восстановление оригинальных файлов программы) biggrin
Также функцию деинсталляции может выполнять и сам установщик. Наверняка вы сталкивались с такими программами, когда она у вас уже установлена, но при запуске файла инсталляции Мастер показывает окно с выбором действий: 1) Восстановить установку, 2) Изменить установку, 3) Удалить программу.
Например, я такой прием опробовал в своем русификаторе для программы "QSetup". Правда для его создания использовал патчер "IndigoRose Visual Patch".
А вот подружиться с Inno, у меня пока не получается sad


------------------------------------------
Кто ищет, тот всегда найдет!
Легенда
  1. Офлайн
  2. Админ
  3. 1606 сообщений
  4. Репутация: 2
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 3 отправлено 15:20, 15.06.2011
Quote (Leserg)
Теперь для полной картины осталось еще сделать деинсталлятор русификатора (удаление файлов русификации и восстановление оригинальных файлов программы)


Сценарий есть такой. Правда здесь патчинг не проходит, а вот функции бэкапа и восстановления оригинальных файлов (любых расширений) после удаления русификатора работают на УРА! Вечером рабочий материал закину на сайт. Запрос на выбор действия тоже нет. Но зачем он нужен при удалении русификатора? Запустил удаление и все вернулось на круги своя...
Мастер
  1. Офлайн
  2. Команда сайта.
  3. 892 сообщений
  4. Репутация: 9
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 4 отправлено 21:03, 15.06.2011
Quote (WYLEK)
Запрос на выбор действия тоже нет. Но зачем он нужен при удалении русификатора?

Та то я для примера привел, чтоб вспомнили, а кто не знал, будет знать, что есть инсталляторы, которые выполняют действия деинсталлятора, плюс, попутно, могут выполнить переустановку приложения. Понятное дело, в наших русификаторах функция переустановки не нужна. Всего лишь два действия: установка и удаление. smile


------------------------------------------
Кто ищет, тот всегда найдет!
Легенда
  1. Офлайн
  2. Админ
  3. 1606 сообщений
  4. Репутация: 2
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 5 отправлено 21:50, 15.06.2011
Quote (Leserg)
Та то я для примера привел, чтоб вспомнили, а кто не знал, будет знать, что есть инсталляторы, которые выполняют действия деинсталлятора


Послал тебе файлы.
Может для других напишу мануальчик biggrin хотя там все понятно и так.
Протестируй и напиши что и как.
Мастер
  1. Офлайн
  2. Команда сайта.
  3. 892 сообщений
  4. Репутация: 9
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 6 отправлено 03:59, 16.06.2011
Quote (WYLEK)
Протестируй и напиши что и как.

Тестировал на виртуалке: Windows XP SP3
--------------------------------------------------------
Делал все с теми файлами, которые ты дал. Поставил программу образец. Открыл сценарий в Inno (Unicode) и скомпилировал инсталлятор.


------------------------------------------
Кто ищет, тот всегда найдет!
Легенда
  1. Офлайн
  2. Админ
  3. 1606 сообщений
  4. Репутация: 2
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 7 отправлено 15:11, 16.06.2011
Quote (Leserg)
Делал все с теми файлами, которые ты дал. Поставил программу образец. Открыл сценарий в Inno (Unicode) и скомпилировал инсталлятор.


Это легко исправляется, в настройка же по русскому написано и всплывающая подсказка есть....

Прибывший
  1. Офлайн
  2. Участники
  3. 4 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 8 отправлено 01:22, 30.06.2011
Ну тут просто выкидывание файлов описано biggrin
Хотелось бы увидеть как определённые байты патчутся biggrin

Последний раз редактировал TEKTON 08:25, 30.06.2011
Легенда
  1. Офлайн
  2. Админ
  3. 1606 сообщений
  4. Репутация: 2
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 9 отправлено 12:53, 30.06.2011
Quote (TEKTON)
Ну тут просто выкидывание файлов описано biggrin
Хотелось бы увидеть как определённые байты патчутся biggrin


Переведи... biggrin
Прибывший
  1. Офлайн
  2. Участники
  3. 4 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 10 отправлено 11:00, 01.07.2011
Quote (TEKTON)
Хотелось бы увидеть как определённые байты патчутся biggrin

Quote (WYLEK)
Переведи... biggrin biggrin

Видел патч одного товарисча, который в Inno делает патчи, кейгены и кряки biggrin
Вот интересно бы увидеть код который в секцию CODE пишется.
Как известно, в Inno можно вытворять что хочешь biggrin Хоть программировать biggrin
Но для этого надо знать Pascal.
Легенда
  1. Офлайн
  2. Админ
  3. 1606 сообщений
  4. Репутация: 2
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 11 отправлено 11:05, 01.07.2011
Quote (TEKTON)
Вот интересно бы увидеть код который в секцию CODE пишется.


Так скачай архив в шапке - там полный скрипт. Файл перезалил.
Сталкер
  1. Офлайн
  2. Журналисты
  3. 100 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 12 отправлено 21:59, 09.12.2011
Quote (WYLEK)
Полный пакет для патча – http://rghost.ru/13071641

Ссылка померла - хотел поковырять скрипт.
Прибывший
  1. Офлайн
  2. Участники
  3. 15 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 13 отправлено 21:01, 04.04.2012
WYLEK - можеш перезалить файлы необходимые для данного "Урока"?
Легенда
  1. Офлайн
  2. Админ
  3. 1606 сообщений
  4. Репутация: 2
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 14 отправлено 21:47, 05.04.2012
Quote (Metabolic)
WYLEK - можеш перезалить файлы необходимые для данного "Урока"?


Перезалил, архив в шапке
Прибывший
  1. Офлайн
  2. Участники
  3. 15 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 15 отправлено 16:08, 07.04.2012
А возможно с помощью "InnoSetup" на основе данного примера сделать инсталятор как в "PatchWise Free" стиля "Simple"?
чтобы инсталятор состоял из одного диолового окна с двумя кнопками - обновить и закрыть.
Сталкер
  1. Офлайн
  2. Журналисты
  3. 100 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 16 отправлено 18:33, 07.04.2012
Metabolic, С помощью Inno Setup можно все. ну, кое чего нельзя, конечно, но только в том случае, если не сильно нужно. А если очень сильно нужно, то можно вообще все, что душе угодно. Инструмент это легко расширяемый, подключаемые плагины сделают все, чего пожелаешь. Для твоего случая есть встроенная булевая функция - ShouldSkipPage. Параметром в ней идентификатор страницы, результатом - булевая переменная. Простейший вариант использования - для твоего случая:
Code
function ShouldSkipPage(PageID: Integer): Boolean;
begin
   Result := True;
end;
таким образом, мы вообще всегда говорим функции скрывать страницы. Но, две страницы все равно останутся - страница готовности и страница установки. дальше дело техники - придать нужный вид этим страницам.
Прибывший
  1. Офлайн
  2. Участники
  3. 15 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 17 отправлено 20:43, 07.04.2012
С окнами разобрался, а вот как-бы ещё приделать сheckbox для backup файлов?
создать правило, чтобы пользователь сам выбирал делать резервные копии старых файлов или нет.
Сталкер
  1. Офлайн
  2. Журналисты
  3. 100 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 18 отправлено 22:28, 07.04.2012
Это легко сделать с помощью компонент. Перенести в формдизайнере компонентлист на страницу готовности, или какая нужна, (на компонент-листе правой кнопкой - Change Parent - както так) использовать для проверки функцию IsComponentSelected('имя компонента')
Прибывший
  1. Офлайн
  2. Участники
  3. 15 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 19 отправлено 22:57, 07.04.2012
Quote (Gnom)
Это легко сделать с помощью компонент. Перенести в формдизайнере компонентлист на страницу готовности, или какая нужна, (на компонент-листе правой кнопкой - Change Parent - както так) использовать для проверки функцию IsComponentSelected('имя компонента')

Я в "Inno setup" вапще не разбираюсь, только несколько дней как начал осваивать.
В самой програме "Inno Setup" в "Редакторе форм" я то поставил сheckbox в том окне что мне надо, а вот что конкретно нужно записать в скрипте чтобы всё работало как надо
-необходимо как я понимаю в скрипте создать правило на создание бэкапа если стоит галочка или же не создавать бэкап если не стоит.
Сталкер
  1. Офлайн
  2. Журналисты
  3. 100 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 20 отправлено 11:23, 08.04.2012
Покажи скрипт свой.вообще, такие элементы, как чекбоксы, радиобаттоны, комбобоксы, чеклистбоксы - уже несут в себе необходимые функции для построения условий.
Прибывший
  1. Офлайн
  2. Участники
  3. 15 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 21 отправлено 14:26, 08.04.2012
Скрипт с данной темы форума PеееatchSetup.rar
мне бы приделать: сheckbox для бекапа и messagebox при успешном пропатчивании файла, например "Программа успешно русифицирована!"
-и было бы совсем идеально!
Сталкер
  1. Офлайн
  2. Журналисты
  3. 100 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 22 отправлено 15:38, 08.04.2012
Metabolic, Вот, смотри:

Code

var
        NewCheckBox1: TNewCheckBox;

const
        BackupDir = 'PatchBackup';
        PatchFile = 'MyPatch.dat';

function vpatch(parentwnd: Integer; pluginname, funcname, param1, param2, param3: PChar): Integer;
        external 'vpatch@files:callvpatch.dll stdcall';

function PatchFileFunc(FileName: string): Integer;
begin
        Result := vpatch(1, ExpandConstant('{tmp}\VPatch.dll'), 'vpatchfile', ExpandConstant('{tmp}\' + PatchFile), ExpandConstant('{app}\' + BackupDir + '\' + FileName), ExpandConstant('{app}\' + FileName));
end;

procedure BackupFile(FileName: string);
begin
        if not FileExists(ExpandConstant('{app}\' + BackupDir + '\' + Filename)) then
          FileCopy(ExpandConstant('{app}\' + Filename), ExpandConstant('{app}\' + BackupDir + '\' + Filename), True);
end;

procedure RestoreFile(FileName: string);
begin
        FileCopy(ExpandConstant('{app}\' + BackupDir + '\' + Filename), ExpandConstant('{app}\' + Filename), False);
        DeleteFile(ExpandConstant('{app}\' + BackupDir + '\' + Filename));
end;

procedure InitializeWizard();
begin
        ExtractTemporaryFile('VPatch.dll');
        ExtractTemporaryFile('MyPatch.dat');
        WizardForm.ReadyMemo.Height := ScaleY(0);
        NewCheckBox1 := TNewCheckBox.Create(WizardForm);
        with NewCheckBox1 do
        begin
          Parent := WizardForm.ReadyPage;
          SetBounds(ScaleX(8), ScaleY(24), ScaleX(97), ScaleY(17));
          Caption := 'NewCheckBox';
        end;
end;

// Проверка присутствия определенных файлов в папке с установленной программой на странице выбора папки назначения
function NextButtonClick(CurPage: Integer): Boolean;
var
        s: string;
begin
        Result := True;
        if CurPage = 6 then
        begin
          if (FileSearch('wylek.exe', ExpandConstant('{app}')) = '')
//Вставьте полное имя файла выше для проверки на присутствие
          then
          begin
            s := 'Извините, в директории ' + ExpandConstant('{app}') + '' #13 'не обнаружены оригинальные файлы.' #13#13 'Пожалуйста, выберите правильный путь к папке для установки обновления.';
            MsgBox(s, mbError, mb_Ok);
            Result := False
          end;
        end;
end;

//Не забываем вставить порверку на присутствие проверяемого файла
procedure CurPageChanged(CurPageID: Integer);
var
        MD5, s: string;
begin
        if CurPageID = 12
          then
        begin
          MD5 := GetMD5OfFile(ExpandConstant('{app}\wylek.exe'));
          if not (MD5 = '9711713d2e4173cccfeeea1ffd76f129')
//Вставьте полное имя файла выше и MD5 с енг буквами В НИЖНЕМ РЕГИСТРЕ!
          then
          begin
            s := 'Ошибка MD5 в файле обновления!' #13#13 'Установка прекращена.';
            MsgBox(s, mbCriticalError, mb_Ok); //Если хеш файла(ов) не соответствует, выдается сообщение, и на этом все действия прекращаются.
            WizardForm.Close; //Закрытие инсталлятора
            Exit; //Прерывание и откат всех действий
          end;
        end;
end;

//Не забываем дописать еще такую процедуру
procedure CancelButtonClick(CurPage: Integer; var Cancel, Confirm: Boolean);
begin
        Cancel := True;
        if CurPage = 12 //Это непосредственно страница с индикатором выполнения
          then
        begin
          Confirm := False; //На этой странице отключаем появление сообщения при нажатии на кнопку Отмена
        end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
     MD5, s: string;
     err : Boolean;
begin
     if CurStep = ssInstall then
     begin
         err := False; // ошибки пока еще нет
         CreateDir(ExpandConstant('{app}\' + BackupDir));
        if NewCheckBox1.Checked then   BackupFile('wylek.exe');// Если стоит галка на чекбоксе то бекапим
        
         case PatchFileFunc('wylek.exe') of
         0: WizardForm.ProgressGauge.Position := WizardForm.ProgressGauge.Position + 33;
         1: begin
               if NewCheckBox1.Checked then  RestoreFile('wylek.exe');
              err := True; // если не удалось пропачить, то говорим, что была ошибка
            end;
         end;
         case err of // проверяем состояние ошибки и выводим соответствующее сообщение
           True : MsgBox('При русификации произошла ошибка!',mbError,MB_OK);
           False: MsgBox('Программа успешно русифицирована!',mbInformation,MB_OK);
         end;
     end;
end;

//Вставьте полные имена файлов выше на каждую процедуру отдельно

Добавил вывод сообщений о буспешной/неуспешной русификации
Прибывший
  1. Офлайн
  2. Участники
  3. 15 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 23 отправлено 17:06, 08.04.2012
"Gnom" Спасибо за скрипт - единственное его нужно немного подправить:
сheckbox и messagebox есть, но инсталятор русифицирует только в том случае, если поставить галочку на бэкап, а если не ставить - инсталятор в конце инсталяции просто закрывается но файлы не русифицирует!

Последний раз редактировал Metabolic 20:00, 08.04.2012
Сталкер
  1. Офлайн
  2. Журналисты
  3. 100 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 24 отправлено 21:17, 08.04.2012
Metabolic, попраил, чтобы только бекапило по чекбоксу.
Прибывший
  1. Офлайн
  2. Участники
  3. 15 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 25 отправлено 22:57, 08.04.2012
Gnom попробуй ещё раз поправить:
-с галочкой патчится нормально, а без выдаёт сообщение "При русификации произошла ошибка!"
•и ещё вопрос - можно ли задать произвольную ширину и высоту окна инсталятора? (пробовал изменить в 'редакторе форм' но там получается лиш увеличить, а мне бы уменьшить.)

Последний раз редактировал Metabolic 23:04, 08.04.2012
Сталкер
  1. Офлайн
  2. Журналисты
  3. 100 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 26 отправлено 10:05, 09.04.2012
Metabolic, По первому вопросу - покажи свой код - именно свой. по второму:
Code
procedure InitializeWizard();
begin
   with WizardForm do
   begin
     AutoScroll := False;
     ClientHeight := ScaleY(100);// высота
     ClientWidth := ScaleX(500); // ширина
   end;
end;

указываешь нужный тебе размер
 
Перейти
Найти

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

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

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

  1. Переведенная на русский язык справка...
    Автор: Ruvest 08:25, 17.08.2017
  2. Resource Tuner 2.10 [RU/EN]
    Автор: gazon01 00:04, 15.08.2017
  3. HWiNFO32\64
    Автор: Alecs962 17:18, 14.08.2017
  4. Поговорим?
    Автор: WYLEK 09:41, 14.08.2017
  5. Perfect Photo Suite
    Автор: Vitaly 19:25, 13.08.2017
  6. EaseUS Partition Master...
    Автор: WYLEK 17:59, 12.08.2017

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

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