Войти

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 3]


Страниц : 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 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188

insombia
04-06-2011, 16:20
murlakatamenka как его привязать к скрипту от шепарда?

Krinkels
04-06-2011, 20:16
Доброго времени суток друзья. Тут кто то просил помощи в получении ника в steam. Вот (http://www.krinkels.ru/load/raznoe/getsteam_dll/2-1-0-33) небольшая библиотечка для получения ника

ILIA_1992
04-06-2011, 20:30
ILIA_1992
чтобы убрать компоненты, нужно закомментировать строку #define Components »
можешь помочь,чем закоментировать???каким кодом???

ILIA_1992
04-06-2011, 20:58
ILIA_1992, перед #define Components поставь ;
и будет тебе счастье! »
всё работает.Чтобы установщик распаковывал определённый формат ,например bin нужно добавить это Archives = '{src}\*.bin';
В скрипте нашёл это #define ArcLocation "{src}\bin\data.bin" я менял название с data.bin на bin'
он мне всё равно не распаковывает и выбивает ошибку.Что здесь не так???

murlakatamenka
04-06-2011, 21:04
как его привязать к скрипту от шепарда? »
написал, что мне известно об этом. имхо не особо нужно, не стоит заморачиваться.

подскажите как в секции [Tasks] прописать "не создавать папку в меню пуск" ??? »
[Setup]
AllowNoIcons=true
также есть комментарий строки - // (двойной слэш)
блоковый комментарий
(* тут комментарий
и тут тоже *)

serhio
04-06-2011, 21:35
vovka1021, Расположение архивов FreeArc архив в одной папке с .EXE »
Извеняюсь за тупость, например D:\GAMES\Маджонг Артефакт. Я правильно понял? :dont-know

Кстати ни кто не знает как вставить сюда прогрес бар? Этот код для 7z.
[code]
procedure MyAfterInstall();
var
ResultCode: Integer;
begin
begin
Exec(ExpandConstant('{app}\data.exe'), '-e -aoa -y', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
end
end;

4liver
04-06-2011, 21:44
serhio, Да ты правильно понял)

serhio
04-06-2011, 21:55
4liver, спасибо. Что с этим можно сделать?

4liver
04-06-2011, 22:01
serhio, дай скрипт и функцию какую хочешь воткнуть я те помогу...

serhio
04-06-2011, 22:18
Вот.

ILIA_1992
04-06-2011, 23:57
Помогите решить проблему с распаковкой мой скрипт http://rghost.ru/9316501

Проблема в том,что установщик не хочет распаковывать файлы bin
помогите решить проблему

lmiol
05-06-2011, 07:50
просидев немного над
[CustomMessages]
HeaderLabelPage=Выберите тип вашего аккаунта
MyRadioCaption_1=Standart
MyRadioCaption_2=Premium / Pro
PageTextHeader=На этой странице Вы можете выбрать тип вашего аккаунта, который вы используете в игре.
MyText_1=Будут установлены файлы которые доступны для игроков без подписки.
MyText_2=Будут установлены файлы которые доступны для игроков с Premium/Pro подпиской.

[сode]
var
MyNewPage: TWizardPage;
Rect: TRect;
HIcon: LongInt;
AIconFileName: String;
MyRadioBtn_1, MyRadioBtn_2: TNewRadioButton;

procedure GetInstTypePage();
begin
MyNewPage := CreateCustomPage(wpWelcome,
ExpandConstant('{cm:HeaderLabelPage}'), '');



with TNewStaticText.Create(WizardForm) do
begin
Width := WizardForm.InnerNotebook.Width;
Height := ScaleY(26);
WordWrap := True;
Caption := ExpandConstant('{cm:PageTextHeader}');
Parent := MyNewPage.Surface;
end;

MyRadioBtn_1 := TNewRadioButton.Create(WizardForm);
with MyRadioBtn_1 do
begin
Top := ScaleY(50);
Width := ScaleX(150);
Caption := ExpandConstant('{cm:MyRadioCaption_1}');
Checked := True;
Parent := MyNewPage.Surface;
end;

with TNewStaticText.Create(WizardForm) do
begin
Left := ScaleX(16);
Top := ScaleY(68);
Width := WizardForm.InnerNotebook.Width - ScaleX(60);
Height := ScaleY(26);
WordWrap := True;
Caption := ExpandConstant('{cm:MyText_1}');
Parent := MyNewPage.Surface;
end;

MyRadioBtn_2 := TNewRadioButton.Create(WizardForm);
with MyRadioBtn_2 do
begin
Top := ScaleY(120);
Width := ScaleX(150);
Caption := ExpandConstant('{cm:MyRadioCaption_2}');
Parent := MyNewPage.Surface;
end;

with TNewStaticText.Create(WizardForm) do
begin
Left := ScaleX(16);
Top := ScaleY(138);
Width := WizardForm.InnerNotebook.Width - ScaleX(60);
Height := ScaleY(26);
WordWrap := True;
Caption := ExpandConstant('{cm:MyText_2}');
Parent := MyNewPage.Surface;
end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID <= wpSelectDir) and (PageID = wpReady) and (MyRadioBtn_2.Checked) then
Result := True;
end;

понял что вопрос ставил немного некорректно,
Можно ли сделать чтобы при выбраном "MyRadioBtn_2.Checked" в списке компонентов для выбора Premium вывести еще один дополнительный компонент? так как указано на скриншоте (http://i22.fastpic.ru/big/2011/0605/10/17216f86994e32d6e4839b034f1ea610.jpg)

4liver
05-06-2011, 08:01
ILIA_1992, Держи (http://rghost.ru/9424551)

insombia
05-06-2011, 16:22
ILIA_1992 Archives = '{#ArcLocation}'; У тебя там не указано что распаковывать это в freeark.iss и в скрипте шепард укажи в
;#define FreeArc
#ifdef FreeArc
#define ArcLocation "{src}\bin\data.bin"
#endif росположение файла например "D:/NFS.arc" если я правельно тебя понял

insombia
05-06-2011, 18:34
ILIA_1992
Распаковка фриарк

[CustomMessages]
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=сек

[_ISToolPreCompile]
#sub ShowErr
#pragma error Str(void)
#endsub
#define Break(any S = "Empty") void = S, ShowErr
#ifndef Archives
#define Archives ""
#endif
#define LastLine
#define Current AddBackslash(GetEnv("TEMP")) + GetDateTimeString('dd/mm-hh:nn', '-', '-') +'.iss'
#sub GetLastLine
#expr SaveToFile(Current)
#for {faAnyFile = FileOpen(Current); !FileEof(faAnyFile); LastLine = FileRead(faAnyFile)} NULL
#expr FileClose(faAnyFile)
#endsub
#define TrimEx(str S = "", str T = " ") \
Pos(T,S) == 1 ? S = Copy(S,2,Len(S)) : S, Copy(S,Len(S)) == T ? S = Copy(S,1,Len(S)-1) : S, Pos(T,S) == 1 || Copy(S,Len(S)) == T ? TrimEx(S,T) : S
#define SkipText(str S = "", str T = ";", int F = 1) \
Local[0] = Pos(T, S), Local[0] > 0 ? (F == 0 ? Copy(S, Local[0]) : (F < 0 ? Copy(S,,Local[0] -1) : Copy(S, Local[0] + Len(T)))) : S
#define Find2Cut(str S, str B, str E = ";") \
S = LowerCase(S), B = LowerCase(B), \
(Local[0] = Pos(B, S)) > 0 ? (Local[1] = Copy(S, Local[0]+Len(B)), (Local[0] = Pos(E, Local[1])) > 0 ? (Copy(Local[1],, Local[0]-1)) : Local[1]) : ""
#define SourceToProgress() GetLastLine, \
Local[0] = Find2Cut(LastLine,"UnArc(",")"), Local[0] == "" ? Local[0] = Find2Cut(LastLine,"UnZip(",")") : void, Local[0] != "" && Pos("dontcopy", Find2Cut(LastLine,"Flags:")) == 0 ? Local[5] = "?" : void, \
Local[1] = TrimEx(TrimEx(SkipText(Local[0],"',",-1)),"'"), Local[2] = TrimEx(TrimEx(SkipText(Local[0],"',")),"'"), Local[1] == "" ? Local[1] = TrimEx(Find2Cut(LastLine,"Source:")) : void, Local[2] == "" ? Local[2] = TrimEx(Find2Cut(LastLine,"DestDir:")) : void, \
Local[3] = TrimEx(Find2Cut(LastLine,"Components:")), Local[3] == "" ? void : (Local[3] = "<"+ Local[3], void), Local[4] = TrimEx(Find2Cut(LastLine,"Tasks:")), Local[4] == "" ? void : (Local[4] = ">"+ Local[4], void), \
Local[1] == "" ? Break('Previous line must be in [Files] section') : (Local[0] = Local[1] +"/"+ Local[2] + Local[3] + Local[4] + Local[5]), TrimEx(Archives) == "" ? Archives = Local[0] : (Archives = Archives +"|"+ Local[0]), void
#define isFalse(any S) (S = LowerCase(Str(S))) == "no" || S == "false" || S == "off" ? "true" : "false"

[Files]
Source: {src}\*.arc; DestDir: {app}; Flags: external dontcopy
{#SourceToProgress}

//************************************************ [Начало - FreeArc] ***************************************************//

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 MulDiv(Number, Numerator, Denominator: Integer): Integer; external 'MulDiv@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, 0, 0, 0, PM_REMOVE) then Exit;
TranslateMessage(Msg); DispatchMessage(Msg);
end;

Function FreeArcCmd(callback: longword; cmd1,cmd2,cmd3,cmd4,cmd5,cmd6,cmd7,cmd8,cmd9,cmd10: PAnsiChar): integer;
Begin
CancelCode:= 0; AppProcessMessage;
try
Result:= FreeArcExtract(callback, cmd1,cmd2,cmd3,cmd4,cmd5,cmd6,cmd7,cmd8,cmd9,cmd10); // Pass the specified arguments to 'unarc.dll'
if CancelCode < 0 then Result:= CancelCode;
except
Result:= -63;
end;
End;

Procedure SetTaskBarTitle(Title: String); var h: Integer;
Begin
h:= GetWindowLong(MainForm.Handle, -8); if h <> 0 then SetWindowText(h, Title);
End;

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;
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;

Function StringToArray(Text, Cut: String): array of String; var i, k: Integer;
Begin
SetArrayLength(Result, 0); if Cut = '' then Cut:= #1310;
Repeat k:= Pos(Cut,Text);
if k = 1 then begin Delete(Text, 1, Length(Cut)); CONTINUE
end;
SetArrayLength(Result, GetArrayLength(Result) +1); i:= GetArrayLength(Result) -1;
if k = 0 then
Result[i]:=Text
else begin
Result[i]:= Copy(Text, 1, k -1); Delete(Text, 1, Length(Result[i]) + Length(Cut));
end;
Until Length(Text) * k = 0;
End;

Function CreateLabel(Parent: TWinControl; AutoSize, WordWrap, Transparent: Boolean; FontName: String; FontStyle: TFontStyles; FontColor: TColor; Left, Top, Width, Height: Integer; Prefs: TObject): TLabel;
Begin
Result:=TLabel.Create(Parent); Result.parent:= Parent;
if Prefs <> Nil then begin
Top:= TWinControl(Prefs).Top; Left:= TWinControl(Prefs).Left; Width:= TWinControl(Prefs).Width; Height:= TWinControl(Prefs).Height;
end;
if Top > 0 then result.Top:=Top; if Left > 0 then result.Left:= Left; if Width > 0 then result.Width:= Width; if Height > 0 then result.Height:= Height;
if FontName <> '' then result.Font.Name:= FontName; if FontColor > 0 then result.Font.Color:= FontColor; if FontStyle <> [] then result.Font.Style:= FontStyle;
result.AutoSize:= AutoSize; result.WordWrap:= WordWrap; result.Transparent:=Transparent; result.ShowHint:= true;
End;

Function TicksToTime(Ticks: DWord; h,m,s: String; detail: Boolean): String;
Begin
if detail then
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
Result:= IntToStr(Ticks/3600000) +h+' '+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +m
else if Ticks/60 >= 1000 then
Result:= IntToStr(Ticks/60000) +m+' '+ IntToStr(Ticks/1000 - Ticks/1000/60*60) +s
else Result:= Format('%.1n', [Abs(Ticks/1000)]) +s
End;

Function ExpandENV(string: String): String; var n: UINT; Begin
if Pos('{',string) * Pos('}',string) = 0 then Result:= String else Result:= ExpandConstant(String); n:= Pos('%',result); if n = 0 then Exit;
Delete(result, n,1); Result:= Copy(Result,1, n-1) + ExpandConstant('{%'+Copy(Result, n, Pos('%',result) -n) +'}') + Copy(Result, Pos('%',result) +1, Length(result))
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;

function OemToAnsiStr(strSource: AnsiString): AnsiString;
var
nRet : longint;
begin
SetLength(Result, Length(strSource));
nRet:= OemToChar(strSource, Result);
end;

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;

Procedure UpdateStatus(Flags: Integer);
var
Remaining: Integer; i, t, s: string;
Begin
if Flags and $1 > 0 then FreezeTimer:= Flags and $2 = 0;
if (Flags and $4 > 0) or (Status.size <> baseMb+lastMb) then LastTimerEvent:= 0;
if FreezeTimer or (GetTickCount - LastTimerEvent <= Period) then Exit else LastTimerEvent:= GetTickCount;
Status.size := baseMb+lastMb; // извлечено на текущий момент
if totalUncompressedSize > 0 then with WizardForm.ProgressGauge do begin
Position:= round(Max * Status.size/totalUncompressedSize)
end;
with WizardForm.ProgressGauge do begin
#ifndef precomp
if position > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((max - position)/position)) else
#endif
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) +']';
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) > 0) then begin
ExtractFile.Caption:= FmtMessage(cm('ArcInfo'), [IntToStr(ArcInd+1), IntToStr(GetArrayLength(Arcs)), ByteOrTB(Arcs[ArcInd].Size, true), Format('%.0n', [Status.mb/(Arcs[ArcInd].Size/oneMB)*100]), ByteOrTB(Status.allsize, true)])
ProgressBar.Position:= round(ProgressBar.Max * Status.mb/trunc(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.name <> WizardForm.FileNameLabel.Caption) and (WizardForm.FileNameLabel.Caption <> '') then begin
FileNameLabel.Caption:= WizardForm.FileNameLabel.Caption;
Status.name:= WizardForm.FileNameLabel.Caption;
Case Status.stage of
SetupMessage(msgStatusExtractFiles):
Status.count:= Status.count +1;
End;
end;
if (Status.stage <> WizardForm.StatusLabel.Caption) and (WizardForm.StatusLabel.Caption <> '') then begin
StatusLabel.Caption:= WizardForm.StatusLabel.Caption;
Status.stage:= WizardForm.StatusLabel.Caption;
if Status.stage = SetupMessage(msgStatusRollback) then begin
WizardForm.StatusLabel.Hide; WizardForm.FileNameLabel.Hide; StatusInfo.Hide; ExtractFile.Hide; ProgressBar.Hide;
end;
end;
with WizardForm.ProgressGauge do begin
n:= (Max - Min)/1000
if n > 0 then Status.perc:= (Position-Min)/n;
end;
UpdateStatus(0);
end;
CallNextWNDPROC(WndHookID, Code, wParam, lParam)
End;

function FreeArcCallback(what: PAnsiChar; Mb, int2: Integer; str: PAnsiChar): Integer;
begin
case string(what) of
'origsize': origsize:= Mb;
'total_files': Null;
'filename': begin
WizardForm.FileNameLabel.Caption:= OemToAnsiStr(str);
FileNameLabel.Caption:= OemToAnsiStr(str);
Status.count:= Status.count + 1;
end;
'read':
Status.mb:= Mb;
'write':
lastMb:= Mb;
end;
if WizardForm.CurPageID = wpInstalling then UpdateStatus(0);
if (GetKeyState(VK_ESCAPE) < 0) and not CancelDuringInstall then
WizardForm.Close;
AppProcessMessage;
Result:= CancelCode;
end;

Function ArcDecode(Line: string): array of TArc;
var tmp, cut: array of String; n, i: integer;
Begin
SetArrayLength(result,0); if Line <> '' then tmp:= StringToArray(Line,'|') else Exit;
for n:= 0 to GetArrayLength(tmp) - 1 do begin
if tmp[n][Length(tmp[n])] = '?' then Continue;
SetArrayLength(result, GetArrayLength(result) +1); i:= GetArrayLength(result) -1;
cut:= StringToArray(tmp[n],'>')
if GetArrayLength(cut) > 1 then result[i].task:= cut[1];
cut:= StringToArray(cut[0],'<')
if GetArrayLength(cut) > 1 then result[i].comp:= cut[1];
cut:= StringToArray(cut[0],'/')
if GetArrayLength(cut) > 1 then result[i].Dest:= cut[1] else result[i].Dest:= '{app}';
if (ExtractFileDrive(ExpandENV(cut[0])) = '') and (ExpandENV(cut[0]) = cut[0]) then
result[i].Path:= '{src}\'+ cut[0] else result[i].Path:= cut[0];
result[i].Dest:= ExpandENV(result[i].Dest); result[i].Path:= ExpandENV(result[i].Path);
end;
End;

function AddArcs(files, target: string): Integer;
var FSR: TFindRec; i: integer;
Begin
Result:= 0; if FindFirst(ExpandENV(files), FSR) then
try
repeat

if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then CONTINUE;

i:= GetArrayLength(Arcs); SetArrayLength(Arcs, i +1);
Arcs[i].Dest:= target;
Arcs[i].Path:= ExtractFilePath(ExpandENV(files)) + FSR.Name;
Arcs[i].Size:= Size64(FSR.SizeHigh, FSR.SizeLow);
Status.allsize:= Status.allsize + Arcs[i].Size;
Arcs[i].allMb:= FreeArcCmd(WrapFreeArcCallback(@FreeArcCallback,4),'l','--',AnsiToUtf8(Arcs[i].Path),'','','','','','','');
if Arcs[i].allMb >= 0 then begin
Arcs[i].allMb:= origsize; result:= result + Arcs[i].allMb;
end;
until not FindNext(FSR);
finally
FindClose(FSR);
end;
End;

function UnPackArchive(Source, Destination: string; allMb, Mode: Integer): Integer;
var
callback: longword;
Begin

WizardForm.CancelButton.Enabled:= not CancelDuringInstall;
callback:= WrapFreeArcCallback(@FreeArcCallback,4);
Result:= FreeArcCmd(callback,'x','-o+','-dp'+AnsiToUtf8(Destination),'--',AnsiToUtf8(Source),'','','','',''); // код ошибки

if Result = 0 then Exit;
msgError:= FmtMessage(cm('ArcError'), [IntToStr(Result)]);
WizardForm.StatusLabel.Caption:= msgError;
WizardForm.FileNameLabel.Caption:= ExtractFileName(Source);
GetSpaceOnDisk(ExtractFileDrive(Destination), True, FreeMB, TotalMB);
case Result of
-1: if FreeMB < allMb then msgError:= SetupMessage(msgDiskSpaceWarningTitle)
else msgError:= msgError + #13#10 + FmtMessage(cm('ArcBroken'), [ExtractFileName(Source)]);
-127: msgError:= cm('ArcBreak');
-63: msgError:= cm('ArcFail');
end;
Log(msgError);
End;


function UnPack(Archives: string): Integer;
begin
Records:= ArcDecode(Archives); SetArrayLength(Arcs,0); Status.allsize:= 0;
for n:= 0 to GetArrayLength(Records) -1 do
if (not IsTaskSelected(Records[n].task) and (Records[n].task <>'')) and (not IsComponentSelected(Records[n].comp) and (Records[n].comp <>'')) then Continue
else totalUncompressedSize:= totalUncompressedSize + AddArcs(Records[n].Path, Records[n].Dest);

WizardForm.StatusLabel.Caption:= cm('ArcTitle');
ExtractFile.Show; ProgressBar.Show;
baseMb:= 0; lastMb:= 0; Status.mb:= 0;
Status.count:= 0;
UpdateStatus(7);
for ArcInd:= 0 to GetArrayLength(Arcs) -1 do begin
Result:= UnPackArchive(Arcs[ArcInd].Path, Arcs[ArcInd].Dest, Arcs[ArcInd].allMb, 0);
if Result <> 0 then Break;
baseMb:= baseMb + lastMb; lastMb:= 0; Status.mb:= 0;

if (Pos(AnsiLowercase(ExpandConstant('{app}')), AnsiLowercase(Arcs[ArcInd].Path)) > 0) or (Pos(AnsiLowercase(ExpandConstant('{tmp}')), 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);
TimerID:= SetTimer(0, 0, 500 , WrapTimerProc(@MyTimerProc, 4));
if not {#isFalse(SetupSetting("Uninstallable"))} then Status.count:= -1;
end;
if CurStep = ssPostInstall then
begin
StartInstall:= GetTickCount
UnPackError:= UnPack('{#Archives}')
if UnPackError <> 0 then begin
if not {#isFalse(SetupSetting("Uninstallable"))} then
Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n);
WizardForm.caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
SetTaskBarTitle(SetupMessage(msgErrorTitle))
end else
SetTaskBarTitle(SetupMessage(msgSetupAppTitle));
end;
end;

Procedure ShowErrorMessage(CurPageID: Integer);
Begin
if (CurPageID = wpFinished) and (UnPackError <> 0) then
begin
FinishedLabel.Height:= WizardForm.FinishedLabel.Height * 2;
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
UpdateStatus(1);
if MsgBox(SetupMessage(msgExitSetupMessage), mbInformation, MB_YESNO) = IDYES then
CancelCode:= -127;
UpdateStatus(7);
end else
MainForm.Close;
End;

Procedure CreateArchivesInfoElements();
Begin
StatusLabel:= CreateLabel(WizardForm.InstallingPage,false,false,true,'',[],0,0,0,0,0, WizardForm.StatusLabel);
FileNameLabel:= CreateLabel(WizardForm.InstallingPage,false,false,true,'',[],0,0,0,0,0, WizardForm.FileNameLabel);
WizardForm.StatusLabel.Top:= WizardForm.ProgressGauge.Top; WizardForm.FileNameLabel.Top:= WizardForm.ProgressGauge.Top;
with WizardForm.ProgressGauge do begin
StatusInfo:= CreateLabel(WizardForm.InstallingPage, false, true, true, '', [], 0, 0, Top + ScaleY(32), Width, 0, Nil);
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:= CreateLabel(WizardForm.InstallingPage, false, true, true, '', [], 0, 0, ProgressBar.Top + ScaleY(32), Width, 0, Nil);
end;
WizardForm.OnClose:= @WizardClose
End;

Procedure DeInitializeSetup;
Begin
KillTimer(0, TimerID)
UnhookWindowsHookEx(WndHookID)
End;

//************************************************ [Конец - FreeArc] ***************************************************//

ILIA_1992
05-06-2011, 18:52
ILIA_1992 Archives = '{#ArcLocation}'; У тебя там не указано что распаковывать это в freeark.iss и в скрипте шепард укажи в
;#define FreeArc
#ifdef FreeArc
#define ArcLocation "{src}\bin\data.bin"
#endif росположение файла например "D:/NFS.arc" если я правельно тебя понял »


мне уже исправили это.

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

И как убрать запрос о вставке второго диска

вот скриншот http://saveimg.ru/pictures/05-06-11/f294bd6aa9ac7f90300960c90086152e.jpg

я отметил красным там третяя полоска , как её убрать???

insombia
05-06-2011, 20:26
ILIA_1992 реестр найти легко напримет
на win7

Пуск-поиск-regedit-HKEY Local Machine-Software-Ищиш там создателя игры например Ubisoft игра splinter cell
нажми файл экспорт выбери имя твоего файла.Затем зайди в ISTool реестр и перенеси тот сохраненный файл реестра и всё готово в самом низу твоего скрипта будет [Registry]
Насчет стрелки если я правельно понял то стрелка для распаковки архивов а насчет запроса диска то вот

DiskSpanning=true
DiskSliceSize=2000000000
SlicesPerDisk=2

Gnom_aka_Lexander
05-06-2011, 20:26
lmiol, Могу предложить вариант с задачами, а не компонентами, тогда твой вопрос решается легким движением руки - создаеш два компонента - стандарт и премиум, а то, что было в компонентах - делаеш задачами, наборы задач вешаеш на компоненты. Просто задачи создаются на странице задач, не раньше, а вот компоненты, видимо, сразу, поэтому стандартными средствами на них не повлиять никак.

insombia
05-06-2011, 20:48
Лександер Подскажи хоть ты мне как сделать чтобы после установки устанавлевался директ который обновляеться инетом?у меня ошибку во время его уст кидает

ILIA_1992
05-06-2011, 20:57
ILIA_1992 реестр найти легко напримет
на win7
Пуск-поиск-regedit-HKEY Local Machine-Software-Ищиш там создателя игры например Ubisoft игра splinter cell
нажми файл экспорт выбери имя твоего файла.Затем зайди в ISTool реестр и перенеси тот сохраненный файл реестра и всё готово в самом низу твоего скрипта будет [Registry]
Насчет стрелки если я правельно понял то стрелка для распаковки архивов а насчет запроса диска то вот
DiskSpanning=true
DiskSliceSize=2000000000
SlicesPerDisk=2 »

Я так и зашёл в реестр, нашёл папку альфа протокол но там был только один реест по умолчанию и всё ! этот фальик нужно добавить и всё :?




© OSzone.net 2001-2012