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

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

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

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


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

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

 

Аватара для habib2302

Ветеран


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

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


Gnom_aka_Lexander, я так и думал!

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


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



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

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


Ветеран


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

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


Johny777 а как в твоем примере растянуть картинку на весь инсталл? как фоновой так и маленькой

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


Аватара для habib2302

Ветеран


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

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


люди.подскажите как убрать combo box в страници компонентов?

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


Отправлено: 23:31, 02-04-2013 | #63


Старожил


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

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


habib2302 WizardForm.TypesCombo.hide;
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:36, 03-04-2013 | #64


Аватара для habib2302

Ветеран


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

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


помогите мне объеденить этот скрипт с моим

читать дальше »
Код: Выделить весь код
#include "botva2.iss"
[Setup]
AppName=DrawImageExample by South.Tver
AppVerName=DrawImageExample by South.Tver
DefaultDirName={pf}\ImageExample
OutputBaseFilename=setup
RawDataResource=Botva:botva2.dll|bPic:bPic.png|LiPic:LiPic.png|aPic:aPic.png

[........Code]
const
    AXEL_YELLOW = $48c1ca;
    RT_RCDATA = 10;


function GetFromRes(const ResName, SaveFileName: String): Boolean;
var
    lResStream: TResourceStream;
begin
    lResStream := TResourceStream.Create(HInstance, ResName, RT_RCDATA);
    try
        lResStream.SaveToFile(ExpandConstant('{tmp}\') + SaveFileName);
    finally
        lResStream.Free;
        Result := FileExists(ExpandConstant('{tmp}\') + SaveFileName);
    end;
end;


procedure InitializeWizard;
var
    bPicHandle, bPicHandle2, lPicHandle: THandle;
begin
    with WizardForm do
    begin
        WelcomePage.Color := AXEL_YELLOW;
        MainPanel.Color := AXEL_YELLOW;

        if GetFromRes('_IS_BOTVA', 'botva2.dll') and GetFromRes('_IS_BPIC', 'bPic.png') and GetFromRes('_IS_LIPIC', 'LiPic.png') and GetFromRes('_IS_APIC', 'aPic.png') then
        begin
            bPicHandle := ImgLoad(WelcomePage.Handle, ExpandConstant('{tmp}\aPic.png'), WizardBitmapImage.Left, WizardBitmapImage.Top, WizardBitmapImage.Width, WizardBitmapImage.Height, True, True);
            WizardBitmapImage.Hide;
            ImgSetVisibility(bPicHandle, True);
            ImgApplyChanges(WelcomePage.Handle);
            
            bPicHandle := ImgLoad(FinishedPage.Handle, ExpandConstant('{tmp}\bPic.png'), WizardBitmapImage2.Left, WizardBitmapImage2.Top, WizardBitmapImage2.Width, WizardBitmapImage2.Height, True, True);
            WizardBitmapImage2.Hide;
            ImgSetVisibility(bPicHandle, True);
            ImgApplyChanges(FinishedPage.Handle);
            
            lPicHandle := ImgLoad(MainPanel.Handle, ExpandConstant('{tmp}\LiPic.png'), WizardSmallBitmapImage.Left, WizardSmallBitmapImage.Top, WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height, True, True);
            WizardSmallBitmapImage.Hide;
            ImgSetVisibility(lPicHandle, True);
            ImgApplyChanges(MainPanel.Handle);
        end;
    end;
end;

procedure DeinitializeSetup();
begin
    if FileExists(ExpandConstant('{tmp}\') + 'botva2.dll') then gdipShutDown();
end;

/////////////////////////////////////////////////////////////////////

procedure InitializeUninstallProgressForm();
var
    lPicHandle: THandle;
begin
    with UninstallProgressForm do
    begin
        MainPanel.Color := AXEL_YELLOW;
    
        if GetFromRes('_IS_BOTVA', 'botva2.dll') and GetFromRes('_IS_LIPIC', 'LIPic.png') then
        begin
            lPicHandle := ImgLoad(MainPanel.Handle, ExpandConstant('{tmp}\LiPic.png'), WizardSmallBitmapImage.Left, WizardSmallBitmapImage.Top, WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height, True, True);
            WizardSmallBitmapImage.Hide;
            ImgSetVisibility(lPicHandle, True);
            ImgApplyChanges(MainPanel.Handle);
        end;
    end;
end;

procedure DeinitializeUninstall();
begin
    if FileExists(ExpandConstant('{tmp}\') + 'botva2.dll') then gdipShutDown();
end;

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


Последний раз редактировалось habib2302, 16-12-2013 в 00:15.


Отправлено: 00:50, 03-04-2013 | #65


Ветеран


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

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


habib2302

читать дальше »
Код: Выделить весь код
; Скрипт создан через Мастер Inno Setup Script.
; ИСПОЛЬЗУЙТЕ ДОКУМЕНТАЦИЮ ДЛЯ ПОДРОБНОСТЕЙ ИСПОЛЬЗОВАНИЯ INNO SETUP!

#define MyAppName "AIDA64"
#define MyAppVersion "2.85.2400"
#define MyAppPublisher "Copyright (c) 1995-2013 FinalWire Ltd."
#define MyAppURL "http://www.aida64.com/"
#define AIDA641 "AIDA64 Extreme Edition"
#define AIDA642 "AIDA64 Business Edition"
#define AIDA64EXE1 "aida64.exe"
#define AIDA64EXE2 "aida64.exe"

#define AuthRep "Xabib"

#include "WinTB.iss"
#include "botva2.iss"

[Setup]
; Примечание: Значение AppId идентифицирует это приложение.
; Не используйте одно и тоже значение в разных установках.
; (Для генерации значения GUID, нажмите Инструменты | Генерация GUID.)
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=true
OutputBaseFilename={#MyAppName} {#MyAppVersion}
SetupIconFile={tmp}\ico.ico
Compression=lzma2/Ultra64
SolidCompression=true
InternalCompressLevel=Ultra64
DiskSpanning=false
DiskSliceSize=736000000
ShowLanguageDialog=auto
SlicesPerDisk=4
UninstallDisplayIcon={app}\ico.ico
;Авторские права.
VersionInfoCopyright={#AuthRep}
;Производитель.
AppPublisher={#AuthRep}
RawDataResource=Botva:botva2.dll|b2p:b2p.dll|Logo:logo.png|bPic:bPic.png|LiPic:LiPic.png|aPic:aPic.png

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

[Components]
Name: AIDA64; Description: AIDA64; Types: full;
Name: AIDA64\AIDA641; Description: {#AIDA641}; Flags: exclusive;
Name: AIDA64\AIDA642; Description: {#AIDA642}; Flags: exclusive;

[Tasks]
Name: icons; Description: Создать Ярлыки:;
Name: icons\desktop; Description: На Рабочем Столе;
Name: icons\quicklaunchicon; Description: В Панели Задач; OnlyBelowVersion: 0,6.1;

[Files]
;Файлы распаковываемые в папку с игрой. Необходимы для деинсталлятора
;Source: logo.png;  Flags: dontcopy;
;Source: botva2.dll; Flags: dontcopy;
;Source: b2p.dll; Flags: dontcopy;
;Source: botva2.dll; DestDir:{app}
;Source: b2p.dll; DestDir:{app}
;Source: logo.png; DestDir: {app};
Source: WinTB.dll; Flags: dontcopy;
Source: {tmp}\ico.ico; DestDir: {app}; Flags: ignoreversion
; Примечание: Не используйте "Flags: ignoreversion" для системных файлов

[Dirs]
Name: {app}\{#AIDA641}; Components: AIDA64\AIDA641;
Name: {app}\{#AIDA642}; Components: AIDA64\AIDA642;

[Icons]
Name: {group}\{#AIDA641}; Filename: {app}\{#AIDA641}\{#AIDA64EXE1}; Components: AIDA64\AIDA641;
Name: {group}\{#AIDA642}; Filename: {app}\{#AIDA642}\{#AIDA64EXE2}; Components: AIDA64\AIDA642;
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe};
Name: {group}\Сайт {#MyAppName}; Filename: {#MyAppURL}
Name: {commondesktop}\{#AIDA641}; Filename: {app}\{#AIDA641}\{#AIDA64EXE1}; Tasks: icons\desktop; Components: AIDA64\AIDA641;
Name: {commondesktop}\{#AIDA642}; Filename: {app}\{#AIDA642}\{#AIDA64EXE2}; Tasks: icons\desktop; Components: AIDA64\AIDA642;
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#AIDA641}; Filename: {app}\{#AIDA641}\{#AIDA64EXE1}; Tasks: icons\quicklaunchicon; Components: AIDA64\AIDA641;
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#AIDA642}; Filename: {app}\{#AIDA642}\{#AIDA64EXE2}; Tasks: icons\quicklaunchicon; Components: AIDA64\AIDA642;

[Run]
Filename: {app}\{#AIDA641}\{#AIDA64EXE1}; Description: "{cm:LaunchProgram,{#StringChange(AIDA641, '&', '&&')}}"; Flags: nowait postinstall skipifsilent Unchecked; Components: AIDA64\AIDA641;
Filename: {app}\{#AIDA642}\{#AIDA64EXE2}; Description: "{cm:LaunchProgram,{#StringChange(AIDA642, '&', '&&')}}"; Flags: nowait postinstall skipifsilent Unchecked; Components: AIDA64\AIDA642;

[Messages]
BeveledLabel=RePack by {#AuthRep}

[UninstallDelete]
 Type: files; Name: {app}

[Code]
const
  AXEL_YELLOW = $48c1ca;
  RT_RCDATA = 10;

var
 TDV: TFolderTreeView;
 TFV: TStartMenuFolderTreeView;
 ResultCode: Integer;
 lPLogo, bPicHandle, bPicHandle2, lPicHandle: THandle;
 BtnImage: TBitmapImage;
 
function GetFromRes(const ResName, SaveFileName: String): Boolean;
var
  lResStream: TResourceStream;
begin
  lResStream := TResourceStream.Create(HInstance, ResName, RT_RCDATA);
  try
    lResStream.SaveToFile(ExpandConstant('{tmp}\') + SaveFileName);
  finally
    lResStream.Free;
    Result := FileExists(ExpandConstant('{tmp}\') + SaveFileName);
  end;
end;

procedure TDVOnChange(Sender: TObject);
begin
  WizardForm.DirEdit.Text:= AddBackslash(TDV.Directory)+'{#MyAppName}';
end;

procedure TFVOnChange(Sender: TObject);
begin
  WizardForm.GroupEdit.Text:= AddBackslash(TFV.Directory)+'{#MyAppName}';
end;

function InitializeSetup:boolean;
begin
  if not FileExists(ExpandConstant('{tmp}\WinTB.dll')) then ExtractTemporaryFile('WinTB.dll');
  Result:=True;
end;

procedure InitializeWizard;
begin
  with WizardForm do
  begin
    WelcomePage.Color := AXEL_YELLOW;
    MainPanel.Color := AXEL_YELLOW;

    if GetFromRes('_IS_BOTVA', 'botva2.dll') and GetFromRes('_IS_B2P', 'b2p.dll') and GetFromRes('_IS_LOGO', 'logo.png') and GetFromRes('_IS_BPIC', 'bPic.png') and GetFromRes('_IS_LIPIC', 'LiPic.png') and GetFromRes('_IS_APIC', 'aPic.png') then
    begin
      bPicHandle := ImgLoad(WelcomePage.Handle, ExpandConstant('{tmp}\aPic.png'), WizardBitmapImage.Left, WizardBitmapImage.Top, WizardBitmapImage.Width, WizardBitmapImage.Height, True, True);
      WizardBitmapImage.Hide;
      ImgSetVisibility(bPicHandle, True);
      ImgApplyChanges(WelcomePage.Handle);

      bPicHandle := ImgLoad(FinishedPage.Handle, ExpandConstant('{tmp}\bPic.png'), WizardBitmapImage2.Left, WizardBitmapImage2.Top, WizardBitmapImage2.Width, WizardBitmapImage2.Height, True, True);
      WizardBitmapImage2.Hide;
      ImgSetVisibility(bPicHandle, True);
      ImgApplyChanges(FinishedPage.Handle);

      lPicHandle := ImgLoad(MainPanel.Handle, ExpandConstant('{tmp}\LiPic.png'), WizardSmallBitmapImage.Left, WizardSmallBitmapImage.Top, WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height, True, True);
      WizardSmallBitmapImage.Hide;
      ImgSetVisibility(lPicHandle, True);
      ImgApplyChanges(MainPanel.Handle);
      
      lPLogo:= ImgLoad(WizardForm.Handle, ExpandConstant('{tmp}\logo.png'), ScaleX(20), ScaleY(320), ScaleX(126), ScaleY(38), True, True);
      ImgApplyChanges(WizardForm.Handle);
    end;
    
    SetTaskBarProgressValue(0, 60);
    SetTaskBarProgressState(0, TBPF_ERROR);
    TaskBarV10(MainForm.Handle, WizardForm.Handle, false, false, 0, 0, _m_);
     
    TDV:= TFolderTreeView.Create(WizardForm);
    TDV.Top:= WizardForm.DirEdit.Top+28;
    TDV.Width:= 417;
    TDV.Height:= 100;
    TDV.OnChange:= @TDVOnChange;
    TDV.Parent:= WizardForm.SelectDirPage;
     
    TFV:= TStartMenuFolderTreeView.Create(nil);
    TFV.Top:= WizardForm.GroupEdit.Top+28;
    TFV.Width:= 417;
    TFV.Height:= 100;
    TFV.SetPaths(ExpandConstant('{userprograms}'),ExpandConstant('{commonprograms}'),ExpandConstant('{userstartup}'),ExpandConstant('{commonstartup}'));
    TFV.OnChange:= @TFVOnChange;
    TFV.Parent:= WizardForm.SelectProgramGroupPage;
  
    with TLabel.Create(WizardForm) do
    begin
      Parent:=WizardForm;
      AutoSize:=False;
      Transparent:= true;
      SetBounds(ScaleX(20), ScaleY(320), ScaleX(126), ScaleY(38));
    end;
  end;
end;
 
procedure DeinitializeSetup();
begin
  gdipShutdown;
  TaskBarDestroy;
end;

procedure InitializeUninstallProgressForm;
begin
  with UninstallProgressForm do
    begin
      MainPanel.Color := AXEL_YELLOW;
      if GetFromRes('_IS_BOTVA', 'botva2.dll') and GetFromRes('_IS_B2P', 'b2p.dll') and GetFromRes('_IS_LOGO', 'logo.png') and GetFromRes('_IS_LIPIC', 'LIPic.png') then
      begin
        lPicHandle := ImgLoad(MainPanel.Handle, ExpandConstant('{tmp}\LiPic.png'), WizardSmallBitmapImage.Left, WizardSmallBitmapImage.Top, WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height, True, True);
        WizardSmallBitmapImage.Hide;
        ImgSetVisibility(lPicHandle, True);
        ImgApplyChanges(MainPanel.Handle);
        
        lPLogo:= ImgLoad(UninstallProgressForm.Handle, ExpandConstant('{tmp}\logo.png'), ScaleX(20), ScaleY(320), ScaleX(126), ScaleY(38), True, True);
        ImgApplyChanges(UninstallProgressForm.Handle);
      end;

    with TLabel.Create(nil) do
    begin
      Parent:=UninstallProgressForm;
      AutoSize:=False;
      Transparent:= true;
      SetBounds(ScaleX(20), ScaleY(320), ScaleX(126), ScaleY(38));
    end;
  end;
end;

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

Отправлено: 01:56, 03-04-2013 | #66


Старожил


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

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


habib2302
читать дальше »
#define MyAppName "AIDA64"
#define MyAppVersion "2.85.2400"
#define MyAppPublisher "Copyright (c) 1995-2013 FinalWire Ltd."
#define MyAppURL "http://www.aida64.com/"
#define AIDA641 "AIDA64 Extreme Edition"
#define AIDA642 "AIDA64 Business Edition"
#define AIDA64EXE1 "aida64.exe"
#define AIDA64EXE2 "aida64.exe"

#define AuthRep "Xabib"
#include "botva2.iss"
[Setup]
; Примечание: Значение AppId идентифицирует это приложение.
; Не используйте одно и тоже значение в разных установках.
; (Для генерации значения GUID, нажмите Инструменты | Генерация GUID.)
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=true
OutputBaseFilename={#MyAppName} {#MyAppVersion}
SetupIconFile={tmp}\ico.ico
Compression=lzma2/Ultra64
SolidCompression=true
InternalCompressLevel=Ultra64
DiskSpanning=false
DiskSliceSize=736000000
ShowLanguageDialog=auto
SlicesPerDisk=4
UninstallDisplayIcon={app}\ico.ico
;Авторские права.
VersionInfoCopyright={#AuthRep}
;Производитель.
AppPublisher={#AuthRep}
RawDataResource=Botva:botva2.dll|bPic:bPic.png|LgPic:Logo.png|LiPic:LiPic.png|aPic:aPic.png

[Files]
Source: WinTB.dll; Flags: dontcopy;
Source: {tmp}\ico.ico; DestDir: {app}; Flags: ignoreversion
;Source: botva2.dll; Flags: dontcopy
;Source: bPic.png; Flags: dontcopy

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

[Components]
Name: AIDA64; Description: AIDA64; Types: full;
Name: AIDA64\AIDA641; Description: {#AIDA641}; Flags: exclusive;
Name: AIDA64\AIDA642; Description: {#AIDA642}; Flags: exclusive;

[Tasks]
Name: icons; Description: Создать Ярлыки:;
Name: icons\desktop; Description: На Рабочем Столе;
Name: icons\quicklaunchicon; Description: В Панели Задач; OnlyBelowVersion: 0,6.1;


[Dirs]
Name: {app}\{#AIDA641}; Components: AIDA64\AIDA641;
Name: {app}\{#AIDA642}; Components: AIDA64\AIDA642;

[Icons]
Name: {group}\{#AIDA641}; Filename: {app}\{#AIDA641}\{#AIDA64EXE1}; Components: AIDA64\AIDA641;
Name: {group}\{#AIDA642}; Filename: {app}\{#AIDA642}\{#AIDA64EXE2}; Components: AIDA64\AIDA642;
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe};
Name: {group}\Сайт {#MyAppName}; Filename: {#MyAppURL}
Name: {commondesktop}\{#AIDA641}; Filename: {app}\{#AIDA641}\{#AIDA64EXE1}; Tasks: icons\desktop; Components: AIDA64\AIDA641;
Name: {commondesktop}\{#AIDA642}; Filename: {app}\{#AIDA642}\{#AIDA64EXE2}; Tasks: icons\desktop; Components: AIDA64\AIDA642;
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#AIDA641}; Filename: {app}\{#AIDA641}\{#AIDA64EXE1}; Tasks: icons\quicklaunchicon; Components: AIDA64\AIDA641;
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#AIDA642}; Filename: {app}\{#AIDA642}\{#AIDA64EXE2}; Tasks: icons\quicklaunchicon; Components: AIDA64\AIDA642;

[Run]
Filename: {app}\{#AIDA641}\{#AIDA64EXE1}; Description: "{cm:LaunchProgram,{#StringChange(AIDA641, '&', '&&')}}"; Flags: nowait postinstall skipifsilent Unchecked; Components: AIDA64\AIDA641;
Filename: {app}\{#AIDA642}\{#AIDA64EXE2}; Description: "{cm:LaunchProgram,{#StringChange(AIDA642, '&', '&&')}}"; Flags: nowait postinstall skipifsilent Unchecked; Components: AIDA64\AIDA642;

[Messages]
BeveledLabel=RePack by {#AuthRep}

[UninstallDelete]
Type: files; Name: {app}


[code]
const
AXEL_YELLOW = $48c1ca;
RT_RCDATA = 10;


var
TDV: TFolderTreeView;
TFV: TStartMenuFolderTreeView;

procedure TDVOnChange(Sender: TObject);
begin
WizardForm.DirEdit.Text:= AddBackslash(TDV.Directory)+'{#MyAppName}';
end;

procedure TFVOnChange(Sender: TObject);
begin
WizardForm.GroupEdit.Text:= AddBackslash(TFV.Directory)+'{#MyAppName}';
end;

#include "WinTB.iss"

function GetFromRes(const ResName, SaveFileName: String): Boolean;
var
lResStream: TResourceStream;
begin
lResStream := TResourceStream.Create(HInstance, ResName, RT_RCDATA);
try
lResStream.SaveToFile(ExpandConstant('{tmp}\') + SaveFileName);
finally
lResStream.Free;
Result := FileExists(ExpandConstant('{tmp}\') + SaveFileName);
end;
end;


function InitializeSetup:boolean;
begin
if not FileExists(ExpandConstant('{tmp}\WinTB.dll')) then ExtractTemporaryFile('WinTB.dll');
Result:=True;
end;


procedure InitializeWizard;
var
bPicHandle, bPicHandle2, lPicHandle,LGPicHandle: THandle;
begin
with WizardForm do
begin
WizardForm.TypesCombo.hide;
WelcomePage.Color := AXEL_YELLOW;
MainPanel.Color := AXEL_YELLOW;
ExtractTemporaryFile('WinTB.dll');
SetTaskBarProgressValue(0, 60);
SetTaskBarProgressState(0, TBPF_ERROR);
TaskBarV10(MainForm.Handle, WizardForm.Handle, false, false, 0, 0, _m_);
TDV:= TFolderTreeView.Create(WizardForm);
TDV.Top:= WizardForm.DirEdit.Top+28;
TDV.Width:= 417;
TDV.Height:= 100;
TDV.OnChange:= @TDVOnChange;
TDV.Parent:= WizardForm.SelectDirPage;
TFV:= TStartMenuFolderTreeView.Create(WizardForm);
TFV.Top:= WizardForm.GroupEdit.Top+28;
TFV.Width:= 417;
TFV.Height:= 100;
TFV.SetPaths(ExpandConstant('{userprograms}'),ExpandConstant('{commonprograms}'),ExpandConstant('{us erstartup}'),ExpandConstant('{commonstartup}'));
TFV.OnChange:= @TFVOnChange;
TFV.Parent:= WizardForm.SelectProgramGroupPage;

if GetFromRes('_IS_BOTVA', 'botva2.dll') and GetFromRes('_IS_BPIC', 'bPic.png') and GetFromRes('_IS_LGPIC', 'Logo.png') and GetFromRes('_IS_LIPIC', 'LiPic.png') and GetFromRes('_IS_APIC', 'aPic.png') then
begin
bPicHandle := ImgLoad(WelcomePage.Handle, ExpandConstant('{tmp}\aPic.png'), WizardBitmapImage.Left, WizardBitmapImage.Top, WizardBitmapImage.Width, WizardBitmapImage.Height, True, True);
WizardBitmapImage.Hide;
ImgSetVisibility(bPicHandle, True);
ImgApplyChanges(WelcomePage.Handle);

lGPicHandle := ImgLoad(WizardForm.handle, ExpandConstant('{tmp}\logo.png'), ScaleX(20), ScaleY(320), ScaleX(126), ScaleY(38), True, True);
ImgSetVisibility(LGPicHandle, True);
ImgApplyChanges(Wizardform.Handle);

bPicHandle := ImgLoad(FinishedPage.Handle, ExpandConstant('{tmp}\bPic.png'), WizardBitmapImage2.Left, WizardBitmapImage2.Top, WizardBitmapImage2.Width, WizardBitmapImage2.Height, True, True);
WizardBitmapImage2.Hide;
ImgSetVisibility(bPicHandle, True);
ImgApplyChanges(FinishedPage.Handle);

lPicHandle := ImgLoad(MainPanel.Handle, ExpandConstant('{tmp}\LiPic.png'), WizardSmallBitmapImage.Left, WizardSmallBitmapImage.Top, WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height, True, True);
WizardSmallBitmapImage.Hide;
ImgSetVisibility(lPicHandle, True);
ImgApplyChanges(MainPanel.Handle);
end;
end;
end;

procedure DeinitializeSetup;
begin
if FileExists(ExpandConstant('{tmp}\') + 'botva2.dll') then gdipShutDown;
TaskBarDestroy;
end;

/////////////////////////////////////////////////////////////////////

procedure InitializeUninstallProgressForm();
var
lPicHandle,lGPicHandle: THandle;
begin
with UninstallProgressForm do
begin
MainPanel.Color := AXEL_YELLOW;

if GetFromRes('_IS_BOTVA', 'botva2.dll') and GetFromRes('_IS_LIPIC', 'LIPic.png') and GetFromRes('_IS_LGPIC', 'Logo.png') then
begin
lPicHandle := ImgLoad(MainPanel.Handle, ExpandConstant('{tmp}\LiPic.png'), WizardSmallBitmapImage.Left, WizardSmallBitmapImage.Top, WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height, True, True);
WizardSmallBitmapImage.Hide;
ImgSetVisibility(lPicHandle, True);
ImgApplyChanges(MainPanel.Handle);

lGPicHandle := ImgLoad(UninstallProgressForm.handle, ExpandConstant('{tmp}\logo.png'), ScaleX(20), ScaleY(320), ScaleX(126), ScaleY(38), True, True);
ImgSetVisibility(LGPicHandle, True);
ImgApplyChanges(UninstallProgressForm.Handle);
end;
end;
end;

procedure DeinitializeUninstall();
begin
if FileExists(ExpandConstant('{tmp}\') + 'botva2.dll') then gdipShutDown;
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:19, 03-04-2013 | #67


Ветеран


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

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


habib2302, только что скомпилировал - ошибок нет. Ресурсы botva2.dll, b2p.dll, logo.png, bPic.png, LiPic.png, aPic.png должны находится рядом со скриптом.

Последний раз редактировалось saurn, 03-04-2013 в 03:35.


Отправлено: 02:38, 03-04-2013 | #68


Аватара для Johny777

Ветеран


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

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


Gnom_aka_Lexander,
Цитата Gnom_aka_Lexander:
наоборот. несколько мелких функций гораздо оптимальнее одного здоровенного уродливого монстра. единственное, для дополнительной оптимизации есь смысл передавать TStrings со списком ресурсов , дабы не создавать для каждого ресурса отдельный объект TResourceStream. Создали и в цикле по списку выгружаем на диск, с очисткой после выгрузки. Это точно будет быстрее, чем столько-же раз создать и разрушить объект. »
В натуре. Цикл действительно ускорил скорость запуска, что видно на глаз по появлению кнопки в панели задач - теперь без тормозка.
в цикле создаём массив of TResourceStream, и сразу же извлекаем файл и разрушаем TResourceStream-ы и входной стринглист
Короче зацени function ExtractResource(var ResourceList: TStringList): Boolean; чуть ниже под спойлером!
habib2302, vint56, saurn, вот обновлённый пример, он совместим с файлами из архива в моём предыдущем посте:
читать дальше »
Код: Выделить весь код
#include "botva2.iss"

[Setup]
AppName=DrawImageExample by South.Tver
AppVerName=DrawImageExample by South.Tver
DefaultDirName={pf}\ImageExample
OutputBaseFilename=setup
RawDataResource=Botva:botva2.dll|bPic:bPic.png|LiPic:LiPic.png|aPic:aPic.png

[Code]
const
    AXEL_YELLOW = $48c1ca;
    RT_RCDATA = 10;
    

function ExtractResource(var ResourceList: TStringList): Boolean;
var
    ResStreams: array of TResourceStream;
    ResName, ResFile: String;
    i: Integer;
begin
    if ResourceList = nil then Exit;
    Result := ResourceList.Count > 0;
    SetArrayLength(ResStreams, ResourceList.Count);
    try
        for i := 0 to ResourceList.Count-1 do
        try
            ResName := Trim( Copy(ResourceList.Strings[i], 1, Pos(',', ResourceList.Strings[i])-1) );
            ResFile := Trim( Copy(ResourceList.Strings[i], Pos(',', ResourceList.Strings[i])+1, Length(ResourceList.Strings[i])-Pos(',', ResourceList.Strings[i])) );
            ResStreams[i] := TResourceStream.Create(HInstance, ResName, RT_RCDATA);
            ResStreams[i].SaveToFile(ExpandConstant('{tmp}\') + ResFile);
            Result := Result and FileExists(ExpandConstant('{tmp}\') + ResFile);
        finally
            ResStreams[i].Free;
        end;
    finally
        ResourceList.Free;
    end;
end;


procedure InitializeWizard;
var
    PicHandle: THandle;
    ResList: TStringList;
begin
    ResList := TStringList.Create;
    ResList.Add('_IS_BOTVA, botva2.dll');  // 'Имя ресурса, имя файла'
    ResList.Add('_IS_BPIC, bPic.png');
    ResList.Add('_IS_LIPIC, LiPic.png');
    ResList.Add('_IS_APIC, aPic.png');

    with WizardForm do
    begin
        WelcomePage.Color := AXEL_YELLOW;
        MainPanel.Color := AXEL_YELLOW;

        if ExtractResource(ResList) then
        begin
            PicHandle := ImgLoad(WelcomePage.Handle, ExpandConstant('{tmp}\aPic.png'), WizardBitmapImage.Left, WizardBitmapImage.Top, WizardBitmapImage.Width, WizardBitmapImage.Height, True, True);
            WizardBitmapImage.Hide;
            ImgSetVisibility(PicHandle, True);
            ImgApplyChanges(WelcomePage.Handle);
            
            PicHandle := ImgLoad(FinishedPage.Handle, ExpandConstant('{tmp}\bPic.png'), WizardBitmapImage2.Left, WizardBitmapImage2.Top, WizardBitmapImage2.Width, WizardBitmapImage2.Height, True, True);
            WizardBitmapImage2.Hide;
            ImgSetVisibility(PicHandle, True);
            ImgApplyChanges(FinishedPage.Handle);
            
            PicHandle := ImgLoad(MainPanel.Handle, ExpandConstant('{tmp}\LiPic.png'), WizardSmallBitmapImage.Left, WizardSmallBitmapImage.Top, WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height, True, True);
            WizardSmallBitmapImage.Hide;
            ImgSetVisibility(PicHandle, True);
            ImgApplyChanges(MainPanel.Handle);
        end;
    end;
end;


procedure DeinitializeSetup;
begin
    if FileExists(ExpandConstant('{tmp}\') + 'botva2.dll') then gdipShutDown;
end;

/////////////////////////////////////////////////////////////////////

procedure InitializeUninstallProgressForm();
var
    PicHandle: THandle;
    ResList: TStringList;
begin
    with UninstallProgressForm do
    begin
        MainPanel.Color := AXEL_YELLOW;
    
        ResList := TStringList.Create;
        ResList.Add('_IS_BOTVA, botva2.dll');
        ResList.Add('_IS_LIPIC, LIPic.png');

        if ExtractResource(ResList) then
        begin
            PicHandle := ImgLoad(MainPanel.Handle, ExpandConstant('{tmp}\LiPic.png'), WizardSmallBitmapImage.Left, WizardSmallBitmapImage.Top, WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height, True, True);
            WizardSmallBitmapImage.Hide;
            ImgSetVisibility(PicHandle, True);
            ImgApplyChanges(MainPanel.Handle);
        end;
    end;
end;


procedure DeinitializeUninstall();
begin
    if FileExists(ExpandConstant('{tmp}\') + 'botva2.dll') then gdipShutDown;
end;


=======================================================================

insombia,
Цитата insombia:
Johny777 а как в твоем примере растянуть картинку на весь инсталл? как фоновой так и маленькой »
хочешь удивлю?
перед тем как сделать тот пример открыл пример ботвы ...\Inno Setup 5\Modules\South\botva2_example\image.iss и посмотрел как создать картинку. До этого ботву не использовал и не знал
потом открыл модуль где автор любезно под каждым прототипом функции по русски описал все входные аргументы и сделал пример!
цитирую описание к функции ImgLoad(...):
читать дальше »
Код: Выделить весь код
function ImgLoad(Wnd :HWND; FileName :PAnsiChar; Left, Top, Width, Height :integer; Stretch, IsBkg :boolean) :Longint; external 'ImgLoad@{tmp}\botva2.dll stdcall delayload';
//загружает изображение в память, сохраняет переданные параметры
//Wnd          - хэндл окна, в котором будет выведено изображение
//FileName     - файл изображения
//Left,Top     - координаты верхнего левого угла вывода изображения (в координатах клиентской области Wnd)
//Width,Height - ширина, высота изображения
//               если Stretch=True, то изображение будет растянуто/сжато в прямоугольной области
//               Rect.Left:=Left;
//               Rect.Top:=Top;
//               Rect.Right:=Left+Width;
//               Rect.Bottom:=Top+Height;
//               если Stretch=False, то параметры Width,Height игнорируются и вычисляются самой ImgLoad, т.е. можно передать 0
//Stretch      - масштабировать изображение или нет
//IsBkg        - если IsBkg=True, изображение будет выведено на фоне формы,
//               поверх него будут отрисованы графические объекты (TLabel, TBitmapImage и т.д.),
//               затем поверх всего будут выведены изображения с флагом IsBkg=False
//возвращаемое значение - указатель на структуру, хранящей изображение и его парметры, приведенный к типу Longint
//изображения будут выведены в той последовательности, в которой вызывается ImgLoad

Напрашивается вопрос: Ты хоть сам пробовал немного разобраться прежде чем спрашивать?
короче настраивай последние в вышеупомянутой функции
...Width, Height :integer; Stretch, IsBkg :boolean) :Longint;
...ширина, высота - целочисленные значения (пиши при необходимости через ScaleY,X() ), растянуть, на фоне - булев значения): Longint;

===========================================================================

UPD:
saurn,
Цитата saurn:
Небольшой вопрос по вашему примеру для отображения процентов http://forum.oszone.net/post-2123218-47.html , как его корректно реализовать в деинсталяторе? »
вот так:
читать дальше »
Код: Выделить весь код
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp

[Files]
Source: {fonts}\*; DestDir: {app}; Flags: external

[code ]
#ifdef UNICODE
    #define A "W"
#else
    #define A "A"
#endif

const
    WM_USER                 = $0400;
//    CCM_FIRST               = $2000;
//    CCM_SETBKCOLOR          = CCM_FIRST + 1;
//
//    PBS_SMOOTH              = 01;
//    PBS_VERTICAL            = 04;
//    PBM_SETRANGE            = WM_USER+1;
    PBM_SETPOS              = WM_USER+2;
//    PBM_DELTAPOS            = WM_USER+3;
//    PBM_SETSTEP             = WM_USER+4;
//    PBM_STEPIT              = WM_USER+5;
//    PBM_SETRANGE32          = WM_USER+6;   // lParam = high, wParam = low
    PBM_GETRANGE            = WM_USER+7;   // lParam = PPBRange or Nil
//             // wParam = False: Result = high
//             // wParam = True: Result = low
    PBM_GETPOS              = WM_USER+8;
//    PBM_SETBARCOLOR         = WM_USER+9;    // lParam = bar color
//    PBM_SETBKCOLOR          = CCM_SETBKCOLOR;  // lParam = bkColor
//
//    { For Windows >= XP }
//    PBS_MARQUEE             = $08;
//    PBM_SETMARQUEE          = WM_USER+10;
//
//    { For Windows >= Vista }
//    PBS_SMOOTHREVERSE       = $10;
//
//    { For Windows >= Vista }
//    PBM_GETSTEP             = WM_USER+13;
//    PBM_GETBKCOLOR          = WM_USER+14;
//    PBM_GETBARCOLOR         = WM_USER+15;
//    PBM_SETSTATE            = WM_USER+16;  { wParam = PBST_[State] (NORMAL, ERROR, PAUSED) }
//    PBM_GETSTATE            = WM_USER+17;
//
//    { For Windows >= Vista }
//    PBST_NORMAL             = $0001;
//    PBST_ERROR              = $0002;
//    PBST_PAUSED             = $0003;

    GWL_WNDPROC = -4;


type
    LPARAM = Integer;
    WPARAM = Integer;
    LRESULT = Integer;
    TFNWndProc = Integer;


function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: TFNWndProc; hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; external 'CallWindowProc{#A}@user32.dll stdcall';
function SetWindowText(hWnd: HWND; lpString: String): BOOL; external 'SetWindowText{#A}@user32.dll stdcall';

var
    OldProgressBarProc, hInstallStatusLabel, hInstallProgressBar: Longint;

function ProgressBarProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
var
    UndefPosition, UndefMax: Longint;
begin
    if Msg = PBM_SETPOS then
    begin
        UndefPosition := SendMessage(hInstallProgressBar, PBM_GETPOS, 0, 0);
        UndefMax := SendMessage(hInstallProgressBar, PBM_GETRANGE, 0, 0);
        SetWindowText( hInstallStatusLabel, Format('%s'#32'%s', [SetupMessage(msgStatusExtractFiles), FormatFloat('0.#0 %', (UndefPosition*100)/UndefMax)]) );
    end;

    Result := CallWindowProc(OldProgressBarProc, hWnd, Msg, wParam, lParam);
end;

procedure InitializeWizard();
begin
    hInstallProgressBar := WizardForm.ProgressGauge.Handle;
    OldProgressBarProc := SetWindowLong(WizardForm.ProgressGauge.Handle, GWL_WNDPROC, CallbackAddr('ProgressBarProc'));
    hInstallStatusLabel := WizardForm.StatusLabel.Handle;
end;

procedure DeinitializeSetup();
begin
    SetWindowlong(WizardForm.ProgressGauge.Handle, GWL_WNDPROC, OldProgressBarProc);
end;

//////////////////////////////////////////////////////////////////////

var
    hUnistallProgress, hUninstallStatusLabel: Longint;

function UninstallProgressBarProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
var
    UndefPosition, UndefMax: Longint;
begin
    if Msg = PBM_SETPOS then
    begin
        UndefPosition := SendMessage(hUnistallProgress, PBM_GETPOS, 0, 0);
        UndefMax := SendMessage(hUnistallProgress, PBM_GETRANGE, 0, 0);
        SetWindowText( hUninstallStatusLabel, Format('%s'#32'%s', [FmtMessage(SetupMessage(msgStatusUninstalling), ['{#SetupSetting("AppName")}']), FormatFloat('0.#0 %', (UndefPosition*100)/UndefMax)]) );
    end;

    Result := CallWindowProc(OldProgressBarProc, hWnd, Msg, wParam, lParam);
end;

procedure UninstallFormOnHide(Sender: TObject);
begin
    SetWindowlong(TUninstallProgressForm(Sender).ProgressBar.Handle, GWL_WNDPROC, OldProgressBarProc);
end;

procedure InitializeUninstallProgressForm();
begin
    hUnistallProgress := UninstallProgressForm.ProgressBar.Handle;
    hUninstallStatusLabel := UninstallProgressForm.StatusLabel.Handle;
    OldProgressBarProc := SetWindowLong(hUnistallProgress, GWL_WNDPROC, CallbackAddr('UninstallProgressBarProc'));
    UninstallProgressForm.OnHide := @UninstallFormOnHide;
end;

+ улучшил код:
1. Проценты отображаются в лучшем месте, чем в заголовке формы
2. Теперь никакого прямого обращения к контролам через оконную процедуру - всё обращение теперь на чистом WinApi (это гарантированно избавит от возможных ошибок) через адреса
PS: И обращайся на Ты, а то мне как-то не по себе!

UPD: Обновлённый пример благодаря правке El Sanchezhttp://forum.oszone.net/post-2125286-79.html
читать дальше »
Код: Выделить весь код
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp

[Files]
Source: {fonts}\*; DestDir: {app}; Flags: external

[code ]
#ifdef UNICODE
    #define A "W"
#else
    #define A "A"
#endif

const
    WM_USER = $0400;
    PBM_SETPOS = WM_USER+2;
    GWL_WNDPROC = -4;


type
    LPARAM = Integer;
    WPARAM = Integer;
    LRESULT = Integer;
    TFNWndProc = Integer;


function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: TFNWndProc; hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; external 'CallWindowProc{#A}@user32.dll stdcall';
function SetWindowText(hWnd: HWND; lpString: String): BOOL; external 'SetWindowText{#A}@user32.dll stdcall';

var
    OldProgressBarProc: Longint;

function ProgressBarProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
begin
    if Msg = PBM_SETPOS then with WizardForm do SetWindowText( StatusLabel.Handle, Format('%s'#32'%s', [SetupMessage(msgStatusExtractFiles), FormatFloat('0.#0 %', (ProgressGauge.Position*100)/ProgressGauge.Max)]) );

    Result := CallWindowProc(OldProgressBarProc, hWnd, Msg, wParam, lParam);
end;

procedure InitializeWizard();
begin
    OldProgressBarProc := SetWindowLong(WizardForm.ProgressGauge.Handle, GWL_WNDPROC, CallbackAddr('ProgressBarProc'));
end;

procedure DeinitializeSetup();
begin
    SetWindowlong(WizardForm.ProgressGauge.Handle, GWL_WNDPROC, OldProgressBarProc);
end;

/////////////////////////////// Uninstall //////////////////////////////////


function UninstallProgressBarProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
begin
    if Msg = PBM_SETPOS then with UninstallProgressForm do SetWindowText( StatusLabel.Handle, Format('%s'#32'%s', [FmtMessage(SetupMessage(msgStatusUninstalling), ['{#SetupSetting("AppName")}']), FormatFloat('0.#0 %', (ProgressBar.Position*100)/ProgressBar.Max)]) );

    Result := CallWindowProc(OldProgressBarProc, hWnd, Msg, wParam, lParam);
end;

procedure UninstallFormOnHide(Sender: TObject);
begin
    SetWindowlong(TUninstallProgressForm(Sender).ProgressBar.Handle, GWL_WNDPROC, OldProgressBarProc);
end;

procedure InitializeUninstallProgressForm();
begin
    OldProgressBarProc := SetWindowLong(UninstallProgressForm.ProgressBar.Handle, GWL_WNDPROC, CallbackAddr('UninstallProgressBarProc'));
    UninstallProgressForm.OnHide := @UninstallFormOnHide;
end;


Последний раз редактировалось Johny777, 04-04-2013 в 02:39.

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

Отправлено: 02:42, 03-04-2013 | #69


Аватара для habib2302

Ветеран


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

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


saurn, sorry!!!!все работает

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


Отправлено: 02:54, 03-04-2013 | #70



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




 
Переход