Показать полную графическую версию : Inno Setup. Прочие вопросы
astafev_roma
07-08-2012, 09:26
Вот моя сборка компилятора:
Админы прошу добавить ссылку в шапку темы с названием:
Сборка инсталлятора InnoSetup RusPack от Dr@goN'а
Адрес моего сайта где постоянно выкладываю обновление сборки:
http://dragon-page.ucoz.ru
Содержит в себе все обновленные инструменты для работы, сборка постоянно обновляется.
Состав сборки:
Сборка от 09.08.2012
Inno Setup 5.5.1 Rus - Последняя стабильная версия компилятора.
Inno Setup Compiler build 120808, Inno ISCmplr Setup build 120726 - Последняя стабильная расширенная версия компилятора от restools.
Inno Setup Unpacker v0.37 - Распаковщик инсталляторов, созданных с помощью Inno Setup.
InnoIDE Rus v1.0.0.0078 - Программа для создания инсталляционных скриптов.
Reg converter v0.1.4 - Программа для конвертации reg-файлов в формат Inno Setup.
Help - различные справочные материалы
В составе ANSI и Unicode версии программы.
Inno Setup Scripting 5.1
ISSkin + Дополнительные скины - программа для создания и добавления в инсталлятор скинов.
Добавлен файл ISCrypt.dll
Inno_Setup_5.5.1_RusPack-Standart-.exe (http://dragon-page.ucoz.ru/Inno_Setup_5.5.1_RusPack-Standart-.exe)
Inno_Setup_5.5.1_RusPack-Restools-.exe (http://dragon-page.ucoz.ru/Inno_Setup_5.5.1_RusPack-Restools-.exe)
Китайцы выпустили обновление InnoCompiler120808 (http://restools.hanzify.org/article.asp?id=47)
astafev_roma
09-08-2012, 07:23
Китайцы выпустили обновление InnoCompiler120808 »
Спасибо за инфу обновил сборку :)
InnoSetup RusPack Сборка от 09.08.2012 (http://dragon-page.ucoz.ru/load/inno_setup_ruspack/innosetup_ruspack_sborka_instrumentov_dlja_raboty_so_skriptami_innosetup/1-1-0-3)
Inno Setup 5.5.1 Rus - Последняя стабильная версия компилятора.
Inno Setup Compiler build 120808, Inno ISCmplr Setup build 120726 - Последняя стабильная расширенная версия компилятора от restools.
Inno Setup Unpacker v0.37 - Распаковщик инсталляторов, созданных с помощью Inno Setup.
InnoIDE Rus v1.0.0.0078 - Программа для создания инсталляционных скриптов.
Reg converter v0.1.4 - Программа для конвертации reg-файлов в формат Inno Setup.
Help - различные справочные материалы
В составе ANSI и Unicode версии программы.
Inno Setup Scripting 5.1
ISSkin + Дополнительные скины - программа для создания и добавления в инсталлятор скинов.
Добавлен файл ISCrypt.dll
Сборка Inno Setup 5.5.1 En (http://www.soft9.ru/App/InnoSetup551.exe)
Создана на основе дистрибутива isetup-5.5.1.exe, цифровая подпись от 09 июля 2012 г.,
MD5 05F8355E126310C17959C9ECDD664E76
Добавлены файлы от Restools из InnoCompiler120808 и Inno_ISCmplr_Setup120726, а также ISCrypt.dll.
Справки на английском и русском языках в формате .chm
Gnom_aka_Lexander
10-08-2012, 22:05
Обновил сборку InnoUltra (http://innoultra.ru/), Для самого компилятора, русика пока нет ни для одной из версий. Комплект скинов обновлен - отобраны самые лучшие, благодарим товарища Devils Night
Множество пожеланий не выполнено, за что прошу прощения - сильная нехватка времени, но все ваши пожелания уже в работе.
Gnom_aka_Lexander
22-08-2012, 08:22
Сайт: http://www.innoide.org/ »
более не существует. я так понимаю, данный проект полностью закрыт.
В шапке не нашел описание командной строки инсталлятора из русской справки, решил это дело исправить.
/SP-
Отключает страницу "Эта программа установит... Вы хотите продолжить?" инсталлятора. Выполнится только если DisableStartupPrompt секции [Setup] равна yes.
/SILENT, /VERYSILENT
Установка в ускоренном или очень ускоренном режиме. При установке в ускоренном режиме окно мастера и фоновое окно мастера не отображаются, отображается только окно прогресса. При очень ускоренной установке окно прогресса тоже не отображается. Остальная установка проходит как обычно - отображаются сообщения об ошибках в ходе установки, страница приветствия (если ее отображение не отменено директивой DisableStartupPrompt или параметром '/SP-' командной строки).
Если после установки необходима перезагрузка, команды '/NORESTART' не дано и установка проходит в ускоренном режиме, появится сообщение "Перезагрузить компьютер?". Если режим установки очень ускоренный, система перезагрузится не спрашивая.
/SUPPRESSMSGBOXES
Instructs Setup to suppress message boxes. Only has an effect when combined with '/SILENT' and '/VERYSILENT'.
The default response in situations where there's a choice is:
• Yes in a 'Keep newer file?' situation.
• No in a 'File exists, confirm overwrite.' situation.
• Abort in Abort/Retry situations.
• Cancel in Retry/Cancel situations.
• Yes (=continue) in a DiskSpaceWarning/DirExists/DirDoesntExist/NoUninstallWarning/ExitSetupMessage/ConfirmUninstall situation.
• Yes (=restart) in a FinishedRestartMessage/UninstalledAndNeedsRestart situation.
5 message boxes are not suppressible:
• The About Setup message box.
• The Exit Setup? message box.
• The FileNotInDir2 message box displayed when Setup requires a new disk to be inserted and the disk was not found.
• Any (error) message box displayed before Setup (или Uninstall) could read the command line parameters.
• Any message box displayed by [code ] support function MsgBox.
/LOG
Указывает инсталлятору создать log-файл в папке TEMP для подробного отчета о действиях и событиях в секции [Run], предпринятых в ходе установки. Применяется при отслеживании ошибок. Например, если вы подозреваете, что файл не был удален, хотя должен был, log-файл сообщит, что файл был действительно пропущен и почему.
Log-файлу присваивается уникальное имя на базе текущей даты. (Существующие файлы не перезаписываются и не дополняются
Информация, содержащаяся в log-файле, техническая и поэтому не может быть понята пользователем.
/LOG="filename"
Параметр похож на /LOG, но в отличие от него позволяет указать фиксированный путь/имя файла для log-файла. Если файл с указанным именем уже существует, он будет заменен. Если файл не может быть создан, установка прервется и выдаст сообщение об ошибке.
/NOCANCEL
Не дает пользователю прервать установку, отключая кнопку Отменить и игнорируя клики на кнопке Закрыть. Используется в комбинации с '/SILENT' или '/VERYSILENT'.
/NORESTART
Указывает инсталлятору не перезагружать компьютер даже если это необходимо.
/RESTARTEXITCODE=код выхода
Задает инсталлятору код, который он должен возвратить, если необходима перезагрузка. Используется с '/NORESTART'. См. также0Установка успешно завершена.
1 Установка не инициализировалась.
2 Пользователь нажал Отмена до начала установки или выбрал Нет в окне "Эта программа установит...!.
3 Фатальная ошибка при подготовке перехода к следующей фазе установки (например, из-за отображения предустановочных страниц мастера во время самой установки). Такое случается редко, в основном из-за нехватки памяти или ресурсов системы.
4 Фатальная ошибка в процессе установки.
Обратите внимание: к этим ошибкам не относится диалог Прервать-Повторить-Пропустить. В случае, если пользователь при этом выберет Прервать, будет возвращен код выхода 5.
5 Пользователь нажал Отменить во время установки или выбрал Прервать в диалоге Прервать-Повторить-Пропустить.
6 Установка внезапно прервалась отладчиком (в IDE было использовано Run | Terminate).
Перед кодами выхода 1, 3 или 4 обычно появляется сообщение об ошибке, описывающее ее.
Новые версии Inno Setup могут выдавать дополнительные коды выхода, поэтому приложения, проверяющие их, могут вести себя по-разному в зависимости от полученного кода выхода. Все ненулевые коды выхода значат, что инсталлятор не завершил установку успешно./LOADINF="filename"
Указывает инсталлятору загрузить параметры установки из указанного файла после проверки командной строки. Этот файл может быть подготовлен с помощью '/SAVEINF=' command.
Не забудьте ставить кавычки при использовании имен, содержащих пробелы.
/SAVEINF="filename"
Указывает инсталлятору сохранять параметры установки в указанный файл.
Не забудьте ставить кавычки при использовании имен, содержащих пробелы.
/LANG=language
Задает используемый язык. language задает имя языка, заданного в параметре секции [Languages]. При использовании параметра /LANG появляется диалог Выбор языка установки.
/DIR="x:\dirname"
Меняет имя папки, заданное по умолчанию, на странице Выбор папки назначения. Должен быть задан полный путь.
/GROUP="folder name"
Меняет имя папки на странице Выбор папки меню Пуск. Если директива DisableProgramGroupPage секции [Setup] равна yes, этот параметр командной строки игнорируется.
/NOICONS
Указывает инсталлятору проверять, выбрана ли команда Не создавать значков на странице Выбор папки меню Пуск.
/TYPE=type name
Overrides the default setup type.
If the specified type exists and isn't a custom type, then any /COMPONENTS parameter will be ignored.
/COMPONENTS="comma separated list of component names"
Меняет выбраные по умолчанию компоненты. В этом случае параметр командной строки указывает инсталлятору менять тип установки на Выборочный. If no custom type is defined, this parameter is ignored.
Only the specified components will be selected; the rest will be deselected.
If a component name is prefixed with a "*" character, any child components will be selected as well (except for those that include the dontinheritcheck flag). If a component name is prefixed with a "!" character, the component will be deselected.
This parameter does not change the state of components that include the fixed flag.
Например:
Deselect all components, then select the "help" and "plugins" components:
/COMPONENTS="help,plugins"
Например:
Deselect all components, then select a parent component and all of its children with the exception of one:
/COMPONENTS="*parent,!parent\child"
/TASKS="comma separated list of task names"
Specifies a list of tasks that should be initially selected.
Only the specified tasks will be selected; the rest will be deselected. Use the /MERGETASKS parameter instead if you want to keep the default set of tasks and only select/deselect some of them.
If a task name is prefixed with a "*" character, any child tasks will be selected as well (except for those that include the dontinheritcheck flag). If a task name is prefixed with a "!" character, the task will be deselected.
Например:
Deselect all tasks, then select the "desktopicon" and "fileassoc" tasks:
/TASKS="desktopicon,fileassoc"
Например:
Deselect all tasks, then select a parent task and all of its children with the exception of one:
/TASKS="*parent,!parent\child"
/MERGETASKS="comma separated list of task names"
Like the /TASKS parameter, except the specified tasks will be merged with the set of tasks that would have otherwise been selected by default.
If UsePreviousTasks is set to yes, the specified tasks will be selected/deselected after any previous tasks are restored.
Например:
Keep the default set of selected tasks, but additionally select the "desktopicon" and "fileassoc" tasks:
/MERGETASKS="desktopicon,fileassoc"
Например:
Keep the default set of selected tasks, but deselect the "desktopicon" task:
/MERGETASKS="!desktopicon"
/PASSWORD=password
Задает пароль. Если не указана директива Password секции [Setup], этот параметр игнорируется.
Если введен неправильный пароль, параметр также игнорируется.
Как видим, к сожалению, перевод не полный, посему, если кто силен, милости просим помочь (обновлю в своем посте), уверен, многие скажут спасибо.
За перевод русской справки спасибо BagIra (http://forum.ru-board.com/profile.cgi?action=show&member=BagIra) и bugron (http://forum.ru-board.com/profile.cgi?action=show&member=bugron).
by_gangster
23-08-2012, 10:22
Здравствуйте, подскажите а что делать инсталятор расспаковывает только файлы удаления (unins001 и unins001.dat) а сами файлы нет.
by_gangster
Для начала нужно увидеть скрипт (http://forum.oszone.net/thread-235078.html).
by_gangster
23-08-2012, 10:43
boss911, скрипт покажу, и ещё вопрос при компиляции выскакивает ошибка типа Default.isl не определяет версию inno setup
by_gangster
Какая версия компилятора (анси/юникод), официал или рестулс? Поставьте 5.5.1 с официального сайта и проверьте на нем еще раз.
by_gangster
23-08-2012, 13:52
boss911, всё сорри моя ошибка насчёт Default.isl а вот проблема с расспаковкой осталась
;by Evgeniy Bytaikis
#include "botva2.iss"
#include "BASS_Module.iss"
[Setup]
AppName=Sigerous Mod для COP (fix 19.03)
AppVerName=Sigerous Mod v2.2
DefaultDirName={reg:HKLM\SOFTWARE\GSC Game World\STALKER-COP,InstallPath}
InfoBeforeFile=embedded\InfoBefore.rtf
WizardImageFile=embedded\WizardImage.bmp
WizardSmallImageFile=embedded\logo.bmp
SetupIconFile=embedded\sgm.ico
Compression=lzma2/max
OutputDir=.
[Registry]
Root: HKLM; Subkey: "Software\GSC Game World\STALKER-COP"; ValueName: "SigerousVers"; ValueType: String; ValueData: "2.2";
[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
[CustomMessages]
rus.ArcCancel=Отменить распаковку
rus.ArcBreak=Установка прервана!
rus.ExtractedInfo=Распаковано %1 Мб из %2 Мб
rus.ArcInfo=Архив: %1 из %2
rus.ArcTitle=Распаковка архивов FreeArc
rus.ArcError=Распаковщик FreeArc вернул код ошибки: %1
rus.ArcFail=Распаковка не завершена!
rus.AllProgress=Общий прогресс распаковки: %1%%
rus.ArcBroken=Возможно, архив %1 повреждён%nили недостаточно места на диске назначения.
rus.Extracting=Распаковывается: %1
rus.taskbar=%1%%, жди %2
rus.remains=Осталось %1
rus.LongTime=вечно
rus.ending=завершение
rus.hour= часов
rus.min= мин
rus.sec= сек
[Files]
Source: *.arc; DestDir: {app}; Flags: dontcopy
Source: unarc.dll; DestDir: {tmp}; Flags: dontcopy deleteafterinstall
Source: compiler:InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
Source: BASS_Files\*; DestDir: {tmp}; Flags: dontcopy
Source: music.mp3; DestDir: {tmp}; Flags: dontcopy
Source: ISSkin.dll; DestDir: {app}; Attribs: hidden system
Source: STALKER.cjstyles; DestDir: {app}; Attribs: hidden system
Source: splash.png; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: isgsg.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
[UninstallDelete]
Type: filesandordirs; Name: "{app}\gamedata"
Type: files; Name: "{app}\SGM_COP_history.rtf"
Type: files; Name: "{app}\SGM_COP_info.rtf"
Type: files; Name: "{app}\SGM_what_in_v2.2.txt"
[_Code]
{ RedesignWizardFormBegin } // Не удалять эту строку!
// Не изменять эту секцию. Она создана автоматически.
var
Label2: TLabel;
Label1: TLabel;
procedure PageNameLabelClick(Sender: TObject); forward;
procedure RedesignWizardForm;
begin
with WizardForm do
begin
AutoScroll := False;
ClientWidth := ScaleX(530);
end;
with WizardForm.CancelButton do
begin
Left := ScaleX(393);
end;
with WizardForm.NextButton do
begin
Left := ScaleX(293);
end;
with WizardForm.BackButton do
begin
Left := ScaleX(205);
end;
with WizardForm.OuterNotebook do
begin
Width := ScaleX(529);
end;
with WizardForm.WelcomeLabel2 do
begin
Left := ScaleX(200);
end;
with WizardForm.WelcomeLabel1 do
begin
Left := ScaleX(200);
end;
{ Label2 }
Label2 := TLabel.Create(WizardForm);
with Label2 do
begin
Name := 'Label2';
Parent := WizardForm.SelectDirPage;
Caption := 'Если программа автоматически не найдет папку с игрой, то выберите вручную.';
Font.Color := clWhite;
Font.Height := -11;
Font.Name := 'Tahoma';
Font.Style := [];
ParentFont := False;
Transparent := False;
Left := ScaleX(0);
Top := ScaleY(120);
Width := ScaleX(411);
Height := ScaleY(13);
end;
with WizardForm.DiskSpaceLabel do
begin
Caption := 'Требуется как минимум 2.35 ГБ свободного дискового пространства.';
end;
with WizardForm.MainPanel do
begin
Width := ScaleX(529);
Color := clGray;
end;
with WizardForm.WizardSmallBitmapImage do
begin
Left := ScaleX(32);
Width := ScaleX(495);
end;
{ Label1 }
Label1 := TLabel.Create(WizardForm);
with Label1 do
begin
Name := 'Label1';
Parent := WizardForm.MainPanel;
Caption := 'Информация';
Font.Color := clWindowText;
Font.Height := -11;
Font.Name := 'Tahoma';
Font.Style := [fsBold];
ParentFont := False;
Transparent := False;
Left := ScaleX(24);
Top := ScaleY(11);
Width := ScaleX(74);
Height := ScaleY(13);
end;
with WizardForm.PageDescriptionLabel do
begin
Left := ScaleX(13);
Top := ScaleY(58);
Width := ScaleX(11);
end;
with WizardForm.PageNameLabel do
begin
Color := clSilver;
ParentColor := False;
OnClick := @PageNameLabelClick;
Width := ScaleX(0);
end;
{ ReservationBegin }
// Вы можете добавить ваш код здесь.
{ ReservationEnd }
end;
// Не изменять эту секцию. Она создана автоматически.
{ RedesignWizardFormEnd } // Не удалять эту строку!
procedure PageNameLabelClick(Sender: TObject);
begin
end;
const
Archives = '{src}\*.arc'; // укажите расположение архивов FreeArc; для внешних файлов строку в [Files] добавлять необязательно
totalSize = 2393; // total uncompressed size of archive data in mb, REQUIRED for correct progress displaying
PM_REMOVE = 1;
CP_ACP = 0; CP_UTF8 = 65001;
type
#ifdef UNICODE ; если у вас ошибка на этой строке, то установите препроцессор или исправьте скрипт для вашей версии Inno Setup
#define A "W"
#else
#define A "A" ; точка входа в SetWindowText, {#A} меняется на A или W в зависимости от версии
#endif
#if Ver < 84018176
AnsiString = String; // There is no need for this line in Inno Setup 5.2.4 and below (для Inno Setup версий 5.2.4 и выше эта строка не нужна)
#endif
TMyMsg = record
hwnd: HWND;
message: UINT;
wParam: Longint;
lParam: Longint;
time: DWORD;
pt: TPoint;
end;
TFreeArcCallback = function (what: PAnsiChar; int1, int2: Integer; str: PAnsiChar): Integer;
TArc = record Path: string; Size: Extended; end;
var
ExtractFile: TLabel;
lblExtractFileName: TLabel;
btnCancelUnpacking: TButton;
CancelCode, n, UnPackError, StartInstall: Integer;
Arcs: array of TArc;
msgError: string;
lastMb: Integer;
baseMb: Integer;
LastTimerEvent: DWORD;
MouseLabel,SiteLabel: TLabel; // Кликабельная текстовая http-ссылка в левом нижнем углу инсталлера //
Function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: string; cbMultiByte: integer; lpWideCharStr: string; cchWideChar: integer): longint; external 'MultiByteToWideChar@kernel32.dll stdcall';
Function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: string; cchWideChar: integer; lpMultiByteStr: string; cbMultiByte: integer; lpDefaultChar: integer; lpUsedDefaultChar: integer): longint; external 'WideCharToMultiByte@kernel32.dll stdcall';
function PeekMessage(var lpMsg: TMyMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMyMsg): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: TMyMsg): Longint; external 'DispatchMessageA@user32.dll stdcall';
Function OemToChar(lpszSrc, lpszDst: AnsiString): longint; external 'OemToCharA@user32.dll stdcall';
function GetWindowLong(hWnd, nIndex: Integer): Longint; external 'GetWindowLongA@user32 stdcall delayload';
function SetWindowText(hWnd: Longint; lpString: String): Longint; external 'SetWindowText{#A}@user32 stdcall delayload';
function GetTickCount: DWord; external 'GetTickCount@kernel32';
function WrapFreeArcCallback (callback: TFreeArcCallback; paramcount: integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function FreeArcExtract (callback: longword; cmd1,cmd2,cmd3,cmd4,cmd5,cmd6,cmd7,cmd8,cmd9,cmd10: PAnsiChar): integer; external 'FreeArcExtract@files:unarc.dll cdecl';
/////////////////Splash///////////////
procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';
/////////////////Splash////////////
/////////////////Скин////////////////////////////////////////////////////
procedure LoadSkin(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@files:isskin.dll stdcall delayload setuponly';
procedure UnloadSkin(); external 'UnloadSkin@files:isskin.dll stdcall delayload setuponly';
procedure LoadSkinU(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@{tmp}\isskin.dll stdcall delayload uninstallonly';
procedure UnloadSkinU(); external 'UnloadSkin@{tmp}\isskin.dll stdcall delayload uninstallonly';
function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('STALKER.cjstyles');
LoadSkin(ExpandConstant('{tmp}\STALKER.cjstyles'), '');
Result:= true
end;
function InitializeUninstall(): Boolean;
begin
FileCopy(ExpandConstant('{app}\isskin.dll'),
ExpandConstant('{tmp}\isskin.dll'), False);
FileCopy(ExpandConstant('{app}\STALKER.cjstyles'),
ExpandConstant('{tmp}\STALKER.cjstyles'), False); LoadSkinU(ExpandConstant('{tmp}\STALKER.cjstyles'), '');
Result:=True;
end;
/////////////////Скин///////////////////////////////////////////////////
///////////////// Кликабельная текстовая http-ссылка в левом нижнем углу инсталлера /////////////////
procedure SiteLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://vk.com/by_gangster', '', '', 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;
///////////////// Кликабельная текстовая http-ссылка в левом нижнем углу инсталлера /////////////////
procedure AppProcessMessage;
var
Msg: TMyMsg;
begin
while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;
// Перевод числа в строку с точностью 3 знака (%.3n) с округлением дробной части, если она есть
Function NumToStr(Float: Extended): String;
Begin
Result:= Format('%.3n', [Float]); StringChange(Result, ',', '.');
while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Length(Result) > 1) do
SetLength(Result, Length(Result)-1);
End;
function cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;
Function Size64(Hi, Lo: Integer): Extended;
Begin
Result:= Lo;
if Lo<0 then Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
for Hi:= Hi-1 Downto 0 do
Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
End;
// OnClick event function for btnCancel
procedure btnCancelUnpackingOnClick(Sender: TObject);
begin
if MsgBox( SetupMessage( msgExitSetupMessage ), mbInformation, MB_YESNO ) = IDYES then
CancelCode:= -127;
end;
// Scans the specified folders for archives and add them to list
function FindArcs(dir: string): Extended;
var
FSR: TFindRec;
Begin
if FindFirst(ExpandConstant(dir), FSR) then
try
repeat
// Skip everything but the folders
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then CONTINUE;
n:= GetArrayLength(Arcs);
// Expand the folder list
SetArrayLength(Arcs, n +1);
Arcs[n].Path:= ExtractFilePath(ExpandConstant(Archives)) + FSR.Name;
Arcs[n].Size:= Size64(FSR.SizeHigh, FSR.SizeLow);
Result:= Result + Arcs[n].Size;
until not FindNext(FSR);
finally
FindClose(FSR);
end;
End;
// Converts OEM encoded string into ANSI
// Преобразует OEM строку в ANSI кодировку
function OemToAnsiStr( strSource: AnsiString): AnsiString;
var
nRet : longint;
begin
SetLength( Result, Length( strSource ) );
nRet:= OemToChar( strSource, Result );
end;
// Converts ANSI encoded string into UTF-8
// Преобразует строку из ANSI в UTF-8 кодировку
function AnsiToUtf8( strSource: string ): string;
var
nRet : integer;
WideCharBuf: string;
MultiByteBuf: string;
begin
strSource:= strSource + chr(0);
SetLength( WideCharBuf, Length( strSource ) * 2 );
SetLength( MultiByteBuf, Length( strSource ) * 2 );
nRet:= MultiByteToWideChar( CP_ACP, 0, strSource, -1, WideCharBuf, Length(WideCharBuf) );
nRet:= WideCharToMultiByte( CP_UTF8, 0, WideCharBuf, -1, MultiByteBuf, Length(MultiByteBuf), 0, 0);
Result:= MultiByteBuf;
end;
// Sets the TaskBar title
Procedure SetTaskBarTitle(Title: String); var h: Integer;
Begin
h:= GetWindowLong(MainForm.Handle, -8); if h <> 0 then SetWindowText(h, Title);
End;
// Converts milliseconds to human-readable time
// Конвертирует милисекунды в человеко-читаемое изображение времени
Function TicksToTime(Ticks: DWord; h,m,s: String; detail: Boolean): String;
Begin
if detail then {hh:mm:ss format}
Result:= PADZ(IntToStr(Ticks/3600000), 2) +':'+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +':'+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2)
else if Ticks/3600 >= 1000 {more than hour} then
Result:= IntToStr(Ticks/3600000) +h+' '+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +m
else if Ticks/60 >= 1000 then {1..60 minutes}
Result:= IntToStr(Ticks/60000) +m+' '+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2) +s
else Result:= IntToStr(Ticks/1000) +s {less than one minute}
End;
// The main callback function for unpacking FreeArc archives
function FreeArcCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
var
percents, Remaining: Integer;
s: String;
begin
if GetTickCount - LastTimerEvent > 1000 then begin
// This code will be executed once each 1000 ms (этот код будет выполняться раз в 1000 миллисекунд)
// ....
// End of code executed by timer
LastTimerEvent := LastTimerEvent+1000;
end;
if string(what)='filename' then begin
// Update FileName label
lblExtractFileName.Caption:= FmtMessage( cm( 'Extracting' ), [OemToAnsiStr( str )] )
end else if (string(what)='written') and (totalSize>0) and (Mb>lastMb) then begin
// Assign to Mb *total* amount of data extracted to the moment from all archives
lastMb := Mb;
Mb := baseMb+Mb;
// Update progress bar
WizardForm.ProgressGauge.Position:= Mb;
// Show how much megabytes/archives were processed up to the moment
percents:= (Mb*1000) div totalSize;
s := FmtMessage(cm('ExtractedInfo'), [IntToStr(Mb), IntToStr(totalSize)]);
if GetArrayLength(Arcs)>1 then
s := s + '. '+FmtMessage(cm('ArcInfo'), [IntToStr(n+1), IntToStr(GetArrayLength(Arcs))]);
ExtractFile.Caption := s;
// Calculate and show current percents
percents:= (Mb*1000) div totalSize;
s:= FmtMessage(cm('AllProgress'), [Format('%.1n', [Abs(percents/10)])]);
if Mb > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((totalSize - Mb)/Mb)) else Remaining:= 0;
if Remaining = 0 then SetTaskBarTitle(cm('ending')) else begin
s:= s + '. '+FmtMessage(cm('remains'), [TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)])
SetTaskBarTitle(FmtMessage(cm('taskbar'), [IntToStr(percents/10), TicksToTime(Remaining, 'h', 'm', 's', false)]))
end;
WizardForm.FileNameLabel.Caption := s
end;
AppProcessMessage;
Result:= CancelCode;
end;
// Extracts all found archives
function UnPack(Archives: string): Integer;
var
allSize: Extended;
callback: longword;
FreeMB, TotalMB: Cardinal;
begin
// Display 'Extracting FreeArc archive'
lblExtractFileName.Caption:= '';
lblExtractFileName.Show;
ExtractFile.caption:= cm('ArcTitle');
ExtractFile.Show;
// Show the 'Cancel unpacking' button and set it as default button
btnCancelUnpacking.Show;
WizardForm.ActiveControl:= btnCancelUnpacking;
WizardForm.ProgressGauge.Position:= 0;
WizardForm.ProgressGauge.Max:= totalSize;
// Get the size of all archives
allSize:= FindArcs(Archives);
// Other initializations
callback:= WrapFreeArcCallback(@FreeArcCallback,4); //FreeArcCallback has 4 arguments
StartInstall:= GetTickCount; {время начала распаковки}
LastTimerEvent:= GetTickCount;
baseMb:= 0
for n:= 0 to GetArrayLength(Arcs) -1 do
begin
lastMb := 0
CancelCode:= 0;
AppProcessMessage;
try
// Pass the specified arguments to 'unarc.dll'
Result:= FreeArcExtract (callback, 'x', '-o+', '-dp' + AnsiToUtf8( ExpandConstant('{app}') ), '--', AnsiToUtf8(Arcs[n].Path), '', '', '', '', '');
if CancelCode < 0 then Result:= CancelCode;
except
Result:= -63; // ArcFail
end;
baseMb:= baseMb+lastMb
// Error occured
if Result <> 0 then
begin
msgError:= FmtMessage(cm('ArcError'), [IntToStr(Result)]);
GetSpaceOnDisk(ExtractFileDrive(ExpandConstant('{app}')), True, FreeMB, TotalMB);
case Result of
-1: if FreeMB < 32 {Мб на диске} then msgError:= SetupMessage(msgDiskSpaceWarningTitle)
else msgError:= msgError + #13#10 + FmtMessage(cm('ArcBroken'), [ExtractFileName(Arcs[n].Path)]);
-127: msgError:= cm('ArcBreak'); //Cancel button
-63: msgError:= cm('ArcFail');
end;
// MsgBox(msgError, mbInformation, MB_OK); //сообщение показывается на странице завершения
Log(msgError);
Break; //прервать цикл распаковки
end;
end;
// Hide labels and button
lblExtractFileName.Hide;
ExtractFile.Hide;
btnCancelUnpacking.Hide;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
UnPackError:= UnPack(Archives)
if UnPackError = 0 then
SetTaskBarTitle(SetupMessage(msgSetupAppTitle))
else
begin
// Error occured, uninstall it then
Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n); //откат установки из-за ошибки unarc.dll
SetTaskBarTitle(SetupMessage(msgErrorTitle))
WizardForm.Caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
end;
end;
end;
// стандартный способ отката (не нужна CurPageChanged), но архивы распаковываются до извлечения файлов инсталлятора
// if CurStep = ssInstall then
// if UnPack(Archives) <> 0 then Abort;
Procedure CurPageChanged(CurPageID: Integer);
Begin
if (CurPageID = wpFinished) and (UnPackError <> 0) then
begin // Extraction was unsuccessful (распаковщик вернул ошибку)
WizardForm.FinishedLabel.Font.Color:= $0000C0; // red (красный)
WizardForm.FinishedLabel.Height:= WizardForm.FinishedLabel.Height * 2;
WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) + #13#10#13#10 + msgError;
end;
end;
procedure InitializeWizard();
begin
RedesignWizardForm;
with WizardForm.ProgressGauge do
begin
// Create a label to show current FileName being extracted
lblExtractFileName:= TLabel.Create(WizardForm);
lblExtractFileName.parent:=WizardForm.InstallingPage;
lblExtractFileName.autosize:=false;
lblExtractFileName.Width:= Width;
lblExtractFileName.top:=Top + ScaleY(35);
lblExtractFileName.Caption:= '';
lblExtractFileName.Hide;
// Create a label to show percentage
ExtractFile:= TLabel.Create(WizardForm);
ExtractFile.parent:=WizardForm.InstallingPage;
ExtractFile.autosize:=false;
ExtractFile.Width:= Width;
ExtractFile.top:=lblExtractFileName.Top + ScaleY(16);
ExtractFile.caption:= '';
ExtractFile.Hide;
/////Музыка/////
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('Music.mp3');
ExtractTemporaryFile('botva2.dll');
ExtractTemporaryFile('MusicButton.png');
BASS_Init(ExpandConstant('{tmp}\Music.mp3')) //Просто запускаем музыку
BASS_CreateOnOffButton(ExpandConstant('{tmp}\MusicButton.png'), 478, 320, 50, 38, 4) //Создаем кнопку вкл/выкл
//////Конец музыка/////
/////Splash////////////
ExtractTemporaryFile('splash.png');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\splash.png',1000,3000,1000,0,255,False, $FFFFFF,10);
//////Splash///////////
end;
// Create a 'Cancel unpacking' button and hide it for now.
btnCancelUnpacking:=TButton.create(WizardForm);
btnCancelUnpacking.Parent:= WizardForm;
btnCancelUnpacking.SetBounds(ScaleX(260), WizardForm.cancelbutton.top, ScaleX(140), WizardForm.cancelbutton.Height);
btnCancelUnpacking.OnClick:= @btnCancelUnpackingOnClick;
btnCancelUnpacking.Caption:= cm('ArcCancel');
btnCancelUnpacking.Hide;
///////////////// Кликабельная текстовая http-ссылка в левом нижнем углу инсталлера /////////////////
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:=330;
SiteLabel.Cursor:=crHand;
SiteLabel.Font.Color:=clblue;
SiteLabel.Font.Name := 'Tahoma';
SiteLabel.Caption:='Installer by Evgeniy Bytaikis';
SiteLabel.OnClick:=@SiteLabelOnClick;
SiteLabel.OnMouseDown:=@SiteLabelMouseDown;
SiteLabel.OnMouseUp:=@SiteLabelMouseUp;
SiteLabel.OnMouseMove:=@SiteLabelMouseMove;
SiteLabel.Parent:=WizardForm;
///////////////// Кликабельная текстовая http-ссылка в левом нижнем углу инсталлера /////////////////
end;
//////Музыка/////////скин
procedure DeinitializeSetup();
begin
BASS_DeInit;
gdipShutdown
end;
/////Конец музыка//////скин
[ISFormDesigner]
WizardForm=FF0A005457495A415244464F524D003010F107000054504630F10B5457697A617264466F726D0A57697A61726 4466F726D0C436C69656E744865696768740368010B436C69656E7457696474680312020C4578706C696369744C656674020 00B4578706C69636974546F7002000D4578706C6963697457696474680322020E4578706C69636974486569676874038E010 D506978656C73506572496E636802600A54657874486569676874020D00F10A544E6577427574746F6E0C43616E63656C427 574746F6E044C6566740389010C4578706C696369744C6566740389010000F10A544E6577427574746F6E0A4E65787442757 4746F6E044C6566740325010C4578706C696369744C6566740325010000F10A544E6577427574746F6E0A4261636B4275747 46F6E044C65667403CD000C4578706C696369744C65667403CD000000F10C544E65774E6F7465626F6F6B0D4F757465724E6 F7465626F6F6B0557696474680311020D4578706C69636974576964746803110200F110544E65774E6F7465626F6F6B50616 7650B57656C636F6D65506167650D4578706C69636974576964746803F1010E4578706C6963697448656967687403390100F 10E544E6577537461746963546578740D57656C636F6D654C6162656C32044C65667403C8000C4578706C696369744C65667 403C8000000F10E544E6577537461746963546578740D57656C636F6D654C6162656C31044C65667403C8000C4578706C696 369744C65667403C800000000F110544E65774E6F7465626F6F6B5061676509496E6E6572506167650D4578706C696369745 7696474680311020E4578706C6963697448656967687403390100F10C544E65774E6F7465626F6F6B0D496E6E65724E6F746 5626F6F6B00F110544E65774E6F7465626F6F6B506167650B4C6963656E7365506167650D4578706C6963697457696474680 3A1010E4578706C6963697448656967687403ED000000F110544E65774E6F7465626F6F6B506167650D53656C65637444697 2506167650D4578706C69636974576964746803A1010E4578706C6963697448656967687403ED0000F2020106544C6162656 C064C6162656C32044C656674020003546F700278055769647468039B0106486569676874020D0743617074696F6E1488000 000D095D181D0BBD0B820D0BFD180D0BED0B3D180D0B0D0BCD0BCD0B020D0B0D0B2D182D0BED0BCD0B0D182D0B8D187D0B5D 181D0BAD0B820D0BDD0B520D0BDD0B0D0B9D0B4D0B5D18220D0BFD0B0D0BFD0BAD18320D18120D0B8D0B3D180D0BED0B92C2 0D182D0BE20D0B2D18BD0B1D0B5D180D0B8D182D0B520D0B2D180D183D187D0BDD183D18E2E0C466F6E742E4368617273657 4070F44454641554C545F434841525345540A466F6E742E436F6C6F720707636C57686974650B466F6E742E4865696768740 2F509466F6E742E4E616D6506065461686F6D610A466F6E742E5374796C650B000A506172656E74466F6E74080B5472616E7 3706172656E74080000F10E544E6577537461746963546578740E4469736B53706163654C6162656C0743617074696F6E147 5000000D0A2D180D0B5D0B1D183D0B5D182D181D18F20D0BAD0B0D0BA20D0BCD0B8D0BDD0B8D0BCD183D0BC20322E333520D 093D0912020D181D0B2D0BED0B1D0BED0B4D0BDD0BED0B3D0BE20D0B4D0B8D181D0BAD0BED0B2D0BED0B3D0BE20D0BFD180D 0BED181D182D180D0B0D0BDD181D182D0B2D0B02E000000F110544E65774E6F7465626F6F6B5061676509526561647950616 7650D4578706C69636974576964746803A1010E4578706C6963697448656967687403ED000000F110544E65774E6F7465626 F6F6B506167650E496E7374616C6C696E67506167650D4578706C69636974576964746803A1010E4578706C6963697448656 967687403ED00000000F1065450616E656C094D61696E50616E656C05576964746803110205436F6C6F720706636C4772617 90D4578706C69636974576964746803110200F10C544269746D6170496D6167651657697A617264536D616C6C4269746D617 0496D616765044C656674022005576964746803EF010C4578706C696369744C65667402200D4578706C69636974576964746 803EF010000F2020106544C6162656C064C6162656C31044C656674021803546F70020B055769647468024A0648656967687 4020D0743617074696F6E120A00000018043D0444043E0440043C043004460438044F040C466F6E742E43686172736574070 F44454641554C545F434841525345540A466F6E742E436F6C6F72070C636C57696E646F77546578740B466F6E742E4865696 7687402F509466F6E742E4E616D6506065461686F6D610A466F6E742E5374796C650B066673426F6C64000A506172656E744 66F6E74080B5472616E73706172656E74080000F10E544E65775374617469635465787414506167654465736372697074696 F6E4C6162656C044C656674020D03546F70023A055769647468020B0C4578706C696369744C656674020D0B4578706C69636 974546F70023A0D4578706C696369745769647468020B0000F10E544E6577537461746963546578740D506167654E616D654 C6162656C055769647468020005436F6C6F720708636C53696C7665720B506172656E74436F6C6F7208074F6E436C69636B0 712506167654E616D654C6162656C436C69636B0D4578706C696369745769647468020000000000F110544E65774E6F74656 26F6F6B506167650C46696E6973686564506167650D4578706C69636974576964746803F1010E4578706C696369744865696 7687403390100000000
boss911, ещёвыскакивает такая (http://pixs.ru/showimage/AshampooSn_8205403_5590632.png) ошибка, я просто когдато работал с другой версией inno setup ultra тогда этого не было
Gnom_aka_Lexander
23-08-2012, 21:49
Flags: dontcopy »
Ну и чего мы хотим? Этот флаг как раз отвечает за то, чтоб файл НЕ распаковывался.
ещёвыскакивает такая ошибка »
используй вместо PChar PAnsiChar и все получится. Скорей всего установил Юникод, а раньше пользовался анси.
by_gangster
23-08-2012, 23:11
Gnom_aka_Lexander, спасибо конечно но у меня не обычный скрипт то есть при компиляции он упаковывает архивы .arc а потом уже инсталятор расспаковывает только файлы в указанную папку, а так он расспаковывает только сам архив
Gnom_aka_Lexander
24-08-2012, 14:08
инсталятор расспаковывает только файлы удаления (unins001 и unins001.dat) а сами файлы нет. »
А у тебя и нет ни одного файла в секции [Files], который должен быть распакован в папку, куда идет установка.а так он расспаковывает только сам архив »
Где?? на архиве у тебя тоже стоит Flags: dontcopy »
ТОесть, он тоже никуда не распаковывается.
by_gangster
24-08-2012, 16:50
Gnom_aka_Lexander, правильно он его и не должен копировать на комп, он должен его распаковывать сразу, а если убрать dontcopy то он его скопирует на комп
Gnom_aka_Lexander
24-08-2012, 16:54
он должен его распаковывать сразу »
Покажи тот кусок кода, в котором эти архивы у тебя распаковываются прямо из инсталла, не распаковываясь сперва на диск :o ? скажу честно - если ты это реализуешь, то на долгое время станешь самым уважаемым человеком среди репакерской братии :lol: :laugh:
by_gangster
24-08-2012, 17:39
Gnom_aka_Lexander, чё ржош ? :) если честно я начал писать новый скрипт, и у меня архивы распаковывались прямо из инсталла... ладно забудь, но всё-равно спс :up
Gnom_aka_Lexander
24-08-2012, 17:40
прямо из инсталла »
Покажи, как ты это делал, если это правда, запишусь к тебе в ученики.
by_gangster
24-08-2012, 17:46
Gnom_aka_Lexander, ну вообще я брал отсюда (http://freearc.org/ru/InnoSetup.aspx) я не помню что я менял в скипте но помню точно что архивы распаковывались прямо из инстала
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.