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

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

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

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

Ветеран


Contributor


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


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

Профиль | Отправить 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] - Скачать;

  • RegExporter - Фриварная утилита для экспорта реестра и конвертации файлов *.reg и *.ini в инсталляционные скрипты Inno Setup и NSIS.
    Последняя версия: 1.2.0 [23.09.2014] - Скачать;



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

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

Отправлено: 11:48, 10-03-2014

 

Аватара для Dodakaedr

Ветеран


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

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


Цитата Tixo:
только вот что странно, Dodakaedr, с твоим кодом запускается только черная рамка »
Действительно странно, но у меня все нормально работает.

-------
Inno Setup 5 Ultra Unicode


Отправлено: 19:33, 12-11-2014 | #1941



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

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


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

Ветеран


Contributor


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

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


Цитата diman_21Ru:
Какой самый простой способ добавление всплывчатой картинки и с затуханием »
diman_21Ru, сплэш для битмапов, в том числе и c premultiplied alpha.
читать дальше »

Код: Выделить весь код
[Setup]
AppName=test
AppVerName=test
DefaultDirName={tmp}
CreateAppDir=no
Uninstallable=no
CreateUninstallRegKey=no
BitmapResource=splash:compiler:WizModernImage.bmp

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[code]
#define A = (Defined UNICODE) ? "W" : "A"
const
    AC_SRC_OVER = $0;
    AC_SRC_ALPHA = $1;
    ULW_ALPHA = $2;
    SM_CXSCREEN = 0;
    SM_CYSCREEN = 1;
    WS_EX_LAYERED = $80000;
    GWL_EXSTYLE = (-20);
    WM_CLOSE = $10;

type
    BLENDFUNCTION = record
        BlendOp: Byte;
        BlendFlags: Byte;
        SourceConstantAlpha: Byte;
        AlphaFormat: Byte;
    end;

    TIMERPARAM = record     // user defined
        bmp: TBitmap;
        bf: BLENDFUNCTION;
        dwStart: DWORD;
        dwFadeIn: DWORD;
        dwNormal: DWORD;
        dwFadeOut: DWORD;
    end;

// Window Functions
function UpdateLayeredWindow(hwnd: HWND; hdcDst: THandle; pptDst, psize: TPoint; hdcSrc: THandle; pptSrc: TPoint; crKey: DWORD; pblend: BLENDFUNCTION; dwFlags: DWORD): BOOL; external 'UpdateLayeredWindow@user32.dll stdcall delayload';

// Configuration Reference
function GetSystemMetrics(nIndex: Integer): Integer; external 'GetSystemMetrics@user32.dll stdcall';

// Large Integer Functions
function MulDiv(nNumber, nNumerator, nDenominator: Integer): Integer; external 'MulDiv@kernel32.dll stdcall';

// Window Class Functions
function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLong{#A}@user32.dll stdcall';
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';

// Time Functions
function GetSystemTimeAdjustment(var lpTimeAdjustment, lpTimeIncrement, lpTimeAdjustmentDisabled: DWORD): BOOL; external 'GetSystemTimeAdjustment@kernel32.dll stdcall';
function GetTickCount: DWORD; external 'GetTickCount@kernel32.dll stdcall';

// Timer Functions
function SetTimer(hWnd: HWND; var nIDEvent: TIMERPARAM; uElapse: UINT; lpTimerFunc: Longint): UINT_PTR; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd: HWND; var uIDEvent: TIMERPARAM): BOOL; external 'KillTimer@user32.dll stdcall';


/////////////////////////////////////////////////////////////////////////////////////////
procedure SplashTimerProc(hwnd: HWND; uMsg: UINT; var wParam: TIMERPARAM; dwTime: DWORD);
var
    dwCurrentTime: DWORD;
    ptSize, ptSrc, ptDst: TPoint;
begin
    { get coords }
    ptDst.x := (GetSystemMetrics(SM_CXSCREEN) - wParam.bmp.Width) shr 1;
    ptDst.y := (GetSystemMetrics(SM_CYSCREEN) - wParam.bmp.Height) shr 1;
    ptSize.x := wParam.bmp.Width;
    ptSize.y := wParam.bmp.Height;

    { current time }
    dwCurrentTime := dwTime - wParam.dwStart;

    { kill timer }
    if dwCurrentTime > wParam.dwFadeIn + wParam.dwNormal + wParam.dwFadeOut then
    begin
        KillTimer(hwnd, wParam);
        SendMessage(hwnd, WM_CLOSE, 0, 0);
    end;

    { fade in }
    if dwCurrentTime < wParam.dwFadeIn then
    begin
        wParam.bf.SourceConstantAlpha := MulDiv($FF, dwCurrentTime, wParam.dwFadeIn + 1);
        UpdateLayeredWindow(hwnd, 0, ptDst, ptSize, wParam.bmp.Canvas.Handle, ptSrc, 0, wParam.bf, ULW_ALPHA);
    end;

    { normal }
    if (dwCurrentTime > wParam.dwFadeIn) and (dwCurrentTime < wParam.dwFadeIn + wParam.dwNormal) then
    begin
        wParam.bf.SourceConstantAlpha := $FF;
        UpdateLayeredWindow(hwnd, 0, ptDst, ptSize, wParam.bmp.Canvas.Handle, ptSrc, 0, wParam.bf, ULW_ALPHA);
    end;

    { fade out }
    if dwCurrentTime > wParam.dwFadeIn + wParam.dwNormal then
    begin
        wParam.bf.SourceConstantAlpha := $FF - MulDiv($FF, dwCurrentTime - wParam.dwFadeIn - wParam.dwNormal, wParam.dwFadeOut + 1);
        UpdateLayeredWindow(hwnd, 0, ptDst, ptSize, wParam.bmp.Canvas.Handle, ptSrc, 0, wParam.bf, ULW_ALPHA);
    end;
end;

/////////////////////////////////////////////////////
function GetBitmapBitCount(const bmp: TBitmap): WORD;
var
    MemStream: TMemoryStream;
    szBuffer: String;
begin
    Result := -1;
    MemStream := TMemoryStream.Create;
    try
        bmp.SaveToStream(MemStream);
        MemStream.Position := $1C; // biBitCount member of BITMAPINFOHEADER struct offset
        szBuffer := StringOfChar(#0, 1);
        if MemStream.Read(szBuffer, 1) = 1 then
            Result := Ord(szBuffer[1]);
    finally
        MemStream.Free;
    end;
end;

/////////////////////////////////////////////////////////////////
procedure ShowSplash(const dwFadeIn, dwNormal, dwFadeOut: DWORD);
// dwFadeIn..: fade in stage in ms
// dwNormal..: normal stage in ms
// dwFadeOut : fade out stage in ms
var
    lpTimeAdjustment, lpTimeIncrement, lpTimeAdjustmentDisabled: DWORD;
    tp: TIMERPARAM;
begin
    if WizardSilent then Exit;

    { load bitmap }
    tp.bmp := TBitmap.Create;
    TBitmap(tp.bmp).LoadFromResourceName(HInstance, '_IS_SPLASH');

    { get bitmap bit count }
    case GetBitmapBitCount(tp.bmp) of
        -1: begin
            tp.bmp.Free;
            Exit;
        end;
        32: tp.bf.AlphaFormat := AC_SRC_ALPHA;
    end;

    { create splash form }
    with TForm.Create(nil) do
    begin
        BorderStyle := bsNone;
        FormStyle := fsStayOnTop;
        Position := poScreenCenter;

        { set dimensions }
        Width := tp.bmp.Width;
        Height := tp.bmp.Height;

        { set layered exstyle }
        SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED);

        { get minimal timer interval }
        GetSystemTimeAdjustment(lpTimeAdjustment, lpTimeIncrement, lpTimeAdjustmentDisabled);

        { fill user defined struct }
        tp.bf.BlendOp := AC_SRC_OVER;
        tp.dwStart := GetTickCount;
        tp.dwFadeIn := dwFadeIn;
        tp.dwNormal := dwNormal;
        tp.dwFadeOut := dwFadeOut;

        { start timer }
        SetTimer(Handle, tp, lpTimeIncrement div 10000, CallbackAddr('SplashTimerProc'));

        { show form }
        ShowModal;

        { cleanup }
        tp.bmp.Free;
        Free;
    end;
end;

//////////////////////////////////
function InitializeSetup: Boolean;
begin
    ShowSplash(1000, 2000, 1000);
    Result := True;
end;


Цитата VoLT:
И так этот замечательный код (написанный на Delphi) позволяет вам вызвать ЛЮБУЮ функцию из вашего скрипта! »
VoLT, во-первых, тестовый скрипт ведет к AV, во-вторых, никакой это не callback.
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:41, 13-11-2014 | #1942


Аватара для ROMKA-1977

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


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

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


Подскажите возможно ли сделать кнопу закрытия окна инсталятора (верхний правый угол) не активной ?

Отправлено: 20:55, 13-11-2014 | #1943


Ветеран


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

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


Цитата ROMKA-1977:
Подскажите возможно ли сделать кнопу закрытия окна инсталятора (верхний правый угол) не активной ? »
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
OutputDir=...


[Code]
#define A = (Defined UNICODE) ? "W" : "A"


const
    GCL_STYLE = - 26;
    CS_NOCLOSE = $0200;


function SetClassLong( hWnd: HWND; nIndex: Integer; dwNewLong: Longint ): DWORD; external 'SetClassLong{#A}@user32.dll stdcall';
function GetClassLong( hWnd: HWND; nIndex: Integer ): DWORD; external 'GetClassLong{#A}@user32.dll stdcall';


procedure InitializeWizard();
begin
    SetClassLong( WizardForm.Handle, GCL_STYLE, ( GetClassLong( WizardForm.Handle, GCL_STYLE ) or CS_NOCLOSE ) );
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:26, 14-11-2014 | #1944


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


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

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


Здравствуйте,возможно-ли в данный код добавить функцию,чтобы автоматом не выбирались компоненты над которыми работает код.
Пробовал flags "dontinheritcheck" но его нельзя совмещать с "exclusive"
Код: Выделить весь код
[Types]
Name: viborochnaya; Description: Выборочная установка; Flags: iscustom
[Components]
Name: AB;Description: Группы A и B;Flags: exclusive
Name: AB\A; Description: Группа A
Name: AB\A\A1; Description: Компонент 1;Flags: exclusive
Name: AB\A\A2; Description: Компонент 2;Flags: exclusive
Name: AB\A\A3; Description: Компонент 3;Flags: exclusive
Name: AB\A\A4; Description: Компонент 4;Flags: exclusive
Name: AB\B; Description: Группа B
Name: AB\B\B1; Description: Компонент 1;Flags: exclusive
Name: AB\B\B2; Description: Компонент 2;Flags: exclusive
Name: AB\B\B3; Description: Компонент 2;Flags: exclusive
Name: AB\B\B4; Description: Компонент 4;Flags: exclusive

[_Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Check: Check1
Source: compiler:Examples\MyProg.chm; DestDir: {app}; Check: Check2

[_Code]
function Check1: Boolean;
begin
  Result:=WizardForm.ComponentsList.ItemEnabled[1] and WizardForm.ComponentsList.Checked[0]
  begin
  Result:=WizardForm.ComponentsList.ItemEnabled[2] and WizardForm.ComponentsList.Checked[0]
  end
end;

function Check2: Boolean;
begin
  Result:=WizardForm.ComponentsList.ItemEnabled[4] and WizardForm.ComponentsList.Checked[3]
  begin
  Result:=WizardForm.ComponentsList.ItemEnabled[5] and WizardForm.ComponentsList.Checked[3]
  end
end;

procedure OnClickCheck(Sender: TObject);
begin
  if WizardForm.ComponentsList.Checked[1] = True then
  begin
    WizardForm.ComponentsList.ItemEnabled[6]:=False
    WizardForm.ComponentsList.ItemEnabled[7]:=False
    WizardForm.ComponentsList.ItemEnabled[8]:=False
    WizardForm.ComponentsList.ItemEnabled[9]:=False
    WizardForm.ComponentsList.ItemEnabled[10]:=False
  end else
  begin
    WizardForm.ComponentsList.ItemEnabled[6]:=True
    WizardForm.ComponentsList.ItemEnabled[7]:=True
    WizardForm.ComponentsList.ItemEnabled[8]:=True
    WizardForm.ComponentsList.ItemEnabled[9]:=True
    WizardForm.ComponentsList.ItemEnabled[10]:=True
  end
  if WizardForm.ComponentsList.Checked[6] = True then
  begin
    WizardForm.ComponentsList.ItemEnabled[1]:=False
    WizardForm.ComponentsList.ItemEnabled[2]:=False
    WizardForm.ComponentsList.ItemEnabled[3]:=False
    WizardForm.ComponentsList.ItemEnabled[4]:=False
    WizardForm.ComponentsList.ItemEnabled[5]:=False
  end else
  begin
    WizardForm.ComponentsList.ItemEnabled[1]:=True
    WizardForm.ComponentsList.ItemEnabled[2]:=True
    WizardForm.ComponentsList.ItemEnabled[3]:=True
    WizardForm.ComponentsList.ItemEnabled[4]:=True
    WizardForm.ComponentsList.ItemEnabled[5]:=True
  end
end;

procedure InitializeWizard();
begin
  WizardForm.ComponentsList.Checked[1]:=True
  WizardForm.ComponentsList.Checked[6]:=True
  WizardForm.ComponentsList.OnClickCheck:=@OnClickCheck
end;

Отправлено: 14:30, 15-11-2014 | #1945


Аватара для Dodakaedr

Ветеран


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

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


Цитата saneksanek:
чтобы автоматом не выбирались компоненты над которыми работает код »
Что-то ничего не понял... Как это?

-------
Inno Setup 5 Ultra Unicode


Отправлено: 17:46, 15-11-2014 | #1946


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


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

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


Dodakaedr, Данный код блокирует другие компоненты при выборе того или иного компонента,в данном случае если выбрать группу А закроется группа Б и на оборот,на те компоненты которые подключены к коду выбираются автоматом.
Из-за этого выходит так что стоят галки в компонентах и А и Б а мне это не нужна так как все эти файлы не совместимы с друг-другом.

Последний раз редактировалось saneksanek, 15-11-2014 в 19:57.


Отправлено: 19:49, 15-11-2014 | #1947


Аватара для ispolin

Ветеран


Автор проектов


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

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


Забыл..что нужно написать, чтобы было не ниже Seven sp1
MinVersion: xxxxxx

-------


Отправлено: 19:53, 15-11-2014 | #1948


Аватара для Dodakaedr

Ветеран


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

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


Цитата saneksanek:
Из-за этого выходит так что стоят галки в компонентах и А и Б а мне это не нужна так как все эти файлы не совместимы с друг-другом. »
Может так сойдет?...
Скрытый текст
Код: Выделить весь код
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"

[Types]
Name: viborochnaya; Description: Выборочная установка; Flags: iscustom

[Components]
Name: AB;Description: Группы A и B;Flags: exclusive
Name: AB\A; Description: Группа A
Name: AB\A\A1; Description: Компонент 1;Flags: exclusive
Name: AB\A\A2; Description: Компонент 2;Flags: exclusive
Name: AB\A\A3; Description: Компонент 3;Flags: exclusive
Name: AB\A\A4; Description: Компонент 4;Flags: exclusive
Name: AB\B; Description: Группа B
Name: AB\B\B1; Description: Компонент 1;Flags: exclusive
Name: AB\B\B2; Description: Компонент 2;Flags: exclusive
Name: AB\B\B3; Description: Компонент 2;Flags: exclusive
Name: AB\B\B4; Description: Компонент 4;Flags: exclusive

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Check: Check1
Source: compiler:Examples\MyProg.chm; DestDir: {app}; Check: Check2

[Code]
function Check1: Boolean;
begin
  Result:=WizardForm.ComponentsList.ItemEnabled[1] and WizardForm.ComponentsList.Checked[0];
  begin
  Result:=WizardForm.ComponentsList.ItemEnabled[2] and WizardForm.ComponentsList.Checked[0];
  end;
end;

function Check2: Boolean;
begin
  Result:=WizardForm.ComponentsList.ItemEnabled[4] and WizardForm.ComponentsList.Checked[3];
  begin
  Result:=WizardForm.ComponentsList.ItemEnabled[5] and WizardForm.ComponentsList.Checked[3];
  end;
end;

procedure OnClickCheck(Sender: TObject);
begin
  if WizardForm.ComponentsList.Checked[1] = True then
  begin
    WizardForm.ComponentsList.ItemEnabled[6]:=False;
    WizardForm.ComponentsList.ItemEnabled[7]:=False;
    WizardForm.ComponentsList.ItemEnabled[8]:=False;
    WizardForm.ComponentsList.ItemEnabled[9]:=False;
    WizardForm.ComponentsList.ItemEnabled[10]:=False;
  end else
  begin
    WizardForm.ComponentsList.ItemEnabled[6]:=True;
    WizardForm.ComponentsList.ItemEnabled[7]:=True;
    WizardForm.ComponentsList.ItemEnabled[8]:=True;
    WizardForm.ComponentsList.ItemEnabled[9]:=True;
    WizardForm.ComponentsList.ItemEnabled[10]:=True;
  end;

  if WizardForm.ComponentsList.Checked[6] = True then
  begin
    WizardForm.ComponentsList.ItemEnabled[1]:=False;
    WizardForm.ComponentsList.ItemEnabled[2]:=False;
    WizardForm.ComponentsList.ItemEnabled[3]:=False;
    WizardForm.ComponentsList.ItemEnabled[4]:=False;
    WizardForm.ComponentsList.ItemEnabled[5]:=False;
  end else
  begin
    WizardForm.ComponentsList.ItemEnabled[1]:=True;
    WizardForm.ComponentsList.ItemEnabled[2]:=True;
    WizardForm.ComponentsList.ItemEnabled[3]:=True;
    WizardForm.ComponentsList.ItemEnabled[4]:=True;
    WizardForm.ComponentsList.ItemEnabled[5]:=True;
  end;
end;

procedure InitializeWizard();
begin
  WizardForm.ComponentsList.Checked[1]:=True;
  WizardForm.ComponentsList.ItemEnabled[6]:=False;
  WizardForm.ComponentsList.ItemEnabled[7]:=False;
  WizardForm.ComponentsList.ItemEnabled[8]:=False;
  WizardForm.ComponentsList.ItemEnabled[9]:=False;
  WizardForm.ComponentsList.ItemEnabled[10]:=False;
  WizardForm.ComponentsList.OnClickCheck:=@OnClickCheck;
end;

-------
Inno Setup 5 Ultra Unicode

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

Отправлено: 20:45, 15-11-2014 | #1949


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


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

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


Всем привет Подскажите пожалуйста команду, чтобы приложение автоматически установилось в папку "Мои документы". То есть я установила приложение с офсайта и оно у меня автоматически установилось по пути C:\Users\Ирина\Documents\TMClientProfile. А теперь мне нужно сделать установщик, который бы тоже автоматически устанавливал программу по тому же пути.

Ранее уже как то задавалась этим вопросом, но тогда мне нужно было, чтобы программа установилась в папку ProgramData. Оказалось, все очень просто:
Source: "C:\ProgramData\Firefly Studios\*"; DestDir: "{commonappdata}\Firefly Studios"; Flags: ignoreversion recursesubdirs createallsubdirs

В общем, может есть какой то код, чтоб приложение устанавливалось в папку "Мои документы" по умолчанию? Спасибо.

Отправлено: 01:10, 16-11-2014 | #1950



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 6] El Sanchez Автоматическая установка приложений 2494 10-03-2014 11:51
Скрипты 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




 
Переход