PDA

Показать полную графическую версию : Скрипты 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

murlakatamenka
18-04-2011, 15:07
my-94, используй расширенный компилятор для Inno, там много чего можно сделать с компонентами инсталлятора (поменять цвета, размеры, положение и т.д.)

LinkOFF
18-04-2011, 17:06
как сделать чтоб небыло вот этого(катинка была чтоб) http://i19.fastpic.ru/big/2011/0418/10/9ae431225bee44df1ee8321cc81ed210.jpg и приподнять надписи(Завершение мастера установки...)

murlakatamenka
18-04-2011, 19:10
LinkOFF, приподнять надписи - см. мой предыдущий пост, а вот RunList прозрачным не делается, но чтобы его убрать, можно в свойствах указать для Width и Height значения 0

R.i.m.s.k.y.
19-04-2011, 12:45
где можно почитать как работать с # define?
а нужно поправить имя выходного экзешника:

есть несколько переменных
# define www1 = True
# define www2 = False

нужно чтобы если какой-то www был True то к имени компилируемого файла добавлялось wwwНОМЕР
т.е. в данном случае получилось setup_www1.exe

nik1967
19-04-2011, 13:08
где можно почитать как работать с # define? »
Может быть здесь: Inno Setup Help\Inno Setup Preprocessor\Directives?

R.i.m.s.k.y.
19-04-2011, 13:34
Может быть здесь: Inno Setup Help\Inno Setup Preprocessor\Directives »
ага, видел, скупость этой части справки поражает.
все равно не догоняю как не_в_коде а в таких дефайнах склеить строчки и приплюсовать буквы.

Shegorat
19-04-2011, 18:12
R.i.m.s.k.y.
Наверно так, возможно можно и проще сделать, но я не знаю как по-другому
#define www1 False
#define www2 True
#define www3 False
#define www4 False

#if www1 == True
#define SetupName "www1"
#elif www2 == True
#define SetupName "www2"
#elif www3 == True
#define SetupName "www3"
#elif www4 == True
#define SetupName "www4"
#endif

[Setup]
AppName=MyApp
AppVername=MyApp
DefaultDirname={pf}\MyApp
OutputBaseFilename=setup_{#SetupName}

murlakatamenka
19-04-2011, 18:33
Shegorat, вы тот, о ком я думаю ? (FreeArc+InnoSetup support и т.д.)

nik1967
19-04-2011, 19:19
murlakatamenka,
Да, и что так удивляет?

R.i.m.s.k.y.
19-04-2011, 21:02
Наверно так, возможно можно и проще сделать, но я не знаю как по-другому »
Спасибо, но у меня так сделан экзешник на случай лайт и полной сборки, мне вломмм прописывать руками после компиляции какие компоненты идут внутри, вот и хотел автоматизировать.
Вышел из положения:

# define POT_in_rimpack = "POT_"
# define KMP_in_rimpack = ""
...
OutputBaseFilename=RimPack_{#POT_in_rimpack}{#KMP_in_rimpack}0.35.1
...
#if POT_in_rimpack == "POT_"
...
#endif
...
function POT_in_rim(): Boolean;
begin
if (ExpandConstant('{#POT_in_rimpack}') = 'POT_') then Result := True else Result := False;
end;
...

Sotonisto
20-04-2011, 14:44
Всем добрый день. Кто может выложить скрипт такого инсталлятора? Очень понравился :) Напоминает мне инсталл Nvidia :)
http://img862.imageshack.us/img862/2363/54254192.th.jpg (http://img862.imageshack.us/img862/2363/54254192.jpg) http://img97.imageshack.us/img97/286/73519306.th.jpg (http://img97.imageshack.us/img97/286/73519306.jpg) http://img815.imageshack.us/img815/7571/10366573.th.jpg (http://img815.imageshack.us/img815/7571/10366573.jpg)

Gnom_aka_Lexander
20-04-2011, 15:18
Попал в засаду - у секции Languages нет возможности проверки(Check). оставить родной переключатель языка, который перед установкой - не получится, - при отмене установки из этого окошка, вылезает ошибка, поскольку он пытается завершить процессы, которые не были еще начаты.
Вопрос - можно-ли языки установки переключать из кода?
Или завершить работу до InitializeSetup?

Все, справился В общем, если нужно завершить инсталл до начала InitializeSetup чтобы не выбивало ошибку :
procedure DeinitializeSetup();
begin
if InitializeSetup then
gdipShutdown
BASS_Stop
BASS_Free
end;

Lunch927
20-04-2011, 19:41
Sotonisto, Как бы тебе его никто не даст. И он меньше напоминает инсталл нвидии. Вот что напоминает нвидию: http://i20.fastpic.ru/big/2011/0420/98/bda6ab0eca44e94111283da046a4db98.png

Serega
20-04-2011, 20:45
Все, справился В общем, если нужно завершить инсталл до начала InitializeSetup чтобы не выбивало ошибку »
В корне не правильно, при закрытии инсталлятора вы принудительно вызываете функцию InitializeSetup, которая срабатывает при инициализации установки. Удалите из своего инсталлятора функцию InitializeSetup и при компилляции скрипта у вас будет ошибка на if InitializeSetup then.
При закрытии вы должны проверять, были ли инициализированы ваши доп. функции и если да, то только после этого выполнять их уничтожение.


var
BassInit, gdiInit: Boolean;

function InitializeSetup(): Boolean;
begin
BassInit := False;
gdiInit := False;
// здесь какой-то ваш код
end;

procedure InitializeWizard();
begin
// здесь производите инициализацию Bass, затем
// только после этого пишите:
BassInit := True;
// здесь производите инициализацию Gdi, затем
// только после этого пишите:
gdiInit := True;
end;

procedure DeinitializeSetup();
begin
if gdiInit then
gdipShutdown;
if BassInit then
begin
BASS_Stop;
BASS_Free;
end;
end;


Данный пример, применим только для вашего случая и никакого отношения не имеет к общи вариантам завершения инсталлятора.
Суть всего выше изложенного, перед уничтожением чего-либо, чтоб не возникало ошибок, нужно проверить, было ли это создано.

Sotonisto
21-04-2011, 10:52
Вот что напоминает нвидию: http://i20.fastpic.ru/big/2011/0420/...a046a4db98.png »
:o Поделись скриптом плз :)

R.i.m.s.k.y.
21-04-2011, 17:16
Есть вот такой код

var
kmp, gom, mpc, la, pot, pReg, aReg, kReg, gReg, mReg, lReg: Integer;

procedure CorCheck;
{ корректируем отмеченность радиобатонов }
var
i: Integer;
begin
for i := pReg to mReg do
if WizardForm.ComponentsList.ItemEnabled[i] then
begin
WizardForm.ComponentsList.ItemEnabled[aReg] := True;
WizardForm.ComponentsList.Checked[i] := True;
Break;
end;
end;


procedure CheckComponents;
var Correct: Boolean; xxx, ffdDesc, splittersDesc, AviSynthDesc : integer;
begin
Correct := True;
xxx := 0;
ffdDesc := WizardForm.ComponentsList.Items.IndexOf('{#ffdDesc}');
splittersDesc := WizardForm.ComponentsList.Items.IndexOf('{#splittersDesc}');
AviSynthDesc := WizardForm.ComponentsList.Items.IndexOf('{#AviSynthDesc}');
if (IsComponentSelected('pl\pot') and pot_in_rim) then begin
if ( (not ffdexist) and (not IsComponentSelected('ffd')) ) then begin
WizardForm.ComponentsList.Checked[ffdDesc]:=True;
WizardForm.ComponentsList.ItemEnabled[ffdDesc]:=False;
WizardForm.ComponentsList.Repaint;
end;
if ( (not haaliexists) and (not IsComponentSelected('splitters')) ) then begin
WizardForm.ComponentsList.Checked[splittersDesc]:=True;
WizardForm.ComponentsList.ItemEnabled[splittersDesc]:=False;
WizardForm.ComponentsList.Repaint;
end;
end
else begin
WizardForm.ComponentsList.ItemEnabled[splittersDesc]:=True;
if not IsComponentSelected('svp') then WizardForm.ComponentsList.ItemEnabled[ffdDesc]:=True;
WizardForm.ComponentsList.Repaint;
end; //pl/pot
if IsComponentSelected('svp') then begin
if ( (not ffdexist) and (not IsComponentSelected('ffd')) ) then begin
WizardForm.ComponentsList.Checked[ffdDesc]:=True;
WizardForm.ComponentsList.ItemEnabled[ffdDesc]:=False;
WizardForm.ComponentsList.Repaint;
end;
if ( (not avs) and (not IsComponentSelected('AviSynth')) ) then begin
WizardForm.ComponentsList.Checked[AviSynthDesc]:=True;
WizardForm.ComponentsList.ItemEnabled[AviSynthDesc]:=False;
WizardForm.ComponentsList.Repaint;
end;
end
else begin
WizardForm.ComponentsList.ItemEnabled[AviSynthDesc]:=True;
if ((not IsComponentSelected('pl\pot')) and pot_in_rim) then WizardForm.ComponentsList.ItemEnabled[ffdDesc]:=True;
WizardForm.ComponentsList.Repaint;
end; //svp
WizardForm.ComponentsList.Repaint;

//#if Full == True
{ узнаем порядковые номера наших компонентов... }
pot := WizardForm.ComponentsList.Items.IndexOf('{#potDesc}');
kmp := WizardForm.ComponentsList.Items.IndexOf('{#kmpDesc}');
gom := WizardForm.ComponentsList.Items.IndexOf('{#gomDesc}');
mpc := WizardForm.ComponentsList.Items.IndexOf('{#mpcDesc}');
la := WizardForm.ComponentsList.Items.IndexOf('{#laDesc}');
aReg := WizardForm.ComponentsList.Items.IndexOf('{#aDesc}');
if pot>=0 then begin pReg := WizardForm.ComponentsList.Items.IndexOf('{#pDesc}'); xxx := xxx + 1; end;
if kmp>=0 then begin kReg := WizardForm.ComponentsList.Items.IndexOf('{#kDesc}'); xxx := xxx + 1; end;
if gom>=0 then begin gReg := WizardForm.ComponentsList.Items.IndexOf('{#gDesc}'); xxx := xxx + 1; end;
if mpc>=0 then begin mReg := WizardForm.ComponentsList.Items.IndexOf('{#mDesc}'); xxx := xxx + 1; end;
if la>=0 then begin lReg := WizardForm.ComponentsList.Items.IndexOf('{#lDesc}'); xxx := xxx + 1; end;
{ сразу проверим, все ли интиресующие компоненты доступны... } //not WizardForm.ComponentsList.Checked[gom] and
// if (not WizardForm.ComponentsList.Checked[kmp] and not WizardForm.ComponentsList.Checked[mpc] and not WizardForm.ComponentsList.Checked[gom] and not WizardForm.ComponentsList.Checked[la] and not WizardForm.ComponentsList.Checked[pot]) then begin
//WizardForm.ComponentsList.Checked[kReg] := False; WizardForm.ComponentsList.ItemEnabled[kReg]:=False;
//WizardForm.ComponentsList.Checked[mReg] := False; WizardForm.ComponentsList.ItemEnabled[mReg]:=False;
//WizardForm.ComponentsList.Checked[gReg] := False; WizardForm.ComponentsList.ItemEnabled[gReg]:=False;
//WizardForm.ComponentsList.Checked[lReg] := False; WizardForm.ComponentsList.ItemEnabled[lReg]:=False;
if pot>=0 then begin if not WizardForm.ComponentsList.Checked[pot] then begin xxx := xxx - 1; end; end;
if kmp>=0 then begin if not WizardForm.ComponentsList.Checked[kmp] then begin xxx := xxx - 1; end; end;
if mpc>=0 then begin if not WizardForm.ComponentsList.Checked[mpc] then begin xxx := xxx - 1; end; end;
if gom>=0 then begin if not WizardForm.ComponentsList.Checked[gom] then begin xxx := xxx - 1; end; end;
if la>=0 then begin if not WizardForm.ComponentsList.Checked[la] then begin xxx := xxx - 1; end; end;
if xxx = 0 then begin
// MsgBox('xxx = ' + inttostr(xxx), mbInformation, MB_OK);
WizardForm.ComponentsList.Checked[aReg] := False; WizardForm.ComponentsList.ItemEnabled[aReg] := False;
end
// end;
{ в зависимости от того на кого кликнули, производим действия }
if pot>=0 then begin if WizardForm.ComponentsList.Checked[pot] then WizardForm.ComponentsList.ItemEnabled[pReg]:=True else WizardForm.ComponentsList.ItemEnabled[pReg]:=False; end;
if kmp>=0 then begin if WizardForm.ComponentsList.Checked[kmp] then WizardForm.ComponentsList.ItemEnabled[kReg]:=True else WizardForm.ComponentsList.ItemEnabled[kReg]:=False; end;
if mpc>=0 then begin if WizardForm.ComponentsList.Checked[mpc] then WizardForm.ComponentsList.ItemEnabled[mReg]:=True else WizardForm.ComponentsList.ItemEnabled[mReg]:=False; end;
if gom>=0 then begin if WizardForm.ComponentsList.Checked[gom] then WizardForm.ComponentsList.ItemEnabled[gReg]:=True else WizardForm.ComponentsList.ItemEnabled[gReg]:=False; end;
if la>=0 then begin if WizardForm.ComponentsList.Checked[la] then WizardForm.ComponentsList.ItemEnabled[lReg]:=True else WizardForm.ComponentsList.ItemEnabled[lReg]:=False; end;
case WizardForm.ComponentsList.ItemIndex of
kmp: ; gom: ; mpc: ; la: ; pot: ;
else Correct := False;
end;
if Correct then
CorCheck;
{ перерисуем лист компонентов }
// #endif
WizardForm.ComponentsList.Repaint;
end;


procedure ComponentOnClick(Sender: TObject);
begin
CheckComponents;
if WizardSelectedComponents(False) = '' then WizardForm.NextButton.Enabled:= False else WizardForm.NextButton.Enabled:= True;
WizardForm.ComponentsList.Repaint;
end;


procedure InitializeWizard();
WizardForm.ComponentsList.OnClick := @ComponentOnClick;


делает важную весчь
1. ставит галки на компоненты если компонент* нужен проге а в системе нету и засвечивает чтобы не сняли, если с компонента* снять выбор - нужные компоненты становятся для свободного выбора.
2. также делает доступным или недоступным пункт для регистрации файлов на плеер, если плеер не выбран пункт регистрации файлов на него просто засвечивается.
Вторая часть робит (ну еще бы, Серега делал ;) ), в вот первая сбоит - сразу при запуске {#AviSynthDesc} не засвечен но выбран, если щелкнуть по нему - он засвечивается, а вот {#ffdDesc} галка легко снимается и ставится, пока с четвертого щелчка не застветится.

Где я накосячил?

для svp нужен ffd и avisynth, для pot нужен ffd и splitters

Lunch927
21-04-2011, 17:45
Sotonisto, Конечно, за вами уже выехали...

AN9ROS
21-04-2011, 18:03
Извините за глупый вопрос как делать оформление на инсталятор*???

insombia
21-04-2011, 22:10
AN9ROS инсталятор (http://rghost.ru/5278188)


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

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

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

procedure DeinitializeSetup();
begin
UnloadSkin();
end;

R.i.m.s.k.y.
21-04-2011, 23:28
Есть вот такой код
делает важную весчь
1. ставит галки на компоненты если компонент* нужен проге а в системе нету и засвечивает чтобы не сняли, если с компонента* снять выбор - нужные компоненты становятся для свободного выбора.
2. также делает доступным или недоступным пункт для регистрации файлов на плеер, если плеер не выбран пункт регистрации файлов на него просто засвечивается.
Вторая часть робит (ну еще бы, Серега делал ), в вот первая сбоит - сразу при запуске {#AviSynthDesc} не засвечен но выбран, если щелкнуть по нему - он засвечивается, а вот {#ffdDesc} галка легко снимается и ставится, пока с четвертого щелчка не застветится.
Где я накосячил?
для svp нужен ffd и avisynth, для pot нужен ffd и splitters »
Разобрался, надо было условия более корректно ставить




© OSzone.net 2001-2012