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

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

 

Аватара для Gnom_aka_Lexander

Ветеран


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

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


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

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


Отправлено: 19:45, 09-10-2012 | #1101



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

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


Аватара для Johny777

Ветеран


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

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


Gnom_aka_Lexander,
он и убивается
твой код:
читать дальше »
Код: Выделить весь код
var
  SettingPanel   : TPanel;
  Flag           : boolean;
  Timer          : LongWord;

function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';

procedure Timer1;
begin
  if SettingPanel.Top < 0 then SettingPanel.Top := SettingPanel.Top + ScaleY(3);
  if SettingPanel.Top = 0 then KillTimer(WizardForm.Handle, Timer);
end;

procedure Timer2;
begin
  if SettingPanel.Top > -315 then SettingPanel.Top := SettingPanel.Top - ScaleY(3);
  if SettingPanel.Top = -315 then KillTimer(WizardForm.Handle, Timer);
end;


procedure HideShow(Sender: TObject);
begin
  KillTimer(WizardForm.Handle, Timer);
  case Flag of
  True :
    begin
      Timer := SetTimer(WizardForm.Handle, 1, 5 , CallbackAddr('Timer2'));
      TButton(Sender).Caption:='Show';
    end;
  False :
    begin
      Timer := SetTimer(WizardForm.Handle, 1, 5 , CallbackAddr('Timer1'));
      TButton(Sender).Caption:='Hide';
    end;
  end;
  Flag:= not Flag;
end;


procedure InitializeWizard();
 begin
  Flag:= False;

  SettingPanel := TPanel.Create(WizardForm);
  with SettingPanel do
  begin
    Parent := WizardForm;
    SetBounds(ScaleX(0),ScaleY(-315),ScaleX(497),ScaleY(313));
    ParentBackground := False;
  end;

  with TButton.Create(WizardForm) do
  begin
    OnClick:= @HideShow;
    SetBounds(ScaleX(40),ScaleY(327),ScaleX(75),ScaleY(25))
    Caption:='Show';
    Parent:= WizardForm;
  end;
end;


El Sanchez
читать дальше »
Код: Выделить весь код
var
    SettingPanel: TPanel;
    hBtn: TButton;
    //iStartTime: Integer; //debug
    iTimer, iRollInfo: Integer;

function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';
//function GetTickCount: DWORD; external 'GetTickCount@kernel32.dll stdcall'; //debug


procedure TimerProc(hwnd: HWND; uMsg: UINT; idEvent: UINT_PTR; dwTime: DWORD);
var
    iLen, iStep: Integer;
begin
    iLen := iRollInfo and $FFFF;
    iStep := (iRollInfo and $FF0000) shr $10;
    case iRollInfo shr $18 of
        $0: begin
                if SettingPanel.Left >= -iStep then
                begin
                    KillTimer(0, iTimer);
                    hBtn.Enabled := True;
                end;
                SettingPanel.Left := SettingPanel.Left + iStep;
                //WizardForm.Caption := 'time: ' + IntToStr(dwTime-iStartTime) + '; length: ' + IntToStr(SettingPanel.Left); //debug
            end;
        $1: begin
                if SettingPanel.Left <= -iLen + iStep then
                begin
                    KillTimer(0, iTimer);
                    hBtn.Enabled := True;
                end;
                SettingPanel.Left := SettingPanel.Left - iStep;
                //WizardForm.Caption := 'time: ' + IntToStr(dwTime-iStartTime) + '; length: ' + IntToStr(SettingPanel.Left); //debug
            end;
        $2: begin
                if SettingPanel.Top >= -iStep then
                begin
                    KillTimer(0, iTimer);
                    hBtn.Enabled := True;
                end;
                SettingPanel.Top := SettingPanel.Top + iStep;
                //WizardForm.Caption := 'time: ' + IntToStr(dwTime-iStartTime) + '; length: ' + IntToStr(SettingPanel.Top); //debug
            end;
        $3: begin
                if SettingPanel.Top <= -iLen + iStep then
                begin
                    KillTimer(0, iTimer);
                    hBtn.Enabled := True;
                end;
                SettingPanel.Top := SettingPanel.Top - iStep;
                //WizardForm.Caption := 'time: ' + IntToStr(dwTime-iStartTime) + '; length: ' + IntToStr(SettingPanel.Top); //debug
            end;
    end;
end;

procedure RollControl(Ctrl: TControl; dwTime, dwFlag: DWORD);
//  Ctrl    :   control
//  dwTime  :   rolling time, ms
//  dwFlag  :   roll type ($0 - left to right, $1 - right to left, $2 - top to bottom, $3 - bottom to top)
var
    iLen, iStep: Integer;
    iKoeff: Extended;
begin
    iLen := (dwFlag shr $1 xor $1)*Ctrl.Width + (dwFlag shr $1)*Ctrl.Height;
    repeat
        iStep := iStep + 1;
        iKoeff := (iStep * dwTime)/(iLen * 1000/64);
    until iKoeff >= 1;
    //
    if iRollInfo = 0 then iRollInfo := (dwFlag shl $18) or (iStep shl $10) or iLen else iRollInfo := iRollInfo xor $1000000;
    iTimer := SetTimer(0, 0, Trunc(iKoeff)*1000/64, CallbackAddr('TimerProc'));
end;

procedure HideShow(Sender: TObject);
begin
    //iStartTime := GetTickCount; //debug
    RollControl(SettingPanel, 1000, $2);
    TButton(Sender).Enabled := False;
end;

procedure InitializeWizard();
begin
    SettingPanel := TPanel.Create(WizardForm);
    with SettingPanel do
    begin
        Parent := WizardForm;
        SetBounds(ScaleX(0), ScaleY(-315), ScaleX(497), ScaleY(315));
        ParentBackground := False;
    end;

    hBtn := TButton.Create(WizardForm);
    with hBtn do
    begin
        OnClick := @HideShow;
        SetBounds(ScaleX(40), ScaleY(327), ScaleX(75), ScaleY(25));
        Caption := 'Show';
        Parent := WizardForm;
    end;
end;


утечка тем не менее имеет место
к тому же в коде который пилю можно двигать по 1-му пикселю c большой скоростью - явный плюс!
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:57, 09-10-2012 | #1102


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


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

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


Приветствую, этот вопрос вероятно обсуждался не один раз, но найти мне ответа не удалось... наверное.
Имеются компоненты:
a Flags: fixed
a\b
a\c

Как сделать так чтобы если не выбрать a\b то a\c становится недоступен
a\c при выборе a\b можно снять или отметить

Последний раз редактировалось JHeavy, 09-10-2012 в 20:55. Причина: Дополнение


Отправлено: 20:53, 09-10-2012 | #1103


Аватара для Mailchik

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


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

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


JHeavy,
читать дальше »
Код: Выделить весь код
[Setup]
AppName=Test
AppVerName=Test
DefaultDirname={pf}\Test

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: a; Description: a; Types: full; Flags: fixed checkablealone
Name: a\b; Description: a\b;
Name: a\c; Description: a\c;

[Code]
procedure TestClick(Sender: TObject);
 begin
  with WizardForm.ComponentsList do begin
   if Checked[1] then begin
    ItemEnabled[2]:= True;
    end else begin
    ItemEnabled[2]:= False;
    Checked[2]:= False;
   end;
  end;
end;

procedure InitializeWizard();
 begin
  with WizardForm.ComponentsList do begin
   OnClickCheck := @TestClick;
   TestClick(nil);
  end;
end;

Последний раз редактировалось Mailchik, 10-10-2012 в 00:14.

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

Отправлено: 21:27, 09-10-2012 | #1104


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


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

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


Mailchik, спасибо, то что нужно, только скажите как в этом примере сделать чтобы компонент a был всегда отмечен, и как добавлять компоненты (что куда дописывать если их много будет) т.е. если не трудно добавьте комментарии для "усвоения материала"

Просто хочу понять как это работает если будет разное количество компонентов

Последний раз редактировалось JHeavy, 09-10-2012 в 23:19. Причина: Дополнение


Отправлено: 23:10, 09-10-2012 | #1105


Аватара для Mailchik

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


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

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


Цитата JHeavy:
Ну отметить a "навсегда" значит не получится, просто - a программа, a\b и a\c - желаемые дополнения, без которых программа также ставится, решения нет?
читать дальше »
Код: Выделить весь код
[Setup]
AppName=Test
AppVerName=Test
DefaultDirname={pf}\Test

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: a; Description: a; Types: full; Flags: fixed checkablealone
Name: a\b; Description: a\b; 
Name: a\c; Description: a\c;

[Code]
procedure TestClick(Sender: TObject);
 begin
  with WizardForm.ComponentsList do begin
   if Checked[1] then begin   //если выбран 2-й компонент (отсчет начинается с 0)
    ItemEnabled[2]:= True;    //то 3-й компонент активен
    end else begin            //если нет
    ItemEnabled[2]:= False;   //то не активен 3-й компонент
    Checked[2]:= False;       //и убираем "отмеченность" 3-го компонента
   end;
  end;
end;

procedure InitializeWizard();
 begin
  with WizardForm.ComponentsList do begin
   OnClickCheck := @TestClick;
   TestClick(nil);
  end;
end;

Цитата JHeavy:
добавьте комментарии для "усвоения материала"
читать дальше »
Код: Выделить весь код
[Setup]
AppName=Test
AppVerName=Test
DefaultDirname={pf}\Test

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: a; Description: a; Types: full; Flags: fixed checkablealone
Name: a\b; Description: a\b;
Name: a\c; Description: a\c;

[Code]
procedure TestClick(Sender: TObject);
 begin
  with WizardForm.ComponentsList do begin
   if Checked[1] then begin   //если выбран 2-й компонент (отсчет начинается с 0)
    ItemEnabled[2]:= True;    //то 3-й компонент активен
    end else begin            //если нет
    ItemEnabled[2]:= False;   //то не активен 3-й компонент
    Checked[2]:= False;       //и убираем "отмеченность" 3-го компонента
   end;
  end;
end;

procedure InitializeWizard();
 begin
  with WizardForm.ComponentsList do begin
   OnClickCheck := @TestClick;
   TestClick(nil);
  end;
end;

Цитата JHeavy:
как добавлять компоненты (что куда дописывать если их много будет)
читать дальше »
Код: Выделить весь код
[Setup]
AppName=Test
AppVerName=Test
DefaultDirname={pf}\Test

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
//a первый по списку, но имеет значение 0 в компонент листе и остальные компоненты по порядку
Name: a; Description: a; Types: full; Flags: fixed checkablealone
Name: a\b; Description: a\b;
Name: a\c; Description: a\c;
Name: a\d; Description: a\d;
Name: a\e; Description: a\e;
Name: b; Description: b; Types: full; Flags: fixed
Name: b\b; Description: b\b;
Name: b\c; Description: b\c;

[Code]
procedure TestClick(Sender: TObject);
 begin
  with WizardForm.ComponentsList do begin
   if Checked[1] then begin   //если выбран 2-й компонент (a\b) (отсчет начинается с 0)
    ItemEnabled[2]:= True;    //то 3-й компонент (a\c) активен
    ItemEnabled[6]:= True;    //7-й компонент (b\b) активен
    end else begin            //если нет
    ItemEnabled[2]:= False;   //то не активен 3-й компонент (a\c)
    Checked[2]:= False;       //и убираем "отмеченность" 3-го компонента (a\c)
    ItemEnabled[6]:= False;   //не активен 7-й компонент (b\b)
   end;
  end;
end;

procedure InitializeWizard();
 begin
  with WizardForm.ComponentsList do begin
   OnClickCheck := @TestClick;
   TestClick(nil);
  end;
end;

Последний раз редактировалось Mailchik, 10-10-2012 в 00:14.

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

Отправлено: 23:33, 09-10-2012 | #1106


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


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

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


Ну отметить a "навсегда" значит не получится, просто - a программа, a\b и a\c - желаемые дополнения, без которых программа также ставится, решения нет?

Да и скажите будет ли работать пример в сворачивающихся списках компонентов (который расширенной версией делается), вроде проверил - никак
Вернее работает, но пропадают подсказки компонентов
Спасибо... Оказывается все работает... если правильно написать

Последний раз редактировалось JHeavy, 10-10-2012 в 00:02. Причина: Дополнение


Отправлено: 23:53, 09-10-2012 | #1107


Аватара для SatHan

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


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

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


привет.
как применить тему в Se7en?

Отправлено: 12:38, 10-10-2012 | #1108


Аватара для Gnom_aka_Lexander

Ветеран


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

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


Johny777, вот так они в дельфе.
Код: Выделить весь код
QS_KEY                  = $0001;
QS_MOUSEMOVE            = $0002;
QS_MOUSEBUTTON          = $0004;
QS_POSTMESSAGE          = $0008;
QS_TIMER                = $0010;
QS_PAINT                = $0020;
QS_SENDMESSAGE          = $0040;
QS_HOTKEY               = $0080;

QS_MOUSE = (QS_MOUSEMOVE or QS_MOUSEBUTTON);

QS_INPUT = (QS_MOUSE or QS_KEY);

QS_ALLEVENTS = (QS_INPUT or QS_POSTMESSAGE or QS_TIMER or QS_PAINT or QS_HOTKEY);

WAIT_TIMEOUT = $00000102;

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

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

Отправлено: 21:58, 10-10-2012 | #1109


Аватара для Johny777

Ветеран


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

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


Gnom_aka_Lexander, El Sanchez, поздравьте меня! Тк сделал свой вариант "выкатов и закатов". 2 дня убил на код: (зато никаких таймеров)
подробнее в коде:
читать дальше »
Код: Выделить весь код
[Setup]
AppName=The_Best_RollDemo_Ever
AppVerName=The_Best_RollDemo_Ever v 777
DefaultDirName={pf}\The_Best_RollDemo_Ever
DefaultGroupName=The_Best_RollDemo_Ever
OutputDir=.
Uninstallable=no

[code]
var
  PanelUp, PanelDown, PanelLeft, PanelRight: TPanel;
  RollInfo: DWORD;

function SleepEx(dwMilliseconds: DWORD; bAlertable: BOOL): DWORD; external 'SleepEx@Kernel32.dll stdcall';

//  сдвиг статичный в один пиксель (не менять)
//  плюсы такого сдвига:
//  1. плавность
//  2. точность выполнения (что будет если панель высотой 70 двигать по 3 пикселя до -70)
//  3. настройка скорости задержкой (диапазон от 0 до 100 = 101 скоростей)

///////// Roll(переменная_контрола(например панель или скроллбокс или мемо), задержка(максимум 100 т.к. дальше будет некрасиво))
procedure Roll(Ctrl:TControl; RollDelay: Integer);
begin
  case RollInfo of
    $1: repeat
          if SleepEx(RollDelay,True) = 0 then Ctrl.Top := Ctrl.Top + ScaleY(1);      /// сверху вниз и назад
          Application.ProcessMessages;
        until (RollInfo = $0) or (Ctrl.Top = 0)
    $0: repeat  /// снизу вверх
          if SleepEx(RollDelay,True) = 0 then Ctrl.Top := Ctrl.Top - ScaleY(1);
          Application.ProcessMessages;
        until (RollInfo = $1) or (Ctrl.Top = - Ctrl.Height)
        //////////////////////////////////////////////////////////////////
    $4: repeat
          if SleepEx(RollDelay,True) = 0 then Ctrl.Left := Ctrl.Left + ScaleX(1);    /// слева направо и назад
          Application.ProcessMessages;
        until (RollInfo = $3) or (Ctrl.Left = 0)
    $3: repeat
          if SleepEx(RollDelay,True) = 0 then Ctrl.Left := Ctrl.Left - ScaleX(1);
          Application.ProcessMessages;
        until (RollInfo = $4) or (Ctrl.Left = - Ctrl.Width);
        ///////////////////////////////////////////////////////////////////
    $6: repeat
          if SleepEx(RollDelay,True) = 0 then Ctrl.Left := Ctrl.Left - ScaleX(1);   /// справа налево  и назад
          Application.ProcessMessages;
        until (RollInfo = $5) or (Ctrl.Left = Ctrl.Parent.Width-Ctrl.Width)
    $5: repeat
          if SleepEx(RollDelay,True) = 0 then Ctrl.Left := Ctrl.Left + ScaleX(1);
          Application.ProcessMessages;
        until (RollInfo = $6) or (Ctrl.Left = Ctrl.Parent.Width);
        ////////////////////////////////////////////////////////////////////
    $8: repeat
          if SleepEx(RollDelay,True) = 0 then Ctrl.Top := Ctrl.Top - ScaleY(1);    /// снизу вверх и назад
          Application.ProcessMessages;
        until (RollInfo = $7) or (Ctrl.Top = Ctrl.Parent.Height-Ctrl.Height)
    $7: repeat
          if SleepEx(RollDelay,True) = 0 then Ctrl.Top := Ctrl.Top + ScaleY(1);
          Application.ProcessMessages;
        until (RollInfo = $8) or (Ctrl.Top = Ctrl.Parent.Top + Ctrl.Height);
  end;
end;




procedure UpDown(Sender: TObject);
begin
  case TButton(Sender).Caption of
   'Roll1':
    begin
      TButton(Sender).Caption:='Roll0';

      RollInfo := $1;
      Roll(PanelDown,0);  ////   A

//      RollInfo := $4;   //////// B
//      Roll(PanelLeft,0);

//      RollInfo := $6;
//      Roll(PanelRight,2); ///////// C

//      RollInfo := $8;
//      Roll(PanelUp,0);  //////////// d

    end;
    'Roll0':
    begin
      TButton(Sender).Caption:='Roll1';

      RollInfo := $0;
      Roll(PanelDown,10);  ////// A

//      RollInfo := $3;
//      Roll(PanelLeft,0);  ///////// B

//      RollInfo := $5;
//      Roll(PanelRight,0);  //////////// C

//      RollInfo := $7;
//      Roll(PanelUp,0);  //////////// d
    end;
  end;
end;





procedure InitializeWizard();
begin
  PanelUp := TPanel.Create(WizardForm);
  with PanelUp do
  begin
    Parent := WizardForm;
    SetBounds(ScaleX(0),Parent.Top + Parent.Height,ScaleX(497),ScaleY(200));
    ParentBackground := False;
    Color := clBlue;
  end;

  PanelDown := TPanel.Create(WizardForm);
  with PanelDown do
  begin
    Parent := WizardForm;
    SetBounds(ScaleX(0),ScaleY(-200),ScaleX(497),ScaleY(200));
    ParentBackground := False;
    Color := clYellow;
  end;

  PanelLeft := TPanel.Create(WizardForm);
  with PanelLeft do
  begin
    Parent := WizardForm;
    SetBounds(ScaleX(-200),ScaleY(0),ScaleX(200),ScaleY(314));
    ParentBackground := False;
    Color := clGreen;
  end;

  PanelRight := TPanel.Create(WizardForm);
  with PanelRight do
  begin
    Parent := WizardForm;
    SetBounds(Parent.Width + ScaleX(200),ScaleY(0),ScaleX(200),ScaleY(314));
    ParentBackground := False;
    Color := clRed;
  end;

  with TButton.Create(WizardForm) do
  begin
    OnClick:= @UpDown;
    SetBounds(ScaleX(40),ScaleY(327),ScaleX(75),ScaleY(25))
    Caption:='Roll1';
    Parent:= WizardForm;
  end;
end;


просьба оценить работу! (отписаться о впечатлениях)
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:02, 11-10-2012 | #1110



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




 
Переход