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

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

 

Аватара для Ivan_009

Ветеран


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

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


Как сделать данные линии подскажите пожалуйста кто знает...

Последний раз редактировалось Ivan_009, 25-08-2012 в 14:17.


Отправлено: 13:13, 14-08-2012 | #611



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

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


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


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

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


Ivan_009,
// Для примера (убери если надо)
with WizardForm do begin
InnerNotebook.Hide;
OuterNotebook.Hide;
end;
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.

[Code_]
procedure InitializeWizard();
var
  Bevel: TBevel;
  NewStaticText: TNewStaticText;
begin
with WizardForm do begin
  InnerNotebook.Hide;
  OuterNotebook.Hide;
end;    
  NewStaticText:= TNewStaticText.Create(WizardForm);
with NewStaticText do
begin
  Left:= ScaleX(72);
  Top:= ScaleX(82);
  Caption := '  Пример  '
  Parent:= WizardForm;
end;  
  Bevel:= TBevel.Create(WizardForm);
with Bevel do
begin
  Shape := bsFrame;
  SetBounds(ScaleX(48),ScaleY(88),ScaleX(281),ScaleY(113));
  Parent:= WizardForm;
end;  
end;

То,что на скрине, там тупо делали по бевалу. Так гораздо проще и лучше. :-)
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:23, 14-08-2012 | #612


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


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

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


Всем привет. Возник вопрос - как завершить установку и откатить изменения при определенных условиях? Все условия я запрограммировал. Прверяются они при нажатии определенной кнопки далее:
Код: Выделить весь код
//Функция проверки наличия Meneger при установленном сервисе
function NextButtonClick(CurPageID: Integer): Boolean;
var
AppPath, AppValue: string;
begin
	if not Installed then
	begin
		if (not (CurPageID = ServicePage.ID)) then
		begin
		    Result := True;
		    Exit;
		end;
		
		if ServiceCheck then
		begin	
			AppPath := RemoveQuotes(ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Control_is1,InstallLocation|}'));
			if not FileExists(AppPath + '\Manager.exe') then
			begin
				MsgBox('Не найден Manager!', mbInformation, mb_Ok)
				\\что написать сдесь чтобы начось завершение инсталляции и откат изменений???	
			end;
                        Result := True;	
		end;
    end
    else
    begin
    Result := True;
    end;
end;
И еще вопрос - работаю с xml документом:
Код: Выделить весь код
	// пользовательские настройки
	XMLNode := XMLDoc.selectSingleNode('//aaa');
	if not VarIsEmpty(XMLNode) then
	begin
		XMLAttributes := XMLNode.attributes;
		//  Код bbb
		XMLAttrib := XMLAttributes.getNamedItem('bbb');
		XMLAttrib.text := bbb;
Как сначала проверить наличие атрибута 'bbb'

Отправлено: 17:44, 14-08-2012 | #613


Аватара для Ivan_009

Ветеран


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

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


Как использовать разные кнопки через bmp как тут...

Последний раз редактировалось Ivan_009, 25-08-2012 в 14:17.


Отправлено: 23:49, 14-08-2012 | #614


Аватара для Johny777

Ветеран


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

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


Mafioza,
реестр не знаю
извиняй
жди кто подскажет

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

Yury_Prizrak,
давай писать компактнее
убирай пожалуйста свои коды дополнительно в [more] [/more]
Цитата Yury_Prizrak:
как завершить установку и откатить изменения ... при нажатии определенной кнопки далее »
откат работает только во время установки (между этапами ssInstall и ssPostInstall), а нажатие на кнопку далее - это уже до или после установки
поэтому можно только удалить, а откат (под откатом имею ввиду не удаление, а какие-то действия типа возвращения бэкапа) делать в функциях удаления
Цитата Yury_Prizrak:
\\что написать сдесь чтобы начось завершение инсталляции и откат изменений??? »
объясню на основе примера (приписал комментарии) :
читать дальше »
Код: Выделить весь код
[Setup]
AppName=Test Mouse Event
AppVersion=1.5
OutputDir=.
AppId=TheBestAppIdEver
DefaultDirName={reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1,InstallLocation|{pf}\Setup_B}


[code]
var
  Errorcode: Integer;

function InitializeSetup(): Boolean; /// в твоём случае функция нажатия на кнопку далее
var
  AppPath, UninsPath: String;
begin
  Result := True;

  UninsPath := RemoveQuotes(ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1,UninstallString|}'));
  AppPath := RemoveQuotes(ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1,InstallLocation|}'));

  if AppPath <> '' then if MsgBox(ExpandConstant('Установлена. Удалить?'), mbError, MB_YESNO) = IDYES then /// в твоём случае 'Не найден Manager!'
  begin
    Exec(UninsPath, '', '' , SW_SHOW, ewNoWait, Errorcode);  /// запускаем деинсталятор
    Result := True;
  end
  else Result := True;
end;

function RollingBack: boolean; // создаём функцию возвращающую булев значение в конце(в данном случае после месседжбокса) или в зависимости от чего-то
begin
  Result := False; /// встроенная переменная Result возвращает False

  MsgBox('Все дела перед удалением обделаны', mbInformation, mb_Ok) // здесь делаешь свои дела, если надо

  Result := True; /// после дел возвращает True а этот результат уже передаётся Result-у деинсталятора, который есть разрешение на удаление
end;

function InitializeUninstall(): Boolean;  /// версия полу-тихого деинсталятора // могу дать полностью тихое
begin
  Result := False;

  if not UninstallSilent then
  begin
    Exec(ExpandConstant('{uninstallexe}'), '/VERYSILENT', '', SW_SHOW, ewNoWait, ErrorCode);
    Exit;
  end;

  if MsgBox(FmtMessage(SetupMessage(msgConfirmUninstall), ['{#SetupSetting("AppName")}']), mbInformation, MB_YESNO) = idYes then
  begin
    Result := RollingBack;
    MsgBox(FmtMessage(SetupMessage(msgUninstalledAll), ['{#SetupSetting("AppName")}']), mbInformation, MB_OK);
  end
  else Result := False;
end;


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

Ivan_009,
за основу взял пример "4 состояния"
добавил второй входной параметр процедуре текстурирования кнопок
смотри
procedure LoadButtonImage(AButton: TButton; Texture: Integer);
///////////// название///////////(название кнопки; номер тестуры);
номер текстуры в данном случае целое число (1 или 2)
в самой процедуре:
if Texture = 1 then ButtonImage[n].Bitmap.LoadFromResourceName(HInstance, '_IS_BUTTON1');
if Texture = 2 then ButtonImage[n].Bitmap.LoadFromResourceName(HInstance, '_IS_BUTTON2');

использование:
LoadButtonImage(WizardForm.BackButton, 1)
те грузим картинку процедурой LoadButtonImage и в скобках через запятую отправляем ей параметры (родная кнопка "назад", 1), где 1 - это тестура номер 1

код:
читать дальше »
Код: Выделить весь код
[Setup]
;Используется текстура размером 320х23, где размер одной кнопки 80х23
;обычное состояние - при наведении - при нажатии - заблокировано
AppName=Test
AppVerName=Test
DefaultDirName={pf}\Test
OutputDir=.
BitmapResource=button1:buttonA.bmp|button2:buttonB.bmp

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


[code]

const
  ButtonWidth = 80;
  ButtonHeight = 27;

var
  WizardLabel: TLabel;
  ButtonPanel: array of TPanel;
  ButtonImage: array of TBitmapImage;
  ButtonLabel: array of TLabel;
  UsedButtons: array of TButton;
  ButtonsCount: Integer;

procedure ButtonLabelClick(Sender: TObject);
var
  Button: TButton; n, i: Integer;
begin
  i:= TLabel(Sender).Tag; ButtonImage[i].Left:= 0
  for n:=0 to (ButtonsCount-1) do
  begin
    if i = n then Button:= UsedButtons[n];
  end;
  Button.OnClick(Button)
end;

procedure ButtonLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if ButtonLabel[TLabel(Sender).Tag].Enabled then ButtonImage[TLabel(Sender).Tag].Left:=-ButtonWidth*2
end;

procedure ButtonLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if ButtonLabel[TLabel(Sender).Tag].Enabled then ButtonImage[TLabel(Sender).Tag].Left:=0
end;

procedure ButtonLabelMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var n, I: Integer;
begin
I:=TLabel(Sender).Tag;
//Сначала восстанавливаем картинку у всех кнопок, так надо иначе могут быть глюки
for n:=0 to (ButtonsCount-1) do begin if (ButtonLabel[n].Enabled)and(ButtonImage[n].Left <> -ButtonWidth*2)and(I<>N) then ButtonImage[n].Left:= 0; end;
//Теперь собственно ставим нужную картинку
if (ButtonLabel[i].Enabled)and(ButtonImage[i].Left <> -ButtonWidth*2) then begin ButtonImage[i].Left:= -ButtonWidth; end;
end;

procedure WizardLabelMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var n: Integer;
begin
//Т.к Sender'ом выступает WizardLabel то не получится испльзовать индекс кнопки
for n:=0 to (ButtonsCount-1) do if (ButtonLabel[n].Enabled)and(ButtonImage[n].Left <> -ButtonWidth*2) then begin ButtonImage[n].Left:= 0; end;
end;

procedure LoadButtonImage(AButton: TButton; Texture: Integer);
var n: Integer;
begin
n:=ButtonsCount; SetArrayLength(ButtonPanel, n+1);
SetArrayLength(ButtonImage, n+1); SetArrayLength(ButtonLabel, n+1);
SetArrayLength(UsedButtons, n+1); UsedButtons[n]:= AButton;

ButtonPanel[n]:=TPanel.Create(WizardForm)
ButtonPanel[n].SetBounds(AButton.Left, AButton.Top, AButton.Width, AButton.Height)
ButtonPanel[n].Tag:= n
ButtonPanel[n].Enabled:= AButton.Enabled
ButtonPanel[n].Parent:=AButton.Parent

ButtonImage[n]:=TBitmapImage.Create(WizardForm)
ButtonImage[n].SetBounds(ScaleX(0), ScaleY(0), ScaleX(320), ScaleY(27))
ButtonImage[n].Enabled:=False
if Texture = 1 then ButtonImage[n].Bitmap.LoadFromResourceName(HInstance, '_IS_BUTTON1');
if Texture = 2 then ButtonImage[n].Bitmap.LoadFromResourceName(HInstance, '_IS_BUTTON2');
ButtonImage[n].Parent:=ButtonPanel[n]

with TLabel.Create(WizardForm) do begin
Tag:=n
Parent:=ButtonPanel[n]
Width:=AButton.Width
Height:=AButton.Height
Transparent:=True
OnClick:=@ButtonLabelClick
OnDblClick:=@ButtonLabelClick
OnMouseMove:=@ButtonLabelMove
OnMouseDown:=@ButtonLabelMouseDown
OnMouseUp:=@ButtonLabelMouseUp
end

ButtonLabel[n]:=TLabel.Create(WizardForm)
ButtonLabel[n].Autosize:=True
ButtonLabel[n].Alignment:=taCenter
ButtonLabel[n].Tag:=n
ButtonLabel[n].Enabled:= AButton.Enabled
ButtonLabel[n].Transparent:=True
ButtonLabel[n].Font.Color:=clBlack
ButtonLabel[n].Caption:=AButton.Caption
ButtonLabel[n].OnClick:=@ButtonLabelClick
ButtonLabel[n].OnDblClick:=@ButtonLabelClick
ButtonLabel[n].OnMouseMove:=@ButtonLabelMove
ButtonLabel[n].OnMouseDown:=@ButtonLabelMouseDown
ButtonLabel[n].OnMouseUp:=@ButtonLabelMouseUp
ButtonLabel[n].Parent:=ButtonPanel[n]

ButtonsCount:= ButtonsCount+1
end;

procedure UpdateButtons();
var n: Integer;
begin
for n:=0 to ButtonsCount-1 do begin
ButtonLabel[n].Caption:=UsedButtons[n].Caption
ButtonPanel[n].Visible:=UsedButtons[n].Visible
if (UsedButtons[n].Enabled = False) then ButtonImage[n].Left:= -ButtonWidth*3 else ButtonImage[n].Left:= 0;
ButtonLabel[n].Enabled:= UsedButtons[n].Enabled;
ButtonPanel[n].Enabled:= UsedButtons[n].Enabled;
//Ставим Left и Top лейбла соразмерно размеру лейбла
ButtonLabel[n].Left:= ButtonPanel[n].Width div 2 - ButtonLabel[n].Width div 2;
ButtonLabel[n].Top:= ButtonPanel[n].Height div 2 - ButtonLabel[n].Height div 2;
end;
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
//Делаем кнопку активной
WizardForm.NextButton.Enabled:= True;
//Обновляем текстурированную кнопку (обновляем активность и текстуру)
UpdateButtons();
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
//Делаем кнопку неактивной
WizardForm.NextButton.Enabled:= False;
//Обновляем текстурированную кнопку (обновляем активность и текстуру)
UpdateButtons()
end;

procedure InitializeWizard();
begin

WizardForm.Color := clWhite;


WizardLabel:= TLabel.Create(WizardForm)
WizardLabel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(WizardForm.Width), ScaleY(WizardForm.Height))
WizardLabel.Transparent:= True;
WizardLabel.AutoSize:=false;
WizardLabel.OnMouseMove:=@WizardLabelMove
WizardLabel.Parent:= WizardForm;

WizardForm.BackButton.Width:= ButtonWidth
WizardForm.BackButton.Height:= ButtonHeight

WizardForm.NextButton.Width:= ButtonWidth
WizardForm.NextButton.Height:= ButtonHeight

WizardForm.CancelButton.Width:=ButtonWidth
WizardForm.CancelButton.Height:= ButtonHeight

WizardForm.DirBrowseButton.Left:=ScaleX(337)
WizardForm.DirBrowseButton.Width:= ButtonWidth
WizardForm.DirBrowseButton.Height:=ButtonHeight

WizardForm.GroupBrowseButton.Left:=ScaleX(337)
WizardForm.GroupBrowseButton.Width:= ButtonWidth
WizardForm.GroupBrowseButton.Height:=ButtonHeight

WizardForm.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick

WizardForm.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick


LoadButtonImage(WizardForm.BackButton, 1)
LoadButtonImage(WizardForm.NextButton, 2)
LoadButtonImage(WizardForm.CancelButton, 2)
LoadButtonImage(WizardForm.DirBrowseButton, 1)
LoadButtonImage(WizardForm.GroupBrowseButton, 2)
end;

procedure CurPageChanged(CurPageID: Integer);
begin
UpdateButtons()
end;


пример для наглядности с (двумя тестстурами) :
http://sendfile.su/649535

Последний раз редактировалось Johny777, 15-08-2012 в 03:12.

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

Отправлено: 02:59, 15-08-2012 | #615


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


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

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


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

Есть решение WizardForm.Close; но оно вываливает окошко выбора - типа "а вы точно хотите завершить?"

Отправлено: 11:19, 15-08-2012 | #616


Аватара для nik1967

Старожил


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

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


Yury_Prizrak,
попробуй так
Код: Выделить весь код
[ Code]
var
  Flag: boolean;

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

//Функция проверки наличия Meneger при установленном сервисе
function NextButtonClick(CurPageID: Integer): Boolean;
var
AppPath, AppValue: string;
begin
	if not Installed then
	begin
		if (not (CurPageID = ServicePage.ID)) then
		begin
		    Result := True;
		    Exit;
		end;
		
		if ServiceCheck then
		begin	
			AppPath := RemoveQuotes(ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Control_is1,InstallLocation|}'));
			if not FileExists(AppPath + '\Manager.exe') then
			begin
				MsgBox('Не найден Manager!', mbInformation, mb_Ok)
                                  Flag:= true;
                                  WizardForm.Close;	
			end;
                        Result := True;	
		end;
    end
    else
    begin
    Result := True;
    end;
end;

-------
Если сообщение оказалось полезным для Вас, то помимо спасибо, можно нажать на "Полезное сообщение".

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

Отправлено: 11:49, 15-08-2012 | #617


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


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

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


nik1967, спасибо, работает. Может еще знаешь как наличие атрибута проверять? Было бы просто здорово!

Отправлено: 12:42, 15-08-2012 | #618


Аватара для Mafioza

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


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

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


johny 777
не знаешь как довавить программу в автозагрузку через реестр , а не через *пуск\автозагрузка ???

Отправлено: 12:50, 15-08-2012 | #619


Аватара для Johny777

Ветеран


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

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


Mafioza,
это знаю тк у меня есть пример:

читать дальше »
Код: Выделить весь код
;Я себе создал лаунчере запуска программ, и хочу сделать в нём следующее:
;Создать чекбокс, если который выбрать то лаунчер бы запускался вместе с запуском виндовс т.е запускался при включении компьютера.
;Если же чекбокс не выбран, то запуск не происходилбы.
;Возможноли такое реализовать?
;_____________________________-
;Можно. При клике, если чекбокс выбран, то пишешь в ветку реестра
;HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Run
;строковый параметр, имя которого - твоя прога, а его значение путь до запускаемого файла, с параметрами ком. строки если нужно. Вот примерно так
;____________________________
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp

[code]
var
  RunBox: TCheckBox;

procedure CheckBoxClick(Sender: TObject);
begin
  if RunBox.Checked then
    RegWriteStringValue(HKCU, 'Software\Microsoft\Windows\CurrentVersion\Run', 'MyAppName', AddQuotes(ExpandConstant('{srcexe}')))
  else
    RegDeleteValue(HKCU, 'Software\Microsoft\Windows\CurrentVersion\Run', 'MyAppName')
end;

procedure InitializeWizard();
begin
  RunBox:= TCheckBox.Create(WizardForm);
  RunBox.SetBounds(10, 325, 300, 18);
  RunBox.Caption:='Запускать при загрузке системы.';
  RunBox.OnClick:= @CheckBoxClick;
  RunBox.Parent:= WizardForm;
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:56, 15-08-2012 | #620



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




 
Переход