здесь все работает как часы, только он не уменьшает файлы, а просто бэкапит. Да и кому уже нужны маленькие размеры русификатора??? Нужен функционал! Разберешься сам во всем, да и подсказки есть.
[Setup]AppName=Chasys Draw IES
AppVersion=4.12.05
;AppVerName=4.12.05
UsePreviousAppDir=true
DefaultDirName={pf}John Paul Chacha's LabChasys Draw IES
Uninstallable=yes
Compression=lzma2/ultra64
SolidCompression=true
OutputBaseFilename=Chasys Draw IES_4.12.05_RUS
LicenseFile=embeddedLicense.rtf
WizardImageFile=embeddedWizModernImage-Is.bmp
WizardSmallImageFile=embeddedWizardSmallImage.bmp
SetupIconFile=embeddedWXI.ico
EnableDirDoesntExistWarning=True
DirExistsWarning=no
DefaultGroupName=John Paul Chacha's LabChasys Draw IES
[Files]Source: "dllISTask.dll"; DestDir: "{app}"; Flags: solidbreak
Source: "{app}Artist.exe"; DestDir: "{app}"; DestName: "Artist.exe"; Flags: ignoreversion; MinVersion: 0.0,5.0; BeforeInstall: CreateBackup
Source: "{app}cfg_Files.exe"; DestDir: "{app}"; DestName: "cfg_Files.exe"; Flags: ignoreversion; MinVersion: 0.0,5.0; BeforeInstall: CreateBackup
Source: "{app}cfg_Language.exe"; DestDir: "{app}"; DestName: "cfg_Language.exe"; Flags: ignoreversion; MinVersion: 0.0,5.0; BeforeInstall: CreateBackup
Source: "{app}cfg_Portable.exe"; DestDir: "{app}"; DestName: "cfg_Portable.exe"; Flags: ignoreversion; MinVersion: 0.0,5.0; BeforeInstall: CreateBackup
Source: "{app}Converter.exe"; DestDir: "{app}"; DestName: "Converter.exe"; Flags: ignoreversion; MinVersion: 0.0,5.0; BeforeInstall: CreateBackup
Source: "{app}
awPhoto.exe"; DestDir: "{app}"; DestName: "rawPhoto.exe"; Flags: ignoreversion; MinVersion: 0.0,5.0; BeforeInstall: CreateBackup
Source: "{app}Update.exe"; DestDir: "{app}"; DestName: "Update.exe"; Flags: ignoreversion; MinVersion: 0.0,5.0; BeforeInstall: CreateBackup
Source: "{app}LanguageRussian.lang"; DestDir: "{app}Language"; DestName: "Russian.lang"; Flags: ignoreversion; MinVersion: 0.0,5.0
[Icons]Name: "{group}Удалить русификатор"; Filename: "{uninstallexe}"; WorkingDir: "{app}"
[Run]Filename: "{app}Artist.exe"; WorkingDir: "{app}"; Flags: postinstall unchecked
Filename: "http://www.wylek.ru"; Flags: shellexec waituntilidle hidewizard; Tasks: ADAM
[Tasks]Name: "ADAM"; Description: "Посетить сайт русификации"
[CustomMessages]ru.NameAndVersion=%1, версия %2
ru.AdditionalIcons=Дополнительные значки:
ru.CreateDesktopIcon=Создать значок на Рабочем столе
ru.CreateQuickLaunchIcon=Создать значок в Панели быстрого запуска
ru.ProgramOnTheWeb=Сайт %1 в Интернете
ru.UninstallProgram=Деинсталлировать %1
ru.LaunchProgram=Запустить %1
ru.AssocFileExtension=Связать %1 с файлами, имеющими расширение %2
ru.AssocingFileExtension=Связывание %1 с файлами %2...
[Languages]Name: "ru"; MessagesFile: "compiler:LanguagesRussian_rusik.isl"
[Code]// --- Source: бэкап.iss ------------------------------------------------------------
procedure CreateBackup;
var
srcFile, destFile: string;
begin
srcFile:= ExpandConstant(CurrentFileName);
destFile:= srcFile + '.bak';
DeleteFile(destFile);
RenameFile(srcFile, destFile);
end;
procedure RestoreBackup(backupDir: string);
var
srcFile, destFile: string;
FSR, DSR: TFindRec;
FindResult: Boolean;
APath: string;
begin
APath := AddBackslash(backupDir);
FindResult := FindFirst(APath + '*.bak', FSR);
try
while FindResult do
begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
begin
srcFile:= APath + FSR.Name;
destFile:= Copy(srcFile, 0, Length(srcFile)-4);
DeleteFile(destFile);
RenameFile(srcFile, destFile);
end;
FindResult := FindNext(FSR);
end;
FindResult := FindFirst(APath + '*.*', DSR);
while FindResult do
begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and
not ((DSR.Name = '.') or (DSR.Name = '..')) then
{Recursion} RestoreBackup(APath + DSR.Name);
FindResult := FindNext(DSR);
end;
finally
FindClose(FSR);
FindClose(DSR);
end;
end;
procedure CurUninstallStepChanged1(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then
begin
RestoreBackup(ExpandConstant('{app}'))
end;
end;
// --- Source: Команда WYLEK.RU.iss ------------------------------------------------------------
var
MouseLabel,SiteLabel: TLabel;
procedure SiteLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://www.wylek.ru', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode)
end;
procedure SiteLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clRed
end;
procedure SiteLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clBlue
end;
procedure SiteLabelMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clGreen
end;
procedure SiteLabelMouseMove2(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clBlue
end;
procedure InitializeWizard2();
begin
MouseLabel:=TLabel.Create(WizardForm)
MouseLabel.Width:=WizardForm.Width
MouseLabel.Height:=WizardForm.Height
MouseLabel.Autosize:=False
MouseLabel.Transparent:=True
MouseLabel.OnMouseMove:=@SiteLabelMouseMove2
MouseLabel.Parent:=WizardForm
SiteLabel:=TLabel.Create(WizardForm)
SiteLabel.Left:=10
SiteLabel.Top:=320
SiteLabel.Cursor:=crHand
SiteLabel.Font.Color:=clBlue
SiteLabel.Caption:='Сайт русификации'
SiteLabel.OnClick:=@SiteLabelOnClick
SiteLabel.OnMouseDown:=@SiteLabelMouseDown
SiteLabel.OnMouseUp:=@SiteLabelMouseUp
SiteLabel.OnMouseMove:=@SiteLabelMouseMove
SiteLabel.Parent:=WizardForm
end;
procedure HideInstallPath();
begin
WizardForm.FileNameLabel.Visible := False;
end;
//*******//
procedure ShowInstallPath();
begin
WizardForm.FileNameLabel.Visible := True;
end;
// --- Source: проверка MD5.iss ------------------------------------------------------------
//Не забываем вставить порверку на присутствие проверяемого файла
procedure CurStepChanged3(CurStep: TSetupStep);
var
MD5,s:string;
begin
If CurStep=ssInstall
then
begin
MD5 := GetMD5OfFile(ExpandConstant('{app}Artist.exe'));
If not (MD5 = '919f06cd9e7ac0dd98f673f493af5518') 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;
// --- Source: проверка каталога.iss ------------------------------------------------------------
// Проверка присутствия определенных файлов в папке с установленной программой на странице выбора папки назначения
function NextButtonClick4(CurPage: Integer): Boolean;
var
s:string;
begin
Result:=True;
If CurPage=6 then
begin
If (FileSearch('Artist.exe', ExpandConstant('{app}'))='')
then
begin
s:='Извините, в директории '+ExpandConstant('{app}')+'' #13 'не обнаружены файлы, подтверждающие подлинность программы.' #13#13 'Пожалуйста, выберите правильный путь для установки обновления.';
MsgBox(s, mbError, mb_Ok);
Result:= False
end;
end;
end;
// --- Source: закрыть процесс2.iss ------------------------------------------------------------
function KillTask_S(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload';
function RunTask_S(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';
function RunTask_U(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@{app}ISTask.dll stdcall delayload uninstallonly';
function KillTask_U(ExeFileName: string): Integer;
external 'KillTask@{app}ISTask.dll stdcall delayload uninstallonly';
//**************************************************//
function InitializeSetup5(): Boolean;
begin
if RunTask_S('Artist.exe', false) then
begin
if MsgBox('Программа Chasys Draw IES используется. Закрыть и продолжить установку?', mbInformation, mb_YesNo) = idYes then
begin
KillTask_S('Artist.exe');
Result := True;
end else
Exit;
end;
Result := True;
end;
procedure CurUninstallStepChanged5(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then
if RunTask_U('Artist.exe', False) then
begin
// прячем форму
UninstallProgressForm.Visible := False;
if MsgBox('Программа Chasys Draw IES используется. Закрыть и продолжить удаление?', mbConfirmation, MB_YESNO) = IDYES then
begin
KillTask_U('Artist.exe');
UnloadDll(ExpandConstant('{app}ISTask.dll'));
// показываем форму
UninstallProgressForm.Visible := True;
end
else
begin
MsgBox('Завершите работу Chasys Draw IES, затем снова запустите программу удаления.', mbInformation, MB_OK);
UnloadDll(ExpandConstant('{app}ISTask.dll'));
Abort;
end;
end;
end;
// --- Dispatching code ------------------------------------------------------------
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
CurUninstallStepChanged1(CurUninstallStep);
CurUninstallStepChanged5(CurUninstallStep);
end;
procedure InitializeWizard();
begin
InitializeWizard2();
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
CurStepChanged3(CurStep);
end;
function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result := NextButtonClick4(CurPageID); if not Result then exit;
end;
function InitializeSetup(): Boolean;
begin
Result := InitializeSetup5(); if not Result then exit;
end;