Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 4]
by_gangster
10-03-2012, 11:43
Люди да помогите создать инсталятор с максимальным сжатием, плиииииззз :help: :help:
R.i.m.s.k.y.
10-03-2012, 11:47
by_gangster, парой страниц назад были настройки на максимальное сжатие
Gnom_aka_Lexander
10-03-2012, 11:49
R.i.m.s.k.y., могу порекомендовать использовать способ nick1967 создавать чекбокс и через шеллэкзек запускать.с максимальным сжатием »
здесь это не обсуждается.Внимание! Данная тема предназначена только для обсуждения написания скриптов ! »
Не вижу ни одного слова про обсуждение способов сжатия.
by_gangster
10-03-2012, 11:51
R.i.m.s.k.y., да чё я тока не делал, я весь форум перерыл, Compression=lzma почему он сжимает лучше чем lzma/ultra и т.д надо МАКСиМАлЬНО :help:
я ставил lzma2/ultra64 но инсталятор после этого стал ещё больше а если lzma то чуть-чуть поменьше становится
Возможные значения:
zip
zip/1 до zip/9
bzip
bzip/1 до bzip/9
lzma
lzma/fast
lzma/normal
lzma/max
lzma/ultra (рассмотрите требования к памяти ниже перед использованием)
lzma/ultra64 (рассмотрите требования к памяти ниже перед использованием)
lzma2
lzma2/fast
lzma2/normal
lzma2/max
lzma2/ultra (рассмотрите требования к памяти ниже перед использованием)
lzma2/ultra64 (рассмотрите требования к памяти ниже перед использованием)
none
R.i.m.s.k.y.
10-03-2012, 11:59
могу порекомендовать использовать способ nick1967 создавать чекбокс и через шеллэкзек запускать. »
а нельзя на шаге ssDone просто проверить какие чекбоксы были выбраны на FinishedPage?
Догадываюсь что можно, но я абсолютно не знаю названия всех этих внутренностей
repacksman, молодец что в твоем сайте много готовых скриптов, но какой смысл здесь выкладывать?
Gnom_aka_Lexander
10-03-2012, 12:17
можно. if WizardForm.RunList.Checked[0] then
R.i.m.s.k.y.
10-03-2012, 12:20
можно. if WizardForm.RunList.Checked[0] then »
а как этот НОЛЬ узнать? т.е. порядковый номер?
я вот наваял но ругается что неизвестный Items
if CurStep=ssDone then begin
#if Full == True
if NeedRestart_my() then MsgBox(ExpandConstant('{cm:code9}'), mbInformation, MB_OK);
#endif
web1 := WizardForm.FinishedPage.Items.IndexOf(ExpandConstant('{cm:runSVPTeam}'));
web2 := WizardForm.FinishedPage.Items.IndexOf(ExpandConstant('{cm:runsubscribe}'));
if (WizardForm.FinishedPage.Checked[web1]) then ShellExec('open', 'http://www.SVP-Team.com', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
if (WizardForm.FinishedPage.Checked[web2]) then begin
if IsRus then ShellExec('open', 'http://svp-team.com/wiki/Mailing_list/ru', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
else ShellExec('open', 'http://svp-team.com/wiki/Mailing_list', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;
end; // CurStep=ssDone
хотя c ComponentsList и TasksList это работает
Gnom_aka_Lexander
10-03-2012, 12:22
только нужно это вешать не на ssDone а в NextButtonClick:
function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result := True;
if CurPageID=wpFinished then
begin
if WizardForm.RunList.Checked[0] then
.............................................
Result := True;
end;
end; просто на ssDone итемы ранлиста еще не созданы, видимо.
R.i.m.s.k.y.
10-03-2012, 12:27
Лександер, блин, последний список называется RunList, а я влупил FinishedPage
Теперь работает
El Sanchez
10-03-2012, 13:19
El Sanchez, одна беда - шрифт остается во временной папке »
Лександер, мерси, поправил. Не удалялся, потому что форма, его использующая, еще существовала.
Причина, как объяснили, какая-то программа ловит это сообщение и не пересылает его дальше »
Попахивает грязным хуком. Антивирь как всегда спит при работе таких "обслуживающих утилиток"? :)
Gnom_aka_Lexander
10-03-2012, 13:41
Антивирь как всегда спит при работе таких "обслуживающих утилиток"? »
В том-то и дело, что ничего не говорит. Стоит лицензионный доктор веб на параноидальных настройках. Лично ничего такого не ставил, софт стараюсь с официальных сайтов качать. Но есть товарищь, у которого на чистой лицензионной семерке такая-же беда была. Что говорит о косяке мелких. видимо срабатывает комплекс железо+ос+драйвера.
by_gangster
10-03-2012, 13:44
Люди да помогите чайнику :sorry: исправить хоть и тупой но скрипт, нодо что бы он распаковывал arc архив, и всё что внём. Я сделал что бы он расспаковывал сам .arc архив но он не распаковывает всё что внём,помогите поправить :dont-know
Вот скриншот (http://pixs.ru/showimage/Screenshot_7578808_4236524.jpg )
[Setup]
AppName=Sigerous Mod для COP
AppVerName=Sigerous Mod v2.2
DefaultDirName=stalker
InfoBeforeFile=embedded\InfoBefore.rtf
WizardImageFile=embedded\WizardImage.bmp
WizardSmallImageFile=embedded\WizardSmallImage.bmp
[Languages]
;Name: rus; MessagesFile: compiler:Languages\Russian.isl
[Files]
Source: *.arc; DestDir: {app}; Flags: ignoreversion
Source: unarc.dll; DestDir: {tmp}; Flags: dontcopy
Source: InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
[Icons]
Name: {group}\Uninstall; IconFilename: {app}\unins000.exe; Filename: {app}\unins000.exe
[_Code]
const
PM_REMOVE = 1;
function PeekMessage(var lpMsg: TMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMsg): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: TMsg): Longint; external 'DispatchMessageA@user32.dll stdcall';
procedure AppProcessMessage;
var
Msg: TMsg;
begin
while PeekMessage(Msg, WizardForm.Handle, 0, 0, PM_REMOVE) do begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;
type
TFreeArcCallback = function (what: PAnsiChar; int1, int2: Integer; str: PAnsiChar): Integer;
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';
var
ProgressBar: TNewProgressBar;
ExtractFile: TNewStaticText;
Button1: TButton;
Cancel: Integer;
procedure InitializeWizard();
begin
ProgressBar := TNewProgressBar.Create(WizardForm);
ExtractFile:=TNewStaticText.Create(WizardForm);
with WizardForm.ProgressGauge do
begin
ProgressBar.Left := Left;
ProgressBar.Top := Top + ScaleX(55);
ProgressBar.Width := Width;
ProgressBar.Height := Height;
ProgressBar.Parent := WizardForm.InstallingPage;
ProgressBar.max := 1000;
ProgressBar.Position := 0;
ExtractFile.parent:=WizardForm.InstallingPage;
ExtractFile.autosize:=false;
ExtractFile.Width := Width;
ExtractFile.top:=Top + ScaleX(35);
ExtractFile.caption:='Распаковка архива FreeArc';
end;
end;
procedure Button1OnClick(Sender: TObject);
begin
Cancel := -1;
end;
function FreeArcCallback (what: PAnsiChar; int1, int2: Integer; str: PAnsiChar): Integer;
var percents: Integer;
begin
if string(what)='filename' then
//ExtractFile.Caption:=str
else if (string(what)='progress') and (int2>0) then begin
percents := (int1*1000) div int2;
ProgressBar.Position := percents;
ExtractFile.Caption:='Распаковано '+IntToStr(int1)+' из '+IntToStr(int2)+' мб ('+FloatToStr(percents/10)+'%)';
end;
AppProcessMessage;
Result := Cancel;
end;
procedure ExtractFreeArcArchive(arcname: String; destpath: String);
var callback: longword;
res: Integer;
begin
AppProcessMessage;
callback:=WrapFreeArcCallback(@FreeArcCallback,4); //FreeArcCallback has 4 arguments
Cancel := 0;
try
res := FreeArcExtract (callback, 'x', '-o+', '-dp'+destpath, '--', arcname, '', '', '', '', '');
if cancel<0 then
MsgBox('Installation cancelled', mbInformation, MB_OK);
if res<0 then
MsgBox('Decompression failed with error code '+IntToStr(res)+'!', mbError, MB_OK);
Button1.visible:=false;
except
MsgBox('Decompression failed!', mbError, MB_OK);
Button1.visible:=false;
end;
DeleteFile(arcname);
end;
procedure CurStepChanged(CurStep: TSetupStep);
var app: String;
begin
If CurStep=ssPostInstall then
begin
Button1:=TButton.create(WizardForm);
Button1.parent:=WizardForm;
Button1.width:=135;
Button1.caption:='Cancel installation';
Button1.left:=260;
Button1.top:=WizardForm.cancelbutton.top;
Button1.OnClick:=@Button1OnClick;
app := ExpandConstant('{app}');
ExtractFreeArcArchive(app+'\data.arc', app);
end;
end;
Johny777
10-03-2012, 14:11
R.i.m.s.k.y.,
вот как это реализовано Inno Setup GameScript Generator от South http://forum.csmania.ru/viewtopic.php?t=4688
procedure RunListClickCheck(Sender: TObject);
var
i:integer;
begin
if WizardForm.RunList.Checked[WizardForm.RunList.ItemIndex] then begin
for i:=0 to WizardForm.RunList.Items.Count-1 do
WizardForm.RunList.Checked[i]:=False;
WizardForm.RunList.Checked[WizardForm.RunList.ItemIndex]:=True;
end;
end;
procedure InitializeWizard;
begin
WizardForm.RunList.OnClickCheck:=@RunListClickCheck;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
if (CurPageID=wpFinished) or (CurPageID=wpInfoAfter) then
WizardForm.RunList.Checked[0]:=True;
end;
R.i.m.s.k.y.
10-03-2012, 14:38
Johny777, спасибо, но я уже сделал как выше привел пример
repacksman
10-03-2012, 15:36
alert30, Просто рекламма
alert30, Просто рекламма »
Ясно. ОК.
by_gangster
10-03-2012, 22:14
Archives = '{#ArcLocation}'; как сдесь указывать расположение архивов arc ???
Johny777
10-03-2012, 23:38
by_gangster,
ты прости, но это уже не в какие ворота
кажись я писал вот это
я специально тебе вынес настройку расположения архивов в начало скрипта, чтобы даже в код заглядывать не нужно было »
#define ArcLocation "{src}\*.arc" красного цвета определяет расположение архивов по отношению к инсталлятору »
а что в скрипте?
http://rghost.ru/36955035/image.png (http://rghost.ru/36955035.view)
будь немного внимательнее! :butcher:
valyok666
11-03-2012, 00:42
by_gangster, используй исдоне проще в обращении))
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.