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

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

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

Ветеран


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


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

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


Изменения
Автор: Serega
Дата: 13-08-2011
Вложения
Тип файла: 7z Inno Setup [все вопросы] часть 1.7z
(1.34 Mb, 900 просмотров)
Тип файла: 7z Inno Setup [все вопросы] часть 2.7z
(3.12 Mb, 798 просмотров)
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


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

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

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы.
    Последняя версия: 2.0.8 [12.11.2006] - Скачать;
    Примечание: Родной сайт http://isfd.kaju74.de/index.php?isfd более недоступен, поэтому здесь расположены сторонние ссылки.

  • 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.4 [13.03.2010] - Скачать;


Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:
Inno Setup [все вопросы] часть 1
Inno Setup [все вопросы] часть 2

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


Отправлено: 00:28, 04-11-2010

 

Аватара для Gnom_aka_Lexander

Ветеран


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

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


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

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

-------
Я люблю помогать. Но не путайте: "Помогите мне" и "Сделайте за меня" - это совершенно разные понятия.


Последний раз редактировалось Gnom_aka_Lexander, 20-04-2011 в 16:54.


Отправлено: 15:18, 20-04-2011 | #1401



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

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


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


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

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


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

Отправлено: 19:41, 20-04-2011 | #1402


Ветеран


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

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


Цитата Лександер:
Все, справился В общем, если нужно завершить инсталл до начала 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;

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

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

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

Отправлено: 20:45, 20-04-2011 | #1403


Аватара для Sotonisto

Пользователь


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

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


Цитата Lunch927:
Вот что напоминает нвидию: http://i20.fastpic.ru/big/2011/0420/...a046a4db98.png »
Поделись скриптом плз

-------
Большой шаг вперед, как правило, следствие хорошего пинка под зад.


Отправлено: 10:52, 21-04-2011 | #1404


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

Ветеран


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

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


Есть вот такой код
Код: Выделить весь код
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

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


Последний раз редактировалось R.i.m.s.k.y., 21-04-2011 в 17:22.


Отправлено: 17:16, 21-04-2011 | #1405


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


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

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


Sotonisto, Конечно, за вами уже выехали...

Отправлено: 17:45, 21-04-2011 | #1406


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


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

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


Извините за глупый вопрос как делать оформление на инсталятор*???

Отправлено: 18:03, 21-04-2011 | #1407


Ветеран


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

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


AN9ROS инсталятор


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;

Отправлено: 22:10, 21-04-2011 | #1408


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

Ветеран


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

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


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

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


Отправлено: 23:28, 21-04-2011 | #1409



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Утилиты - [addon] Inno Setup CrOsP Наборы обновлений для Windows XP/2003/Windows 7 33 11-05-2011 16:03
[архив] Скрипты Inno Setup. Помощь и советы [часть 2] Serega Автоматическая установка приложений 2651 08-11-2010 18:34
Inno Setup 5.3.6 OSZone Software Новости программного обеспечения 0 15-11-2009 17:30
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59
Inno Setup tradeukraine Вебмастеру 3 13-06-2006 20:39




 
Переход