Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Inno Setup (создание инсталяционных пакетов)

Модерирует : gyra, Maz

Widok (10-08-2009 22:13): Лимит страниц. Продолжаем здесь.  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146

   

Widok



Moderator-Следопыт
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Это мощное бесплатное средство для создания установочных пакетов (дистрибутивов) программ. Поддерживается шифрование, установка пароля, различные задачи по завершении установки.
По сравнению с NSIS (основной конкурент на бесплатной основе) проще в настройке, имеет более понятную структуру скрипта, но генерит на 200-300 кб больший инсталятор. На данный момент он конкурирует и даже превосходит многие коммерческие установщики по функциональности и стабильности.
 
Последний бета релиз: 5.3.3 [05.08.2009]
Последний стабильный релиз: 5.2.4 [01.04.2009]
Что нового? | Что нового в версии 5.3-beta? | Все сборки
 
Inno Setup Compiler 5.2.3 090506 - расширенная версия от ResTools (зеркало)
Добавляет списку компонентов возможность сворачивать дочерние элементы. Содержит более удобный редактор, кроме того, компилятор имеет множество других возможностей и новых функций. На сайте автора также есть дополнительные библиотеки.
 
Русификатор версии 5.3.2 от vadimsva
 
Русская справка к версии 5.0.x, автор перевода BagIra (зеркало) | cкачать в .chm формате
 
Inno Setup Scripting 5.1 - Руководство по расширенным возможностям Inno Setup от Kindly
версия 5 скачать (зеркало) | версия 4 скачать (зеркало) | версия 3 скачать (зеркало)
 
Inno Setup Extensions Knowledge Base (содержит ответы на многие вопросы) | старая chm-версия
 
 

Дополнительные библиотеки и примеры для Inno Setup - Corona Skin, InnoTools Downloader, распаковка архивов 7-zip и FreeArc и т.д.
 
Дополнительные утилиты для Inno Setup - сюда входят различные распаковщики, надстройки над Inno Setup, различные генераторы скриптов, утилита объединения скриптов и т.д.
 
Пережатиe/Pекомпрессия/Oптимизация файлов для лучшего сжатия - обсуждение того, какими утилитами/способами лучше сжимать, чтобы получить как можно меньший размер инсталятора.
 

Примечание для всех участников

 
Перед тем, как задать вопрос: загрузите "версию для печати" (ссылка справа вверху, над номерами страниц) и попробуйте поискать средствами браузера (ctrl+F). Большинство типовых задач уже решались, причем неоднократно!
 
ВНИМАНИЕ!

Текст всех программ обязательно заключайте в теги [code][/code].
Большие тексты (более 10 строк) обязательно прячутся в [more]ВАШ ТЕКСТ и/или Ваш КОД[/more]


мусор вынесен в пост

Всего записей: 24190 | Зарегистр. 07-04-2002 | Отправлено: 12:45 16-05-2009 | Исправлено: SotM, 12:44 09-08-2009
bush1

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите,что сейчас то не так  

Всего записей: 26 | Зарегистр. 27-07-2009 | Отправлено: 21:48 28-07-2009 | Исправлено: bush1, 21:50 28-07-2009
Roden37101



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bush1
в секци. [Files] добавь строку
Source: InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
 
 
 
Добавлено:
путь сам пропиши (где лежит длл)
если одной папке со скриптом то оставь как есть

Всего записей: 194 | Зарегистр. 20-06-2009 | Отправлено: 22:01 28-07-2009
James_Hoker

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, плиз, как убрать окно, которое появляется, если в инсталле присутствует несколько языков. У меня используется русский и английский. Но его надо убрать в том случае, если прога уже проинсталлирована и повторно запустить инсталл, чтобы тот язык который был выбран ставился автоматом. Подскажите плизззз!!!

Всего записей: 5 | Зарегистр. 19-07-2009 | Отправлено: 22:21 28-07-2009
bush1

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
bush1  
в секци. [Files] добавь строку  
Source: InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy  
 
 
 
Добавлено:  
путь сам пропиши (где лежит длл)  
если одной папке со скриптом то оставь как есть

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

Всего записей: 26 | Зарегистр. 27-07-2009 | Отправлено: 22:24 28-07-2009 | Исправлено: bush1, 22:26 28-07-2009
Roden37101



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bush1
скрипт в студию
 
Добавлено:
и попробуй на время выключить антивир,

Всего записей: 194 | Зарегистр. 20-06-2009 | Отправлено: 22:29 28-07-2009
bush1

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Брал сдесь у вас http://forum.ru-board.com/topic.cgi?forum=5&topic=30413&start=2026&limit=1&m=1#1 сказали что это специально для распаковки после freearc-а,я только свои данные вписал.
 
[Setup]
AppName=FreeArc Example
AppVerName=FreeArc Example 2.2b
DefaultDirName={pf}\FreeArc Example
DirExistsWarning=no
ShowLanguageDialog=auto
OutputBaseFilename=FreeArc_Example
OutputDir=.E
VersionInfoCopyright=Bulat Ziganshin, Victor Dobrov, SotM, CTACKo
 
[Languages]
Name: eng; MessagesFile: compiler:Default.isl
Name: rus; MessagesFile: compiler:Languages\Russian.isl
 
[CustomMessages]
eng.ArcBreak=Installation cancelled!
eng.ArcError=Decompression failed with error code %1
eng.ArcBroken=Archive «%1» is damaged or not enough free space.
eng.ArcFail=Decompression failed!
eng.ArcTitle=Extracting FreeArc archive...
eng.StatusInfo=Files: %1%2, progress %3%%, remaining time %4
eng.ArcInfo=archive: %1 из %2, size %3 of %5, %4%% extracted
eng.ArcFinish=Unpacked archives: %1, received files: %2 [%3]
eng.taskbar=%1%%, %2 remains
eng.ending=ending
eng.hour=hours
eng.min=mins
eng.sec=secs
;
rus.ArcBreak=Установка прервана!
rus.ArcError=Распаковщик FreeArc вернул код ошибки: %1
rus.ArcBroken=Возможно, архив «%1» повреждён или недостаточно места на диске назначения.
rus.ArcFail=Распаковка не завершена!
rus.ArcTitle=Распаковка FreeArc-архива...
rus.StatusInfo=файлов: %1%2, %3%% выполнено, осталось ждать %4
rus.ArcInfo=Архив %1 из %2, объём %3 из %5, %4%% распаковано
rus.ArcFinish=Распаковано архивов: %1, получено файлов: %2 [%3]
rus.taskbar=%1%%, жди %2
rus.ending=завершение
rus.hour=часов
rus.min=мин
rus.sec=сек
 
[Files]
;Source: *.arc; DestDir: {app}; Flags: nocompressionSource: unarc.dll; DestDir: {tmp}; Flags: dontcopy deleteafterinstallSource: compiler:InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
Source: InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
;эта строка демонстрирует показ сведений и времени завершения при обычном извлечении файлов
Source: {win}\inf\*; DestDir: {app}\files; Flags: external
 
[UninstallDelete]
Type: filesandordirs; Name: {app}
 
[Code]
var Debug: TForm; Dl: TMemo; cDebug: boolean; Procedure D(S: string); Begin if not cDebug then begin Debug:= CreateCustomForm; Debug.SetBounds(8, 4, 380, 580) Debug.Show Dl:=TMemo.Create(Debug) Dl.Align:= alClient; Dl.ScrollBars:= ssVertical; Dl.WantReturns:= False; Dl.Parent:= Debug; cDebug:= true end; if Dl.Lines.Text = '' then Dl.Lines.Text:= S else Dl.Lines.Insert(Dl.Lines.Count, S) End; Procedure Df(S: Extended); begin D(FloatToStr(S)) End;
const
    Archives = '{D|кино|bbb}';   // список путей к архивам (с масками), разделённых знаком |
    PM_REMOVE = 1;
    CP_ACP = 0; CP_UTF8 = 65001;
    oneMB=1024*1024;
    Period = 250; // частота обновления кнопки таскбара и строки статуса
    HC_ACTION = 0;
    VK_ESCAPE = 27;
    WM_PAINT = $F;
    WH_CALLWNDPROC = 4;
 
type
#ifdef UNICODE  ;// если у вас ошибка на этой строке, то установите препроцессор или исправьте скрипт для вашей версии Inno Setup
    #define A "W"
#else
    #define A "A"  ;// точка входа в SetWindowText, {#A} меняется на A или W в зависимости от версии
    PAnsiChar = PChar;  // Required for Inno Setup 5.3.0 and higher. (требуется для Inno Setup версии 5.3.0 и ниже)
#endif
#if Ver < 84018176
    AnsiString = String; // There is no need for this line in Inno Setup 5.2.4 and above (для Inno Setup версий 5.2.4 и выше эта строка не нужна)
#endif
#define isFalse(any S)  (S = LowerCase(Str(S))) == "no" || S == "false" || S == "off" ? "true" : "false"
 
    TMessage = record hWnd: HWND; msg, wParam: Word; lParam: LongWord; Time: TFileTime; pt: TPoint; end;
    TFreeArcCallback = function (what: PAnsiChar; int1, int2: Integer; str: PAnsiChar): Integer;
    TArc = record Path: string; Size: Extended; end;
    TBarInfo = record stage, name: string; size: Extended; count, perc, pos, time: Integer; end;
    TCWPSTRUCT = record lParam: LongWord; wParam: Word; Msg: LongWord; hwnd: HWnd; end;
    TCWPSTRUCTProc = procedure(Code: Integer; wParam: Word; lParam: TCWPSTRUCT);
    TTimerProc = procedure(HandleW, Msg, idEvent, TimeSys: LongWord);
 
var
    ExtractFile, StatusInfo: TLabel;
    ProgressBar: TNewProgressBar;
    CancelCode, n, ArcInd, UnPackError, StartInstall: Integer;
    Arcs: array of TArc;
    msgError: string;
    lastMb, baseMb: Integer;
    LastTimerEvent: DWORD;
    WndHookID, TimerID: LongWord;
    allSize: Extended;
    Status: TBarInfo;
 
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';
 
Function OemToChar(lpszSrc, lpszDst: AnsiString): longint; external 'OemToCharA@user32.dll stdcall';
Function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: PAnsiChar; cbMultiByte: integer; lpWideCharStr: PAnsiChar; cchWideChar: integer): longint; external 'MultiByteToWideChar@kernel32.dll stdcall';
Function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: PAnsiChar; cchWideChar: integer; lpMultiByteStr: PAnsiChar; cbMultiByte: integer; lpDefaultChar: integer; lpUsedDefaultChar: integer): longint; external 'WideCharToMultiByte@kernel32.dll stdcall';
 
function PeekMessage(var lpMsg: TMessage; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMessage): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: TMessage): Longint; external 'DispatchMessageA@user32.dll stdcall';
 
function GetTickCount: DWord; external 'GetTickCount@kernel32';
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 GetKeyState(nVirtKey: Integer): ShortInt; external 'GetKeyState@user32 stdcall delayload';
function GetCurrentThreadId: LongWord; external 'GetCurrentThreadId@kernel32 stdcall delayload';
 
function CallNextWNDPROC(idHook: LongWord; Code: Integer; wParam: Word; lParam: TCWPSTRUCT): LongWord; external 'CallNextHookEx@user32 stdcall delayload';
function SetWindowsHookEx(idHook: LongWord; callback: LongWord; hMod: LongWord; dwThreadID: HWND): LongWord; external 'SetWindowsHookExW@user32 stdcall delayload';
function UnhookWindowsHookEx(idHook: LongWord): LongWord; external 'UnhookWindowsHookEx@user32 stdcall delayload';
function WrapCWPSTRUCTProc(callback:TCWPSTRUCTProc; paramcount:integer): longword; external 'wrapcallback@files:innocallback.dll';
function WrapTimerProc(callback: TTimerProc; Paramcount: Integer): longword; external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): longword; external 'SetTimer@user32';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32 stdcall delayload';
 
procedure AppProcessMessage;
var
    Msg: TMessage;
begin
    if not PeekMessage(Msg, {WizardForm.Handle} 0, 0, 0, PM_REMOVE) then Exit;
    TranslateMessage(Msg); DispatchMessage(Msg);
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;
 
// Перевод числа в строку с точностью 2 знака (%.2n) с округлением дробной части, если она есть
Function NumToStr(Float: Extended): String;
Begin
    Result:= Format('%.2n', [Float]); StringChange(Result, ',', '.');
    while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Pos('.', Result) > 0) do
        SetLength(Result, Length(Result)-1);
End;
 
Function ByteOrTB(Bytes: Extended; noMB: Boolean): String; {Перевод числа в значение бт/Кб/Мб/Гб/Тб (до 2х знаков после запятой)}
    Begin
        if not noMB then Result:= NumToStr(Int(Bytes)) +' Mb' else
            if Bytes < 1024 then if Bytes = 0 then Result:= '0' else Result:= NumToStr(Int(Bytes)) +' Bt' else
                if Bytes/1024 < 1024 then Result:= NumToStr(round((Bytes/1024)*10)/10) +' Kb' else
                    If Bytes/oneMB < 1024 then Result:= NumToStr(round(Bytes/oneMB*100)/100) +' Mb' else
                        If Bytes/oneMB/1000 < 1024 then Result:= NumToStr(round(Bytes/oneMB/1024*1000)/1000) +' Gb' else
                            Result:= NumToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Tb';
    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 then    {more than hour}
        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+' '+ IntToStr(Ticks/1000 - Ticks/1000/60*60) +s
    else Result:= Format('%.1n', [Abs(Ticks/1000)]) +s    {less than one minute}
End;
 
function cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;
 
Function LoWord(lw: LongWord): LongWord; Begin Result:= lw shr 16; 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;
 
// 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, nRet2: integer; WideCharBuf, MultiByteBuf: AnsiString;
begin
    SetLength(WideCharBuf, Length(strSource) * 2);
    SetLength(MultiByteBuf, Length(strSource) * 2);
    nRet:= MultiByteToWideChar(CP_ACP, 0, strSource, -1, WideCharBuf, Length(WideCharBuf));
    nRet2:= WideCharToMultiByte(CP_UTF8, 0, WideCharBuf, -1, MultiByteBuf, Length(MultiByteBuf), 0, 0);
    if nRet * nRet2 = 0 then Result:= strSource else Result:= MultiByteBuf;
end;
 
// Scans the specified folders for archives and add them to list
function FindArcs(files: string): Extended; // при каждом вызове подсчитанный размер увеличивается
    var FSR: TFindRec;
Begin
    if FindFirst(ExpandConstant(files), 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(files)) + FSR.Name;
                Arcs[n].Size:= Size64(FSR.SizeHigh, FSR.SizeLow);
                Result:= Result + Arcs[n].Size;
            until not FindNext(FSR);
        finally
            FindClose(FSR);
        end;
End;
 
    var FreezeTimer: Boolean;
Procedure UpdateStatus(Flags: Integer);   // выполняется с переодичностью, заданной константой Period
var
    Remaining: Integer; i, t, s: string;
Begin
    if Flags and $1 > 0 then FreezeTimer:= Flags and $2 = 0; //  bit 0 = 1 change start/stop, bit 1 = 0 stop, bit 1 = 1 start
    if Flags and $4 > 0 then LastTimerEvent:= 0; // bit 2 = 1 reset Timer
    if FreezeTimer or (GetTickCount - LastTimerEvent <= Period) then Exit else LastTimerEvent:= GetTickCount;
  with WizardForm.ProgressGauge do begin
    if position > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((max - position)/position)) else Remaining:= 0;
        t:= cm('ending'); i:= t;
        if Remaining > 0 then begin
            t:= FmtMessage(cm('taskbar'), [IntToStr(Status.perc/10), TicksToTime(Remaining, 'h', 'm', 's', false)])
            i:= TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)
        end;
  end;
    SetTaskBarTitle(t); // проценты и оставшееся время на кнопке инсталлятора
    if Status.size > 0 then
        s:= ' ['+ ByteOrTB(Status.size*oneMB, true) +']';   // можно сделать подсчёт размера папки {app} через CalcDirSize, но это может замедлить работу
    StatusInfo.Caption:= FmtMessage(cm('StatusInfo'), [IntToStr(Status.count +ord(Status.count < 0)), s, Format('%.1n', [Abs(Status.perc/10)]), i]);
// сдвинуть прогрессбар и обновить сведения о распакованных данных при обработке нескольких архивов на этапе распаковки
    if (Status.stage = cm('ArcTitle')) and (GetArrayLength(Arcs) > 1) then begin
        ExtractFile.Caption:= FmtMessage(cm('ArcInfo'), [IntToStr(ArcInd+1), IntToStr(GetArrayLength(Arcs)), ByteOrTB(Arcs[ArcInd].Size, true), Format('%.0n', [Status.pos/(Arcs[ArcInd].Size/oneMB)*100]), ByteOrTB(allSize, true)])
        ProgressBar.Position:= round(ProgressBar.Max * Status.pos/(Arcs[ArcInd].Size/oneMB))
    end;
End;
 
Procedure MyTimerProc(h, msg, idevent, dwTime: Longword);
Begin
    if WizardForm.CurPageID = wpInstalling then UpdateStatus(0);
End;
 
Procedure OnWndHook(Code: Integer; wParam: Word; lParam: TCWPSTRUCT);
Begin
  if (Code = HC_ACTION) and (LoWord(lParam.msg) = WM_PAINT) then begin  // подготовка данных для последующего отображения по таймеру
    if (Status.stage <> WizardForm.StatusLabel.Caption) and (WizardForm.StatusLabel.Caption <> '') then begin
        Status.stage:= WizardForm.StatusLabel.Caption;  // текущий этап установки
        if Status.stage = SetupMessage(msgStatusRollback) then begin
            StatusInfo.Hide; ExtractFile.Hide; ProgressBar.Hide;
        end;
    end;
    if (Status.name <> WizardForm.FileNameLabel.Caption) and (WizardForm.FileNameLabel.Caption <> '') then begin // имя файла, названия ярлыка и прочее
        Status.name := WizardForm.FileNameLabel.Caption;    // начало извлечения или распаковки очередного файла
        Case Status.stage of
            SetupMessage(msgStatusExtractFiles), cm('ArcTitle'): // этапы извлечения файлов и распаковки архивов
                Status.count:= Status.count + 1;    // кол-во файлов
        End;
    end;
    with WizardForm.ProgressGauge do begin
        n:= (Max - Min)/1000
        if n > 0 then Status.perc:= (Position-Min)/n;   // 1000 процентов
    end;
    UpdateStatus(0);
  end;
    CallNextWNDPROC(WndHookID, Code, wParam, lParam)    {освобождение события}
End;
 
// The main callback function for unpacking FreeArc archives
function FreeArcCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
    var Elapsed: Extended;
begin
//    if GetTickCount - LastTimerEvent > 1000 then begin
        // This code will be executed once each 1000 ms (этот код будет выполняться раз в 1000 миллисекунд)
        UpdateStatus(0);
        if GetKeyState(VK_ESCAPE) < 0 then
            if WizardForm.CancelButton.Enabled then WizardForm.Close;   // на этапе
//        LastTimerEvent := LastTimerEvent+1000;
//    end;
  Case string(what) of
    'filename': begin   // Update FileName label
        WizardForm.FileNameLabel.Caption:= OemToAnsiStr(str); // извлекаемый файл
    end;
    'progress': if Mb >= 1 then with WizardForm.ProgressGauge do begin
        for n:= 0 to ArcInd-1 do Elapsed:= Elapsed + Arcs[n].Size; Elapsed:= Elapsed/oneMB + Mb; // обработано Mбайт (для небольшого архива точность страдает)
        Position:= round(Max * Elapsed/(allSize/oneMB))
        Status.pos := Mb;   // позиция в текущем архиве
    end;
    'written': begin // Assign to Mb *total* amount of data extracted to the moment from all archives
        lastMb := Mb;   // извлечено из текущего архива
        Status.size := baseMb+Mb; // запоминаем общий объём, чтобы снимать данные по таймеру
    end;
  End;
    AppProcessMessage;
    Result:= CancelCode;
end;
 
// Extracts all found archives
function UnPack(Archives: string): Integer;
var
    callback: longword;
    FreeMB, TotalMB: Cardinal;
begin
    // если отмена установки разрешена, кнопка Cancel станет доступна
    WizardForm.CancelButton.Enabled:= not {#isFalse(SetupSetting("AllowCancelDuringInstall"))}
    // Get the size of all archives
  Repeat
    if Pos('|',Archives) > 0 then begin
        allSize:= FindArcs(Copy(Archives, 1, Pos('|',Archives) -1)); // сканируем очередную папку
        Delete(Archives, 1, Pos('|',Archives)); // искать далее
    end;
        allSize:= FindArcs(Archives);   // последняя (или единственная) папка с архивами
  Until Pos('|',Archives) = 0;
    // Other initializations
    callback:= WrapFreeArcCallback(@FreeArcCallback,4);   //FreeArcCallback has 4 arguments
    WizardForm.StatusLabel.Caption:= cm('ArcTitle');    // начало этапa распаковки
    ExtractFile.Show; ProgressBar.Show;
    baseMb:= 0;  // обнулить полученные мегабайты, если ранее вёлся подсчёт объёма файлов инсталлятора
    Status.count:= 0;   // не учитывать файлы, извлечённые инсталлятором
    UpdateStatus(7);  // немедленно обновить строку статуса
 
  for ArcInd:= 0 to GetArrayLength(Arcs) -1 do begin    // архивы в текущей папке
        CancelCode:= 0;
        AppProcessMessage;
        try
            // Pass the specified arguments to 'unarc.dll'
            Result:= FreeArcExtract (callback, 'x', '-o+', '-dp'+ AnsiToUtf8(ExpandConstant('{app}')), '--', AnsiToUtf8(Arcs[ArcInd].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)]);
            WizardForm.StatusLabel.Caption:= msgError;
            WizardForm.FileNameLabel.Caption:= ExtractFileName(Arcs[ArcInd].Path);
            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[ArcInd].Path)]);
            -127: msgError:= cm('ArcBreak');    //Cancel button
            -63:  msgError:= cm('ArcFail');
            end;
            Log(msgError);  // записываем ошибку в лог, а также показываем её текст на странице завершения
            Break;    // прервать цикл распаковки
        end;
    // Удалить текущий архив из папки приложения перед распаковкой файлов из следующего архива
        if Pos(AnsiLowercase(ExpandConstant('{app}')), AnsiLowercase(Arcs[ArcInd].Path)) > 0 then DeleteFile(Arcs[ArcInd].Path);
  end;
    if Result = 0 then WizardForm.StatusLabel.Caption:= FmtMessage(cm('ArcFinish'), [IntToStr(GetArrayLength(Arcs)), IntToStr(Status.count), ByteOrTB(Status.size*oneMB, true)]);
    StatusInfo.Hide; ExtractFile.Hide; ProgressBar.Hide;
end;
 
procedure CurStepChanged(CurStep: TSetupStep);
begin
    if CurStep = ssInstall then begin
        StartInstall:= GetTickCount    {время начала извлечения файлов}
        WndHookID:= SetWindowsHookEx(WH_CALLWNDPROC, WrapCWPSTRUCTProc(@OnWndHook, 3), 0, GetCurrentThreadId);    {установка SendMessage хука}
        TimerID:= SetTimer(0, 0, 500 {полсекунды}, WrapTimerProc(@MyTimerProc, 4));    {установка таймера}
        if not {#isFalse(SetupSetting("Uninstallable"))} then Status.count:= -1; // не считать файл unins000.exe
    end;
    if CurStep = ssPostInstall then
    begin
        StartInstall:= GetTickCount    {время начала распаковки}
        UnPackError:= UnPack(Archives)
        if UnPackError = 0 then
            SetTaskBarTitle(SetupMessage(msgSetupAppTitle)) else
        begin
            // Error occured, uninstall it then
            if not {#isFalse(SetupSetting("Uninstallable"))} then  // деинсталляция разрешёна
                Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n);    // откат установки из-за ошибки unarc.dll
            SetTaskBarTitle(SetupMessage(msgErrorTitle))
            WizardForm.Caption:= SetupMessage(msgErrorTitle) +' — '+ cm('ArcBreak')
        end;
    end;
end;
 
Procedure CurPageChanged(CurPageID: Integer);
Begin
    if (CurPageID = wpFinished) and (UnPackError <> 0) then
    begin // Extraction was unsuccessful (распаковщик вернул ошибку)
        // Show error message
        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 WizardClose(Sender: TObject; var Action: TCloseAction);
Begin
  Action:= caNone;    // так надо
    if Status.stage = cm('ArcTitle') then begin // распаковка на этапе ssPostInstall
        UpdateStatus(1); // остановить таймер
        if MsgBox(SetupMessage(msgExitSetupMessage), mbInformation, MB_YESNO) = IDYES then
            CancelCode:= -127;  // прервать распаковку
        UpdateStatus(7); // обновить информацию
    end else
        MainForm.Close; // стандартное нажатие кнопки закрытия окна или отмены.
End;
 
procedure InitializeWizard();
begin
    with WizardForm.ProgressGauge do begin
// Create controls to show extended info
    StatusInfo:= TLabel.Create(WizardForm);
        StatusInfo.parent:=WizardForm.InstallingPage;
        StatusInfo.Autosize:= false;
        StatusInfo.Top:= Top + ScaleY(32);
        StatusInfo.Width:= Width;
    ProgressBar := TNewProgressBar.Create(WizardForm);
        ProgressBar.SetBounds(Left, StatusInfo.Top + StatusInfo.Height + ScaleY(16), Width, Height);
        ProgressBar.Parent := WizardForm.InstallingPage;
        ProgressBar.max := 65536;
        ProgressBar.Hide;   // будет показан при обработке нескольких архивов
    ExtractFile:= TLabel.Create(WizardForm);
        ExtractFile.parent:=WizardForm.InstallingPage;
        ExtractFile.Autosize:= false;
        ExtractFile.Top:= ProgressBar.Top + ScaleY(32);
        ExtractFile.Width:= Width;
    end;
    WizardForm.OnClose:= @WizardClose   // позволяет прервать распаковку архивов стандартными способами
end;
 
Procedure DeInitializeSetup;
Begin
    KillTimer(0, TimerID)        {удаление таймера}
    UnhookWindowsHookEx(WndHookID)    {удаление SendMessage хука}
End;

Всего записей: 26 | Зарегистр. 27-07-2009 | Отправлено: 22:37 28-07-2009
Roden37101



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
спрячь под тего [more]
и вместо
;Source: *.arc; DestDir: {app}; Flags: nocompressionSource: unarc.dll; DestDir: {tmp}; Flags: dontcopy deleteafterinstallSource: compiler:InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
Source: InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
;эта строка демонстрирует показ сведений и времени завершения при обычном извлечении файлов
Source: {win}\inf\*; DestDir: {app}\files; Flags: external  
 
вставь
;Source: *.arc; DestDir: {app}; Flags: nocompression
Source: unarc.dll; DestDir: {tmp}; Flags: dontcopy deleteafterinstall
Source: compiler:InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
;эта строка демонстрирует показ сведений и времени завершения при обычном извлечении файлов
Source: {win}\inf\*; DestDir: {app}\files; Flags: external  
 
список путь подправь
Пример: #define Archives "{app}\Data\*.tmp|{src}\Archives\*.arc"  
 
и попробуй отключить антивир
 
 

Всего записей: 194 | Зарегистр. 20-06-2009 | Отправлено: 22:58 28-07-2009
Smit13

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите пожалуйста , если у кого есть дайте пожалуйста готовый скрипт где собраны вместе эти функции:  
http://forum.ru-board.com/topic.cgi?forum=5&topic=30239&start=0&limit=1&m=2#1 [?] [?] [?]  и  
Библиотека для распаковки 7zip архивов с отображением прогресс бара в окне Inno Setup.  
 
Так чтобы при нсталяции архив распаковался и файл PCF преобразовался в исходный файл , у меня не получается сделать чтоб всё это работало.  
Никто не знает как это сделать?

Всего записей: 98 | Зарегистр. 15-07-2009 | Отправлено: 23:03 28-07-2009
DemonAk



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Подскажите я делал вот так #define Archives "{src}\data-1.arc|{src}\data-2.arc>{commondocs}"
Первый архив распаковался как надо, а вот второй так и не распаковался и я так понимаю второй архив должен был распаковываться во втором прогресс баре, а он вообще был пустой, в чем проблема может быть?

Всего записей: 316 | Зарегистр. 08-11-2007 | Отправлено: 23:12 28-07-2009
bush1

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
#define Archives=D|кино|bbb {app}\Data\*.tmp|{src}\Archives\*.arc ;
 
как правильно адрес прописать а то он все ругается.

Всего записей: 26 | Зарегистр. 27-07-2009 | Отправлено: 23:25 28-07-2009
Gocha1



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну не знаю из-зха чего но самый последный скрипт от Булата и Доброва не извелкает архив размером 950мб сжатий по максимуму с опциямы -лд512

Всего записей: 259 | Зарегистр. 26-10-2007 | Отправлено: 23:47 28-07-2009 | Исправлено: Gocha1, 12:48 29-07-2009
bush1

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как пользоватся Модулем распаковки архивов FreeArc установил а дальше что?

Всего записей: 26 | Зарегистр. 27-07-2009 | Отправлено: 00:07 29-07-2009
Victor_Dobrov



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DemonAk
Цитата:
Подскажите я делал вот так #define Archives "{src}\data-1.arc|{src}\data-2.arc>{commondocs}"  
Первый архив распаковался как надо, а вот второй так и не распаковался  

Раз в истории изменений этого нет, значит ещё не сделано. Изучайте синтаксис строки Archives в скрипте freearc_example.iss.
 
bush1
Цитата:
как правильно адрес прописать а то он все ругается.

Смотри пример там же.

Всего записей: 742 | Зарегистр. 27-09-2005 | Отправлено: 03:55 29-07-2009
Gocha1



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну не знаю из-за чего но самый последный скрипт от Булата и Доброва не извелкает архив размером 950мб сжатий по максимуму с опциямы -лд512, когда аналогично сжатий архив размером в диапазоне 150мб извлекает

Всего записей: 259 | Зарегистр. 26-10-2007 | Отправлено: 12:49 29-07-2009 | Исправлено: Gocha1, 12:51 29-07-2009
SotM



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Нда... давно я тут не был...
И тут я вижу всё по-старому осталось: пользователи кидают картинки _любых_ размеров, ленятся в шапке прочитать/скачать примеры, и т.д.
 
bush1 - Ты разве не можешь изменить свой пост?! Тебе же русским языком сказали - спрятать свой код по тэг [more][/more]!!! И вверху тоже самое написано! Не уж то ЭТО так сложно сделать?!
 
С картинками тоже самое. bush1 - не уж то ты на форумах в первый раз и не знаешь как спрятать картинку под ссылку?!
 
Модераторы что-то опять заснули, не могут эту ветку форума в новую 7-ю часть.
 
А шапка темы вообще не понятно во что превратилась, особенно ее нижняя часть. Явный "Out of style".
 
Gocha1
Ну ты хоть как-то изучай русский язык, а то сложно читать твои предложения. Прогоняй через тот же Word хотя бы...

Всего записей: 965 | Зарегистр. 28-11-2006 | Отправлено: 13:22 29-07-2009
AIMP

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
НАрод так может хоть кто-то знает как рстянуть картинки в слайд-шоу???

Всего записей: 54 | Зарегистр. 21-02-2008 | Отправлено: 13:33 29-07-2009
AngelDead



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я извиняюсь наверно глупый вопрос, но задам какой должен быть размер картинки чтобы вставить ее в интсалл?
Например как здесь:
Подробнее...

Всего записей: 100 | Зарегистр. 18-03-2009 | Отправлено: 13:54 29-07-2009 | Исправлено: AngelDead, 13:58 29-07-2009
New_KoMa

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SotM

Цитата:
А шапка темы вообще не понятно во что превратилась, особенно ее нижняя часть. Явный "Out of style".  

я поднимал по этому тему ранее..
прав изменить шапку у меня нету, а у кого есть почему-то не меняют,  может вы удалите эту нижнюю часть?

Всего записей: 83 | Зарегистр. 27-05-2009 | Отправлено: 13:59 29-07-2009
bush1

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
bush1 - Ты разве не можешь изменить свой пост?! Тебе же русским языком сказали - спрятать свой код по тэг [more][/more]!!! И вверху тоже самое написано! Не уж то ЭТО так сложно сделать?!

 
Я так и делал все прятал и все равно ошибки.

Всего записей: 26 | Зарегистр. 27-07-2009 | Отправлено: 14:14 29-07-2009
A19EXXX



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Скажите, судя по этому скрипту (вариант 1), все файлы .pcf (даже те, которые в под-папках) папки Data должны преобразоваться в исходный формат, или только файлы папки Data, без под-папковых файлов?

Всего записей: 513 | Зарегистр. 02-07-2009 | Отправлено: 14:17 29-07-2009 | Исправлено: A19EXXX, 16:26 29-07-2009
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146

Компьютерный форум Ru.Board » Компьютеры » Программы » Inno Setup (создание инсталяционных пакетов)
Widok (10-08-2009 22:13): Лимит страниц. Продолжаем здесь.


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru