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

Gnom_aka_Lexander
05-01-2011, 22:39
Vista-w, [Run]
Filename: {app}\install\keygen.exe; Flags: postinstall ; WorkingDir: {app}; StatusMsg: Активация;
Filename: "{app}\K6.exe"; WorkingDir: "{app}"; Flags: nowait postinstall
Так както.

Vista-w
05-01-2011, 22:44
Лександер,
Все равно появляются чексбоксы с надписями запустить, и черная обводка вокруг них.

Gnom_aka_Lexander
05-01-2011, 22:49
Vista-w, точно, блин. Секцию [Tasks] удали, а из секции [RUN] части строк с Tasks. Вот так:
[Run]
Filename: "{app}\install\DirectX\DXSETUP.exe"; Parameters: "/SILENT"; WorkingDir: "{app}\install\DirectX\"; StatusMsg: "Устанавливается DirectX";
Filename: {app}\install\keygen.exe; Description: Запустить Keygen; Flags: postinstall skipifsilent unchecked runascurrentuser waituntilidle; WorkingDir: {app}; StatusMsg: Активация;
Filename: "{app}\K6.exe"; WorkingDir: "{app}"; Flags: nowait postinstall skipifsilent

Vista-w
05-01-2011, 22:59
Лександер,
Все равно(
Надо чтоб потверждение активации, именно шло через [Tasks]
Но чтоб не было в конце установки потверждения о запуске. а зарускалась сразу

Gnom_aka_Lexander
05-01-2011, 23:02
Vista-w, Дык, секция таск - это чекбоксы на последней странице, либо удалить ее, либо чекбоксы будут. Скрипт на обменник кинь, завтра поколдую.

Vista-w
05-01-2011, 23:10
Лександер,
http://rghost.ru/3876790

vahe-91
05-01-2011, 23:55
возможно в Inno Setup добавить свои ключи командной строки ? Скажем в установщике который я хочу создать должен быть файл х.exe. Мне нужно, чтобы когда запускаешь установщик просто двойным кликом, запустился этот x.exe. А когда запускаешь установщик с ключом /z запустился x.exe c ключом /z. Это можно сделать разными и очень простыми методами, но мне нужно именно в Inno Setup !

Gnom_aka_Lexander
06-01-2011, 11:09
vahe-91, Теоретически через секцию [CОDE] можно попробовать подключить дополнительные ключи, фактически нужно просить кого-то, кто хорошо знает паскаль-дельфи, можно еще в справке поковырятся, в английской (русская довольно ущербная).

R.i.m.s.k.y.
06-01-2011, 12:11
возможно в Inno Setup добавить свои ключи командной строки ? Скажем в установщике который я хочу создать должен быть файл х.exe. Мне нужно, чтобы когда запускаешь установщик просто двойным кликом, запустился этот x.exe. А когда запускаешь установщик с ключом /z запустился x.exe c ключом /z. Это можно сделать разными и очень простыми методами, но мне нужно именно в Inno Setup ! »

[_Code]
var paramZ : boolean;

function InitializeSetup(): Boolean;
var i : integer; s, st : string;
begin
for i:=2 to ParamCount do begin
st := Lowercase(ParamStr(i)); StringChangeEx(st, '/', '', True); StringChangeEx(st, '\', '', True); StringChangeEx(st, '-', '', True);
case st of
Lowercase('z') : paramZ := true;
end;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var res : integer;
begin
if ( CurStep=ssDone) and (paramZ) ) then Exec(x.exe, ' /z ' ,ExpandConstant('{...}'),SW_HIDE,ewWaitUntilTerminated,res);
end;

Gnom_aka_Lexander
06-01-2011, 13:00
R.i.m.s.k.y., Только тут по другому чуток, параметр нужно задать снаружи, тоесть если инсталлятор запускается из командной строки, как инсталл шилд+ МСиАй - первый параметра для инстлшилда, 2-й для МСиАй, но это можно попробовать компонентами решить, в инно есть возможнось подключения и отключения компонентов из командной строки, тогда именами параметров назвать названия компонентов, типа - компонента1 - запуск с такимто ключем, компонента2 - запуск с такимто ключем, и т.п..
Мне такто тоже это интересно, буду рад увидеть решение :)

R.i.m.s.k.y.
06-01-2011, 13:57
Лександер,
Так это и есть снаружи, параметр z передаешь инсталлеру, InitializeSetup проверяет задан ли он (в виде \z, /z, -z), если есть такой переменной paramZ присваивается Тру
И вот тут у меня ошибочка, paramZ : boolean; должен объявляться в начале секции Code что быть доступным все функциям.
Потом в конце установки (процедура CurStepChanged) если параметр тру - выполняем чего там хотели.
можно попробовать компонентами решить »
Я не буду фрагментировать моск мифическими Param1, дам прям кусок из своего инсталлера, повырезав лишнее, так что если будет ругаться что не объявлены переменные или Энда не хватает - допишите сами.

[Components]
# define haaliaviDesc "Haali - воспроизводить avi"
Name: haaliavi; Description: {#haaliaviDesc}; Check: HaaliExists

[_Code]
var paramZ, silent, haaliavi : integer;

function InitializeSetup(): Boolean;
var i : integer; s, st : string;
begin
paramZ:= -1; silent:= -1; haaliavi := -1; // три состояния: -1 - не изменялось, 0 - нет, 1 - да
for i:=2 to ParamCount do begin
if ( (Lowercase(ParamStr(i)) = Lowercase('/silent')) or (Lowercase(ParamStr(i)) = Lowercase('/verysilent')) ) then begin
silent := 1;
break;
end;
end;
for i:=2 to ParamCount do begin
st := Lowercase(ParamStr(i)); StringChangeEx(st, '/', '', True); StringChangeEx(st, '\', '', True); StringChangeEx(st, '-', '', True);
case st of
Lowercase('z') : paramZ := 1;
Lowercase('haaliavi') : haaliavi := 1;
end;
end;
end;


procedure InitializeWizard();
if (silent = 1) then begin
if ( (haaliavi = 1) and haaliexists) then WizardForm.ComponentsList.Checked[WizardForm.ComponentsList.Items.IndexOf('{#haaliaviDesc}')]:=True;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var res : integer;
begin
if ( CurStep=ssDone) and (paramZ = 1) ) then Exec('x.exe', ' /z ' ,ExpandConstant('{...}'),SW_HIDE,ewWaitUntilTerminated,res);
end;

Gnom_aka_Lexander
06-01-2011, 14:31
R.i.m.s.k.y., Я неточно выразился, а что если для разных случаев нужно разные параметры? Для одного случая один ключ, для другог другой...

R.i.m.s.k.y.
06-01-2011, 14:49
Я неточно выразился, а что если для разных случаев нужно разные параметры? Для одного случая один ключ, для другог другой... »
поточнее чего хотим

Gnom_aka_Lexander
06-01-2011, 16:27
R.i.m.s.k.y., Смотри, комуто нужно ставить с ключем \z, комуто \r, комуто \a, комуто \s, и может еще полтора десятка, я не говорю о возможности их комбинации - можно это как-то реализовать? Или каждый ключ и комбинацию в коде прописывать?

R.i.m.s.k.y.
06-01-2011, 17:55
Или каждый ключ и комбинацию в коде прописывать? »
да, каждый поотдельности
инно понимает параметры только со слэшэм "/", т.е. если ему написать -silent или \silent он не поймет.
В моем примере выше собственные параметры можно писать вообще одной буквой z, но параметры инно надо писать как положено, /norestart к примеру.

vahe-91
06-01-2011, 19:03
R.i.m.s.k.y.,
брат, насколько знаю вместо [_code] в скрипте должен быть [code], а в конце вместо ; ТОЧКА. Если да, то во время компиляции пишет unknown identifier 'x'

R.i.m.s.k.y.
06-01-2011, 20:02
насколько знаю вместо [_code] »
Если написать без _ то форумный движок воспринимает его как тэг и каверкает, поэтому здесь принято добавлять _ перед словом Code.
а в конце вместо ; ТОЧКА »
секция Code закрывается end.
если есть ошибки - исправь код, брат, он не кусается.
то во время компиляции пишет unknown identifier 'x' »
там подразумевается что человек сам подставит путь к его запускному файлу x.exe для которого нужны параметры. Возьми в апострофы 'x.exe'.

vahe-91
06-01-2011, 20:15
R.i.m.s.k.y.,
спасибо, ты очень добр

nik1967
06-01-2011, 21:03
Здравствуйте, уважаемые форумчане! Подскажите, как можно организовать постоянное сканирование реестра и файлов, а не только в момент запуска инсталлятора? Для чего:
if RegValueExists({#ValueExists}) then
if RegQueryStringValue({#ValueExists}, GamePath) then
if FileExists({#FileExists}) then GameAlreadyInstall:=True else GameAlreadyInstall:=False;
нужно, что бы после удаления ветки реестра или файла менялось значение GameAlreadyInstall в режиме реального времени.
[hr]
С помощью операторов while и do пробовал зациклить, но не могу условия сообразить.
А для чего? Делаю авторан на Inno, если нет записи в реестре - установить игру, авторан сворачивается, после установки игры (и соответственно появления записи в реестре) авторан разворачивается и - запустить игру. В AutoPlay Media Studio всё это реализуется довольно просто, но мне надо в Inno :modesty: .

vahe-91
06-01-2011, 21:44
R.i.m.s.k.y.,
для примера скомпилировал это, ничего не получилось. Установщик даже не запускается. Что не правильно ?



[Setup]
AppId={{5B88473B-FA3C-4A80-8D78-C8960C9C3377}
AppName=X
AppVersion=1.0.0
AppPublisher=Ya
CreateAppDir=no
OutputBaseFilename=setup
Compression=none

[Files]
Source: "C:\Documents and Settings\Administrator\Desktop\x.exe";
DestDir: "{tmp}"; Flags: ignoreversion

[_Code]
var paramZ:boolean;
function InitializeSetup(): Boolean;
var i:integer; x,s, st:string;
begin for i:=2 to ParamCount do
begin st:=Lowercase(ParamStr(i));
StringChangeEx(st, '/', '', True);
StringChangeEx(st, '\', '', True); StringChangeEx(st, '-', '', True);
case st of Lowercase('z') : paramZ := true;
end;
end;
end;
procedure CurStepChanged(CurStep: TSetupStep);
var res : integer;
begin if (CurStep=ssDone) and (paramZ) then
Exec('{tmp}\x.exe', ' /z ' ,ExpandConstant('{...}'),SW_HIDE,ewWaitUntilTerminated,res);
end; end.




© OSzone.net 2001-2012