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

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

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

Ветеран


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


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

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


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

 

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


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

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


R.i.m.s.k.y., огромное спасибо!!!

-------
Если вам понравился мой совет, то нажмите "Полезное сообщение" :)


Отправлено: 20:00, 22-12-2010 | #191



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

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


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


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

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


R.i.m.s.k.y., спасибо, всё работает)


У меня еще один вопрос. Как в область, которая выделена на изображении, добавить текст?


Вот код
читать дальше »


Цитата:
;-------CD-Key------------

[Messages]
ClickNext=Вы должны ввести серийный номер, чтобы продолжить, или «Отмена», чтобы выйти из программы установки.

; заносим данные в реестр, 1 вариант
[Registry]
Root: HKLM; SubKey: SOFTWARE\Activision\Call of Duty 4; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Activision\Call of Duty 4; ValueType: string; ValueName: codkey; ValueData: {code:edtText}; Flags: uninsclearvalue

[code]
var
edt:array [1..5] of TEdit;
txt: TNewStaticText;
i, e, t: integer;
NewPage: TWizardPage;
lbl: TLabel;
procedure CurPageChanged1(CurPageID: Integer);
begin
if CurPageID = NewPage.ID then
end;


function edtText(s: string): string; //этот вариант, при записи через секцию [Registry]
//function edtText: string; // а этот, если вносить запись через 2 вариант
//var //
// s: string; //
begin
{ получаем текст из edit'ов и присваем переменной s }
for i:= 1 to 5 do begin
s:= s + edt[i].Text;
end;
{ удаляем лишний знак тире в конце строки }
s:= Copy(s, 1, Length(s) - 1);
Result:= s;
end;

//procedure CurStepChanged(CurStep: TSetupStep);
//begin
// { занасим данные в реестр 2 вариант}
// If CurStep = ssDone then
// RegWriteStringValue(HKEY_CURRENT_USER, 'Software\My Program\Settings', 'Serial', edtText);
//end;

//procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
//begin
// { удаляем данные из реестра, 2 вариант
// Здесь надо быть очень внимательным, а то по неосторожности можно удалить весь раздел... }
// If CurUninstallStep = usDone then
// RegDeleteKeyIncludingSubkeys(HKEY_CURRENT_USER, 'Software\My Program');
//end;

procedure edtKeyPress(Sender: TObject; var Key: Char);
begin
{ здесь попытался реализовать, чтоб курсор автоматом перескакивал на следующий edit при вводе,
но есть косяк, если начать удалять через Backspace, то из-за SetFocus курсор снова перескакивает на уже очищенный edit }
for i:= 1 to 4 do begin

end; end;


procedure SerialPage;
begin
NewPage:= CreateCustomPage(wpWelcome, 'Ввод кюча (CD-key)', 'Ключ диска нужен для игры по интернету');

WizardForm.NextButton.Enabled:= False;
t:= 57;
e:= t;
// создаём Label
lbl:=TLabel.Create(NewPage);
with lbl do begin
Left:= 0;
Top:= 0;
Width:= 417;
Height:= 28;
AutoSize:= False;
WordWrap:= True;
Caption:= 'Введите код, отпечатанный на последней странице обложки Руководства пользователя или на упаковке диска';
Parent:= NewPage.Surface;
end;



// создаём 5 edit'ов
for i:= 1 to 5 do begin
edt[i]:= TEdit.Create(NewPage);
with edt[i] do begin
Parent:= NewPage.Surface;
Left:= 0 + (e*i);
Top:= 47;
Width:= 47;
Height:= 21;
MaxLength:= 4;
OnKeyPress:= @edtKeyPress;

end;
end;
end;



procedure InitializeWizard();
begin
SerialPage;
end;

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

Отправлено: 20:09, 22-12-2010 | #192


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

Ветеран


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

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


Цитата actavir:
R.i.m.s.k.y., огромное спасибо!!! »
Цитата aerh:
R.i.m.s.k.y., спасибо, всё работает) »
Давим внизу сообщения "Полезное сообщение"
Цитата aerh:
Как в область, которая выделена на изображении, добавить текст? »
В шапке Inno form Designer
В нем формы рисуются как в ворде (ну почти)

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

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

Отправлено: 20:18, 22-12-2010 | #193


Аватара для John1992on

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


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

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


Привет, я уже принципиально разобрался в Inno Setup, но не понимаю, как сделать(пробовал в ISTool) такое:

1) Программа установки должна спрашивать желаемый язык, но реализация данного действия осуществляется копированием одного из нескольких языковых файлов в определенную папку с установленной программой. Что для этого нужно сделать?

2) Возможно ли сделать установку 2 в 1: типа установщик установит 2 программы в разные места - например есть программа "пр1" и "пр2", при запуске инсталятора он отображает 2 строки с выбором пути установки:
1. Устновка ПР1; Обзор
2. Устновка ПР2; Обзор

Заранее спасибо, за ответы любого содержания, сори если повторился, т.е. искал но подобной инфы не нашел.

Отправлено: 23:38, 22-12-2010 | #194


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


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

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


Подскажите как сделать в инсталляторе "невозможность установки в определенный каталог" (в частности в program files - желательно с выводом сообщения или просто вывод сообщения о нежжелательности/невозможности установки в program files.

Отправлено: 08:44, 23-12-2010 | #195


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


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

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


и еще, как добавить несколько функций в скрипт

вот скрипт - при такой компиляции выдает ошибку на дублирование функиций " NextButtonClick", "CurPageID" ....
[code]

Код: Выделить весь код
var
  text: TLabel;

function NextButtonClick(CurPageID: Integer): Boolean;
var
  i, n: Integer;
  str: string;
begin
  Result:= True;
  if CurPageID = wpSelectDir then
    begin
      str:= WizardForm.DirEdit.Text;
      for i:= 1 to Length(str) do if str[i] = '\' then n:= n + 1;
      if (n = 1) and (Pos(ExpandConstant('{pf}\'), WizardForm.DirEdit.Text) > 0) then
        begin
          text.Caption:= 'Внимание, в "Program Files" устанавливать нельзя.';
          Result:= False;
        end
      else text.Caption:= '';
    end;
end;

procedure InitializeWizard();
begin
  text:= TLabel.Create(WizardForm);
  with text do
    begin
      SetBounds(WizardForm.DirEdit.Left,120,300,100);
      AutoSize:= True;
      Font.Style:= [fsBold];
      Font.Color:= clRed;
      Parent:= WizardForm.SelectDirPage;
    end;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
  Result := True;
  if (CurPageID = wpSelectComponents) and (IsComponentSelected('d') = False) 
  and (IsComponentSelected('d\a') = False) and (IsComponentSelected('d\b') = False) 
  and (IsComponentSelected('d\c') = False) and (IsComponentSelected('d\d') = False)
  and (IsComponentSelected('d\e') = False) and (IsComponentSelected('d\f') = False)
  and (IsComponentSelected('d\g') = False) and (IsComponentSelected('d\a') = False) then
  begin
    MsgBox('Не выбрано ни одиного протокола для установки!!!', mbInformation, MB_OK);
    Result := False;
  end;
end;
как разделить эти функции ? или сделать невозможность дублирования функций... будет еще ктстаи 3 код для добавления прозрачности Aero к инсталлятру (там тоже дублирование будет, я не знаю как их применять вместе

Последний раз редактировалось Duality, 23-12-2010 в 10:35.


Отправлено: 10:20, 23-12-2010 | #196


Аватара для ChVL

Старожил


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

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


Обычное добавление строки в hosts:
Код: Выделить весь код
procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep=ssPostInstall
then
begin
SaveStringToFile(ExpandConstant('{sys}')+'\drivers\etc\hosts', #13 + ' 127.0.0.1 www.site.com', True);
end;
end;
Как прописать удаление этой строки при деинсталляции программы?
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:02, 23-12-2010 | #197


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

Ветеран


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

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


Цитата ksunechkin:
скрипт - при такой компиляции выдает ошибку на дублирование функиций »
Ну а в чем ошибка? естественно не должно быть двух одноименных функций, ошибки тут нет.
Цитата ksunechkin:
как разделить эти функции ? или сделать невозможность дублирования функций »
Элементарно склеить вместе
Код: Выделить весь код
function NextButtonClick(CurPageID: Integer): Boolean;
var
  i, n: Integer;
  str: string;
begin
  Result:= True;
  if CurPageID = wpSelectDir then
    begin
      str:= WizardForm.DirEdit.Text;
      for i:= 1 to Length(str) do if str[i] = '\' then n:= n + 1;
      if (n = 1) and (Pos(ExpandConstant('{pf}\'), WizardForm.DirEdit.Text) > 0) then
        begin
          text.Caption:= 'Внимание, в "Program Files" устанавливать нельзя.';
          Result:= False;
        end
      else text.Caption:= '';
    end; //CurPageID = wpSelectDir 

  Result := True;
  if (CurPageID = wpSelectComponents) and (IsComponentSelected('d') = False) 
  and (IsComponentSelected('d\a') = False) and (IsComponentSelected('d\b') = False) 
  and (IsComponentSelected('d\c') = False) and (IsComponentSelected('d\d') = False)
  and (IsComponentSelected('d\e') = False) and (IsComponentSelected('d\f') = False)
  and (IsComponentSelected('d\g') = False) and (IsComponentSelected('d\a') = False) then
  begin
    MsgBox('Не выбрано ни одиного протокола для установки!!!', mbInformation, MB_OK);
    Result := False;
  end; //(CurPageID = wpSelectComponents) and (IsComponentSelected('d') = False)

end; //NextButtonClick

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


Отправлено: 11:26, 23-12-2010 | #198


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


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

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


Цитата R.i.m.s.k.y.:
Элементарно склеить вместе »
ну вот это я как раз и не зналд как сделать....вписал ваш склееный код, ошибка


[code]Compiling
Код: Выделить весь код
 section
---------------------
Compile Error!
Line: 140
Error: Column 11:
Unknown identifier 'text'

а по первому вопросу не подскажете?
Цитата:
Подскажите как сделать в инсталляторе "невозможность установки в определенный каталог" (в частности в program files - желательно с выводом сообщения или просто вывод сообщения о нежжелательности/невозможности установки в program files.

Отправлено: 11:30, 23-12-2010 | #199


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

Ветеран


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

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


Цитата ChVL:
Как прописать удаление этой строки при деинсталляции программы »
примерно так:
Код: Выделить весь код
[_code]
procedure RePlaceTextinFile(FilePath:string; find:string; replace:string);
var
  S: TArrayOfString;
  //str : string;
  i : Integer;
begin
  if not FileExists(FilePath) then begin MsgBox('Файл не найден ' + FilePath, mbError, mb_Ok); Exit;end; // если файла нет, выходим
  LoadStringsFromFile(FilePath, S); // загружаем файл
  for i:= 0 to GetArrayLength(S)-1 do begin
    if (Pos(AnsiUpperCase(find), AnsiUpperCase(S[i])) > 0) then begin
      StringChangeEx(S[i], find, replace, True);
    end;
  end;
  SaveStringsToFile(FilePath, S, False); // сохраняем файл
end;


procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep=usDone then RePlaceTextinFile(ExpandConstant('{sys}\drivers\etc\hosts'), '127.0.0.1 www.site.com', '');
end;
Цитата ksunechkin:
по первому вопросу не подскажете »
знал бы подсказал
Цитата ksunechkin:
ну вот это я как раз и не зналд как сделать....вписал ваш склееный код, ошибка »
а самому догадаться слабо что не хватает var text: TLabel;
я ведь только функцию NextButtonClick склеил, тупо скопировать-вставить.

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

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

Отправлено: 11:33, 23-12-2010 | #200



Компьютерный форум 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




 
Переход