Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » [архив] Скрипты Inno Setup. Помощь и советы [часть 2]

Закрытая тема
Настройки темы
[архив] Скрипты Inno Setup. Помощь и советы [часть 2]

Ветеран


Сообщения: 1133
Благодарности: 581


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: jameszero
Дата: 08-11-2010
Описание: тема закрыта
Лимит страниц.
Тема закрыта.
Продолжение по ссылке Скрипты Inno Setup. Помощь и советы [часть 3]




Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
  • ISTool - неплохой редактор скриптов Inno Setup.
    Последняя версия: 5.3.0.1 [29.09.2009] - Скачать | зеркало;
    Предыдущая версия: 5.3.0 [07.04.2009] - Скачать (зеркало) | Русификатор (зеркало);

  • Inno Script Generator - ещё один редактор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать;

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы. Официальный сайт - недоступен.
    Последняя версия: 2.0.8 [12.11.2006] - Страница с зеркалами;

  • Inno Setup GameScript Generator - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;

  • ISSkin - Программа для создания и добавления в инсталлятор скинов. Инструкция.
    Последняя версия: 3.0.0.0 [19.01.2010] - Скачать;

  • InnoSetup Script Joiner - Программа для объединения нескольких скриптов InnoSetup в один;

  • Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
    Последняя версия: 0.1.3 [11.09.2009] - Скачать;


Ссылка на архив предыдущей темы (также можно скачать из вложения)

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.


Отправлено: 22:06, 23-08-2009

 

Аватара для R.i.m.s.k.y.

Ветеран


Сообщения: 1640
Благодарности: 536

Профиль | Отправить PM | Цитировать


Цитата South:
не очень правильно »
согласен, но это прожка для моего применения, так что годится. К тому же как я понял в параметрах командной строки инно при считывании имеется некое подобие курсора, если ему получается важен порядок расстановки параметров. Вопрос был не в том как прочитать параметры строки - как в вашем примере так и было изначально, просто выяснилось что важен порядок расстановки параметров, повторяю /haaliavi /verysilent - работает, /verysilent /haaliavi - не работает! Инно запускается, но требуемое действие по haaliavi не выполняется. Вот и хотел узнать - чего инно так дуркует?

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Отправлено: 13:18, 17-09-2010 | #2331



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 29
Благодарности: 13

Профиль | Отправить 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


Аватара для R.i.m.s.k.y.

Ветеран


Сообщения: 1640
Благодарности: 536

Профиль | Отправить PM | Цитировать


Цитата South:
вот так надо »
break - чтобы дальше по строке не шел не годится - если кучка параметров надо громоздить кучку циклов на каждый из них.
Ни у кого больше идей нет почему если в ком.строке /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
Благодарности: 13

Профиль | Отправить PM | Цитировать


1.
Цитата R.i.m.s.k.y.:
Ни у кого больше идей нет почему если в ком.строке /silent стоит первый после него параметры не воспринимаются? А если /silent передвинуть в конец ком.строки - все воспринимается?
. . .
Есть подозрение что это "хороший" инно 5.3.9 (неюникод) »
есть подозрение, что ты думать не хочешь
при обработке последнего параметра, если он не 'silent', то переменной silent (от которой зависит все остальное, как я понимаю) присвоится 0 - else silent:=0. это ты так пишешь. инно здесь не причем.
2. если у тебя гора параметров и использование всех парамтров зависит от того в тихом режиме или нет запущена установка, то нужно всего 2 цикла. первый поиск того самого silent (причем тот цикл, что написал я более правильный). во втором цикле можно благополучно использовать case и в нем определить остальные переменные

Отправлено: 17:31, 17-09-2010 | #2334


Аватара для R.i.m.s.k.y.

Ветеран


Сообщения: 1640
Благодарности: 536

Профиль | Отправить 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
Благодарности: 13

Профиль | Отправить 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;
когда цикл обрабатывает 4-ый парамет, то по этому же самому условию
Код: Выделить весь код
if ( (Lowercase('/silent') = Lowercase(ParamStr(i))) or (Lowercase('/verysilent') = Lowercase(ParamStr(i)))) then silent := 1 else silent := 0;
твоя переменная silent становится равной 0

что написал, то и получил
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:36, 17-09-2010 | #2336


Аватара для R.i.m.s.k.y.

Ветеран


Сообщения: 1640
Благодарности: 536

Профиль | Отправить PM | Цитировать


Цитата South:
ляг поспи и все пройдет. ты зациклился на какой-то хрени »
Действительно, СПАСИБИЩЕ! так всегда - самое сложное решается просто

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Отправлено: 20:00, 17-09-2010 | #2337


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1265
Благодарности: 1025

Профиль | Отправить 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
Благодарности: 13

Профиль | Отправить PM | Цитировать


El Sanchez, загвоздка была в другом, R.i.m.s.k.y. никак не мог понять где у него ошибка. сделал ошибку с самого начала, а потом слишком долго смотрел на свой код. такое бывает и ошибку найдешь либо на следующий день, либо тебя кто-то конкретно ткнет носом и до тебя наконец-то дойдет

по поводу твоего кода. да он рабочий, но
1.
Код: Выделить весь код
if LowerCase(S)=LowerCase(ParamStr(i)) then ...
сделает ровно тоже самое, что и твой код, но отработает быстрее .
2. ему я так понял нужно проверить наличие определенных ключей, которые он дальше будет обрабатывать. используя твою функцию уйдет ParamCount*ParamCount итераций, чтобы проверить их наличие. а если сделать
Код: Выделить весь код
silent:=False;
haaliavi:=False;
. . .
for i:=1 to ParamCount do
  case LowerCase(ParamStr(i)) of
    '/silent' or '/verysilent': silent:=True;
    'haaliavi': haaliavi:=True;
    . . . 
  end;
тогда потребуется всего ParamCount итераций. если поиск и инициализация переменных завист от того тихая установка или нет, то первым циклом ищем '/silent' и '/verysilent' ключи (не забываем в нем поставить break, чтобы не бегать лишний раз по циклу), второй делаем такой как в предыдущем случае, тогда потребуется максимум 2*ParamCount итераций, что в любом случае быстрее, чем предложенный тобой вариант
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:19, 18-09-2010 | #2339


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1265
Благодарности: 1025

Профиль | Отправить PM | Цитировать


htuos, тогда ладно. В плане оптимизации кода твой вариант хорош и принимается , ну а разницу в несколько миллисекунд во времени выполнения я не замечу

Отправлено: 13:17, 18-09-2010 | #2340



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » [архив] Скрипты Inno Setup. Помощь и советы [часть 2]

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты 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




 
Переход