|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » [архив] Скрипты Inno Setup. Помощь и советы [часть 2] |
|
[архив] Скрипты Inno Setup. Помощь и советы [часть 2]
|
Ветеран Сообщения: 1133 |
Лимит страниц.
Тема закрыта. Продолжение по ссылке Скрипты Inno Setup. Помощь и советы [часть 3] Внимание! Данная тема предназначена только для обсуждения написания скриптов ! Остальные вопросы, а также последние версии компилятора в теме Inno Setup. Прочие вопросы. Ссылка на архив предыдущей темы (также можно скачать из вложения) |
|
------- Отправлено: 22:06, 23-08-2009 |
Ветеран Сообщения: 1640
|
Профиль | Отправить PM | Цитировать Цитата South:
|
|
------- Отправлено: 13:18, 17-09-2010 | #2331 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать R.i.m.s.k.y., да он не дуркует, что написано, то и выполняется. я тоже проглядел
вот так надо silent := 0; for i:=0 to ParamCount do begin s:= ParamStr(i); MsgBox(IntToStr(i)+#10#13+s, mbInformation, MB_OK); if (Lowercase(ParamStr(i))='/silent') or (Lowercase(ParamStr(i))='/verysilent') then begin silent := 1 break; end; end; if silent=1 then for i:= 1 to ParamCount do if (Lowercase(ParamStr(i))='/haaliavi') and haaliexists then MsgBox('haaliexists', mbInformation, MB_OK);; |
Отправлено: 13:29, 17-09-2010 | #2332 |
Ветеран Сообщения: 1640
|
Профиль | Отправить PM | Цитировать Цитата South:
Ни у кого больше идей нет почему если в ком.строке /silent стоит первый после него параметры не воспринимаются? А если /silent передвинуть в конец ком.строки - все воспринимается? Забацал сейчас отдельный цикл на половину кучки параметров и проверил их - индейская хижина - все равно срабатывание параметров ком.строки зависит от положения /silent. What The FFFFUUUUU...! Есть подозрение что это "хороший" инно 5.3.9 (неюникод) |
|
------- Последний раз редактировалось R.i.m.s.k.y., 17-09-2010 в 16:09. Отправлено: 13:31, 17-09-2010 | #2333 |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать 1.
Цитата R.i.m.s.k.y.:
при обработке последнего параметра, если он не 'silent', то переменной silent (от которой зависит все остальное, как я понимаю) присвоится 0 - else silent:=0. это ты так пишешь. инно здесь не причем. 2. если у тебя гора параметров и использование всех парамтров зависит от того в тихом режиме или нет запущена установка, то нужно всего 2 цикла. первый поиск того самого silent (причем тот цикл, что написал я более правильный). во втором цикле можно благополучно использовать case и в нем определить остальные переменные |
|
Отправлено: 17:31, 17-09-2010 | #2334 |
Ветеран Сообщения: 1640
|
Профиль | Отправить PM | Цитировать Цитата South:
[Components] # define ffdresizeDesc "FFDShow - увеличивать картинку до размеров экрана" # define haaliaviDesc "Haali - воспроизводить avi" Name: ffd; Description: Настройка FFDShow; Flags: checkablealone; Check: ffdexist Name: ffd\resize; Description: {#ffdresizeDesc}; Flags: checkablealone dontinheritcheck Name: haaliavi; Description: {#haaliaviDesc}; Check: HaaliExists [_code] function InitializeSetup(): Boolean; var ErrorCode, err, i, j : integer; s, st : string; param0 : TArrayOfString; begin param0 := ['silent','verysilent','ffdresize','noffdresize','nohaaliavi','haaliavi']; //список допустимых параметров s := ''; for i:=2 to ParamCount do begin err := 0; for j:=0 to GetArrayLength(param0)-1 do begin //проверяем корректность параметров st := ParamStr(i); if ( Pos(Lowercase(param0[j]), Lowercase(st)) > 0 ) then break else err := err + 1; //MsgBox(Lowercase(param0[j]) + ' ' + Lowercase(st), mbInformation, MB_OK); end; if (err = GetArrayLength(param0)) then begin s := s + ParamStr(i) + ' '; end; if (Pos(Lowercase('haaliavi'), Lowercase(ParamStr(i))) > 0) then haaliavi := 1; if (Pos(Lowercase('nohaaliavi'), Lowercase(ParamStr(i))) > 0) then nohaaliavi := 1; if (Pos(Lowercase('ffdresize'), Lowercase(ParamStr(i))) > 0) then ffdresize := 1; if (Pos(Lowercase('noffdresize'), Lowercase(ParamStr(i))) > 0) then noffdresize := 1; if ( (Lowercase('/silent') = Lowercase(ParamStr(i))) or (Lowercase('/verysilent') = Lowercase(ParamStr(i)))) then silent := 1 else silent := 0; end; //ParamCount if (s <> '') then begin MsgBox('Недопустимые параметры командной строки: ' + #13#10 + s, mbInformation, mb_Ok); Result := False; end; //InitializeSetup procedure InitializeWizard(); ... if (silent = 1) then begin if ( (haaliavi = 1) and haaliexists) then WizardForm.ComponentsList.Checked[WizardForm.ComponentsList.Items.IndexOf('{#haaliaviDesc}')]:=True; if ( (nohaaliavi = 1) and haaliexists) then WizardForm.ComponentsList.Checked[WizardForm.ComponentsList.Items.IndexOf('{#haaliaviDesc}')]:=false; if ( (ffdresize = 1) and ffdexist) then WizardForm.ComponentsList.Checked[WizardForm.ComponentsList.Items.IndexOf('{#ffdresizeDesc}')]:=True; if ( (noffdresize = 1) and ffdexist) then WizardForm.ComponentsList.Checked[WizardForm.ComponentsList.Items.IndexOf('{#ffdresizeDesc}')]:=false; end; // silent = 1 end; //InitializeWizard end. [Registry] Components: haaliavi... Components: ffdresize... |
|
------- Отправлено: 19:06, 17-09-2010 | #2335 |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать R.i.m.s.k.y., ляг поспи и все пройдет. ты зациклился на какой-то хрени
еще раз повторяю - допустим у тебя 4 параметра 3-ий параметр=/silent 4-ый=/haaliavi. когда цикл обрабатывает 3-ий параметр, то переменная silent присваивается 1 вот по этому условию if ( (Lowercase('/silent') = Lowercase(ParamStr(i))) or (Lowercase('/verysilent') = Lowercase(ParamStr(i)))) then silent := 1 else silent := 0; if ( (Lowercase('/silent') = Lowercase(ParamStr(i))) or (Lowercase('/verysilent') = Lowercase(ParamStr(i)))) then silent := 1 else silent := 0; что написал, то и получил |
Отправлено: 19:36, 17-09-2010 | #2336 |
Ветеран Сообщения: 1640
|
Профиль | Отправить PM | Цитировать Цитата South:
|
|
------- Отправлено: 20:00, 17-09-2010 | #2337 |
Ветеран Сообщения: 1273
|
Профиль | Отправить PM | Цитировать South, R.i.m.s.k.y., так сойдет?
function CheckDefinedKey(S: String): Boolean; var i: Byte; begin Result := False; for i := 1 to ParamCount() do begin if (Pos(LowerCase(S), LowerCase(ParamStr(i))) > 0) And (Length(S) = Length(ParamStr(i))) Then Result := True; end; end; ... if WizardSilent and CheckDefinedKey('/haaliavi') then blablabla; |
Отправлено: 11:34, 18-09-2010 | #2338 |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать El Sanchez, загвоздка была в другом, R.i.m.s.k.y. никак не мог понять где у него ошибка. сделал ошибку с самого начала, а потом слишком долго смотрел на свой код.
![]() по поводу твоего кода. да он рабочий, но 1. сделает ровно тоже самое, что и твой код, но отработает быстрее ![]() 2. ему я так понял нужно проверить наличие определенных ключей, которые он дальше будет обрабатывать. используя твою функцию уйдет ParamCount*ParamCount итераций, чтобы проверить их наличие. а если сделать тогда потребуется всего ParamCount итераций. если поиск и инициализация переменных завист от того тихая установка или нет, то первым циклом ищем '/silent' и '/verysilent' ключи (не забываем в нем поставить break, чтобы не бегать лишний раз по циклу), второй делаем такой как в предыдущем случае, тогда потребуется максимум 2*ParamCount итераций, что в любом случае быстрее, чем предложенный тобой вариант |
Отправлено: 12:19, 18-09-2010 | #2339 |
Ветеран Сообщения: 1273
|
Профиль | Отправить PM | Цитировать htuos, тогда ладно. В плане оптимизации кода твой вариант хорош и принимается , ну а разницу в несколько миллисекунд во времени выполнения я не замечу
![]() |
Отправлено: 13:17, 18-09-2010 | #2340 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Скрипты Inno Setup. Помощь и советы [часть 3] | Serega | Автоматическая установка приложений | 3755 | 26-10-2011 17:58 | |
[архив] Inno Setup .:[все вопросы]:. | Mchik | Автоматическая установка приложений | 1329 | 23-08-2009 20:13 | |
[архив - Часть 2] AutoIt скрипты | Vadikan | AutoIt | 985 | 21-01-2008 09:58 | |
Скрипты Inno Setup Compiler | QAZAK | Автоматическая установка приложений | 7 | 15-01-2007 17:59 | |
[Архив - Часть 1.1] AutoIt скрипты | EgOrus | AutoIt | 335 | 04-02-2006 16:58 |
|