Ru-Board.club
← Вернуться в раздел «Программы»

» Inno Setup (создание инсталяционных пакетов)

Автор: CUTA
Дата сообщения: 03.01.2015 12:40
dodakaedr

Цитата:
Советую использовать расширенную версию. На стандартной такое не сделать, насколько знаю.

Всё верно поставил Inno Setup Ultra 5.5.1 и всё нормально скомпилировалось, благодарю вас за ответы!
Автор: TheTimickRus
Дата сообщения: 04.01.2015 16:48
Здравствуйте!!! Прошу помощи знающих людей)
Значит проблема в чем:
Хотел я добавить в "Свой" скрипт проверку MD5. Вроде всё сделал (скрипт даже компилится), но при запуске вот такая ошибка:
http://firepic.org/?v=5.2015-01-04_74yubqw6ikce.png
Я всё проверил но хз чё там) Знаний программирования у меня нет, так ради интереса занимаюсь) Вот такая ситуация ребят...
Автор: dodakaedr
Дата сообщения: 04.01.2015 17:09
TheTimickRus
пропишите WFButtonFont.Free после gdipShutdown
Автор: TheTimickRus
Дата сообщения: 04.01.2015 17:27
dodakaedr
всё равно такая же ошибка.
Я скрипт залью на RGHost сам,если можешь, глянь)

http://rghost.ru/60134852
VirusTotal (хз может надо)
https://www.virustotal.com/ru/file/7b4b342f805b8edff7cba33035d8096401083171ea2965c93c0e5f76d4ab250a/analysis/1420385142/
Автор: AlexanderRaven
Дата сообщения: 04.01.2015 18:46
Привет! Я пишу программу на С++(WinAPI, GDI+), и столкнулся с проблемой... Парни? Нет ли у кого исходника библиотеки "botva2.dll"? Пытался написать ее создателю (htuos), но форум не дает ему написать. Не могли бы помочь? Или же объяснить, как реализовать OWNERDRAW кнопку с правильной реакцией на события?
Автор: dodakaedr
Дата сообщения: 04.01.2015 19:35
TheTimickRus
А так? Ссылка
Автор: TheTimickRus
Дата сообщения: 04.01.2015 20:01
dodakaedr
MD5 хеш проверяется нормально, но после проверки инсталл тупо крашится и всё)
Не знаешь в чём может быть проблема на этот раз? Заранее спасибо)
Автор: nik1967
Дата сообщения: 04.01.2015 21:16
TheTimickRus, [more]
Код: #define GameID "{9FB8AF2C-E42A-4BB7-8055-2A33FD3192B7}"

//************************************************ [Название] ***************************************************//:

;Название игры
#define GameName "Call of Duty - Modern Warfare 3"
;Название игры + версия
#define GameVerName "Call of Duty - Modern Warfare 3 [V.1.0]"

;Название фаила Запуска (x32)
#define GameUninstall "Call of Duty - Modern Warfare 3"
;Название фаила Запуска (x64)
#define GameUninstall_x64 "*_х64"
;Название фаила Удаление (Без "х86" | "x64")
#define GameUninstall_ "Call of Duty - Modern Warfare 3"
;Папка установки (Без \ / ? : * " > < |)
#define Gamefolder "Call of Duty - Modern Warfare 3"
;Название exe фаила запуска установки
#define SetupName "CODMW3"

//************************************************ [Название] ***************************************************//.

//************************************************ [Общая информация] ***************************************************//:

;------------------------------ [Издательство игры/RePacker] ------------------------------;
;Имя РеПакера
#define RePacker "Timick"

;Разработчик\Издатель
#define Company "Новый диск"
;------------------------------ [Издательство игры/RePacker] ------------------------------;

;------------------------------ [Работа с сохранениями] ------------------------------;
;Сохранения игры
#define Saves "Test Drive Unlimited"
;Место сохранений (Мои документы = || {userdocs} ||)
#define SavesDir "{userdocs}"
;------------------------------ [Работа с сохранениями] ------------------------------;

;------------------------------ [Фаилы/Папки запуска] ------------------------------;
;EXE Фаил запуска игры(x32), или если он один на обе разрядности.
#define GameEXE_1 "iw5sp.exe"

;Папка с EXE Фаилом
#define GameDir_1 "{app}"
;-----------------------------------------------------------------------
;EXE Фаил запуска игры(x64)
#define GameEXE_2 "*.exe"

;Папка с EXE Фаилом
#define GameDir_2 "{app}"
;------------------------------ [Фаилы/Папки запуска] ------------------------------;

;------------------------------ [Другое] ------------------------------;
;AutoRun скрипт
;#define Autorun

;Поиск и запрещение в пути Русских букв (Русофобия)
;#define Russophobia

;Splash(Вкл или Выкл)
;#define Splash

;Музыка (Вкл или Выкл)
#define Music

;Ярлык (х64)
;#define Start_x64

;Приоритет установки (По умолчанию - высокий)
#define Priority

;WinTB
#define WinTB
;------------------------------ [Другое] ------------------------------;

//************************************************ [Общая информация] ***************************************************//.

//************************************************ [Разное] ***************************************************//:

;------------------------------ [Размер игры] ------------------------------;

;Объём требуемого места
#define NeedSize "14100"

;Место необходимое для распаковки
#define TNeedSize "14100"

;------------------------------ [Размер игры] ------------------------------;

;------------------------------ [Системные требования] ------------------------------;
;Частота процессора
#define Processor "3000"
;Объём видеопамяти
#define VideoCard "256"
;Объём оперативной памяти
#define RAM "1500"
;Объём оперативной памяти для распаковки
#define NeedMem "512"
;Версия Windows 610 - Win 7 | 611 - Win 7 SP1 | 612 - Win 7 SP2
#define WinVerMajor "6"
#define WinVerMinor "1"
#define ServicePack "0"
;------------------------------ [Системные требования] ------------------------------;

;------------------------------ [Модуль FreeArc] ------------------------------;
;Включение и выключение модуля
;#define FreeArc

;Архивы Freearc (если используется модуль)
#define ArcLocation "{src}\*.bin"
;------------------------------ [Модуль FreeArc] ------------------------------;

;------------------------------ [Слайдшоу] -------------------------------;
;Количество слайдов
#define SlidesCount "1"

;Время показа слайда (Значение в МСек, 5000Мсек = 5сек.)
#define SlidesSecond "100000"
;------------------------------ [Слайдшоу] -------------------------------;

;------------------------------ [Модуль ISDone] ------------------------------;
;Включение и выключение модуля
#define ISDone

#define records
;#define precomp04
#define precomp038
;#define unrar

;Пароль для архивов (Работает только с таким методом шифрования: -hp -p1g2x3h7421 --encryption=aes:r100)
#define Password "1g2x3h7421"
;------------------------------ [Модуль ISDone] ------------------------------

//************************************************ [Разное] ***************************************************//.

[Setup]
AppID={{#GameID}}
;Название игры
AppName={#GameName}
;Название + версия
AppVerName={#GameName}
;Издатель...
VersionInfoCompany={#Company} | RePack by {#RePacker}
AppCopyright=© {#Company}
;Версия
VersionInfoDescription={#GameName}
;Путь установки
DefaultDirName={pf}\RePack by Timick\{#Gamefolder}
;Меню Пуск
DefaultGroupName=RePack by Timick\{#Gamefolder}
;Название выходного фаила
OutputBaseFilename=Setup_{#SetupName}
DirExistsWarning=auto
;Иконка
SetupIconFile=Icons\Icon_1.ico
;Разделение архивов Inno
DiskSpanning=true
SlicesPerDisk=3
DiskSliceSize=1566000000
DisableReadyPage=true
;Разрешить изменять каталог установки (True - да | False - нет)
;CreateAppDir=true
;Папка фаилов удаления
UninstallFilesDir={app}\Uninstall

;--------------------------------------------------------------------------------------------

#include "Modules_ISS\Files.iss"

[Icons]
//--------------------------------------------------------------------- [Меню "Пуск"] ---------------------------------------------------------------------//
;Запуск
Name: {group}\{#GameUninstall}; Filename: {app}\{#GameEXE_1}; IconFilename: {app}\Icon_2.ico; WorkingDir: {#GameDir_1}; Comment: Запустить игру; Check: NoIcons
#ifdef Start_x64
Name: {group}\{#GameUninstall_x64}; Filename: {app}\{#GameEXE_2}; IconFilename: {app}\Icon_2.ico; WorkingDir: {#GameDir_2}; Comment: Запустить игру; Check: NoIcons
#endif

;Ссылки
;Name: {group}\Открыть файл ReadMe; Filename: {app}\ReadMe\Info.txt; WorkingDir: {app}\ReadMe; IconFilename: {app}\1.ico; Comment: Просмотреть файл ReadMe; Check: NoIcons
;Name: {group}\Поиск обновлений мода; Filename: {app}\URL\Update.url; WorkingDir: {app}\URL; IconFilename: {app}\2.ico; Comment: Поиск обновлений игры в интернете; Check: NoIcons
;Name: {group}\Техническая поддержка; Filename: {app}\URL\Support.url; WorkingDir: {app}\URL; IconFilename: {app}\3.ico; Comment: Техническая поддержка игры; Check: NoIcons
Name: {group}\Веб-сайт игры; Filename: {app}\URL\publisher.url; WorkingDir: {app}\URL; IconFilename: {app}\2.ico; Comment: Посетить Веб-сайт игры; Check: NoIcons

;Удаление
Name: {group}\Удалить {#GameUninstall_}; Filename: {uninstallexe}; IconFilename: {app}\5.ico; Comment: Удалить игру; Check: NoIcons
//--------------------------------------------------------------------- [Меню "Пуск"] ---------------------------------------------------------------------//

//--------------------------------------------------------------------- [Рабочий стол] ---------------------------------------------------------------------//
;Запуск
Name: {userdesktop}\{#GameUninstall}; Filename: {app}\{#GameEXE_1}; IconFilename: {app}\Icon_2.ico; WorkingDir: {#GameDir_1}; Check: Desktop
#ifdef Start_x64
Name: {userdesktop}\{#GameUninstall_x64}; Filename: {app}\{#GameEXE_2}; IconFilename: {app}\Icon_2.ico; WorkingDir: {#GameDir_2}; Check: Desktop
#endif

;Дополнительно
;Name: {userdesktop}\Смена языка Озвучки (x32); Filename: {app}\Binaries\Win32\Language Selector.exe; WorkingDir: {app}\Binaries\Win32; Check: Desktop
;Name: {userdesktop}\Смена языка Озвучки (x64); Filename: {app}\Binaries\Win64\Language Selector.exe; WorkingDir: {app}\Binaries\Win64; Check: Desktop
;//--------------------------------------------------------------------- [Рабочий стол] ---------------------------------------------------------------------//

//--------------------------------------------------------------------- [Панель "Быстрого запуска"] ---------------------------------------------------------------------//
;Запуск
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#GameUninstall}; Filename: {app}\{#GameEXE_1}; IconFilename: {app}\Icon_2.ico; WorkingDir: {#GameDir_1}; Check: QuickLaunch
#ifdef Start_x64
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#GameUninstall_x64}; Filename: {app}\{#GameEXE_2}; IconFilename: {app}\Icon_2.ico; WorkingDir: {#GameDir_2}; Check: QuickLaunch
#endif
//--------------------------------------------------------------------- [Панель "Быстрого запуска"] ---------------------------------------------------------------------//

[INI]
FileName: {app}\URL\Publisher.url; Section: InternetShortcut; Key: URL; String: http://www.testdriveunlimited.com/; Check: not Install
;FileName: {app}\URL\Support.url; Section: InternetShortcut; Key: URL; String: http://help.ea.com/ru/; Check: not Install
;FileName: {app}\URL\Update.url; Section: InternetShortcut; Key: URL; String: http://www.needforspeed.com/ru_RU/downloads; Check: not Install;

[UninstallDelete]
Type: filesandordirs; Name: "{app}"

[Run]
Filename: {app}\main\sound\decode.exe; WorkingDir: {app}\main\sound; Flags: waituntilterminated; BeforeInstall: Decode
Filename: {app}\Soft\SetupSoft.bat; WorkingDir: {app}\Soft; Check: DirectX and not Install; Flags: waituntilterminated; BeforeInstall: DirectXProgress
Filename: {app}\Soft\DelFiles.bat; WorkingDir: {app}\Soft; Flags: waituntilterminated

[Registry]
Root: HKLM; SubKey: SOFTWARE\Repack by Timick\Call of DutyMW3; ValueType: string; ValueName: Install Dir; ValueData: {app}; Flags: uninsdeletevalue uninsdeletekeyifempty


[Code]
var
Init : boolean;
#ifdef Splash
procedure ShowSplashScreen(p1:HWND;p2:AnsiString;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';
#endif

//================== Подключение модулей ==================\\
#include "Modules_ISS\Function.iss"
#include "Modules_ISS\Messages.iss"
#include "Modules_ISS\botva2.iss"
#include "Modules_ISS\PB.iss"
#include "Modules_ISS\Inserting images.iss"
#include "Modules_ISS\Texture buttons.iss"

#ifdef Music
#include "Modules_ISS\Music_Modules.iss"
#endif

#include "Modules_ISS\Panel.iss"

#ifdef Autorun
#include "AutoRun.iss"
#endif

#ifdef ISDone
#include "ISDone.iss"
#endif

#ifdef FreeArc
#include "FreeArc.iss"
#endif

#include "Modules_ISS\Page.iss"

#ifdef Russophobia
#include "Modules_ISS\Russophobia.iss"
#endif

#ifdef WinTB
#include "Modules_ISS\WinTB.iss"
#endif

#Include "Modules_ISS\MD5Check2.iss"

//================== Подключение модулей ==================\\


function InitializeSetup: Boolean;
begin
if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
if not FileExists(ExpandConstant('{tmp}\innocallback.dll')) then ExtractTemporaryFile('innocallback.dll');
if not FileExists(ExpandConstant('{tmp}\Click.wav')) then ExtractTemporaryFile('Click.wav');
if not FileExists(ExpandConstant('{tmp}\isskin.dll')) then ExtractTemporaryFile('isskin.dll');
if not FileExists(ExpandConstant('{tmp}\Tiger.cjstyles')) then ExtractTemporaryFile('Tiger.cjstyles');
LoadSkin(ExpandConstant('{tmp}\Tiger.cjstyles'), '');
#ifdef Autorun
Result:=AutoRunExec;
#else
Result:= true;
#endif
Result:= false;

//*********************************** {MD5} ***********************************\\
MD5Form:= CreateCustomForm;
with MD5Form do begin
ClientWidth:= ScaleX(360);
ClientHeight:= ScaleY(45);
Caption:= ExpandConstant('{cm:Check}');
OnCloseQuery:= @MD5FormClose;
Center;
end;

with TLabel.Create(MD5Form) do begin
SetBounds(ScaleX(4),ScaleY(4),ScaleX(350),ScaleY(18));
Caption:= ExpandConstant('{cm:Wait}');
Transparent:= True;
Parent:= MD5Form;
end;

MD5PB:= TNewProgressBar.Create(MD5Form);
with MD5PB do begin
Position:= 0;
Max:= 1000;
Min:= 0;
SetBounds(ScaleX(5),ScaleY(22),ScaleX(350),ScaleY(15));
Parent:= MD5Form;
end;

MD5Form.Show;

Error2:= true;
repeat
// Здесь прописываем файлы, у которых нужно проверить хэш-сумму и собственно сами хэш-суммы //
//if FileExists(ExpandConstant('{src}\setup.exe')) and not CheckMD5(PAnsiChar(ExpandConstant('{src}\setup.exe')), {хэш-сумма}'68db7c4d2713b186744a9f73b004d981', @MD5Progress) then break;
if FileExists(ExpandConstant('{src}\data-1.0.bin')) and not CheckMD5(PAnsiChar(ExpandConstant('{src}\data-1.0.bin')), {хэш-сумма}'9c00f97b15759a1b1129e1ee0b3918a0', @MD5Progress) then break;
if FileExists(ExpandConstant('{src}\data-2.0.bin')) and not CheckMD5(PAnsiChar(ExpandConstant('{src}\data-2.0.bin')), {хэш-сумма}'9c1c84e47db4cc9d47bc8513cb7740b4', @MD5Progress) then break;
Error2:=false;
until true;
    
    if Close then
        Result:= true;

if not Close and not Error2 then begin
        Result:= true;
        MD5Form.Hide;
    end;

if not Close and Error2 then begin
MD5Form.Hide;
if MsgBoxEx(0, ExpandConstant('{cm:Error}'), ExpandConstant('{cm:Error1}'), MB_YESNO or MB_ICONERROR, 0, 0) = IDYES then
        Result:= true
else
    Result:= false;
end;
end;
//*********************************** {MD5} ***********************************\\

//============================================================================================================================================//

//************************************************ [Начало - Приоритет установки] ***************************************************//
#ifdef Priority
const
NORMAL_PRIORITY_CLASS = $00000020;
IDLE_PRIORITY_CLASS = $00000040;
HIGH_PRIORITY_CLASS = $00000080;
REALTIME_PRIORITY_CLASS = $00000100;

function SetPriorityClass(hProcess: THandle; dwPriorityClass: DWORD): BOOL; external 'SetPriorityClass@kernel32';
function GetCurrentProcess: THandle; external 'GetCurrentProcess@kernel32';

procedure Priority();
begin
SetPriorityClass(GetCurrentProcess, HIGH_PRIORITY_CLASS);
end;
#endif
//************************************************ [Конец - Приоритет установки] ***************************************************//

//************************************************ [Начало - ПрогрессБары] ***************************************************//

function PBProcUninst(h:hWnd;Msg,wParam,lParam:Longint):Longint;
var
pr,i1,i2:Extended;
p:string;
w : integer;
begin
if Msg=$2 then SetWindowLong(h,-4,PBOldProc);
Result:=CallWindowProc(PBOldProc,h,Msg,wParam,lParam);
if (Msg=$402) and (UninstallProgressForm.ProgressBar.Position>UninstallProgressForm.ProgressBar.Min) then begin
i1:=UninstallProgressForm.ProgressBar.Position-UninstallProgressForm.ProgressBar.Min;
i2:=UninstallProgressForm.ProgressBar.Max-UninstallProgressForm.ProgressBar.Min;
pr:=i1*100/i2;
p:=IntToStr(Round(pr))+' %';
ProgressInfoLabel.Caption:=ExpandConstant('{cm:AllProgressUninst} ')+p;
w:=Round(558*pr/100);
ImgSetPosition(PB3Img,120,302,w,21);
ImgApplyChanges(UninstallProgressForm.Handle);
end;
end;

procedure AllCancel;
begin
SetWindowLong(WizardForm.ProgressGauge.Handle,-4,PBOldProc);
ImgSetVisibility(AImg[CurrentImage],False);
ImgSetVisibility(WizardImg,True);
ImgSetVisibility(PBImg,False);
ImgSetVisibility(PBBkgImg,False);
ImgApplyChanges(WizardForm.Handle);
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
#ifdef ISDone
UnpackingISDone(CurStep);
#endif
#ifdef FreeArc
UnpackingArc(CurStep);
#endif
case CurStep of
ssInstall: begin
if GetArrayLength(ADisk)>0 then begin
KillTimer(WizardForm.Handle,WFDiskTimerID);
    SetArrayLength(ADisk,0);
end;
if GetArrayLength(ASysReq)>0 then begin
KillTimer(WizardForm.Handle,WFSysReqTimerID);
    SetArrayLength(ASysReq,0);
end;

WizardForm.ProgressGauge.Visible:=False;

OldPosition:=0;
CurrentImage:=0;
ImgSetVisibility(WizardImg,False);
ImgSetVisibility(AImg[0],True);
#ifndef ISDone
#ifndef FreeArc
//Прогрессбары создаются в скрипте\\
PBBkgImg:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\ProgressBackground.png'),119,300,560,25,True,True);
ImgApplyChanges(WizardForm.Handle);
PBImg:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\ProgressImg.png'),120,302,558,21,True,True);
PBOldProc:=SetWindowLong(WizardForm.ProgressGauge.Handle,-4,CallBackProc(@PBProc,4));
#endif
#endif
     sTime:=GetTickCount;
eTime:=sTime;
ProgressStep:=100 div GetArrayLength(AImg);
end;
ssPostInstall: AllCancel;
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
DeleteSavedGames(CurUninstallStep);
case CurUninstallStep of
usUninstall: begin
UninstallProgressForm.ProgressBar.Visible:=False;
PB3Img:=ImgLoad(UninstallProgressForm.Handle,ExpandConstant('{tmp}\ProgressImg.png'),120,302,558,21,True,True);
PBOldProc:=SetWindowLong(UninstallProgressForm.ProgressBar.Handle,-4,CallBackProc(@PBProcUninst,4));
end;
end;
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
if CurPageID=wpInstalling then begin
Confirm:=False;
Cancel:=ExitSetupMsgBox;
if Cancel then begin
AllCancel;
StatusLabel.Caption:=SetupMessage(msgStatusRollback);
FilenameLabel.Hide;
ProgressInfoLabel.Hide;
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
WizardForm.CancelButton.Enabled:=False;
end;
end;
end;

//************************************************ [Конец - ПрогрессБары] ***************************************************//



//============================================================================================================================================//



procedure InitializeWizard;
begin
//Удаляем меню "О программе"
WizardForm.Position:=poScreenCenter;
Init := True;

#ifdef Splash
begin
ExtractTemporaryFile('Splash.png');
ExtractTemporaryFile('isgsg.dll');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\Splash.png',1000,3000,1000,0,255,False,$FFFFFF,10);
end;
#endif

CreateStatusPanel;
CreateWizardImage;
ButtonsTextures;

#ifdef Music
InsertMusic;
#endif

CreatePageComponents;

#ifdef ISDone
CreateISDoneComponents;
#endif

#ifdef FreeArc
CreateArcComponents;
#endif

#ifdef WinTB
WinTB();
#endif

#ifdef Priority
Priority();
#endif
end;

//------------------------------------------------------------------------------------\\

procedure CurPageChanged(CurPageID: Integer);
begin
SetStateNewButtons;
Welcome.Font.Color := $FFFFFF;
System.Font.Color := $FFFFFF;
Catalogue.Font.Color := $FFFFFF;
StartMenu.Font.Color := $FFFFFF;
Tasks.Font.Color := $FFFFFF;
Installing.Font.Color :=$FFFFFF;
Finish.Font.Color := $FFFFFF;

HideComponents;
ImgSetVisibility(RequirementsPanel,False);
ImgSetVisibility(Edit,False);
ImgSetVisibility(DirFolder,False);
BtnSetVisibility(hDirBrowseBtn,False);
ImgSetVisibility(HardDrivePanel,False);
ImgSetVisibility(HDD,False);
ImgSetVisibility(GroupFolder,False);
BtnSetVisibility(hGroupBrowseBtn,False);
BtnSetVisibility(NoIconsCheck,False);
BtnSetVisibility(DesktopCheck,False);
BtnSetVisibility(QuickLaunchCheck,False);
BtnSetVisibility(DirectXCheck,False);

ShowComponents(CurPageID);
ImgApplyChanges(WizardForm.Handle);
#ifdef ISDone
UnpackingISDoneFinished(CurPageID);
#endif
#ifdef FreeArc
UnpackingArcFinished(CurPageID);
#endif

if GetArrayLength(ASysReq)>0 then
if CurPageID=SystemPage.ID then SetTimer(WizardForm.Handle,WFSysReqTimerID,1000,WrapTimerProc(@SysReqFlashing,4))
else KillTimer(WizardForm.Handle,WFSysReqTimerID);

if CurPageID=wpSelectDir then begin
OldDisk:='';
GetFreeSpaceCaption(nil);
end else if GetArrayLength(ADisk)>0 then KillTimer(WizardForm.Handle,WFDiskTimerID);
end;

//------------------------------------------------------------------------------------\\

procedure DeinitializeSetup;
begin
if Init <> False then
begin
#ifdef Autorun
if ContinueInstall then begin
#endif

#ifdef Music
BASS_Stop;
BASS_Free;
#endif
WFButtonFont.Free;
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')),0);
UnloadSkin;
     SetArrayLength(AImg,0);
     gdipShutdown;


#ifdef Autorun
end;
#endif

#ifdef WinTB
WinTBDeinitializeSetup();
#endif
end;
end;
//------------------------------------------------------------------------------------\\

procedure DeinitializeUninstall;
begin
gdipShutdown;
UnloadSkin;
if Assigned(UPFButtonFont) then UPFButtonFont.Free;
end;
Автор: TheTimickRus
Дата сообщения: 04.01.2015 21:29
Спасибо всем за помощь, проблема решена!!!
Автор: TheTimickRus
Дата сообщения: 05.01.2015 19:33
Всем привет ребят!!) Вот снова обращаюсь к вам за помощью. Значит запаковал я сегодня игру (CODMW3), но при распаковке ISDone выдаёт какую - то странную ошибку, будто ему не хватает памяти!

(Unarc вернул код ошибки -5)

Но дело в том что памяти для распаковки более чем достаточно (Используется около 30-40% из 100. Всего памяти 6 GB). Так в чём вопрос собственно: можно ли как нибудь устранить этот баг . Жду ваших ответов, заранее спасибо!!!

Кстати:
В скрипте ISDone 0.5 (Обновить до 0.6 не могу, руки кривые))
В архиве: 27658 файлов (~21551 аудио файлов и распакованные текстуры ~6513)
Автор: Habib2302
Дата сообщения: 06.01.2015 11:47
Доброе время суток. как сделать чтобы после отмены установки распакованной программы не запускались файлы в разделе Run

Код: [Run]
Filename: msiexec; Parameters: /i "{app}\ABBYY FineReader 12 Corporate.msi" TRANSFORMS="{app}\1049.mst";
Filename: {app}\Del_Lic_Ser.bat; Flags: RunHidden;
Автор: TheTimickRus
Дата сообщения: 06.01.2015 14:17
Habib2302
Попробуй объединить exe файл установки программы и твой батник в программе SFX-Macros
офф сайт:
http://checkdevice.narod.ru/index/download/0-2

По другому не знаю как))
Автор: Habib2302
Дата сообщения: 06.01.2015 14:41
TheTimickRus
не поможет. я имею ввиду, чтобы кнопка отмена в запущенном msi отправляла команду отмена на мой инсталлятор
Автор: TheTimickRus
Дата сообщения: 06.01.2015 15:33
Habib2302
О как заумно))) Тогда хз
Автор: Habib2302
Дата сообщения: 06.01.2015 16:11
TheTimickRus
что то типа такого
Автор: Genri
Дата сообщения: 06.01.2015 20:15
Habib2302

Цитата:
чтобы кнопка отмена в запущенном msi отправляла команду отмена на мой инсталлятор
-- msi ничего не знает про твой инсталлятор, поэтому не может отправить ему команду. Но msi может возвращать код завершения (завершен успешно, прервано пользователем и пр.) Подробнее коды описаны в http://msdn.microsoft.com/en-us/library/aa376931%28v=vs.85%29.aspx
Но при запуске из секции [Run] код завершения не обрабатывается. Чтобы получить и обработать код, запускать потребуется из секции
Код: . [more=Примерно так][code]
[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program

[Files]
Source: Far.msi; DestDir: {app}; AfterInstall: InstallFar
Source: Readme.txt; DestDir: {app};

[Code]
var
ErrorCode: Integer;

procedure InstallFar();
begin
ShellExec('', ExpandConstant('{app}\Far.msi'),
'', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
if ErrorCode <> 0 then begin
WizardForm.Close;
Exit;
end;
end;

procedure CancelButtonClick(CurPage: Integer; var Cancel, Confirm: Boolean);
begin
Cancel:= True;
if CurPage = wpInstalling then Confirm:= False;
end;
Автор: TheTimickRus
Дата сообщения: 07.01.2015 21:48
Снова всем привет ребят!!! Сегодня случилось чудо, и я нашёл в dump_code, пароль от архивов Fenixx'a! (Игра NFS:Run). Мне стало интересно, как он пакует архивы, и в информации я увидел такой метод сжатия:

precomp+srep:m3f:a1+lzma:177mb:normal:bt4:128:mc10000:lc8

Как я понимаю сжимал он с помощью PrecompInside и SrepInside.
Я скачал эти библиотеки, по отдельности каждая работает, но все мои попытки объединить их провалились.
Может кто-то знает как объединить эти методы в один бат файл?
Автор: GameBox64
Дата сообщения: 08.01.2015 21:07
Здравствуйте.

Подскажите, пожалуйста, мне нужно сделать что-то типа такого: http://sap.atisot.ru/attachments/b503d7c4f8-jpg.11/

Не знаю как это сделать в Inno Setup. Хотя бы направьте меня, в какую сторону смотреть.
Автор: nik1967
Дата сообщения: 10.01.2015 17:21
GameBox64, "Для того, чтобы это сделать, нужно сначала войти на форум."
Предлагаешь зарегистрироваться, чтобы посмотреть, что тебе нужно?
Автор: GameBox64
Дата сообщения: 10.01.2015 20:27
Извиняюсь, не ожидал, что будет требовать. https://dl.dropboxusercontent.com/u/56403015/b503d7c4f8.jpg
Автор: ExpeditorR
Дата сообщения: 10.01.2015 21:25
isSlideShow v1.03
Изменения:
1. Обновил немного движок эффектов.
2. Добавил возможность изменения скорости эффектов.
3. Больше не нужно использовать InnoCallback.dll или CallbackCtrl.dll.

Ссылки для скачивания:
https://yadi.sk/d/lbjVcBl_dtHcf
Автор: dodakaedr
Дата сообщения: 10.01.2015 22:41
GameBox64
Вот так через секцию [Code]
Код: RegWriteDWordValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System', 'EnableLUA', 0);
Автор: sergey3695
Дата сообщения: 11.01.2015 12:57
ExpeditorR нежданчик, спасибо.
Автор: marineharrison
Дата сообщения: 11.01.2015 20:37
Доброго всем времени суток. Прошу помочь. В общем я писанул скрипт для распаковки arc архивов с диалогом о смене диска. Скрипт на основе предложенного примера с использованием isdone и моего раннего скрипта с слайдшоу и сворачиванием инсталлера в меньший размер. Так вот о проблеме.
В скрипте используется скин. И этот скин не работает на кнопках при смене диска. То есть Окно смены диска и выбора папок в скине, а кнопки стандартные "от винды". Помогите это исправить.

Вот принтскрин того, что я имею ввиду:


Вот сам скрипт и прилагаемые к нему файлы:
http://rghost.ru/60294047

Скрипт отдельно, может кто настолько в этом разбирается, что сам увидит где у меня недоработка.
[more]

#define NeedSize "14300000000"

#define NeedMem 800

[Setup]
AppName=Aliens: Colonial Marines
AppVerName=Aliens: Colonial Marines версии 1.0.210.751923
DefaultDirName={pf}\SEGA\Aliens Colonial Marines
DefaultGroupName=SEGA\Aliens Colonial Marines
AppPublisher=]^[@r!ne_I-I@rr!$0n™
AppVersion=1.0.210.751923
VersionInfoVersion=3.0
AlwaysShowDirOnReadyPage=yes
AlwaysShowGroupOnReadyPage=yes
OutputDir=.
OutputBaseFilename=setup
Compression=lzma2/ultra64
WizardImageFile=1.bmp
WizardSmallImageFile=2.bmp
SetupIconFile=install.ico

#ifdef NeedSize
ExtraDiskSpaceRequired={#NeedSize}
#endif

[Files]
Source: isSlideShow.dll; DestDir: {tmp}; Flags: dontcopy ignoreversion nocompression
Source: walls\BackImage.jpg; DestDir: "{tmp}"; Flags: dontcopy nocompression
Source: walls\01.jpg; DestDir: "{tmp}"; Flags: dontcopy nocompression
Source: walls\02.jpg; DestDir: "{tmp}"; Flags: dontcopy nocompression
Source: walls\03.jpg; DestDir: "{tmp}"; Flags: dontcopy nocompression
Source: walls\04.jpg; DestDir: "{tmp}"; Flags: dontcopy nocompression
Source: walls\05.jpg; DestDir: "{tmp}"; Flags: dontcopy nocompression

Source: iQuantum.cjstyles; DestDir: {tmp}; Flags: dontcopy nocompression
Source: ISSkin.dll; DestDir: {tmp}; Flags: dontcopy ignoreversion nocompression

Source: unarc.dll; DestDir: {tmp}; Flags: dontcopy ignoreversion nocompression
Source: ISDone.dll; DestDir: {tmp}; Flags: dontcopy ignoreversion nocompression

[Messages]
BeveledLabel=Aliens: Colonial Marines installer by ]^[@r!ne_I-I@rr!$0n

SelectDirDesc=В какую папку Вы хотите установить игру?
ReadyLabel1=Программа установки готова начать установку игры на Ваш компьютер.
InstallingLabel=Пожалуйста, подождите, пока игра установится на Ваш компьютер.

[CustomMessages]
russian.ExtractedFile=Извлекается файл:
russian.Extracted=Распаковка архивов...
russian.CancelButton=Отменa
russian.Error=Игра не установлена!
russian.ElapsedTime=Прошло:
russian.RemainingTime=Осталось времени:
russian.EstimatedTime=Всего:
russian.AllElapsedTime=Время установки:

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[UninstallDelete]
Type: filesandordirs; Name: {app}

[Code]
const
PCFonFLY=true;
notPCFonFLY=false;
var
LabelPct1,LabelCurrFileName,LabelTime1,LabelTime2,LabelTime3: TLabel;
ISDoneProgressBar1: TNewProgressBar;

MyCancelButton: TButton;
ISDoneCancel:integer;
ISDoneError:boolean;
PCFVer:double;
PauseButton: TNewButton;

TimerID: LongWord;
CurrentPicture:integer;
PicList: TStringlist;
BackgroundForm: TForm;
PageNameLabel, PageDescriptionLabel: TLabel;


type
TCallback = function (OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;
TProc=procedure(HandleW, msg, idEvent, TimeSys: LongWord);

procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';

procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';

function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';

function WrapTimerProc(callback:TProc; paramcount:integer):longword; external 'wrapcallback@files:ISDone.dll stdcall';
function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';
function GetSystemMetrics(nIndex:Integer):Integer; external 'GetSystemMetrics@user32.dll stdcall';
procedure InitializeSlideShow(Hwnd:Thandle; l,t,w,h:integer;Animate:boolean; Stretch:integer); external 'InitializeSlideShow@files:isslideshow.dll stdcall';
procedure DeinitializeSlideShow; external 'DeinitializeSlideShow@files:isslideshow.dll stdcall';
procedure ShowImage(ipath:PAnsiChar; Effect:integer); external 'ShowImage@files:isslideshow.dll stdcall';


function WrapCallback(callback:TCallback; paramcount:integer):longword;external 'wrapcallback@files:ISDone.dll stdcall delayload';

function ISArcExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath, ExtractedPath: AnsiString; DeleteInFile:boolean; Password, CfgFile, WorkPath: AnsiString; ExtractPCF: boolean ):boolean; external 'ISArcExtract@files:ISDone.dll stdcall delayload';
function ShowChangeDiskWindow(Text, DefaultPath, SearchFile:AnsiString):boolean; external 'ShowChangeDiskWindow@files:ISDone.dll stdcall delayload';

function Exec2 (FileName, Param: PAnsiChar;Show:boolean):boolean; external 'Exec2@files:ISDone.dll stdcall delayload';
function ISFindFiles(CurComponent:Cardinal; FileMask:AnsiString; var ColFiles:integer):integer; external 'ISFindFiles@files:ISDone.dll stdcall delayload';
function ISPickFilename(FindHandle:integer; OutPath:AnsiString; var CurIndex:integer; DeleteInFile:boolean):boolean; external 'ISPickFilename@files:ISDone.dll stdcall delayload';
function ISGetName(TypeStr:integer):PAnsichar; external 'ISGetName@files:ISDone.dll stdcall delayload';
function ISFindFree(FindHandle:integer):boolean; external 'ISFindFree@files:ISDone.dll stdcall delayload';
function ISExec(CurComponent:Cardinal; PctOfTotal,SpecifiedProcessTime:double; ExeName,Parameters,TargetDir,OutputStr:AnsiString;Show:boolean):boolean; external 'ISExec@files:ISDone.dll stdcall delayload';

function FileSearchInit(RecursiveSubDir:boolean):boolean; external 'FileSearchInit@files:ISDone.dll stdcall delayload';
function ISDoneInit(RecordFileName:AnsiString; TimeType,Comp1,Comp2,Comp3:Cardinal; WinHandle, NeededMem:longint; callback:TCallback):boolean; external 'ISDoneInit@files:ISDone.dll stdcall';
function ISDoneStop:boolean; external 'ISDoneStop@files:ISDone.dll stdcall';
function ChangeLanguage(Language:AnsiString):boolean; external 'ChangeLanguage@files:ISDone.dll stdcall delayload';
function SuspendProc:boolean; external 'SuspendProc@files:ISDone.dll stdcall';
function ResumeProc:boolean; external 'ResumeProc@files:ISDone.dll stdcall';

function ProgressCallback(OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;
begin
if OveralPct<=1000 then ISDoneProgressBar1.Position := OveralPct;
LabelPct1.Caption := IntToStr(OveralPct div 10)+'.'+chr(48 + OveralPct mod 10)+'%';

LabelCurrFileName.Caption:=ExpandConstant('{cm:ExtractedFile} ')+MinimizePathName(CurrentFile, LabelCurrFileName.Font, LabelCurrFileName.Width-ScaleX(100));
LabelTime1.Caption:=ExpandConstant('{cm:ElapsedTime} ')+TimeStr2;
LabelTime2.Caption:=ExpandConstant('{cm:RemainingTime} ')+TimeStr1;
LabelTime3.Caption:=ExpandConstant('{cm:AllElapsedTime}')+TimeStr3;
Result := ISDoneCancel;
end;

procedure CancelButtonOnClick(Sender: TObject);
begin
SuspendProc;
if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_YESNO) = IDYES then ISDoneCancel:=1;
ResumeProc;
end;

procedure BevelLabelClick(Sender: TObject);
var ErrorCode: Integer;
begin
ShellExec('open','http://vk.com/marine_harrison','', '', SW_SHOW, ewNoWait, ErrorCode)
end;


function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('iQuantum.cjstyles');
LoadSkin(ExpandConstant('{tmp}\iQuantum.cjstyles'), '');
Result := True;
end;


procedure HideControls;
begin
WizardForm.FileNamelabel.Hide;
ISDoneProgressBar1.Hide;
LabelPct1.Hide;
LabelCurrFileName.Hide;
LabelTime1.Hide;
LabelTime2.Hide;
MyCancelButton.Hide;
end;

procedure CreateControls;
var PBTop:integer;
begin
PBTop:=ScaleY(50);
ISDoneProgressBar1 := TNewProgressBar.Create(WizardForm);
with ISDoneProgressBar1 do begin
Parent := WizardForm.InstallingPage;
Height := WizardForm.ProgressGauge.Height;
Left := ScaleX(0);
Top := PBTop;
Width := ScaleX(365);
Max := 1000;
end;
LabelPct1 := TLabel.Create(WizardForm);
with LabelPct1 do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Left := ISDoneProgressBar1.Width+ScaleX(5);
Top := ISDoneProgressBar1.Top + ScaleY(2);
Width := ScaleX(80);
end;
LabelCurrFileName := TLabel.Create(WizardForm);
with LabelCurrFileName do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Width := ISDoneProgressBar1.Width+ScaleX(30);
Left := ScaleX(0);
Top := ScaleY(34);
end;
LabelTime1 := TLabel.Create(WizardForm);
with LabelTime1 do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Width := ISDoneProgressBar1.Width div 2;
Left := ScaleX(0);
Top := PBTop + ScaleY(35);
end;
LabelTime2 := TLabel.Create(WizardForm);
with LabelTime2 do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Width := LabelTime1.Width+ScaleX(40);
Left := ISDoneProgressBar1.Width div 2;
Top := LabelTime1.Top;
end;
LabelTime3 := TLabel.Create(WizardForm);
with LabelTime3 do begin
Parent := WizardForm.FinishedPage;
AutoSize := False;
Width := 300;
Left := 180;
Top := 200;
end;
MyCancelButton:=TButton.Create(WizardForm);
with MyCancelButton do begin
Parent:=WizardForm;
Width:=ScaleX(80);
Caption:=ExpandConstant('{cm:CancelButton}');
Left:=ScaleX(380);
Top := 60;
Width := ScaleX(75);
Height := ScaleY(25);
OnClick:=@CancelButtonOnClick;
end;
end;

procedure InitializeWizard();
begin
BackgroundForm:= TForm.Create(nil);
BackgroundForm.BorderStyle:= bsNone;
BackgroundForm.Color:=clBlack;
BackgroundForm.SetBounds(0, 0, GetSystemMetrics(0), GetSystemMetrics(1))
BackgroundForm.Visible:=True;
BackgroundForm.enabled:= false;
PicList:=tstringlist.Create;
ExtractTemporaryFile('BackImage.jpg');
ExtractTemporaryFile('01.jpg');
ExtractTemporaryFile('02.jpg');
ExtractTemporaryFile('03.jpg');
ExtractTemporaryFile('04.jpg');
ExtractTemporaryFile('05.jpg');
piclist.add(ExpandConstant('{tmp}') + '\01.jpg');
piclist.add(ExpandConstant('{tmp}') + '\02.jpg');
piclist.add(ExpandConstant('{tmp}') + '\03.jpg');
piclist.add(ExpandConstant('{tmp}') + '\04.jpg');
piclist.add(ExpandConstant('{tmp}') + '\05.jpg');
BackgroundForm.show;
InitializeSlideShow(BackgroundForm.Handle, 0, 0, GetSystemMetrics(0), GetSystemMetrics(1), false, 1);
ShowImage(ExpandConstant('{tmp}') + '\BackImage.jpg', 1);

begin
WizardForm.WizardBitmapImage.Width:=497
WizardForm.WelcomeLabel1.Visible:=False
WizardForm.WelcomeLabel2.Visible:=False
WizardForm.WizardBitmapImage2.Width:=497
WizardForm.FinishedLabel.Visible:=False
WizardForm.FinishedHeadingLabel.Visible:=False

begin
WizardForm.WizardSmallBitmapImage.SetBounds(ScaleX(0), ScaleY(0), WizardForm.MainPanel.Width, WizardForm.MainPanel.Height);

begin
PageNameLabel:= TLabel.Create(WizardForm);
with PageNameLabel do begin
Left:= WizardForm.PageNameLabel.Left;
Top:= WizardForm.PageNameLabel.Top;
Width:= WizardForm.PageNameLabel.Width;
Height:= WizardForm.PageNameLabel.Height;
AutoSize:= False;
WordWrap:= True;
Font.Name:= WizardForm.PageNameLabel.Font.Name;
Font.Color:= clWhite;
Font.Style:= [fsBold];
Transparent:= True;
Parent:= WizardForm.MainPanel;
end;

PageDescriptionLabel:= TLabel.Create(WizardForm);
with PageDescriptionLabel do begin
Left:= WizardForm.PageDescriptionLabel.Left-ScaleX(12);
Top:= WizardForm.PageDescriptionLabel.Top;
Height:= WizardForm.PageDescriptionLabel.Height;
Width:= ScaleX(220);
AutoSize:= False;
WordWrap:= True;
Font.Name:= WizardForm.PageDescriptionLabel.Font.Name;
Font.Color:= clWhite;
Transparent:= True;
Parent:= WizardForm.MainPanel;
end;

with WizardForm do begin
PageNameLabel.Hide;
PageDescriptionLabel.Hide;

begin
with WizardForm do begin
with BeveledLabel do begin
OnClick:=@BevelLabelClick;
Font.Color:=clRed;
Enabled:=True;
Cursor:=crHand;
end;
end;
end;

end;
end;
end;
end;
end;


procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
var
thePicture: integer;
delta: double;
begin
delta := WizardForm.ProgressGauge.Max / ( piclist.Count );
thePicture := round( WizardForm.ProgressGauge.Position / delta );
if( thePicture <> CurrentPicture ) then
begin
CurrentPicture := thePicture;
try
ShowImage(piclist.strings[CurrentPicture - 1], 1);
except
end;
end;
end;

procedure CurPageChanged1(CurPageID: Integer);

begin
PageNameLabel.Caption:= WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption:= WizardForm.PageDescriptionLabel.Caption;
begin
If CurPageID=wpInstalling then
begin

WizardForm.MainPanel.Visible:=False;
WizardForm.Bevel1.Visible:=False;
WizardForm.Width:=ScaleX(470);
WizardForm.Height:=ScaleY(150);

WizardForm.Position:=poScreenCenter;
WizardForm.Top:=ScaleY(BackgroundForm.Height-220);

WizardForm.InnerNotebook.Left:=ScaleX(10);
WizardForm.InnerNotebook.Top:=ScaleY(10);
WizardForm.InnerNotebook.Width:=ScaleX(370);
WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(20);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(40);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(154);
WizardForm.CancelButton.Top:=ScaleY(80);
WizardForm.CancelButton.bringtofront;

TimerID:=SetTimer(0, 0, 200, WrapTimerProc(@OnTimer, 4));
end;
end;

if CurPageID=wpFinished then
begin
WizardForm.Visible:=False;
WizardForm.Width:=502;
WizardForm.Height:=392;
WizardForm.Left:=(BackgroundForm.Width-WizardForm.Width) div 2;
WizardForm.Top:=(BackgroundForm.Height-WizardForm.Height) div 2;
WizardForm.Visible:=True;
showimage(ExpandConstant('{tmp}') + '\BackImage.jpg', 1);
end;
end;

procedure CurStepChanged1(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then begin
end;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
CurPageChanged1(CurPageID);
if (CurPageID = wpFinished) then
begin
if (CurPageID = wpFinished) and ISDoneError then
begin
LabelTime3.Hide;
WizardForm.Caption:= ExpandConstant('{cm:Error}');
WizardForm.FinishedLabel.Font.Color:= clRed;
WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) ;
end;
end;
end;

function CheckError:boolean;
begin
result:= not ISDoneError;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var Comps1,Comps2,Comps3, TmpValue:cardinal;
FindHandle1,ColFiles1,CurIndex1,tmp:integer;
ExecError:boolean;
InFilePath,OutFilePath,OutFileName:PAnsiChar;
begin
CurStepChanged1(CurStep);
if CurStep = ssInstall then begin //Если необходимо, можно поменять на ssPostInstall
WizardForm.ProgressGauge.Hide;
WizardForm.CancelButton.Hide;
CreateControls;
WizardForm.StatusLabel.Caption:=ExpandConstant('{cm:Extracted}');
ISDoneCancel:=0;

// Распаковка всех необходимых файлов в папку {tmp}.

ExtractTemporaryFile('unarc.dll');

// Подготавливаем переменную, содержащую всю информацию о выделенных компонентах для ISDone.dll
// максимум 96 компонентов.
Comps1:=0; Comps2:=0; Comps3:=0;

ISDoneError:=true;
if ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, Comps1,Comps2,Comps3, MainForm.Handle, {#NeedMem}, @ProgressCallback) then begin
repeat

if not FileSearchInit(false) then break;

if not ISArcExtract ( 0, 50, ExpandConstant('{src}\setup-1.arc'), ExpandConstant('{app}'), '', false, '', '', '', notPCFonFLY) then break;

if not ShowChangeDiskWindow('Пожалуйста, вставьте диск 2 и дождитесь его инициализации.', ExpandConstant('{src}'),'setup-2.arc') then break;

if not ISArcExtract ( 0, 50, ExpandConstant('{src}\setup-2.arc'), ExpandConstant('{app}'), '', false, '', '', '', notPCFonFLY) then break;

ISDoneError:=false;
until true;
ISDoneStop;
end;
HideControls;
WizardForm.CancelButton.Visible:=true;
WizardForm.CancelButton.Enabled:=false;
end;
if (CurStep=ssPostInstall) and ISDoneError then begin
Exec2(ExpandConstant('{uninstallexe}'), '/VERYSILENT', false);
end;
end;

procedure DeinitializeSetup();
begin
DeinitializeSlideShow;
KillTimer(0, TimerID);
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
UnloadSkin();
end;

[/more]
Автор: sergey3695
Дата сообщения: 11.01.2015 20:51
marineharrison https://code.google.com/p/vcl-styles-plugins/wiki/VCLStylesInnoSetup
по круче будет.
http://rghost.ru/60294438
Использование

Код: if not SelectDisk('data-1.bin',1) then break;
if not ISArcExtract ( 0, 0, PathSd+'data-3.bin', ExpandConstant('{app}\Game'), '', false, '', '', ExpandConstant('{app}\Game'), notPCFonFLY {PCFonFLY}) then break;
Автор: marineharrison
Дата сообщения: 11.01.2015 21:25
sergey3695
Спасибо, я посмотрю. Только что увидел isSlideShow v1.03. Это тоже посмотрю.
Автор: Re0g
Дата сообщения: 12.01.2015 11:00
Здравствуйте. Прошу помощи.
Есть такой код для создания ярлыка в панели быстрого запуска в Windows 7 и выше:

[more=Код]
Код: #define ExePath "{app}\bin\MyProg.exe"

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
CreateUninstallRegKey=false

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}\bin;

[Tasks]
Name: PinToTaskBar; Description: {cm:cTaskBarTxt}; MinVersion: 0,6.0;
Name: PinToStartMenu; Description: {cm:cStartMenuTxt}; MinVersion: 0,6.0;

[Languages]
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"
Name: "en"; MessagesFile: "compiler:Languages\English.isl"

[CustomMessages]
ru.cTaskBarTxt=Закрепить на панели задач
ru.cStartMenuTxt=Закрепить в меню "Пуск"
en.cTaskBarTxt=Pin to Taskbar
en.cStartMenuTxt=Pin to Start Menu

[Code]
const
LOAD_LIBRARY_AS_DATAFILE = $2;

#define A = (Defined UNICODE) ? "W" : "A"

function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryEx{#A}@kernel32.dll stdcall';
function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Char; nBufferMax: Integer): Integer; external 'LoadString{#A}@user32.dll stdcall';
function SHGetNewLinkInfo(pszLinkTo, pszDir: String; var pszName: Char; var pfMustCopy: Longint; uFlags: UINT): BOOL; external 'SHGetNewLinkInfo{#A}@shell32.dll stdcall';

/////////////////////////////////////////////////////////////////////////
function PinToTaskbar(const szFilename: String; TaskBar, IsPin: Boolean): Boolean;
//szFilename: full path to executable file
//TaskBar: False - pin to StartMenu, True - pin to TaskBar
//IsPin: False - unpin from TaskBar/StartMenu, True - pin to TaskBar/StartMenu
var
hInst: THandle;
buf: array [0..255] of Char;
i, res: Integer;
strLnk, strVerb: String;
objShell, colVerbs: Variant;
begin
Result := False;
if (GetWindowsVersion < $06010000) or not FileExists(szFilename) then Exit;
if IsPin then
begin
if SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0) then
begin
while buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);
if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\') + ExtractFileName(strLnk)) then Exit;
end;
if TaskBar then res := 5386 else res := 5381;
end else if TaskBar then res := 5387 else res := 5382;
hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
if hInst <> 0 then
try
for i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);
try
objShell := CreateOleObject('Shell.Application');
colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs;
for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then
begin
colVerbs.Item[i].DoIt;
Result := True;
Break;
end;
except
Exit;
end;
finally
FreeDLL(hInst);
end;
end;

procedure CurPageChanged(CurPageID: integer);
begin
case CurPageID of
wpFinished: begin
if IsTaskSelected('PinToTaskBar') then
PinToTaskbar(ExpandConstant('{#ExePath}'), True, True);
if IsTaskSelected('PinToStartMenu') then
PinToTaskbar(ExpandConstant('{#ExePath}'), False, True);
end;
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
instPath: string;
begin
case CurUninstallStep of
usUninstall: begin
PinToTaskbar(ExpandConstant('{#ExePath}'), True, False);
PinToTaskbar(ExpandConstant('{#ExePath}'), False, False);
end;
end;
end;
Автор: painter7
Дата сообщения: 12.01.2015 15:22
Re0g, держи, но в 8 и 8.1 нужно смотреть строки для открепления и закрепления в "Пуск", старых из 7 там нет, мне некогда, дальше сам.
[more]
Код: [no]
[Tasks]
Name: "PinToTaskBar"; Description: "{cm:cTaskBarTxt}"; MinVersion: 0,6.0
Name: "PinToStartMenu"; Description: "{cm:cStartMenuTxt}"; MinVersion: 0,6.0; OnlyBelowVersion: 0,6.2

[Code]
const
LOAD_LIBRARY_AS_DATAFILE = $2;

#define A = (Defined UNICODE) ? "W" : "A"

function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryEx{#A}@kernel32.dll stdcall';
function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Char; nBufferMax: Integer): Integer; external 'LoadString{#A}@user32.dll stdcall';
function SHGetNewLinkInfo(pszLinkTo, pszDir: String; var pszName: Char; var pfMustCopy: Longint; uFlags: UINT): BOOL; external 'SHGetNewLinkInfo{#A}@shell32.dll stdcall';

function PinToTaskbar(const szFilename, szParams: String; TaskBar, IsPin: Boolean): Boolean;
//szFilename: full path to executable file
//szParams: Executable file parameters
//TaskBar: False - pin to StartMenu (not StarScreen), True - pin to TaskBar
//IsPin: False - unpin from TaskBar/StartMenu, True - pin to TaskBar/StartMenu
var
hInst: THandle;
buf: array [0..255] of Char;
i, iRes: Integer;
strLnk, strVerb: String;
objShell, colVerbs: Variant;
sLnk: String;
begin
Result := False;
if (GetWindowsVersion < $06010000) or not FileExists(szFilename) then Exit;
if IsPin then
begin
if SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], iRes, 0) then
begin
while buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);
if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\') + ExtractFileName(strLnk)) then Exit;
end;
if TaskBar then iRes := 5386 else
begin
if (GetWindowsVersion < $06020000) then iRes := 5381 else // String resource in Win 8\8.1 is not exist
Exit;
end;
end else if TaskBar then iRes := 5387 else
begin
if (GetWindowsVersion < $06020000) then iRes := 5382 else // String resource in Win 8\8.1 is not exist
Exit;
end;
sLnk := ExpandConstant('{tmp}\'+ChangeFileExt(ExtractFileName(ExtractFileName(szFilename)),'.lnk'));
CreateShellLink(sLnk, '', szFilename, szParams, ExtractFileDir(sLnk), '', 0, SW_SHOWNORMAL);
hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
if hInst <> 0 then
try
for i := 0 to LoadString(hInst, iRes, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);
try
objShell := CreateOleObject('Shell.Application');
colVerbs := objShell.Namespace(ExtractFileDir(sLnk)).ParseName(ExtractFileName(sLnk)).Verbs;
for i := 1 to colVerbs.Count do
if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then
begin
colVerbs.Item[i].DoIt;
Result := True;
Break;
end;
except
Exit;
end;
finally
FreeDLL(hInst);
end;
DeleteFile(sLnk);
end;

procedure CurPageChanged(CurPageID: integer);
begin
case CurPageID of
wpFinished: begin
if IsTaskSelected('PinToTaskBar') then
PinToTaskbar(ExpandConstant('{#ExePath}'), '-start', True, True);
if IsTaskSelected('PinToStartMenu') then
PinToTaskbar(ExpandConstant('{#ExePath}'), '-start', False, True);
end;
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
instPath: string;
begin
case CurUninstallStep of
usUninstall: begin
PinToTaskbar(ExpandConstant('{#ExePath}'), '-start', True, False);
PinToTaskbar(ExpandConstant('{#ExePath}'), '-start', False, False);
end;
end;
end;
[/no]
Автор: genetiq
Дата сообщения: 13.01.2015 01:45
Товарищи, нужно ботвой отрисовать кнопки с юникодом (японский, китайский). Ботва хочет PAnsiChar и иероглифы не показывает. Эмулировать через TLabel не получается т.к. кнопка всегда сверху. Чо делать, а?...
Автор: SSOzZz
Дата сообщения: 13.01.2015 06:22
Обнова от китайцев, если ещё не было ссылок

InnoCompiler121216(7zip).zip (2.7 МБ)
5.5.0 - 5.5.2 build 121216
Multilanguage support: English, Chinese, Russian
http://restools.hanzify.org/inno/InnoCompiler121216(7zip).zip
http://rghost.ru/60317767

Inno_ISCmplr_Setup121002(7zip).zip (1.7 МБ)
5.5.1 build 121002
http://restools.hanzify.org/inno/Inno_ISCmplr_Setup121002(7zip).zip
http://rghost.ru/60317746

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758

Предыдущая тема: Только инсталлятор


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.