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

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

Закрытая тема
Настройки темы
[архив] Inno Setup .:[все вопросы]:.

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


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

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


Изменения
Автор: volk1234
Дата: 27-08-2009
Описание: перевел в архив
Лимит страниц.
Тема закрыта.
продолжаем тут:

Inno Setup. Обсуждение установщика

Скрипты Inno Setup. Помощь и советы



Полезные ресурсы:
Официальный сайт| Inno Setup 5.2.3 RU
Русская справка |Зеракало 1| Зеракало 2
ISTool 5.30 |Русификатор
Русификатор ISTool |Зеркало 1|Зеркало 2
Inno Setup Script Generator |Зеркало 1
Unpaker 2.1 от 21.04.2009 - распаковывает инсталляторы, созданные с помощью Inno Setup, начиная с версии 2.0.18 по 5.2.4.
InnoUnpaker 2.6b3 [от valeron87]- можнет просмотривать содержание CompiledCode.bin
Unpaker 0.23 - расширенная китайская версия 2008-08-08 ( модификация)
Unpacker 0.24 | Зеркало 1 | Зеркало 2 - Inno Setup Unpacker (innounp plus) - расширенная версия распаковщика инсталляторов Inno Setup начиная с версии 2.0.8 по 5.3.0 Beta. Поддерживаются версии Unicode. Русифицирована. Последний релиз: 0.24 [23.05.2009]
Набор Restools
Restools - расширенная версия Inno Setup от китайских разработчиков, добавляет вашему инсталлятору новые возможности по оформлению, а также более удобный редактор скриптов (требуется наличие установленного Preprocessor'а).
Последние версии разработок от Restools:
InnoCompiler090319_English - в него входят файлы: Compil32.exe и Templates.dat;
Inno_ISCmplr_Setup090302 - в него входят файлы, лучше из папки InnoSetup_FullVCL: setup.e32, ISCmplr.dls, ISCmplr.dll и SetupLdr.e32.
InnoCompiler090319_Russian - Русский перевод (80%) от tem000 - NEW !

QuickStart Pack - Inno Setup + Preprocessor (последняя версия ispack-5.2.4-dev)
"Всё в одном" от unikum111
читать дальше »

Цитата unikum111:
В сборку входят следующие компоненты:
Inno Setup compiler 5.2.2 русская версия;
ISTool 5.2.1 русская версия;
Inno Script Generator английская версия;
Inno Setup Unpacker Explorer 1.0 аглийская версия;
Примечание: в Inno Setup Unpacker Explorer 1.0 заменён innounp.exe на тестовую версию 2.0, так что распаковывает инсталляторы вплоть до версии 5.2.2.
Есть возможность выбора компонентов.
Скачать: ifolder, RapidShare, iBox (Размер: 5.34 Mb).»



Полезные мелочи для Inno Setup:

- Converter v.0.1.2 - конвертор REG- файлов в формат скриптов Inno от Serega_ -новая версия
- Как убрать страницу приветствия (wpWelcome) в мастере установки приложения:
- Примеры скриптов на паскале
- Inno Setup Addon 0.07 For Total Commander
- Параметры командной строки инсталляторов InnoSetup:

Код: Выделить весь код
/SP-
Отключает страницу "Эта программа установит... Вы хотите продолжить?" инсталятора. 
Выполнится только если DisableStartupPrompt секции [Setup] равна yes. 

/SILENT, /VERYSILENT  
Установка в ускоренном или очень ускоренном режиме. При установке в ускоренном режиме 
окно мастера и фоновое окно мастера не отображаются, отображается только окно прогресса. 
При очень ускоренной установке окно прогресса тоже не отображается. Остальная установка 
проходит как обычно - отображаются сообщения об ошибках в ходе установки, страница 
приветствия (если ее отображение не отменено директивой DisableStartupPrompt или 
параметром '/SP-' командной строки).

Если после установки необходима перезагрузка, команды '/NORESTART' не дано и установка 
проходит в ускоренном режиме, появится сообщение "Перезагрузить компьютер?". Если режим 
установки очень ускоренный, система перезагрузится не спрашивая.

/LOG 
Указывает инсталятору создать log-файл в папке TEMP для подробного отчета о действиях 
и событиях в секции [Run], предпринятых в ходе установки. Применяется при отслеживании 
ошибок. Например, если вы подозреваете, что файл не был удален, хотя должен был, 
log-файл сообщит, что файл былдействительно пропущен и почему. 

log-файлу присваивается уникальное имя на базе текущей даты. (Существующие файлы не 
перезаписываются и не дополняются). 
Информация, содержащаяся в log-файле, техническая и поэтому не может быть понята 
пользователем. 

/LOG="filename" 
Параметр похож на /LOG, но в отличие от него позволяет указать фиксированный
путь/имя файла для log-файла. Если файл с указанным именем уже существует, он будет 
заменен. Если файл не может быть создан, установка прервется и выдаст сообщение 
об ошибке.

/NOCANCEL  
Не дает пользователю прервать установку, отключая кнопку Отменить и игнорируя клики на 
кнопке Закрыть. Используется в комбинации с '/SILENT' или '/VERYSILENT'. 

/NORESTART 
Указывает инсталятору не перезагружать компьютер даже если это необходимо. 

/RESTARTEXITCODE=exit code  
Задает инсталятору код, который он должен возвратить, если необходима перезагрузка. 
Используется с '/NORESTART'.
См. также Коды выхода инсталятора. (кому интерестно, могу выложить или же доступно в хелпе)

/LOADINF="filename" 
Указывает инсталятору загрузить параметры установки из указанного файла после проверки 
командной строки. Этот файл может быть подготовлен с помощью '/SAVEINF='command.
Не забудьте ставить кавычки при использовании имен, содержащих пробелы. 

/SAVEINF="filename" 
Указывает инсталятору сохранять параметры установки в указанный файл.
Не забудьте ставить кавычки при использовании имен, содержащих пробелы. 

/LANG=language 
Задает используемый язык. language задает имя языка, заданного в параметре секции 
[Languages]. При использовании параметра /LANG появляется диалог Выбор языка установки.

/DIR="x:\dirname" 
Меняет имя папки, заданное по умолчанию, на странице Выбор папки назначения. 
Должен быть задан полный путь. 

/GROUP="folder name" 
Меняет имя папки на странице Выбор папки меню Пуск. Если директива 
DisableProgramGroupPage секции [Setup] равна yes, этот параметр командной строки 
игнорируется. 

/NOICONS 
Указывает инсталятору проверять, выбрана ли команда Не создавать значков на странице 
Выбор папки меню Пуск. 

/COMPONENTS="comma separated list of component names" 
Меняет выбраные по умолчанию компоненты. В этом случае параметр командной строки 
указывает инсталятору менять тип установки на Выборочный. 

/PASSWORD=password  Задает пароль. Если не указана директива Password секции [Setup], 
этот параметр игнорируется. Если введен неправильный пароль, параметр 
также игнорируется.

Отправлено: 21:42, 17-03-2005

 

Аватара для volk1234

Старовер


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

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


Serega_ и другие заинтересованные лица:

Я в Inno профан поэтому просьба к вам, посмотрите шапку- может чего лишнего убрать?
Допустим оставить только ссылку на версия 5.2.4 ?? Или 5.2.0 тоже нужна?
Жду предложений.

-------

Ю-ху!


Отправлено: 03:37, 28-03-2009 | #541



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

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


Ветеран


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

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


volk1234, как говорят, выскажу лично своё мнение...

Можно убрать:
Unpaker 2.0 , Зеркало, зеркало - распаковывает инсталляторы версии 5.2.2;
Inno Setup Pack 5.2.2 RU.

Немного перефразировать ссылку:
- Как убрать окно приветствия в мастере установки приложения: на - Как убрать страницу приветствия (wpWelcome) в мастере установки приложения:, я понимаю, что в такой форме вопрос был задан, но так более понятней...

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.


Отправлено: 09:56, 28-03-2009 | #542


Старожил


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

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


Всем привет!Скажите пожалуйста как создать отдельное окно для ввода ключа продукта?Вот пример


Спасибо!

Последний раз редактировалось Diman19, 29-03-2009 в 04:23.


Отправлено: 16:45, 28-03-2009 | #543


Ветеран


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

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


Цитата Diman19:
как создать отдельное окно для ввода ключа продукта? »
Сделал на странице приветствия
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Messages]
ClickNext=Вы должны ввести серийный номер, чтобы продолжить, или «Отмена», чтобы выйти из программы установки.

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

; заносим данные в реестр, 1 вариант
[Registry]
Root: HKCU; SubKey: Software\My Program; Flags: uninsdeletekey
Root: HKCU; SubKey: Software\My Program\Settings; ValueType: string; ValueName: Serial; ValueData: {code:edtText}; Flags: uninsclearvalue

Code]
var
  edt: array [1..5] of TEdit;
  txt: TNewStaticText;
  i, e, t: integer;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpWelcome then
  WizardForm.NextButton.Enabled:= False; // отключаю кнопку Далее
end;

function edtText(s: string): string; //этот вариант, при записи через секцию [Registry]
//function edtText: string; // а этот, если вносить запись через 2 вариант
//var                       //
//  s: string;              //
begin
 { получаем текст из edit'ов и присваем переменной s }
  for i:= 1 to 5 do begin
    s:= s + edt[i].Text + '-';
  end;
 { удаляем лишний знак тире в конце строки }
  s:= Copy(s, 1, Length(s) - 1);
  Result:= s;
end;

//procedure CurStepChanged(CurStep: TSetupStep);
//begin
// { занасим данные в реестр 2 вариант}
//  If CurStep = ssDone then
//  RegWriteStringValue(HKEY_CURRENT_USER, 'Software\My Program\Settings', 'Serial', edtText);
//end;

//procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
//begin
// { удаляем данные из реестра, 2 вариант
//  Здесь надо быть очень внимательным, а то по неосторожности можно удалить весь раздел... :) }
//  If CurUninstallStep = usDone then
//  RegDeleteKeyIncludingSubkeys(HKEY_CURRENT_USER, 'Software\My Program');
//end;

procedure edtKeyPress(Sender: TObject; var Key: Char);
begin
{ здесь попытался реализовать, чтоб курсор автоматом перескакивал на следующий edit при вводе,
 но есть косяк, если начать удалять через Backspace, то из-за SetFocus курсор снова перескакивает на уже очищенный edit }
  for i:= 1 to 4 do begin
    if Length(edt[i].Text) = 4 then edt[i+1].SetFocus;
  end;
{ проверяем условие если все edit'ы заполненны, то делаем доступной кнопку Далее}
  for i:= 1 to 5 do begin
    if Length(edt[i].Text) >= 4 then
    WizardForm.NextButton.Enabled:= True else
    WizardForm.NextButton.Enabled:= False;
  end;
end;

procedure CreateComponents;
begin
  WizardForm.NextButton.Enabled:= False;
  t:= 57;
  e:= t;
  // создаём 4 тире
  for i:= 1 to 4 do begin
  txt:= TNewStaticText.Create(WizardForm.WelcomePage);
    with txt do begin
      Parent:= WizardForm.WelcomePage;
      Name:= 'txt' + IntToStr(i+1);
      Left:= 173 + (t*i);
      Top:= 182;
      Caption:= '-';
      AutoSize:= True;
      Font.Height:= -13;
      Font.Style:= [fsBold];
    end;
  end;
  // создаём 5 edit'ов
  for i:= 1 to 5 do begin
  edt[i]:= TEdit.Create(WizardForm.WelcomePage);
    with edt[i] do begin
      Parent:= WizardForm.WelcomePage;
      Left:= 123 + (e*i);
      Top:= 180;
      Width:= 47;
      Height:= 21;
      MaxLength:= 5;
      OnKeyPress:= @edtKeyPress;
    end;
  end;
end;

procedure InitializeWizard();
begin
  CreateComponents;
end;

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.


Последний раз редактировалось Serega, 30-03-2009 в 10:37. Причина: оптимизировал код

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

Отправлено: 02:45, 30-03-2009 | #544


Старожил


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

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


Спасибо за скрипт.А не подскажешь как сделать чтобы это всё было после окна приветствия?

Спасибо!

Отправлено: 02:00, 31-03-2009 | #545


Ветеран


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

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


Diman19, так чего же сразу не сказали. Только не окна, а страницы... Сделал второй страницей
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Messages]
ClickNext=Вы должны ввести серийный номер, чтобы продолжить, или «Отмена», чтобы выйти из программы установки.

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

; заносим данные в реестр, 1 вариант
[Registry]
Root: HKCU; SubKey: Software\My Program; Flags: uninsdeletekey
Root: HKCU; SubKey: Software\My Program\Settings; ValueType: string; ValueName: Serial; ValueData: {code:edtText}; Flags: uninsclearvalue

Code]
var
  edt:array [1..5] of TEdit;
  txt: TNewStaticText;
  i, e, t: integer;
  NewPage: TWizardPage;
  lbl: TLabel;
procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = NewPage.ID then
  WizardForm.NextButton.Enabled:= False; // отключаю кнопку Далее
end;

function edtText(s: string): string; //этот вариант, при записи через секцию [Registry]
//function edtText: string; // а этот, если вносить запись через 2 вариант
//var                       //
//  s: string;              //
begin
 { получаем текст из edit'ов и присваем переменной s }
  for i:= 1 to 5 do begin
    s:= s + edt[i].Text + '-';
  end;
 { удаляем лишний знак тире в конце строки }
  s:= Copy(s, 1, Length(s) - 1);
  Result:= s;
end;

//procedure CurStepChanged(CurStep: TSetupStep);
//begin
// { занасим данные в реестр 2 вариант}
//  If CurStep = ssDone then
//  RegWriteStringValue(HKEY_CURRENT_USER, 'Software\My Program\Settings', 'Serial', edtText);
//end;

//procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
//begin
// { удаляем данные из реестра, 2 вариант
//  Здесь надо быть очень внимательным, а то по неосторожности можно удалить весь раздел... :) }
//  If CurUninstallStep = usDone then
//  RegDeleteKeyIncludingSubkeys(HKEY_CURRENT_USER, 'Software\My Program');
//end;

procedure edtKeyPress(Sender: TObject; var Key: Char);
begin
{ здесь попытался реализовать, чтоб курсор автоматом перескакивал на следующий edit при вводе,
 но есть косяк, если начать удалять через Backspace, то из-за SetFocus курсор снова перескакивает на уже очищенный edit }
  for i:= 1 to 4 do begin
    if Length(edt[i].Text) = 4 then edt[i+1].SetFocus;
  end;
{ проверяем условие если все edit'ы заполненны, то делаем доступной кнопку Далее}
  for i:= 1 to 5 do begin
    if Length(edt[i].Text) >= 4 then
    WizardForm.NextButton.Enabled:= True else
    WizardForm.NextButton.Enabled:= False;
  end;
end;

procedure SerialPage;
begin
  NewPage:= CreateCustomPage(wpWelcome, 'Ввод кода', 'бла бла бла и т.д. ');

  WizardForm.NextButton.Enabled:= False;
  t:= 57;
  e:= t;
  // создаём Label
  lbl:=TLabel.Create(NewPage);
    with lbl do begin
      Left:= 0;
      Top:= 0;
      Width:= 417;
      Height:= 28;
      AutoSize:= False;
      WordWrap:= True;
      Caption:= 'Введите код, отпечатанный на последней странице обложки Руководства пользователя или на упаковке диска.';
      Parent:= NewPage.Surface;
    end;

  // создаём 4 тире
  for i:= 1 to 4 do begin
  txt:= TNewStaticText.Create(NewPage);
    with txt do begin
      Parent:= NewPage.Surface;
      Name:= 'txt' + IntToStr(i+1);
      Left:= 50 + (t*i);
      Top:= 50;
      Caption:= '-';
      AutoSize:= True;
      Font.Height:= -13;
      Font.Style:= [fsBold];
    end;
  end;
  // создаём 5 edit'ов
  for i:= 1 to 5 do begin
  edt[i]:= TEdit.Create(NewPage);
    with edt[i] do begin
      Parent:= NewPage.Surface;
      Left:= 0 + (e*i);
      Top:= 47;
      Width:= 47;
      Height:= 21;
      MaxLength:= 5;
      OnKeyPress:= @edtKeyPress;
    end;
  end;
end;

procedure InitializeWizard();
begin
  SerialPage;
end;

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.

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

Отправлено: 02:30, 31-03-2009 | #546


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


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

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


Здравствуйте!

Только вчера перешел с NSIS на Inno Setup и возникло пара вопросов:

1. Если удаляем программу Х, то появляется сообщение о подтверждении. Так вот, после этого сообщения нужно запустить другую программу Y и только после ее закрытия, продолжить удаление X. Вот что сейчас у меня:
Код: Выделить весь код
[UninstallRun]
Filename: {app}\Feedback.exe; Flags: waituntilidle
Программа Y появляется, но удаление продолжается, и сама Y остается в папке.

2. Как закрыть программу Х, если она работает, а пользователь запустил удаление программы? Или вывести сообщение что нужно закрыть программу перед удалением.

3. Как насильно удалить папку деисталированной программы (она у меня так и остается)?

4. Как найти и удалить папку из Application Data\MyProgram (чтобы работало и в XP и Vista)?

Заранее благодарен за помощь!

Отправлено: 12:11, 02-04-2009 | #547


Ветеран


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

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


AnalogXP,
1-ый вопрос
Так всё правильно, вы используете флаг waituntilidle
Цитата из Справки:
Если установлен этот флаг, инсталляция остановится и подождет, пока пользователь введет необходимые ей данные, вместо того, чтобы ожидать окончания процесса. (Как функция Win32 WaitForInputIdle). Не комбинируется с nowait.
Вам нужен флаг waituntilterminated
Цитата из Справки:
Если указан этот флаг, инсталлятор подождет, пока процесс полностью завершится. Обратите внимание, что этот флаг всегда задается по умолчанию (т.е. для того, чтобы инсталлятор подождал, пока завершится процесс, этот флаг указывать не обязательно). Указывается он только в комбинации с флагом shellexec - в этом случае это необходимо, если инсталлятор должен дождаться завершения процесса. Не комбинируется с флагами nowait и waituntilidle.
т.е. вам надо записать так:
Код: Выделить весь код
[UninstallRun]
Filename: {app}\Feedback.exe; Flags: waituntilterminated

3-ий и 4-ый вопрос
напишите в секции Code, следующее:
Код: Выделить весь код
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  If CurUninstallStep = usDone then
  // проверяем существование папки после удаления программы
  if DirExists(ExpandConstant('{userappdata}\My Program')) = True then
  // если существует, то удаляем её со всеми подпапками и файлами которые остались
  DelTree(ExpandConstant('{userappdata}\My Program'), True, True, True);
  // путь к папке (Application Data) - {userappdata} - для текущего пользователя, {commonappdata} - для всех пользователей
end;
Должно работать и на Vista, но проверить негде.

По второму вопросу, чуть позже...

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.

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

Отправлено: 13:11, 02-04-2009 | #548


Ветеран


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

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


Вложения
Тип файла: 7z ISTask.7z
(30.2 Kb, 83 просмотров)

AnalogXP,
2-ой вопрос

Вам потребутся ISTask.dll, которую прикрепил к сообщению.
Пример использования ISTask.dll:
Код: Выделить весь код
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Files]
Source: ISTask.dll; DestDir: {app}; Flags: ignoreversion
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion

[Run]
Filename: {app}\MyProg.exe; Description: Запустить программу MyProg?; Flags: postinstall nowait skipifsilent

; ниже поправьте название секции
[_Code]
function RunTask(FileName: string; bFullpath: Boolean): Boolean;
  external 'RunTask@{app}\ISTask.dll stdcall delayload uninstallonly';

function KillTask(ExeFileName: string): Integer;
  external 'KillTask@{app}\ISTask.dll stdcall delayload uninstallonly';

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usUninstall then
  if RunTask('MyProg.exe', false) then begin
    UninstallProgressForm.Visible := False;
    if MsgBox('Обнаружена запущенная программа MyProg. Завершить?', mbConfirmation, mb_yesno) = idyes then begin
      KillTask('MyProg.exe');
      UnloadDll(ExpandConstant('{app}\ISTask.dll'));
      UninstallProgressForm.Visible := True;
    end else begin
      MsgBox('Завершите работу программы MyProg, затем снова запустите программу удаления.', mbInformation, mb_ok);
      UnloadDll(ExpandConstant('{app}\ISTask.dll'));
      Abort;
    end;
  end else begin
    UnloadDll(ExpandConstant('{app}\ISTask.dll'));
  end;
end;

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.

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

Отправлено: 14:52, 02-04-2009 | #549


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


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

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


Serega_, спасибо, то что нужно.
Вот только собственную папку так и не сумел удалить. Чего-то я не понял:

Код: Выделить весь код
[_Code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  If CurUninstallStep = usDone then  
  begin
	...
	if DirExists(ExpandConstant('{app}') = True then
		DelTree(ExpandConstant('{app}', True, True, True);
  end;
end;

Отправлено: 16:23, 02-04-2009 | #550



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Inno Setup. Прочие вопросы El Sanchez Автоматическая установка приложений 653 09-01-2023 20:13
Утилиты - [addon] Inno Setup CrOsP Наборы обновлений для Windows XP/2003/Windows 7 33 11-05-2011 16:03
Inno Setup 5.3.6 OSZone Software Новости программного обеспечения 0 15-11-2009 17:30
[Архив] Твики реестра .: [все вопросы] :. Vadikan Автоматическая установка Windows 2000/XP/2003 1431 26-01-2008 08:51
Inno Setup tradeukraine Вебмастеру 3 13-06-2006 20:39




 
Переход