Имя пользователя:
Пароль:
 | Правила  

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

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

Аватара для 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] - Скачать;


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

Отправлено: 03:49, 21-05-2012

 

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

Ветеран


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

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


Цитата El Sanchez:
R.i.m.s.k.y., переменная типа Variant, результат функции CreateOleObject, короче, ссылка на объект. »
пример выше достаточен или надо что-то еще?

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


Отправлено: 13:01, 12-06-2012 | #251



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

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


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

Ветеран


Contributor


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

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


Цитата Неадекватный:
Т.е один из способов нужно вписать в код выше так? »
Цитата R.i.m.s.k.y.:
пример выше достаточен или надо что-то еще? »
Неадекватный, да, вставьте один из вариантов в ваш код.
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:20, 12-06-2012 | #252


Аватара для Dark_Delphin

Старожил


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

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


Всем привет!

Подскажите код, чтобы картинка (PNG) вылазила за пределы инсталлятора и не было фона?

Пример

-------
✘ _420.pp_✘


Отправлено: 16:16, 12-06-2012 | #253


Аватара для Johny777

Ветеран


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

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


Dark_Delphin,
думаю через ботву
могу предложить такой вариант на основе ...\Inno Setup 5\Scripts\WindowEffects\Transperent Color.iss

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

[Files]
Source: "S17Logo.bmp"; Flags: dontcopy solidbreak

[ Code]
const
  TransparentPercent = 80; // процент прозрачности
  TransparentColor = $506a5a; // прозрачный цвет
  WS_EX_LAYERED = $80000;
  WS_EX_TRANSPARENT = $20;
  LWA_COLORKEY = 1;
  LWA_ALPHA = 2;
  GWL_EXSTYLE = (-20);

function SetLayeredWindowAttributes(hwnd: hWnd; crKey: TColor; bAlpha: byte; dwFlags: DWORD): Boolean; external 'SetLayeredWindowAttributes@user32.dll stdcall';
function GetWindowLong(Wnd: HWnd; Index: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall';
function SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetWindowLongA@user32.dll stdcall';
//
type
  TANewStatic = record
    Static  : TNewStaticText;
  end;

var
  ANewStatic : array of TANewStatic;

function ReleaseCapture(): Longint; external 'ReleaseCapture@user32.dll stdcall';

procedure MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  ReleaseCapture;
  SendMessage(WizardForm.Handle,$0112,$F012,0)
end;

procedure AddStaticToArray(st:TNewStaticText);
var
  i:integer;
begin
  i:=GetArrayLength(ANewStatic);
  SetArrayLength(ANewStatic,i+1);
  ANewStatic[i].Static:=st;
  ANewStatic[i].Static.OnMouseDown:=@MouseDown;
end;

procedure StaticChange(c:TWinControl);
var
  i:integer;
begin
  for i:=0 to c.ControlCount-1 do
    if c.Controls[i] is TWinControl then begin
      if c.Controls[i] is TNewStaticText then AddStaticToArray(TNewStaticText(c.Controls[i]));
      if TWinControl(c.Controls[i]).ControlCount>0 then StaticChange(TWinControl(c.Controls[i]));
    end;
end;
//
procedure InitializeWizard();
begin
  with WizardForm do
  begin
    OuterNotebook.Hide;
    WizardForm.Width := ScaleX(470);
    WizardForm.Height := ScaleY(525);
    BorderStyle := bsNone;
    CancelButton.Left := ScaleX(200);
    CancelButton.Top := ScaleY(230);
  end;
  
  with TBitmapImage.Create(WizardForm) do
  begin
    Parent := WizardForm;
    Align := alClient;
    Left := ScaleX(0);
    Top := ScaleY(0);
    ExtractTemporaryFile('S17Logo.bmp');
    Bitmap.LoadFromFile(ExpandConstant('{tmp}\S17Logo.bmp'));
    OnMouseDown := @MouseDown;
  end;

  SetWindowLong(WizardForm.Handle, GWL_EXSTYLE, GetWindowLong(WizardForm.Handle, GWL_EXSTYLE) or WS_EX_LAYERED)
  SetLayeredWindowAttributes(WizardForm.Handle, TransparentColor, (255 * TransparentPercent) / 100, LWA_COLORKEY)
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  WizardForm.NextButton.Hide;
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  Confirm := False;
end;


наглядный пример в архиве
прозрачный цвет здесь
$5а6a50 (фотошоп)
$506a5a (инно)

Последний раз редактировалось Johny777, 26-03-2013 в 15:57.

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

Отправлено: 18:35, 12-06-2012 | #254


Аватара для Dark_Delphin

Старожил


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

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


Johny777, Спасибо. Щас буду пробовать)

-------
✘ _420.pp_✘


Отправлено: 20:40, 12-06-2012 | #255


Забанен


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

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


Цитата El Sanchez:
да, вставьте один из вариантов в ваш код. »
При первой инсталляции не работает не создаёт XML, если установить поверх ещё раз то XML создаётся. В чём может быть ошибка?
Код: Выделить весь код
[Setup]
AppName=Моё Программное Обеспечение
AppVersion=1.5
;AppVerName=Моё Программное Обеспечение 1.5
DefaultDirName={pf}\Моё Программное Обеспечение
DefaultGroupName=Моё Программное Обеспечение
OutputDir=.
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: "Russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Icons]
Name: "{group}\{cm:UninstallProgram,Моё Программное Обеспечение}"; Filename: "{uninstallexe}"

[CustomMessages]
Russian.Caption=Настройка профиля по умолчанию
Russian.Description=Настройте профиль в соответствии с вашим оператором
Russian.SettingsProfile=Настройка профиля
Russian.Operator=Оператор:
Russian.UserName=Имя пользователя:
Russian.Password=Пароль:
Russian.NumberDial=Номер набора:
Russian.APN=Точка доступа:

[*Code]
var
  ISCustomPage1: TWizardPage;
  NewGroupBox1: TNewGroupBox;
  NewStaticText1: TNewStaticText;
  NewEdit1: TNewEdit;
  NewStaticText2: TNewStaticText;
  NewEdit2: TNewEdit;
  NewStaticText3: TNewStaticText;
  NewEdit3: TNewEdit;
  NewStaticText4: TNewStaticText;
  NewEdit4: TNewEdit;
  NewStaticText5: TNewStaticText;
  NewEdit5: TNewEdit;

procedure RedesignWizardForm;
begin
  ISCustomPage1 := CreateCustomPage(wpSelectDir, CustomMessage('Caption'), CustomMessage('Description'));

  with ISCustomPage1.Surface do
  begin
    Name := 'ISCustomPage1';
  end;

  NewGroupBox1 := TNewGroupBox.Create(WizardForm);
  with NewGroupBox1 do
  begin
    Name := 'NewGroupBox1';
    Parent := ISCustomPage1.Surface;
    Left := ScaleX(16);
    Top := ScaleY(8);
    Width := ScaleX(377);
    Height := ScaleY(209);
    Caption := CustomMessage('SettingsProfile');
  end;

  NewStaticText1 := TNewStaticText.Create(WizardForm);
  with NewStaticText1 do
  begin
    Name := 'NewStaticText1';
    Parent := NewGroupBox1;
    Caption := CustomMessage('Operator');
    Left := ScaleX(32);
    Top := ScaleY(31);
    Width := ScaleX(100);
    Height := ScaleY(14);
  end;

  NewEdit1 := TNewEdit.Create(WizardForm);
  with NewEdit1 do
  begin
    Name := 'NewEdit1';
    Parent := NewGroupBox1;
    Left := ScaleX(136);
    Top := ScaleY(28);
    Width := ScaleX(121);
    Height := ScaleY(21);
    Text := '';
  end;

  NewStaticText2 := TNewStaticText.Create(WizardForm);
  with NewStaticText2 do
  begin
    Name := 'NewStaticText2';
    Parent := NewGroupBox1;
    Caption := CustomMessage('UserName');
    Left := ScaleX(32);
    Top := ScaleY(57);
    Width := ScaleX(100);
    Height := ScaleY(14);
  end;

  NewEdit2 := TNewEdit.Create(WizardForm);
  with NewEdit2 do
  begin
    Name := 'NewEdit2';
    Parent := NewGroupBox1;
    Left := ScaleX(136);
    Top := ScaleY(53);
    Width := ScaleX(121);
    Height := ScaleY(21);
    Text := '';
  end;

  NewStaticText3 := TNewStaticText.Create(WizardForm);
  with NewStaticText3 do
  begin
    Name := 'NewStaticText3';
    Parent := NewGroupBox1;
    Caption := CustomMessage('Password');
    Left := ScaleX(32);
    Top := ScaleY(80);
    Width := ScaleX(100);
    Height := ScaleY(14);
  end;

  NewEdit3 := TNewEdit.Create(WizardForm);
  with NewEdit3 do
  begin
    Name := 'NewEdit3';
    Parent := NewGroupBox1;
    Left := ScaleX(136);
    Top := ScaleY(77);
    Width := ScaleX(121);
    Height := ScaleY(21);
    Text := '';
  end;

  NewStaticText4 := TNewStaticText.Create(WizardForm);
  with NewStaticText4 do
  begin
    Name := 'NewStaticText4';
    Parent := NewGroupBox1;
    Caption := CustomMessage('NumberDial');
    Left := ScaleX(32);
    Top := ScaleY(103);
    Width := ScaleX(100);
    Height := ScaleY(14);
  end;

  NewEdit4 := TNewEdit.Create(WizardForm);
  with NewEdit4 do
  begin
    Name := 'NewEdit4';
    Parent := NewGroupBox1;
    Left := ScaleX(136);
    Top := ScaleY(100);
    Width := ScaleX(121);
    Height := ScaleY(21);
    Text := '';
  end;

  NewStaticText5 := TNewStaticText.Create(WizardForm);
  with NewStaticText5 do
  begin
    Name := 'NewStaticText5';
    Parent := NewGroupBox1;
    Caption := CustomMessage('APN');
    Left := ScaleX(32);
    Top := ScaleY(127);
    Width := ScaleX(100);
    Height := ScaleY(14);
  end;

  NewEdit5 := TNewEdit.Create(WizardForm);
  with NewEdit5 do
  begin
    Name := 'NewEdit5';
    Parent := NewGroupBox1;
    Left := ScaleX(136);
    Top := ScaleY(124);
    Width := ScaleX(121);
    Height := ScaleY(21);
    Text := '';
  end;

  NewStaticText1.TabOrder := 0;
  NewEdit1.TabOrder := 1;
  NewStaticText2.TabOrder := 2;
  NewEdit2.TabOrder := 3;
  NewStaticText3.TabOrder := 4;
  NewEdit3.TabOrder := 5;
  NewStaticText4.TabOrder := 6;
  NewEdit4.TabOrder := 7;
  NewStaticText5.TabOrder := 8;
  NewEdit5.TabOrder := 9;

  NewGroupBox1.TabOrder := 0;
end;

procedure CreateNetworkCfg;
begin
    SaveStringToFile(
        ExpandConstant('{app}\NetworkCfg.xml'),
        '<?xml version="1.0" encoding="UTF-8"?>'#13#10 +
        '<AllNetworkConfigs>'#13#10#9 +
        '<NetworkConfig isNDIS="0" canbeDelete="1" isPreferred="1">'#13#10#9#9 +
        '<ConfigFileName>' + NewEdit1.Text + '</ConfigFileName>'#13#10#9#9 +
        '<UserName>' + NewEdit2.Text + '</UserName>'#13#10#9#9 +
        '<Password>' + NewEdit3.Text + '</Password>'#13#10#9#9 +
        '<LoginNumber>' + NewEdit4.Text + '</LoginNumber>'#13#10#9#9 +
        '<AutoGetAPN>0</AutoGetAPN>'#13#10#9#9 +
        '<APN>' + NewEdit5.Text + '</APN>'#13#10#9#9 +
        '<AutoGetDNS>1</AutoGetDNS>'#13#10#9#9 +
        '<MainDNS>0.0.0.0</MainDNS>'#13#10#9#9 +
        '<StandbyDNS>0.0.0.0</StandbyDNS>'#13#10#9#9 +
        '<AutoGetPDP>1</AutoGetPDP>'#13#10#9#9 +
        '<PDPAddress>0.0.0.0</PDPAddress>'#13#10#9#9 +
        '<PDPType>IP</PDPType>'#13#10#9#9 +
        '<AuthType>PAP</AuthType>'#13#10#9#9 +
        '<AskUserAndPwd>0</AskUserAndPwd>'#13#10#9#9 +
        '<SaveUserAndPwd>0</SaveUserAndPwd>'#13#10#9 +
        '</NetworkConfig>'#13#10 +
        '</AllNetworkConfigs>'
        , False
    );
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
    Result := True;
    case CurPageID of
        ISCustomPage1.ID: CreateNetworkCfg;
    end;
end;

procedure InitializeWizard();
begin
  RedesignWizardForm;
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:28, 13-06-2012 | #256


Аватара для Johny777

Ветеран


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

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


Открыл для себя классное решение при использовании скина!
при закрытии окна на секунду появляется виндовсовские границы окна, что не есть красиво:


поэтому в процедуре деинициализации использую Sleep и Hide
код:

читать дальше »
Код: Выделить весь код
procedure DeinitializeSetup;
begin
  if Initialize then 
  begin
    WizardForm.Hide; /// или с формой Autorun.Hide;
    Sleep(200);  
    ShowWindow(WizardForm.Handle,0); 
    UnloadSkin();
  end;
end;

при сокрытии формы (Hide) вин-границы окна не появляется, а окно плавно исчезает
но если сразу после сокрытия выгружать библиотеку, то вин-границы всё же видно
поэтому у нас есть ещё и Sleep (у меня настройка на 200 миллисекунд)
в итоге библиотека выгружается так же некрасиво, но мы этого уже не видим !

Мелочь, но классная

два наглядных примера на основе Авторана в архиве http://sendfile.su/613062

Последний раз редактировалось Johny777, 13-06-2012 в 15:07.

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

Отправлено: 14:55, 13-06-2012 | #257


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

Ветеран


Contributor


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

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


Цитата Неадекватный:
При первой инсталляции не работает не создаёт XML, если установить поверх ещё раз то XML создаётся. В чём может быть ошибка? »
Неадекватный, пардон, я тестировал сохранение не в {app}. Конечно же, при первой установке папки {app} еще не существует, сохранять нужно позже, поэтому вместо блока функции NextButtonClick напишите:
Код: Выделить весь код
procedure CurStepChanged(CurStep: TSetupStep);
begin
  case CurStep of
    ssPostInstall: CreateNetworkCfg;
  end;
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:18, 13-06-2012 | #258


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


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

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


Здравствуйте!
Мне интересен вопрос более высокой скорости распаковки.. Что-то читал за Фриарк, но не совсем понял. Как же ускорить процесс распаковки? Возможно ли использовать какие-либо библиотеки для ускорения процесса распаковки? Или какими методами достичь этого? Прошу расписать в деталях! Заранее благодарю всех, кто поможет.

Отправлено: 18:49, 13-06-2012 | #259


Аватара для Ivan_009

Ветеран


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

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


91892823, Используй IsDone там все подробно расписано...
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:08, 13-06-2012 | #260



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты 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
Inno Setup tradeukraine Вебмастеру 3 13-06-2006 20:39




 
Переход