Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Inno Setup (создание инсталяционных пакетов)

Модерирует : gyra, Maz

Widok (17-06-2008 18:16): лимит страниц. продолжаем здесь  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100

   

Widok



Moderator-Следопыт
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Это мощное средство для создания установочных пакетов (дистрибутивов) программ. Поддерживается шифрование, установка пароля, различные задачи по завершении установки. Можно создавать свои страницы, используя Inno Setup Form Designer.
По сравнению с NSIS (основной конкурент на бесплатной основе) проще в настройке, имеет более понятную структуру скрипта.  
 
Последний релиз: 5.2.3 [10.03.2008]
История версий | скачать | все сборки || Скачать Preprocessor | все сборки
 
Русификатор от NightW0lf для версии 5.2.0
Скачать | зеркало
 
Русская справка к версиям 5.0.xx
Скачать | зеркало || cкачать в .chm формате
И снова BagIra на высоте
 
Руководство по расширенным возможностям Inno Setup 5 (не для чайников) от Kindly
Версия 5.1 скачать || версия 5 скачать|зеркало || версия 4 скачать|зеркало || версия 3 скачать|зеркало
 
Inno Setup Extensions Knowledge Base (содержит ответы на многие вопросы)
Новая версия (Web-интерфейс) || Старая chm-версия скачать | зеркало
 
Corona Skin & Check System Requirements от Victor_Dobrov
Скачать скрипт | зеркало | скриншот | описание | старая версия | InnoSetup Upgrade | Слайд-шоу
Обложка для Inno Setup. Сделает инсталлятор более симпатичным и добавляет расширения: Проверка минимальных требований. Расширенный прогрессбар. Расчёт времени до завершения распаковки. Список дисков. Слайдшоу или AVI-файл в фоновом окне. Компактный режим установки. Деинсталляция неучтённых файлов. Экран справки/скриншота. Медиаплеер и многое другое...
 
Примечание: начиная с версии 5.1.10 в Inno Setup при использовании в инсталляторе фонового изображения формата BMP стало глючить возможность растягивания картинки на весь экран - чтобы исправить добавьте этот код.
Если необходимо использовать метод проверки внешнего файла через сумму MD5 (который описан в 5 версии руководства от Kindly) для запуска инсталлятора, то понадобится калькулятор хеша MD5, калькулятор сумм MD5, SHA-256, CRC32. Если требуется узнать, какие ключи в реестр вносит та или иная программа, то понадобится RegShot.


Дополнительные утилиты для Inno Setup


Мощная надстройка для Inno Setup, при помощи которой создавать свои инсталляторы становится очень просто.
 
Последний релиз: 5.2.1 [15.10.2007]
Скачать | зеркало  
 
Русификатор
Скачать | зеркало

Распаковщик установок, сделанных с помощью Inno Setup. При распаковке извлекаются  ресурсы и скрипт установки (немного усечённый). Возможно подключение к Total Commander или FAR с помощью MultiArc плагинов.
Поддерживает распаковку инсталляторов, сделанных с помощью Inno Setup начиная с версии 3.0.0-beta по 5.2.3
 
Последний релиз: 0.20 [23.05.2008] New
Скачать  
 

Удобная оболочка для облегчения написания скриптов установки для Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
 
Последний релиз: 1.0.3.1 [23.03.2008]
Скачать | обновление | изменения
Примечание: обновление ставится только на Inno Setup Quickstartpack 5.2.3.
 
Старая версия [ScriptMaker 5.1.6.9 от 09.07.2006]
Русификатор версии 5.1.5 от GloThin | зеркало | зеркало | зеркало пароль: ruboard

Примечание для всех участников

Длинные куски кода помещайте под тегом more, дабы дать возможность знатокам Inno Setup прочитать сам вопрос, а не пролистывать бесконечно длинные листинги скриптов в посте.

Всего записей: 24190 | Зарегистр. 07-04-2002 | Отправлено: 17:33 25-09-2007 | Исправлено: juvaforza, 13:39 24-05-2008
MaximusMX

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Inno Setup 5.2.2 русская версия
http://www.innosetup.narod.ru/rus_ver/isetup-5.2.2-ru.exe

Всего записей: 45 | Зарегистр. 28-01-2006 | Отправлено: 16:24 04-12-2007
serg_aka_lain

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GRom V

Цитата:
А как сделать чтоб ПЕРЕД НАЧАЛОМ ИНСТАЛЛЯЦИИ - если система  ХР, то запускал  File1.exe, а если Vista, то  File2.exe.............?

 
 
function InitializeSetup (): Boolean;
var Version: TWindowsVersion;
 
  begin
   GetWindowsVersionEx(Version);
   if Version.NTPlatform  and  (Version.Major = 6)  and  (Version.Minor = 0) then
   begin
    MsgBox('You OS Windows Vista' ,mbInformation, mb_Ok);
    //Exec
    Result:= True;
   end
 
   begin
    GetWindowsVersionEx(Version);
    if Version.NTPlatform  and  (Version.Major = 5)  and  (Version.Minor = 1) then
    begin
     MsgBox('You OS Windows XP' ,mbInformation, mb_Ok);
    //Exec
     Result:= True;
    end
  end
end;

Всего записей: 340 | Зарегистр. 13-01-2007 | Отправлено: 18:09 04-12-2007
Olezka



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, плиз, если это возможно, чтобы некоторые файлы Х извлекались только туда куда будет написано в скрипте, а файлы У по умолчанию или куда выберет пользователь???
Заранее благодарен!!!

Всего записей: 624 | Зарегистр. 30-03-2005 | Отправлено: 18:24 04-12-2007
Uncle_Steeler



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Уважаемые форумчане, а не подскажет ли кто, как "скрестить" скины от Sampron (переделанный InstallShield) и код проигрывания мр3?

Всего записей: 100 | Зарегистр. 26-12-2001 | Отправлено: 19:44 04-12-2007
Vitalliano

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребята у меня такой скрипт, я не могу включить кнопку Cancel в процесе инсталяции:
 
[Code]
type
  TProc=procedure(HandleW, msg, idEvent, TimeSys: LongWord);
var
  BackImage, SlideImage: TBitmapImage;
  TimerID: LongWord;
 s:string;
  Width, Height:Integer;
 
function WrapTimerProc(callback:TProc; paramcount:integer):longword;
 external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
 external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
 external 'KillTimer@user32.dll stdcall';
function GetSystemMetrics(nIndex:Integer):Integer;
 external 'GetSystemMetrics@user32.dll stdcall';
 
procedure InitializeWizard();
begin
  WizardForm.Position:=poScreenCenter
  Width:=GetSystemMetrics(0)
  Height:=GetSystemMetrics(1)
  MainForm.BORDERSTYLE:=bsNone
  MainForm.Left:=0
  MainForm.Top:=0
  MainForm.Width:=Width
  MainForm.Height:=Height
  ExtractTemporaryFile('Back.bmp')
  s:=ExpandConstant('{tmp}')+'\Back.bmp '
  BackImage:=TBitmapImage.Create(MainForm)
  BackImage.Bitmap.LoadFromFile(s)
  BackImage.Align:=alClient
  BackImage.Parent:=MainForm
  BackImage.Stretch:=True
  MainForm.Visible:=True
 
  ExtractTemporaryFile('Back.bmp')
  ExtractTemporaryFile('1.bmp')
  ExtractTemporaryFile('2.bmp')
  ExtractTemporaryFile('3.bmp')
  ExtractTemporaryFile('4.bmp')
  ExtractTemporaryFile('5.bmp')
end;
 
function PercentProgress(): Integer;
begin
  with WizardForm.ProgressGauge do begin
    Result:=(Position-Min)/((Max - Min)/100)
  end
end;
 
procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
var
  percent: integer;
begin
  percent:=PercentProgress
  with SlideImage do begin
    if ((percent>0) and (percent<20) and (Tag<>1)) then begin
      Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\1.bmp')
      Tag:=1
    end else
    if ((percent>20) and (percent<40) and (Tag<>2)) then begin
      Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\2.bmp')
      Tag:=2
    end else
    if ((percent>40) and (percent<60) and (Tag<>3)) then begin
      Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\3.bmp')
      Tag:=3
    end else
    if ((percent>60) and (percent<80) and (Tag<>4)) then begin
      Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\4.bmp')
      Tag:=4
    end else
    if ((percent>80) and (percent<100) and (Tag<>5)) then begin
      Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\5.bmp')
      Tag:=5
   end
 end
end;
 
procedure CurPageChanged(CurPageID: Integer);
var
  pfunc: LongWord;
  Width, Height: Integer;
begin
  if CurPageID=wpInstalling
then
begin
  pfunc:=WrapTimerProc(@OnTimer, 4)
  TimerID:=SetTimer(0, 0, 500, pfunc)
  SlideImage:=TBitmapImage.Create(MainForm)
  with SlideImage do begin
    Stretch:=True
    Align:=alClient
    Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\1.bmp')
    Parent:=MainForm
    Tag:=1
 
  WizardForm.MainPanel.Visible:=False;
  WizardForm.Bevel1.Visible:=True;
  WizardForm.Bevel1.Width:=WizardForm.Width;
  WizardForm.Bevel1.Left:=ScaleX(0);
  WizardForm.Bevel1.Top:=ScaleY(101);
  WizardForm.Width:=ScaleX(395);
  WizardForm.Height:=ScaleY(180);
 
 
WizardForm.Left:=ScaleX(MainForm.Left+20);
WizardForm.Top:=ScaleY(MainForm.Height-190);
 
 
 
  WizardForm.InnerNotebook.Left:=ScaleX(10);
  WizardForm.InnerNotebook.Top:=ScaleY(10);
  WizardForm.InnerNotebook.Width:=ScaleX(370);
  WizardForm.InnerNotebook.Height:=ScaleY(65);
 
  WizardForm.StatusLabel.Left:=ScaleX(0);
  WizardForm.StatusLabel.Top:=ScaleY(5);
  WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
 
  WizardForm.FileNameLabel.Left:=ScaleX(0);
  WizardForm.FileNameLabel.Top:=ScaleY(20);
  WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
 
  WizardForm.ProgressGauge.Top:=ScaleY(40);
  WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
 
  WizardForm.CancelButton.Visible:=True;
  WizardForm.CancelButton.Cancel:=True;
  WizardForm.CancelButton.Left:=ScaleX(154);
  WizardForm.CancelButton.Top:=ScaleY(130);
  WizardForm.CancelButton.Width := ScaleX(75);
  WizardForm.CancelButton.Height := ScaleY(23);
  WizardForm.CancelButton.Left := WizardForm.Width - ScaleX(75 + 10);
  WizardForm.CancelButton.Top := WizardForm.Height - ScaleY(23 + 10);
  WizardForm.CancelButton.Caption := 'Cancel';
  WizardForm.CancelButton.ModalResult := mrCancel;
 
 end
end
if CurPageID=wpFinished
  then
   begin
  SlideImage.Hide
 
  WizardForm.Width:=502;
  WizardForm.Height:=392;
  WizardForm.Position:=poScreenCenter;
 
 end
end;
procedure DeinitializeSetup();
begin
  KillTimer(0, TimerID)
end;
 
Что можно изменить что бы кнопка Cancel заработала?
 
Заранее благодарю!

Всего записей: 89 | Зарегистр. 04-12-2007 | Отправлено: 21:58 04-12-2007
serg_aka_lain

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vitalliano
 
Допиши в CurPageChanged
WizardForm.CancelButton.BringToFront;
 
и позиция Cancel по вертикали у тебя  прописана два раза,
будет последняя выполняться.
 
Это подойдет лучше
WizardForm.CancelButton.Top:=ScaleY(130); , но можно и выше кнопку сделать.

Всего записей: 340 | Зарегистр. 13-01-2007 | Отправлено: 22:46 04-12-2007
Vitalliano

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
serg_aka_lain
 
 
Огромное спасибо, помогло!

Всего записей: 89 | Зарегистр. 04-12-2007 | Отправлено: 01:31 05-12-2007
GRom V

Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
serg_aka_lain
 
procedure CancelButtonClick(CurPage: Integer; var Cancel, Confirm: Boolean);
begin
 Cancel:=False;
 Confirm:=False;
 if CurPage = wpInstalling then
 begin
   if MsgBox('Ты действительно хочешь навинтить?', mbError, MB_YESNO) = idYes then
   begin
     Cancel:=true;
     
   end;
 end;
 end;
 
 
Добавлено:
Vitalliano
извеняюсь ......лохонулся

Всего записей: 466 | Зарегистр. 31-10-2006 | Отправлено: 03:19 05-12-2007
ShiftLock

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите ктонить!
Есть код........
 
function InitializeSetup(): Boolean;
var
  sLocation: String;
  iShowCmd: Integer;
  iErrorCode: Integer;
  bRun: Boolean;
begin
  ExtractTemporaryFile('splash.exe'); //Извлечение "временной" программы.
  sLocation := ExpandConstant('{tmp}');
  bRun := Exec(sLocation + '\splash.exe', '',sLocation, SW_SHOW, ewWaitUntilTerminated, iErrorCode);  //запуск "временной" программы.
  Result := True;
end;
 
 
Можно ли как нибудь в этом коде запустить splash.exe не из временной папки, а из той где находится инсталлятор...(типа {src}) ????????????

Всего записей: 1 | Зарегистр. 05-12-2007 | Отправлено: 05:32 05-12-2007
Olezka



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите сскрипт составить с выше вказаными к нему требованиями, и еще как эту программу заставить делать инсталятор больше 2Гб, а то доходит до 2 и выкидывает ошибку????

Всего записей: 624 | Зарегистр. 30-03-2005 | Отправлено: 10:12 05-12-2007
EagleSH

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Olezka

Цитата:
как эту программу заставить делать инсталятор больше 2Гб, а то доходит до 2 и выкидывает ошибку????

никак
макс размер - 2гига.

Всего записей: 318 | Зарегистр. 20-12-2005 | Отправлено: 12:11 05-12-2007
Unc1e

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShiftLock, попробуй так
//ExtractTemporaryFile('splash.exe'); //Извлечение "временной" программы.  
sLocation := ExpandConstant('{src}');  
Olezka, нужно включить разбиение на части
DiskSpanning=true
SlicesPerDisk=1
DiskSliceSize=732954624
Читайте хелп!

Всего записей: 434 | Зарегистр. 11-06-2007 | Отправлено: 13:57 05-12-2007
Angel_Smerti



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Люди, спецы - помогите:  
Есть в реестре такая ветка как HKEY_USERS  в этой ветке есть подключи, типа:
\S-1-5-21-73586283-1897051121-1417001333-1010
\S-1-5-21-73586283-1897051121-1417001333-1010_Classes подскажите, пожалуйста, как мне эти ключи правильно записать в инсталлятор, ведь как я понял для каждого компьютера эти подключи свои?

Всего записей: 115 | Зарегистр. 03-08-2003 | Отправлено: 20:35 05-12-2007
Ruud



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Angel_Smerti
 
Ветка HKEY_USERS\S-[длинный-набор-цифр] аналогична ветке HKEY_CURRENT_USER.

Всего записей: 65 | Зарегистр. 18-12-2005 | Отправлено: 00:54 06-12-2007
GRom V

Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Unc1e

Цитата:
ShiftLock, попробуй так  
//ExtractTemporaryFile('splash.exe'); //Извлечение "временной" программы.  
sLocation := ExpandConstant('{src}');  

Так не вкатывает!!!

Всего записей: 466 | Зарегистр. 31-10-2006 | Отправлено: 04:27 06-12-2007
Vitalliano

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот скрипт в котором я не совсеб догоняю как можно сделать так, чтобы когда прога установлена InnoSetup спрашивал удалить или нет, если удалить то удаляет, если нет то нет, но при этих двух вариантах инсталятор не должен запускатся!
 
 
function InitializeSetup(): Boolean;
var
ResultCode: Integer;
  s, ResultStr:string;
 
begin
If RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{6B0AA1BC-8CAF-4070-BD82-DE15MO6Y1986}_is1', 'UninstallString', ResultStr) then
begin
 If ResultStr<>'' then
 begin
  ResultStr:=RemoveQuotes(ResultStr);
If MsgBox('Приложение "Program" уже установлено на Вашем компьютере' #13#13 'Вы действительно хотите удалить данное приложение?', mbInformation, MB_OYRSNO)=IDYES then
if not Exec(ResultStr, '/SILENT', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode)
then
  else
  begin
   Result:=True;
   exit;
  end;
 end;
end;
Result:=True;
end;
 
Можно это сделать с сообщением "Да" или "Нет". Получается только с кнопкой "ОК" и "Отмена"?

Всего записей: 89 | Зарегистр. 04-12-2007 | Отправлено: 13:19 06-12-2007 | Исправлено: Vitalliano, 13:21 06-12-2007
Unc1e

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShiftLock, GRom V - а так  
[code]
var
  iErrorCode: Integer;
  s:string;
function InitializeSetup(): Boolean;
begin
 s:=ExpandConstant('{src}')+'\splash.exe';
 Exec(s, '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, iErrorCode);
end;

Всего записей: 434 | Зарегистр. 11-06-2007 | Отправлено: 15:24 06-12-2007 | Исправлено: Unc1e, 15:25 06-12-2007
Vitalliano

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребята извините насчет скрипта, протупил, там все ок!!!!
 
А вот насчет DLL, незнаю как ее запустить, это со Сталкера насколько я понимаю проверка системных требований, может Вы что-то подскажете???
 
Вот здесь я ее выложил:
 
http://depositfiles.com/files/2621893
 
Добавлено:
И вот за одно спрошу, сам скрипт вродибы правильный, но когда я поставил "{userinfoserial}" для записи в реестр, инсталятор после установки файлов начинает записывать информацию в реестр, и вот тогда выдает ошибку:
 
http://img227.imageshack.us/my.php?image=errorexi5.jpg
 
А вот сам скрипт:
 
function CheckSerial(Serial: String): Boolean;
var
 mask:string;
 i:Integer;
begin
Result:=True;
mask:='####-####-####-****';
If Length(Serial)<>Length(mask) then
begin
 Result:=False;
 exit;
end;
For i:=1 to Length(mask) do
begin
 If StrGet(mask, i)='#' then
 If not ((Ord(StrGet(Serial, i))>=48) and (Ord(StrGet(Serial, i))<=57)) then
 begin
  Result:=False;
  exit;
 end;
 If StrGet(mask, i)='*' then
 If not ((StrGet(Serial, i)>='A') and (StrGet(Serial, i)<='Z')) then
 begin
  Result:=False;
  exit;
 end;
end;
end;
 
Заранее благодарю!!!

Всего записей: 89 | Зарегистр. 04-12-2007 | Отправлено: 09:59 07-12-2007 | Исправлено: Vitalliano, 10:17 07-12-2007
EagleSH

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
господа подскажите, что здесь НЕ правильно:
 

Код:
 
function InitializeSetup(): Boolean;
var
  ResultCode: Integer;
  s, ResultStr:string;
begin
Result:=True;
If not RegKeyExists(HKLM, 'SOFTWARE\Program') or RegKeyExists(HKLM, 'SOFTWARE\Wow6423Node\Program')
 then
begin
  Result:=False;
 end
  else
   begin
 end;
end;
 

 
мне нужно чтоб реестр проверялся на наличие записи, тоесть запись есть тут SOFTWARE\Program ИЛИ тут SOFTWARE\Wow6423Node\Program
 
а оно токо SOFTWARE\Program проверяет

Всего записей: 318 | Зарегистр. 20-12-2005 | Отправлено: 21:02 07-12-2007 | Исправлено: EagleSH, 21:03 07-12-2007
serg_aka_lain

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
EagleSH
 
begin
 Result:=True;
 if not RegKeyExists(HKLM, 'SOFTWARE\Program') then
 begin
   if not RegKeyExists(HKLM, 'SOFTWARE\Wow6423Node\Program') then
  begin
   ...........
 
 
Добавлено:
Vitalliano
 
Первый вопрос уже обсужался (подробно) в предыдущей ветке.
 
По второму вопросу серийник можно ток записать
 
procedure CurStepChanged(CurStep: TSetupStep);
begin
 if CurStep = ssPostInstall then
 begin
  RegWriteStringValue( HKLM, 'SOFTWARE\Programma', 'SerialNumber', ExpandConstant('{userinfoserial}'));
 end
end;

Всего записей: 340 | Зарегистр. 13-01-2007 | Отправлено: 21:41 07-12-2007
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100

Компьютерный форум Ru.Board » Компьютеры » Программы » Inno Setup (создание инсталяционных пакетов)
Widok (17-06-2008 18:16): лимит страниц. продолжаем здесь


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru