Этот сайт создан как клуб русификаторщиков. Для нас существуют три основных правила.
1. Мы никому и ничего не должны!
2.Один пришедший на сайт толковый русификаторщик дороже всех пользователей.
3. Мы делаем русификаторы для своего сайта, но в оригинале ими могут пользоваться все в интернете.
Посмотри код в сообщение 33 или 35. дело в том, что если MD5 не сходится, все равно процедура пропатчивания происходит. А надо бы выход сделать из установки.
// Задействуем системную функцию для перемещения файлов при ресторинге - здорово ускорит работу при большом количестве файлов. function MoveFile(const srcFile, destFile: PAnsiChar): Integer;external "MoveFileA@kernel32.dll stdcall"; function vpatch(parentwnd: Integer; pluginname,funcname,param1,param2,param3: PAnsiChar): Integer;external "vpatch@files:callvpatch.dll stdcall";
function PatchFileFunc(FileName,BackupFileName: String): Integer; begin Result:= vpatch(1,ExpandConstant("{tmp}VPatch.dll"),"vpatchfile",ExpandCo nstant("{tmp}"+ PatchFile), ExpandConstant("{app}"+BackupDir+""+BackupFileName),ExpandCons tant("{app} "+FileName)); // Result : // 0 = іЙ№¦ // 1 = К§°Ь end;
procedure BackupFile(FileName,BackupFileName:String); begin if not FileExists(ExpandConstant("{app}"+BackupDir+""+BackupFileName) ) then FileCopy(ExpandConstant("{app}"+Filename),ExpandConstant("{app} "+BackupDir +""+BackupFileName),True); end;
procedure RestoreFile(BackupFileName,FileName: String); begin MoveFile(ExpandConstant("{app}"+BackupDir+""+BackupFileName),E xpandConstan t("{app}"+Filename)); end;
function InitializeSetup(): Boolean; begin if not FileExists(ExpandConstant("{tmp}VPatch.dll")) then ExtractTemporaryFile("VPatch.dll"); if not FileExists(ExpandConstant("{tmp}MyPatch.dat")) then ExtractTemporaryFile("MyPatch.dat"); Result:=true; end;
// Проверка присутствия определенных файлов в папке с установленной программой на странице выбора папки назначения function NextButtonclick(CurPage: Integer): Boolean; var s:string; begin Result:=True; case CurPage of 6: begin If (FileSearch("ThemesCreator.exe", ExpandConstant("{app}"))="") then //Вставьте полное имя файла выше для проверки на присутствие begin s:="Извините, в директории "+ExpandConstant("{app}")+"" #13 "не обнаружены оригинальные файлы." #13#13 "Пожалуйста, выберите правильный путь к папке для установки обновления."; MsgBox(s, mbError, mb_Ok); Result:= False; end; end; end; end;
procedure CancelButtonclick(CurPage: Integer; var Cancel, Confirm: Boolean); begin Cancel:=True; case CurPage of 12: Confirm:=False; end; end;
procedure CurStepChanged(CurStep: TSetupStep); var MD5,s:string; begin case CurStep of ssInstall: begin MD5 := GetMD5OfFile(ExpandConstant("{app}ThemesCreator.exe")); If not (MD5 = "9711713d2e4173c3cf450a1ffd76f129") then //Вставьте полное имя файла выше и MD5 с енг буквами В НИЖНЕМ РЕГИСТРЕ! begin s:="Ошибка MD5 в файле обновления!" #13#13 "Установка прекращена."; MsgBox(s, mbCriticalError, mb_Ok); //Если хеш файла(ов) не соответствует, выдается сообщение, и на этом все действия прекращаются. WizardForm.Close; //Закрытие инсталлятора Exit; //Прерывание и откат всех действий end else begin // ----- в этом блоке собственно пропачивание ----- CreateDir(ExpandConstant("{app}"+BackupDir));
BackupFile("ThemesCreator.exe","ThemesCreator.bak"); if PatchFileFunc("ThemesCreator.exe","ThemesCreator.bak") = 1 then RestoreFile("ThemesCreator.bak","ThemesCreator.exe"); WizardForm.PROGRESSGAUGE.POSITION := 33;
BackupFile("ReleaseNotes.txt","ReleaseNotes.bak"); if PatchFileFunc("ReleaseNotes.txt","ReleaseNotes.bak") = 1 then RestoreFile("ReleaseNotes.bak","ReleaseNotes.txt"); WizardForm.PROGRESSGAUGE.POSITION := 66; // -------------------------------------------------- end; end; end; end;
В моем посте поправишь? а то кто-то менее опытный возьмет, и замучается искаить проблему
Ничего, найдут подсказка вот - BackupFi leName Кстати я вставил код Лингвистическая защита в установщик и там такая же ситуация во всем нете с ошибкой идет скрипт - MsgBox("Ответ неверен!", mb Information, MB_OK)
Там же в сообщении написано в чем проблема: Требуемая функция или процедура "ShowSelectUserTask" не найдена. Это означает, что функция или процедура "ShowSelectUserTask", которую использует твой скрипт, не найдена. Возможная причина: или не установлен плагин, откуда идет её вызов, или в скрипте не сделано её объявление, или ещё чего. Что-то конкретно тяжело сказать.
В разделе скрипта [Setup]напиши параметр SetupIconFile, а его значением укажи полный путь к своему значку. При сборке инсталлятора будет использован значок, который ты указал. Например: SetupIconFile=F:TMPCSvalve.ico.