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

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

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

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

Ветеран


Contributor


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


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

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


Изменения
Автор: El Sanchez
Дата: 16-02-2015
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
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] - Скачать;

  • ISSJoiner - Программа для объединения нескольких скриптов InnoSetup в один.
    Последняя версия: 3.0 [23.07.2009]

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


Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:

Отправлено: 19:06, 28-03-2013

 

Аватара для Aquila

Ветеран


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

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


Mailchik, А этот чек ( Check: ) можно применить не только к [Icons]?

-------
На всех не угодишь!


Отправлено: 20:23, 21-05-2013 | #521



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

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


Ветеран


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

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


Aquila, аналогично к [Dirs], [Files], [Registry], [INI], [Run] и т.д.
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:55, 21-05-2013 | #522


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


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

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


Aquila,

читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Program
AppVersion=1.5
;AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.

[Components]
Name: ag; Description: Aquila; Check: AquilaComp

[Icons]
Name: {group}\{cm:UninstallProgram,My Program}; Filename: {uninstallexe}; Check: GroupIcon
Name: {commondesktop}\{cm:UninstallProgram,My Program}; Filename: {uninstallexe}; Check: DesktopIcon
Name: {commondesktop}\Aquila\{cm:UninstallProgram,My Program}; Filename: {uninstallexe}; Check: AquilaIcon


[Code]
function CheckParam(s: string): boolean;
var
 i: integer;
 begin
  for i := 0 to ParamCount do begin
   Result := ParamStr(i) = s;
   if Result then Break;
  end;
end;


function GroupIcon: boolean;
 begin
  Result := CheckParam('iGroup');
end;


function DesktopIcon: boolean;
 begin
  Result := CheckParam('iDesktop');
end;



function AquilaIcon: boolean;
 begin
  Result := CheckParam('iAquila');
end;



// Можно и к компонентам прикрутить
function AquilaComp: boolean;
 begin
  Result := CheckParam('iAquilaComponents');
end;


Как в исходном коде приведённый в посте от Mailchik
Код: Выделить весь код
setup.exe iAquila
Пример для компонентов
Код: Выделить весь код
setup.exe iAquilaComponents
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:56, 21-05-2013 | #523


Аватара для Aquila

Ветеран


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

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


Цитата Crazy Noise:
iAquilaComponents »
Красиво

-------
На всех не угодишь!


Отправлено: 21:23, 21-05-2013 | #524


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


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

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


Цитата saurn:
опять таки же, не проверял »
Благодарю! Проверил, работает.

Сейчас зациклился на MsgBox. Где-то что-то не правильно делаю, либо вообще не туда полез.
Т.к ключ должен быть в любом случае, то значит должна быть проверка на то введён ключ в инсталляторе или нет
т.е если в инсталляторе окошки пусты, либо не хватает буквы или цифры то при нажатии на далее выводил сообщение MsgBox('Вы должны ввести ключ.', mbError, MB_OK);, либо же кнопка далее была бы не активна до тех пор пока весь ключ не будет введён, вот что-то одно.

читать дальше »
Код: Выделить весь код
function NextButtonClick(CurPageID:integer): Boolean;
begin
  case CurPageID of
    SerialPage.ID:
    begin
      CreateDir(ExpandConstant('{userdocs}\GameEX'));
      SaveStringToFile(ExpandConstant('{userdocs}\GameEX\keysgame.ini'), EditsNumber, False);
      MsgBox('Вы должны ввести ключ.', mbError, MB_OK);
    end;
  end;
   Result := True;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  case PageID of
    SerialPage.ID: Result := FileExists(ExpandConstant('{userdocs}\GameEX\keysgame.ini'));
  end;
end;

Последний раз редактировалось Crazy Noise, 22-05-2013 в 04:33.

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

Отправлено: 04:20, 22-05-2013 | #525


Аватара для Mailchik

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


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

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


Crazy Noise,
читать дальше »
Код: Выделить весь код
function NextButtonClick(CurPageID:integer): Boolean;
var
 i: integer;
begin
  Result := True;
  case CurPageID of
    SerialPage.ID:
    begin
      CreateDir(ExpandConstant('{userdocs}\GameEX'));
      SaveStringToFile(ExpandConstant('{userdocs}\GameEX\keysgame.ini'), EditsNumber, False);
      for i := 1 to 4 do begin
       Result := Edits[i].GetTextLen = 4;
       if not Result then begin
        MsgBox('Вы должны ввести ключ.', mbError, MB_OK);
        Break;
       end;
      end;
    end;
  end;
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:00, 22-05-2013 | #526


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


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

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


Mailchik, Благодарю!
А как сделать, чтоб когда набираешь код, то автоматически переходило в следующее окошко, а не так чтоб мышью выбирать? Возможно так сделать?

-------
Login: Crazy Noise; Copyright ©2013, Crazy Noise.


Отправлено: 15:27, 22-05-2013 | #527


Аватара для Mailchik

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


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

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


Цитата Crazy Noise:
А как сделать, чтоб когда набираешь код, то автоматически переходило в следующее окошко, а не так чтоб мышью выбирать? Возможно так сделать? »
В двух вариантах:
Цитата Crazy Noise:
если в инсталляторе окошки пусты, либо не хватает буквы или цифры то при нажатии на далее выводил сообщение »
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[CustomMessages]
MESSAGES_1=Ввод серийного номера
MESSAGES_2=Серийный номер нужен для активации программного обеспечения.
MESSAGES_3=Для активации необходимо ввести серийный номер поставляемый в комплекте с программным обеспечением.

[code]
var
  SerialPage: TWizardPage;
  Edits: array [1..4] of TEdit;
  I, E: Integer;
  SerialPage_Label: TNewStaticText;
  sNumber: String;

procedure EditsChange(Sender: TObject);
var
 i: integer;
 begin
 for i := 1 to 4 do begin
  Edits[i].AutoSelect := False;
  if i < 4 then
   if Length(Edits[i].Text) = 4 then
    Edits[i+1].SetFocus;
  end;
end;

function EditsNumber(): string;
begin
  for I := 1 to 4 do
  begin
    sNumber :=  sNumber + Edits[i].Text + '-';
  end;
  sNumber := Copy(sNumber, 1, Length(sNumber) - 1);
  Result := sNumber;
end;

procedure InitializeWizard();
begin
  SerialPage := CreateCustomPage(wpSelectTasks, CustomMessage('MESSAGES_1'), CustomMessage('MESSAGES_2'));
  SerialPage_Label := TNewStaticText.Create(nil);
  with SerialPage_Label do
  begin
    Parent := SerialPage.Surface;
    SetBounds(ScaleX(0), ScaleY(0), ScaleX(417), ScaleY(28));
    WordWrap := True;
    Caption := CustomMessage('MESSAGES_3');
  end;

  E := ScaleX(73);

  for I := 1 to 4 do
  begin
    Edits[i]:= TEdit.Create(nil);
    with Edits[i] do
    begin
      Parent:= SerialPage.Surface;
      SetBounds(0 + (E*I), ScaleY(47), ScaleX(47), ScaleY(21));
      MaxLength:= 4;
      OnChange := @EditsChange;
    end;
  end;
end;

function NextButtonClick(CurPageID:integer): Boolean;
var
 i: integer;
begin
  Result := True;
  case CurPageID of
    SerialPage.ID:
    begin
      CreateDir(ExpandConstant('{userdocs}\GameEX'));
      SaveStringToFile(ExpandConstant('{userdocs}\GameEX\keysgame.ini'), EditsNumber, False);
      for i := 1 to 4 do begin
       Result := Edits[i].GetTextLen = 4;
       if not Result then begin
        MsgBox('Вы должны ввести ключ.', mbError, MB_OK);
        Break;
       end;
      end;
    end;
  end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  case PageID of
    SerialPage.ID: Result := FileExists(ExpandConstant('{userdocs}\GameEX\keysgame.ini'));
  end;
end;

-------------------------------------------------------------------------------------
Цитата Crazy Noise:
либо же кнопка далее была бы не активна до тех пор пока весь ключ не будет введён »
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[CustomMessages]
MESSAGES_1=Ввод серийного номера
MESSAGES_2=Серийный номер нужен для активации программного обеспечения.
MESSAGES_3=Для активации необходимо ввести серийный номер поставляемый в комплекте с программным обеспечением.

[code]
var
  SerialPage: TWizardPage;
  Edits: array [1..4] of TEdit;
  I, E: Integer;
  SerialPage_Label: TNewStaticText;
  sNumber: String;

procedure EditsChange(Sender: TObject);
var
 i, eLength: integer;
 begin
 eLength := 0;
 for i := 1 to 4 do begin
  Edits[i].AutoSelect := False;
  if i < 4 then
   if Length(Edits[i].Text) = 4 then
    Edits[i+1].SetFocus;
  eLength := eLength + Length(Edits[i].Text);
  end;
 WizardForm.NextButton.Enabled := eLength = 4 * 4;
end;

function EditsNumber(): string;
begin
  for I := 1 to 4 do
  begin
    sNumber :=  sNumber + Edits[i].Text + '-';
  end;
  sNumber := Copy(sNumber, 1, Length(sNumber) - 1);
  Result := sNumber;
end;

procedure InitializeWizard();
begin
  SerialPage := CreateCustomPage(wpSelectTasks, CustomMessage('MESSAGES_1'), CustomMessage('MESSAGES_2'));
  SerialPage_Label := TNewStaticText.Create(nil);
  with SerialPage_Label do
  begin
    Parent := SerialPage.Surface;
    SetBounds(ScaleX(0), ScaleY(0), ScaleX(417), ScaleY(28));
    WordWrap := True;
    Caption := CustomMessage('MESSAGES_3');
  end;

  E := ScaleX(73);

  for I := 1 to 4 do
  begin
    Edits[i]:= TEdit.Create(nil);
    with Edits[i] do
    begin
      Parent:= SerialPage.Surface;
      SetBounds(0 + (E*I), ScaleY(47), ScaleX(47), ScaleY(21));
      MaxLength:= 4;
      OnChange := @EditsChange;
    end;
  end;
end;

function NextButtonClick(CurPageID:integer): Boolean;
var
 i: integer;
begin
  Result := True;
  case CurPageID of
    SerialPage.ID:
    begin
      CreateDir(ExpandConstant('{userdocs}\GameEX'));
      SaveStringToFile(ExpandConstant('{userdocs}\GameEX\keysgame.ini'), EditsNumber, False);
    end;
  end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  case PageID of
    SerialPage.ID: Result := FileExists(ExpandConstant('{userdocs}\GameEX\keysgame.ini'));
  end;
end;

procedure CurPageChanged(CurPageID: Integer);
 begin
 if CurPageID = SerialPage.ID then
  EditsChange(nil);
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:08, 22-05-2013 | #528


Аватара для habib2302

Ветеран


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

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


как добавить чекбокс на создание резервной копии файлов?

-------
Помог? От "Полезное сообщение" не откажусь!!!


Отправлено: 10:16, 24-05-2013 | #529


Ветеран


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

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


Цитата habib2302:
как добавить чекбокс на создание резервной копии файлов? »
Например, так
Код: Выделить весь код
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirName={pf}\MyApp
OutputDir=...
Compression=none

[Files]
Source: C:\Windows\Fonts\*; DestDir: {app}; BeforeInstall: CreateBackup(); Flags: recursesubdirs overwritereadonly createallsubdirs ignoreversion;

[Code]
#ifdef UNICODE
 type
  PChar = PAnsiChar;
#endif

function MoveFile(const TargetFile, BackupFile: PChar):Integer; external 'MoveFileA@kernel32.dll stdcall';

var
  CreateBackup_On_Off: TNewCheckBox;

function CheckedBoxes(const iParams: Integer): Boolean;
begin
  case iParams of
    1: Result := CreateBackup_On_Off.Checked;
  end;
end;

procedure CreateBackup();
var
  FinalDir, TargetFile, BackupFile, TargetPath, ShortPath: String;
begin
  if CheckedBoxes(1) then
  begin
    TargetPath:= ExpandConstant('{app}');
    TargetFile:= ExpandConstant(CurrentFileName);
    FinalDir := AddBackslash(ExpandConstant('{app}\Original.old')) + GetDateTimeString('YYYY/MM/DD', '-', '-');
    ShortPath:= TargetFile;
    StringChangeEx(ShortPath, TargetPath, '', True);
    BackupFile:= FinalDir + ShortPath;
    ForceDirectories(ExtractFilePath(BackupFile));
    MoveFile(PChar(TargetFile), PChar(BackupFile));
  end;
end;

procedure InitializeWizard();
begin
  CreateBackup_On_Off := TNewCheckBox.Create(nil);
  with CreateBackup_On_Off do
  begin
    Parent := WizardForm.SelectDirPage;
    SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + 30, WizardForm.DirEdit.Width, WizardForm.DirEdit.Height);
    Caption := 'Сохранить резервную копию перезаписываемых файлов';
  end;
end;

Последний раз редактировалось saurn, 24-05-2013 в 11:20.

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

Отправлено: 10:48, 24-05-2013 | #530



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 5] El Sanchez Автоматическая установка приложений 1999 28-03-2013 19:09
Скрипты Inno Setup. Помощь и советы [часть 4] El Sanchez Автоматическая установка приложений 2099 22-05-2012 23:16
Скрипты Inno Setup. Помощь и советы [часть 3] Serega Автоматическая установка приложений 3755 26-10-2011 17:58
[архив] Скрипты Inno Setup. Помощь и советы [часть 2] Serega Автоматическая установка приложений 2651 08-11-2010 18:34
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59




 
Переход