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

  • InnoSetup Ultra 5 0 5 1
avatar_WYLEK

InnoSetup Ultra

Автор WYLEK, 01 мая 2011, 19:39:00

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

WYLEKАвтор темы

Ответ #15 : 30 июня 2011, 18:12:00 #15
Цитата: GnomТам двойной слеш в пути, изза этого и не показывает путь, нужно посоветоваться - там нужно удалять второй слеш. Сейчас попозже дам решение.

ОК.

Но в реестре один только.


И закрепи, тогда уж шапку, глядиш, разовьется тема[/quote]

 Да я только ЗА!
 Если у тебя есть чему нас научить - мы здесь и будем прилежными учениками
 И тему будешь вести сам

Gnom

Ответ #16 : 30 июня 2011, 18:26:00 #16
Держи, проверил у себя, должно отработать ина х64 и на х32, хотя на х32 нужно еще проверить.

Показать / Скрыть текст

[Setup]
AppName=GetDeviceInfo
AppVerName=GetDeviceInfo
DefaultDirName={code:GetInstallDir}


[code]
var RootKey: DWord;

function RemoveDoubleSlash(S: String): String;
begin
while Pos("", S) > 0 do
StringChange(S, "", "");
Result:= S;
end;

Function GetInstallDir( dir: String ): String;
begin
if RegQueryStringValue(RootKey, "SOFTWARE7-Zip", "Path", dir) then
Result:= RemoveDoubleSlash(dir);
end;

function InitializeSetup(): Boolean;
begin
if ISWin64 then RootKey:= HKLM64 else RootKey:= HKLM32;
Result:= True;
if not RegValueExists(RootKey, "SOFTWARE7-Zip", "Path") then
begin
MsgBox("Программа не найдена!", mberror, mb_ok);
Result:=False;
end;
end;
[свернуть]
Добавлено (30.06.2011, 18:26:23)
---------------------------------------------
Цитата: WYLEKЕсли у тебя есть чему нас научить - мы здесь и будем прилежными учениками
Ну, было-бы желание учится, а чего сам знаю - научу.

WYLEKАвтор темы

Ответ #17 : 30 июня 2011, 18:33:00 #17
Цитата: GnomДержи, проверил у себя, должно отработать ина х64 и на х32

Все работает! Вопросы у меня к тебе еще есть, но это потом.
Давай создадим раздел и поведешь его. Мне, например, все интересно что связано с установщиками.

Gnom

Ответ #18 : 30 июня 2011, 18:37:00 #18
Цитата: WYLEKДавай создадим раздел
Не обязательно, достаточно модифицировать этот. Но, сперва, может опрос по форуму сделать, о необходимости такого? есть несколько больших форумов по инно, с остальными программами установки я не связывался, плюс, нужен ктото, кто хорошо знает дельфи и С+, для написания воспомогательных библиотек, что иногда требуется. На вопросы буду отвечать, в меру моих знаний и опыта.
Единственное - Установщики приложений нужно вынести в корень форума - Русификация программ - скорее дочерняя тема Установщиков приложений, чем наоборот

WYLEKАвтор темы

Ответ #19 : 30 июня 2011, 18:42:00 #19
Цитата: GnomНе обязательно, достаточно модифицировать этот. Но, сперва, может опрос по форуму сделать, о необходимости такого? есть несколько больших форумов по инно, с остальными программами установки я не связывался, плюс, нужен ктото, кто хорошо знает дельфи и С+, для написания воспомогательных библиотек, что иногда требуется. На вопросы буду отвечать, в меру моих знаний и опыта.

По русификации знаю - никто на блюдечке не подаст
Надо просто начать и делать - аудитория будет, главное увлечь народ.

Даю тебе права на создание новостей. Выставляй все что считаешь нужным по своему увлечению.

Leserg

Ответ #20 : 01 июля 2011, 01:35:00 #20
Цитата: WYLEKдобро пожаловать в нашу компанию!
Спасибо Gnom
Кто ищет, тот всегда найдет!

WYLEKАвтор темы

Ответ #21 : 01 июля 2011, 11:02:00 #21
Можешь посмотреть что можно сделать в этой теме - Делаем патч в Inno как на PatchWise Free...

 Дело в том, что создается папка бэкапа, а можно ли сделать чтобы просто дописывала к файлу расширение .bak?

 Например плагинам для фотошопа пофиг из какой папки читать файл. Я с этим столкнулся и был удивлен - фотошоп спокойно читал из бэкапной папки в 32 битном режиме енг файл а в 64 битном рус файл?! А если устанавливать с расширением .bak исходный файл - то все нормально.

Gnom

Ответ #22 : 01 июля 2011, 12:58:00 #22
Так то можно, вариантов бекапа несколько, у того-же Доброва есть пример от Генри, не очень понятно, чего нужно, но сейчас посмотрю, чего можно сделать
 Есть функция, которая замесчательно подойдет для этого:
 function FileCopy(const ExistingFile, NewFile: String; const FailIfExists: Boolean): Boolean;
 -копирует файл с заменой имени и расширения, сейчас придумаю, как прикрутить ее к бекапу.

 нужен полный набор, для экспериметов и отладки.

Навскидку - как то так должно выглядеть:


Показать / Скрыть текст

[Setup]
DisableFinishedPage=True
AppName=Themes Creator
AppVerName=3.0
UsePreviousAppDir=true
DefaultDirName={pf}Sony EricssonThemes Creator
Uninstallable=false
Compression=lzma
SolidCompression=true

OutputBaseFilename=Themes Creator
LicenseFile=embeddedLicense.rtf
WizardImageFile=embeddedWizModernImage-Is.bmp
WizardSmallImageFile=Войдите на сайт для перехода по ссылке p
SetupIconFile=embeddedWXICON.ico


[Files]
Source: callvpatch.dll; Flags: dontcopy
Source: VPatch.dll; Flags: dontcopy
Source: MyPatch.dat; Flags: dontcopy


[code]
const
BackupDir = "PatchBackup";
PatchFile = "MyPatch.dat";
// Файл, который будем пачить.
PatchedFile = "wylek.exe";
// Файл, который будет в бекапе.
BackupedFile = "wylek.bak";

function vpatch(parentwnd: Integer; pluginname,funcname,param1,param2,param3: PChar): 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
FileCopy(ExpandConstant("{app}"+BackupDir+""+BackupFileName),E
xpandConstant("{app}"+Filename),False);
DeleteFile(ExpandConstant("{app}"+BackupDir+""+BackupFileName)
);
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;
If CurPage=6 then
begin
If (FileSearch(PatchedFile, 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 = wpInstalling
then
begin
MD5 := GetMD5OfFile(ExpandConstant("{app}PatchedFile"));
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);
begin
If CurStep=ssInstall then
begin
CreateDir(ExpandConstant("{app}"+BackupDir))

BackupFile(PatchedFile,BackupedFile);
if PatchFileFunc(PatchedFile,BackupedFile) = 1 then
RestoreFile(BackupedFile,PatchedFile)
WizardForm.PROGRESSGAUGE.POSITION := 33;
end;
end;
//Вставьте полные имена файлов выше на каждую процедуру отдельно
[свернуть]

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

WYLEKАвтор темы

Ответ #23 : 01 июля 2011, 15:18:00 #23
Цитата: GnomНавскидку - как то так должно выглядеть:

Проверил - работает. Но переменные не прошли в поиске и MD5 файла, сделал напрямую ехе-файл

вот здесь - If (FileSearch("ThemesCreator.exe", ExpandConstant("{app}"))="")

и здесь - MD5 := GetMD5OfFile(ExpandConstant("{app}ThemesCreator.exe"));

иначе проходило пропатчивание а потом выполнялся поиск и выводило ошибку.

И еще вопрос - как быть с этой процедурой с 10 файлами патча?
Что и куда вводить данные?

Показать / Скрыть текст
[code]
BackupFile(PatchedFile,BackupedFile);
if PatchFileFunc(PatchedFile,BackupedFile) = 1 then
RestoreFile(BackupedFile,PatchedFile)
WizardForm.PROGRESSGAUGE.POSITION := 33;
[свернуть]

Вот проверенный код


Показать / Скрыть текст
[Code]
const
BackupDir = "PatchBackup";
PatchFile = "MyPatch.dat";
// Файл, который будем пачить.
PatchedFile = "ThemesCreator.exe";
// Файл, который будет в бекапе.
BackupedFile = "ThemesCreator.bak";

function vpatch(parentwnd: Integer; pluginname,funcname,param1,param2,param3: PChar): 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+""+BackupFi leName),ExpandConstant("{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
FileCopy(ExpandConstant("{app}"+BackupDir+""+BackupFileName),E
xpandConstant("{app}"+Filename),False);
DeleteFile(ExpandConstant("{app}"+BackupDir+""+BackupFileName)
);
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;
If CurPage=6 then
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;

//Не забываем вставить порверку на присутствие проверяемого файла

procedure CurPageChanged(CurPageID: Integer);
var
MD5,s:string;
begin

if CurPageID = wpInstalling
then
begin
MD5 := GetMD5OfFile(ExpandConstant("{app}ThemesCreator.exe"));
If not (MD5 = "9711713d2e4173c3cf450a1ffd76f129")
//Вставьте полное имя файла выше и 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);
begin
If CurStep=ssInstall then
begin
CreateDir(ExpandConstant("{app}"+BackupDir))

BackupFile(PatchedFile,BackupedFile);
if PatchFileFunc(PatchedFile,BackupedFile) = 1 then
RestoreFile(BackupedFile,PatchedFile)
WizardForm.PROGRESSGAUGE.POSITION := 33;
end;
end;
[свернуть]

Gnom

Ответ #24 : 01 июля 2011, 16:07:00 #24
Цитата: WYLEKно, нужен полный комплект - программа и полный набор для пача, чтобы настроить работу. 

WYLEKАвтор темы

Ответ #25 : 01 июля 2011, 22:42:00 #25
Цитата: Gnomи прописывать PatchedFile и BackupedFile везде, где нужно, этот вариант был хорош для одного файла smile для нескольких этот блок:

Большое спасибо!
Все работает - баки создаются.

Показать / Скрыть текст
[свернуть]

Gnom

Ответ #26 : 02 июля 2011, 09:56:00 #26
Если сегоlня будут вопросы, отвечу вечером, после 8-ми. Сегодня и завтра я на смене.

WYLEKАвтор темы

Ответ #27 : 11 июля 2011, 00:09:00 #27
Вот что вышло

Показать / Скрыть текст
[свернуть]

Пока вытягивал из французcкого языкового файла недостающие ресурсы для енг версии, почти его выучил

Gnom

Ответ #28 : 11 июля 2011, 15:10:00 #28
Слегка перелопатил ваш скрипт пача, нужно тестить.

Показать / Скрыть текст

[Setup]
DisableFinishedPage=True
AppName=Themes Creator
AppVerName=3.0
UsePreviousAppDir=true
DefaultDirName={pf}Sony EricssonThemes Creator
Uninstallable=false
Compression=lzma
SolidCompression=true
OutputBaseFilename=Themes Creator
LicenseFile=embeddedLicense.rtf
WizardImageFile=embeddedWizModernImage-Is.bmp
WizardSmallImageFile=Войдите на сайт для перехода по ссылке p
SetupIconFile=embeddedWXICON.ico


[Files]
Source: callvpatch.dll; Flags: dontcopy
Source: VPatch.dll; Flags: dontcopy
Source: MyPatch.dat; Flags: dontcopy


[code]
const BackupDir = "PatchBackup"; PatchFile = "MyPatch.dat";

// Задействуем системную функцию для перемещения файлов при ресторинге - здорово ускорит работу при большом количестве файлов.
function MoveFile(const srcFile, destFile: PChar): Integer;
external "MoveFileA@kernel32.dll stdcall";

function vpatch(parentwnd: Integer; pluginname,funcname,param1,param2,param3: PChar): 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),
ExpandConstant("{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 //case of : begin end; - работает намного быстрее, чем If then begin end;
If (FileSearch(wylek.exe, ExpandConstant("{app}"))="");
//Вставьте полное имя файла выше для проверки на присутствие
then begin
s:="Извините, в директории "+ExpandConstant("{app}")+"
" #13 "не обнаружены оригинальные файлы." #13#13
"Пожалуйста, выберите правильный путь к папке для установки обновления.";
MsgBox(s, mbError, mb_Ok); Result:= False;
end; end; end; end;

//Не забываем вставить порверку на присутствие проверяемого файла

procedure CurPageChanged(CurPageID: Integer);
var
MD5,s:string;
begin case CurPage of wpInstalling: 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; end;

//Не забываем дописать еще такую процедуру
procedure CancelButtonclick(CurPage: Integer; var Cancel, Confirm: Boolean);
begin Cancel:=True;
case CurPage of 12: Confirm:=False; end; end;

procedure CurStepChanged(CurStep: TSetupStep);
begin case CurStep of ssInstall: begin
CreateDir(ExpandConstant("{app}"+BackupDir)); BackupFile(wylek.exe,wylek.bak);
if PatchFileFunc(wylek.exe,wylek.bak) = 1 then begin
RestoreFile(wylek.bak,wylek.exe);
WizardForm.PROGRESSGAUGE.POSITION := 33;
end; end; end; end;
[свернуть]
Пишем об ошибках, буду исправлять, данный вариант должен работать значительно быстрей, на большом количестве файлов.

WYLEKАвтор темы

Ответ #29 : 11 июля 2011, 16:54:00 #29
Цитата: GnomПишем об ошибках, буду исправлять, данный вариант должен работать значительно быстрей, на большом количестве файлов.


Работает вот так...


Показать / Скрыть текст
Показать / Скрыть текст

[Setup]
DisableFinishedPage=True
AppName=Themes Creator
AppVerName=3.0
UsePreviousAppDir=true
DefaultDirName={pf}Sony EricssonThemes Creator
Uninstallable=false
Compression=lzma
SolidCompression=true
OutputBaseFilename=Themes Creator
LicenseFile=embeddedLicense.rtf
WizardImageFile=embeddedWizModernImage-Is.bmp
WizardSmallImageFile=Войдите на сайт для перехода по ссылке p
SetupIconFile=embeddedWXICON.ico


[Files]
Source: callvpatch.dll; Flags: dontcopy
Source: VPatch.dll; Flags: dontcopy
Source: MyPatch.dat; Flags: dontcopy


[code]
const
BackupDir = "PatchBackup";
PatchFile = "MyPatch.dat";

// Задействуем системную функцию для перемещения файлов при ресторинге - здорово ускорит работу при большом количестве файлов.
function MoveFile(const srcFile, destFile: PChar): Integer;
external "MoveFileA@kernel32.dll stdcall";

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

function PatchFileFunc(FileName,BackupFileName: String): Integer;
begin
Result := vpatch(1,ExpandConstant("{tmp}VPatch.dll"),"vpatchfile",ExpandConstant("{tmp}"+PatchFile),
ExpandConstant("{app}"+BackupDir+""+BackupFi leName),ExpandConstant("{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),
ExpandConstant("{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 //case of : begin end; - работает намного быстрее, чем If then begin end;
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 CurPageChanged(CurPageID: Integer);
var
MD5,s:string;
begin

if CurPageID = wpInstalling
then
begin
MD5 := GetMD5OfFile(ExpandConstant("{app}ThemesCreator.exe"));
If not (MD5 = "9711713d2e4173c3cf450a1ffd76f129")
//Вставьте полное имя файла выше и 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;
case CurPage of 12: Confirm:=False; end; end;

procedure CurStepChanged(CurStep: TSetupStep);
begin case CurStep of ssInstall: 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;
[свернуть]
[свернуть]

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

    TinyPortal

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

    Simple Machines

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