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

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

 

Аватара для Drongo

Будем жить, Маэстро...


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

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


Привет. Только что опять друг попросил слегка переделать тот скрипт. Два нюанса:
1. Добавить строку, чтобы инсталятор проверял систему Windows 7, тоесть работал
2. При любом раскладе, если любой параметр, видеокарта, процессор, система, звуковая, озу. не соответствует минимальному значению, всё равно чтобы кнопка далее была активна.

С первым пунктом мне кажется можно так, но я не уверен:
читать дальше »
Код: Выделить весь код
...
if //(Pos('2000 Service Pack 4', SystemVersionPanel.Text) = 0) and  // Windows 2000 SP4
     //(Pos('XP Service Pack 1', SystemVersionPanel.Text) = 0) and  // Windows XP SP1
     (Pos('XP Service Pack 2', SystemVersionPanel.Text) = 0) and  // Windows XP SP2
     (Pos('XP Service Pack 3', SystemVersionPanel.Text) = 0) and  // Windows XP SP3
     (Pos('Vista', SystemVersionPanel.Text) = 0) then  // Windows Vista (c любым SP или без него)
     (Pos('Windows 7', SystemVersionPanel.Text) = 0) then  // Windows 7
     begin
      SystemVersionPanel.Color := $CCCCFF
      ChangeText := True
     end
...

А вот со вторым пунктом, чтобы сделать активную кнопку при любом раскладе, не знаю где... Возможно здесь

читать дальше »
Код: Выделить весь код
...
if ChangeText = True then
    begin
      TopText.Top := 0
      TopText.Caption := 'Не все компоненты удовлетворяют минимальным требованиям программы.' #13
                         'Пожалуйста, проверьте позиции, выделенные красным цветом.'
      TopText.Font.Color := clRed
      WizardForm.NextButton.Enabled := False // Сменить на True ???
    end
  else
    begin
      TopText.Caption := 'Все компоненты соответствуют минимальным требованиям программы.'
      TopText.Font.Color := clGreen
      TopText.Top := 8
      WizardForm.NextButton.Enabled := True
    end
end;
...

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 21:22, 29-07-2009 | #1171



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

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


Аватара для Drongo

Будем жить, Маэстро...


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

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


Исходный скрипт. Не получилось в один коммент записать, т.к. ограничение в 30000 символов, общий коммент превышает.
читать дальше »
Код: Выделить весь код
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "Need for Speed Most Wanted"
#define MyAppVerName "Need for Speed Most Wanted"
#define MyAppPublisher "EA Games Company."
#define MyAppURL "http://www.needforspeed.com/"
#define MyAppExeName "bin\XR_3DA.exe"
#define TIME_FOR_VIEW 1

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
;AppId={{337AE44F-3DF6-4C55-AFCA-AAA9A6436F0E}
AppName={#MyAppName}
AppVerName={#MyAppVerName}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
SetupIconFile=C:\speed.ico
AllowNoIcons=yes
LicenseFile=E:\Need for Speed Most Wanted\Support\en-uk_eula.txt
InfoBeforeFile=E:\Need for Speed Most Wanted\Readme.txt
OutputDir=E:\
OutputBaseFilename=Need for Speed Most Wanted
DiskSpanning=yes
; Если поставить значение '2' будет требовать второй диск, нужно расчитать размер
; от общего размера пакуемых файлов. Минимальный = '262144'
SlicesPerDisk=1
DiskSliceSize=2100000000
DiskClusterSize=4096
ReserveBytes=0
; Хорошее сжатие, обычное
;Compression=lzma/ultra
SolidCompression=yes
; Максимальное 64'битное
Compression=lzma/ultra64
InternalCompressLevel=ultra64

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

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons};
;Flags: unchecked

[Files]
Source: compiler:Libraries\InnoCallback.dll; Flags: dontcopy
Source: D:\Programms\Я_Автоустановка\BartPE\Image\Image_2.bmp; Flags: dontcopy
; Папка упаковываемой игры
Source: "E:\S.T.A.L.K.E.R\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; WorkingDir: {app}
Name: {group}\SaveEditor; Filename: {app}\SaveEditor.exe; WorkingDir: {app}
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; WorkingDir: {app}
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; WorkingDir: {app}; Tasks: desktopicon
Name: {group}\{cm:UninstallProgram, Need for Speed Most Wanted}; Filename: {uninstallexe}; WorkingDir: {app}

[_Code]
type
 PDisplay_Device = record
  cb: DWord;
  DeviceName: array [0..31] of char;
  DeviceString: array [0..127] of char;
  StateFlags: DWord;
  DeviceID, DeviceKey: array [0..127] of char;
 end;

 TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);

 TMixerCaps = record
  vPid, vDriverVersion: DWord;
  sName: array [0..31] of char;
  Support, cDestinations: DWord;
 end;

// Проверка версии Windows
#if Pos("4.", GetFileVersion(AddBackslash(GetEnv("windir")) + "Explorer.exe")) == 1
	{Win9x}
   TMemoryStatusEx = record
    dwLength, dwMemoryLoad: DWord;
    LoTotalPhys, LoAvailPhys, LoTotalPageFile, LoAvailPageFile,
    LoTotalVirtual, LoAvailVirtual, LoAvailExtendedVirtual, HiTotalPhys,
    HiAvailPhys, HiTotalPageFile, HiAvailPageFile, HiTotalVirtual, HiAvailVirtual,
    HiAvailExtendedVirtual: Integer;
   end;
  function GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx): Boolean;
   external 'GlobalMemoryStatus@kernel32.dll stdcall';
#else
	{WinNT}
   TMemoryStatusEx = record
    dwLength, dwMemoryLoad: DWord;
    LoTotalPhys, HiTotalPhys, LoAvailPhys, HiAvailPhys,
    LoTotalPageFile, HiTotalPageFile, LoAvailPageFile, HiAvailPageFile,
    LoTotalVirtual, HiTotalVirtual, LoAvailVirtual, HiAvailVirtual, LoAvailExtendedVirtual,
    HiAvailExtendedVirtual: Integer;
   end;
  function GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx): Boolean;
   external 'GlobalMemoryStatusEx@kernel32.dll stdcall';
#endif

const
// Менять минимальные системные значения
  DISPLAY_DEVICE_PRIMARY_DEVICE = 4;
  oneMB = 1024*1024;
  NeedMHz = 1500;
  NeedVideoRAM = 64;
  NeedSoundCard = 'Creative X-Fi';
  NeedMB = 256;
  NeedPageFile = 1024;

var
  WelcomeLabel1,WelcomeLabel2,FinishedHeadingLabel,RunLabel,
  FinishedLabel,PageNameLabel,PageDescriptionLabel:TLabel;
  RunMyProg: TCheckBox;
  TimerID: LongWord;
  currTime: Integer;
  SplashImage: TBitmapImage;

  InfoPage: TWizardPage;
  TopText, BottomText: TNewStaticText;
  ChangeText: Boolean;
  SystemPanel, ProcessorPanel, VideoPanel,
  AudioPanel, RAMPanel, PageFilePanel: TMemo;
  SystemVersionPanel, ProcessorMHzPanel, VideoRAMPanel,
  AudioNamePanel, RAMTotalPanel, PageFileTotalPanel: TMemo;
  lpCaps: TMixerCaps;
  Version: TWindowsVersion;
  MemoryEx: TMemoryStatusEx;
  n, errCode: Integer;
  Keys: TArrayOfString;
  DeviceValue: Cardinal;
  lpDisplayDevice: PDisplay_Device;

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

function GetDeviceCaps(hDC, nIndex: Integer): Integer;
 external 'GetDeviceCaps@GDI32 stdcall';

function CreateDC(lpDriverName, lpDeviceName, lpOutput: String; lpInitData: Integer): Integer;
 external 'CreateDCA@GDI32 stdcall';

function EnumDisplayDevices(lpDevice, iDevNum: DWord; var lpDisplayDevice: PDisplay_Device; dwFlags: DWord): Boolean;
 external 'EnumDisplayDevicesA@user32.dll stdcall';

function mixerGetDevCaps(uDeviceID: LongInt; var lpCaps: TMixerCaps; uSize: LongInt): LongInt;
 external 'mixerGetDevCapsA@winmm.dll stdcall';

function mixerGetNumDevs: Integer;
 external 'mixerGetNumDevs@winmm.dll stdcall';

//--------------
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 Progress: Integer;
begin
  with WizardForm.ProgressGauge do Result := (Position - Min)/((Max - Min)/100);
end;

function CurrTimer: Integer;
var
  i: Integer;
begin
  i:= Progress;
  if ((i > 0) and (i < 4)) then Result:= 1 else
  if ((i > 4) and (i < 8)) then Result:= 2 else
  if ((i > 8) and (i < 12)) then Result:= 3 else
  if ((i > 12) and (i < 16)) then Result:= 4 else
  if ((i > 16) and (i < 20)) then Result:= 5 else
  if ((i > 20) and (i < 24)) then Result:= 6 else
  if ((i > 24) and (i < 28)) then Result:= 7 else
  if ((i > 28) and (i < 32)) then Result:= 8 else
  if ((i > 32) and (i < 36)) then Result:= 9 else
  if ((i > 36) and (i < 40)) then Result:= 10 else
  if ((i > 40) and (i < 44)) then Result:= 11 else
  if ((i > 44) and (i < 48)) then Result:= 12 else
  if ((i > 48) and (i < 52)) then Result:= 13 else
  if ((i > 52) and (i < 56)) then Result:= 14 else
  if ((i > 56) and (i < 60)) then Result:= 15 else
  if ((i > 60) and (i < 64)) then Result:= 16 else
  if ((i > 64) and (i < 68)) then Result:= 17 else
  if ((i > 68) and (i < 72)) then Result:= 18 else
  if ((i > 72) and (i < 76)) then Result:= 19 else
  if ((i > 76) and (i < 80)) then Result:= 20 else
  if ((i > 80) and (i < 84)) then Result:= 21 else
  if ((i > 84) and (i < 88)) then Result:= 22 else
  if ((i > 88) and (i < 91)) then Result:= 23 else
  if ((i > 91) and (i < 94)) then Result:= 24 else
  if ((i > 94) and (i < 97)) then Result:= 25 else
  if ((i > 97) and (i < 100)) then Result:= 26;
end;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
  case CurrTimer of
    1: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_2.bmp')) end;
...   
    26: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_27.bmp')) end;
  end;
end;

procedure RLabelOnClick(Sender: TObject);
begin
  if RunMyProg.Checked = False then
  begin
    RunMyProg.Checked := True;
  end else
    RunMyProg.Checked := False;
end;

// функция для запуска программы если отмечен чебокс
procedure CurStepChanged(CurStep: TSetupStep);
var
  ErrorCode: Integer;
begin
  if CurStep = ssDone then
  begin
    if RunMyProg.Checked = True then
    Exec(ExpandConstant('{app}\speed.exe'), '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
  end;
end;

// Дополнить число до кратного Multiple
function ToMultiple(Bytes, Multiple: Integer): Integer;
begin
  if Abs(Bytes/Multiple) > Bytes/Multiple then
     Result := (Bytes/Multiple + 1)*Multiple
  else
     Result := Bytes;
end;

// Перевод числа в значение Бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)
function ByteOrTB(Bytes: Extended; noMB: Boolean): String;
begin
  if not noMB then
    Result := FloatToStr(Int(Bytes)) + ' Мб'
  else
		if Bytes < 1024 then
       Result := FloatToStr(Int(Bytes)) + ' Бт'
    else
			 if Bytes/1024 < 1024 then
          Result := FloatToStr(round((Bytes/1024)*10)/10) + ' Кб'
       else
					if Bytes/oneMB < 1024 then
             Result := FloatToStr(round(Bytes/oneMB*100)/100) + ' Мб'
          else
             if Bytes/oneMB/1000 < 1024 then
                Result := FloatToStr(round(Bytes/oneMB/1024*1000)/1000) + ' Гб'
             else
							  Result := FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) + ' Тб'
 StringChange(Result, ',', '.')
end;

// Удаление начальных, конечных и повторных пробелов
function DelSp(String: String): String;
begin
  while (Pos('  ', String) > 0) do Delete(String, Pos('  ', String), 1)
  Result := Trim(String)
end;

function Size64(Hi, Lo: Integer): Extended;
begin
  Result := Lo
  if Lo < 0 then
    Result := Result + $7FFFFFFF + $7FFFFFFF + 2
  for Hi := Hi-1 downto 0 do Result := Result + $7FFFFFFF + $7FFFFFFF + 2
end;

function CheckCPU(NeedMHz: Integer): Boolean;
var
  String: String;
begin
	String := 'Hardware\Description\System\CentralProcessor'; RegGetSubkeyNames(HKLM, String, Keys)	 // Количество ядер
	for n := 0 to GetArrayLength(Keys)-1 do
      RegQueryStringValue(HKLM, String + '\' + Keys[n], 'ProcessorNameString', Keys[n])
	if not RegQueryDWordValue(HKLM, String + '\0', '~MHz', DeviceValue) or (DeviceValue < NeedMHz) then
         Exit
  else
     Result := True
end;

function CheckMemorySize(NeedRAM: Integer): Boolean;
begin
	MemoryEx.dwLength := SizeOf(MemoryEx);
	if not GlobalMemoryStatusEx(MemoryEx) then
         MsgBox('Ошибка функции:' + #13 + 'GlobalMemoryStatusEx', mbError, mb_Ok)
  else
	   if (ToMultiple(trunc(Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys)/oneMB), 16) < NeedRAM) then
         Exit
     else
         Result := True;
end;

procedure CreateCheckForm();
begin
  TopText := TNewStaticText.Create(InfoPage)
  with TopText do
  begin
    Parent := InfoPage.Surface
    Left := 0
    AutoSize := True
  end

  BottomText := TNewStaticText.Create(InfoPage)
  with BottomText do
  begin
    Parent := InfoPage.Surface
    Caption := 'Когда Вы будете готовы продолжить установку, нажмите «Далее».'
    Font.Color := clBlack
    Left := 0
    Top := 200
    AutoSize := True
  end

  SystemPanel := TMemo.Create(InfoPage)
  with SystemPanel do
  begin
    Text := 'Система'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := ScaleY(33)
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := $EEEEEE
  end

  SystemVersionPanel := TMemo.Create(InfoPage)
  with SystemVersionPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := SystemPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
   end

  ProcessorPanel := TMemo.Create(InfoPage)
  with ProcessorPanel do
  begin
    Text := 'Процессор'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := SystemPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := $EEEEEE
  end

  ProcessorMHzPanel := TMemo.Create(InfoPage)
  with ProcessorMHzPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := ProcessorPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  VideoPanel := TMemo.Create(InfoPage)
  with VideoPanel do
  begin
    Text := 'Видеоадаптер'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := ProcessorPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := $EEEEEE
  end

  VideoRAMPanel := TMemo.Create(InfoPage)
  with VideoRAMPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := VideoPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  AudioPanel := TMemo.Create(InfoPage)
  with AudioPanel do
  begin
    Text := 'Звуковая карта'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := VideoPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := $EEEEEE
  end

  AudioNamePanel := TMemo.Create(InfoPage)
  with AudioNamePanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := AudioPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  RAMPanel := TMemo.Create(InfoPage)
  with RAMPanel do
  begin
    Text := 'Объём памяти'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := AudioPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := $EEEEEE
  end

  RAMTotalPanel := TMemo.Create(InfoPage)
  with RAMTotalPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := RAMPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  PageFilePanel := TMemo.Create(InfoPage)
  with PageFilePanel do
  begin
    Text := 'Файл подкачки'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := RAMPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := $EEEEEE
  end;

  PageFileTotalPanel := TMemo.Create(InfoPage)
  with PageFileTotalPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := PageFilePanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end
end;

procedure UpdateInfo();
var
  DeviceName, DeviceKey: String;
begin
  ChangeText := False

  GetWindowsVersionEx(Version)

  // Операционная система:
  SystemVersionPanel.Color := $CCFFCC

  DeviceKey := 'Software\Microsoft\Windows NT\CurrentVersion'
  if not UsingWinNT then StringChange(DeviceKey, 'Windows NT', 'Windows')
	RegQueryStringValue(HKLM, DeviceKey, 'ProductName', DeviceName)
  if RegQueryStringValue(HKLM, DeviceKey, 'CSDVersion', DeviceKey) then
     DeviceName := DeviceName + ' ' + DeviceKey
	StringChange(DeviceName, 'Microsoft ', '')
  SystemVersionPanel.Text := ' ' + DeviceName + ' сборка ' + IntToStr(Version.Major) + '.' + IntToStr(Version.Minor) +
                             '.' + IntToStr(Version.Build)

  if //(Pos('2000 Service Pack 4', SystemVersionPanel.Text) = 0) and  // Windows 2000 SP4
     //(Pos('XP Service Pack 1', SystemVersionPanel.Text) = 0) and  // Windows XP SP1
     (Pos('XP Service Pack 2', SystemVersionPanel.Text) = 0) and  // Windows XP SP2
     (Pos('XP Service Pack 3', SystemVersionPanel.Text) = 0) and  // Windows XP SP3
     (Pos('Vista', SystemVersionPanel.Text) = 0) then  // Windows Vista (c любым SP или без него)
     begin
      SystemVersionPanel.Color := $CCCCFF
      ChangeText := True
     end

  // Процессор:
  ProcessorMHzPanel.Color := $CCFFCC

  if not CheckCPU(NeedMHz) then
     begin
       ProcessorMHzPanel.Color := $CCCCFF
       ChangeText := True
     end

  ProcessorMHzPanel.Text := ' ' + DelSp(Keys[0]) + ' @' + IntToStr(DeviceValue) + ' MHz'
  if GetArrayLength(Keys) > 1 then
     ProcessorPanel.Text := 'Процессоры' // + ' (' + IntToStr(GetArrayLength(Keys)) + ')'

  // Видеокарта:
  VideoRAMPanel.Color := $CCFFCC

  lpDisplayDevice.cb := SizeOf(lpDisplayDevice)
  DeviceKey := ''
	n := 0
  while not (EnumDisplayDevices(0, n, lpDisplayDevice, 0) and
            (lpDisplayDevice.StateFlags and DISPLAY_DEVICE_PRIMARY_DEVICE > 0)) and (n < 127) do n := n + 1
	for n := 0 to 127 do DeviceKey := DeviceKey + lpDisplayDevice.DeviceKey[n]
  Delete(DeviceKey, Pos(Chr(0), DeviceKey), 127)  // Ключ драйвера получаем из API
	StringChange(DeviceKey, '\Registry\Machine\', '')
  errCode := 1
  DeviceValue := 0
  if RegQueryBinaryValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', DeviceName) then
		 for n := 1 to Length(DeviceName) do
       begin
         DeviceValue := DeviceValue + Ord(DeviceName[n])*errCode
         errCode := errCode*$100
       end
  else
     if RegQueryDWordValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', DeviceValue) then
     else
        RegQueryDWordValue(HKLM, DeviceKey + '\Info', 'VideoMemory', DeviceValue)
	DeviceName := ''
  for n := 0 to 127 do DeviceName := DeviceName + lpDisplayDevice.DeviceString[n]
  Delete(DeviceName, Pos(Chr(0), DeviceName), 127)

  if DeviceName <> '' then
    if DeviceValue > 0 then
      VideoRAMPanel.Text := ' ' + DelSp(DeviceName) + ', '+ ByteOrTB(DeviceValue/oneMB, False)
    else
      VideoRAMPanel.Text := ' ' + DelSp(DeviceName) + ' (Standard), '+ ByteOrTB(DeviceValue/oneMB, False)
  else
     begin
      VideoRAMPanel.Text := ' Драйвер устройства не обнаружен'
      VideoRAMPanel.Color := $CCCCFF
      ChangeText := True
     end
  if (DeviceValue/oneMB < NeedVideoRAM) then
     begin
       VideoRAMPanel.Color := $CCCCFF
       ChangeText := True
     end
  VideoRAMPanel.Text := VideoRAMPanel.Text + ', ' + IntToStr(GetSystemMetrics(0)) + 'x' +
                        IntToStr(GetSystemMetrics(1)) + ' (' + IntToStr(GetDeviceCaps(CreateDC('DISPLAY','','',0),14) *
                        GetDeviceCaps(CreateDC('DISPLAY','','',0),12)) + ' bit)'

  // Звуковая карта:
  AudioNamePanel.Color := $CCFFCC

  // for errCode := 0 to 1 do  // Вывод основного звукового устройства
  for errCode := 0 to mixerGetNumDevs do
    begin
		  mixerGetDevCaps(errCode-1, lpCaps, SizeOf(lpCaps))
      DeviceName := ' '
		  for n := 0 to 31 do DeviceName := DeviceName + lpCaps.sName[n]
      Delete(DeviceName, Pos(Chr(0), DeviceName), 31)
      Delete(DeviceName, Pos(' [', DeviceName), 31)
      StringChange(DeviceName, 'SB ', 'Creative ')
      Delete(DeviceName, Pos(' Audio', DeviceName), 31)
		  SetArrayLength(Keys, errCode)
      if errCode > 0 then Keys[errCode-1] := DeviceName
    end

	if GetArrayLength(Keys) > 1 then
    begin
     AudioPanel.Text := 'Звуковые карты'
     // AudioPanel.Text := 'Звуковые карты (' + IntToStr(GetArrayLength(Keys)) +')'
     AudioNamePanel.Text := ''
     for n := 1 to GetArrayLength(Keys) do
         AudioNamePanel.Text := AudioNamePanel.Text + Keys[n-1]  // + '(' + IntToStr(n) + ')'
    end
   else
    if GetArrayLength(Keys) = 0 then
     begin
      AudioNamePanel.Text := ' Драйвер устройства не обнаружен'
      AudioNamePanel.Color := $CCCCFF
      ChangeText := True
     end
      else
       AudioNamePanel.Text := Keys[0]
  if Pos(NeedSoundCard, AudioNamePanel.Text) = 0 then
     AudioNamePanel.Text := AudioNamePanel.Text + ' (рекомендуется ' + NeedSoundCard + ')'

  // Объём памяти:
    RAMTotalPanel.Color := $CCFFCC
  if not CheckMemorySize(NeedMB) then
    begin
      RAMTotalPanel.Color := $CCCCFF
      ChangeText := True
    end
  RAMTotalPanel.Text := ' ' + ByteOrTB(ToMultiple(trunc(Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys)/oneMB), 16), False) + ' всего, ' +
                              ByteOrTB(ToMultiple(trunc(Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys)/oneMB), 16) -
                                                        Size64(MemoryEx.HiAvailPhys, MemoryEx.LoAvailPhys)/oneMB, False) + ' используется, ' +
                              ByteOrTB(Size64(MemoryEx.HiAvailPhys, MemoryEx.LoAvailPhys)/oneMB, False) + ' свободно'

  // Виртуальная память:
  PageFileTotalPanel.Color := $CCFFCC
  PageFileTotalPanel.Text := ' ' + ByteOrTB(Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile)/oneMB, False) + ' всего, ' +
                                   ByteOrTB((Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile) -
                                             Size64(MemoryEx.HiAvailPageFile, MemoryEx.LoAvailPageFile))/oneMB, False) + ' занято системным кэшем'
  if Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile)/oneMB < NeedPageFile then
    begin
      PageFileTotalPanel.Color := $CCCCFF
      ChangeText := True
    end

  if ChangeText = True then
    begin
      TopText.Top := 0
      TopText.Caption := 'Не все компоненты удовлетворяют минимальным требованиям программы.' #13
                         'Пожалуйста, проверьте позиции, выделенные красным цветом.'
      TopText.Font.Color := clRed
      WizardForm.NextButton.Enabled := False
    end
  else
    begin
      TopText.Caption := 'Все компоненты соответствуют минимальным требованиям программы.'
      TopText.Font.Color := clGreen
      TopText.Top := 8
      WizardForm.NextButton.Enabled := True
    end
end;

procedure CurPageChanged(CurPageID: Integer);
var
  pfunc: LongWord;
begin
  WelcomeLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
  WelcomeLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
  PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
  PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;
  FinishedHeadingLabel.Caption := WizardForm.FinishedHeadingLabel.Caption;
  FinishedLabel.Caption := WizardForm.FinishedLabel.Caption;
// здесь придётся вручную вводить требуемый текст
  RunLabel.Caption := 'Запустить игру';

  if CurPageID = InfoPage.ID then UpdateInfo();  // Обновление информации о системе

  if (CurPageID = wpInstalling) then begin
    pfunc := WrapTimerProc(@OnTimer, 4);
    TimerID := SetTimer(0, 0, 1000, pfunc);

    WizardForm.InnerNotebook.Hide;
    WizardForm.Bevel1.Hide;
    WizardForm.MainPanel.Hide;
    WizardForm.PageNameLabel.Hide;
    WizardForm.PageDescriptionLabel.Hide;

    WizardForm.ProgressGauge.Show;
    WizardForm.StatusLabel.Show;
    SplashImage.Show;
  end
  else begin
    WizardForm.ProgressGauge.Hide;
    WizardForm.StatusLabel.Hide;
    SplashImage.Hide;
  end;
    
  if (CurPageID > wpInstalling) and (CurPageID < wpFinished) then begin
    with WizardForm do begin
      InnerNotebook.Show;
      Bevel1.Show;
      MainPanel.Show;
      PageNameLabel.Show;
      PageDescriptionLabel.Show;
    end;
  end;
end;

procedure InitializeWizard();
var
  i: Integer;
// Меняем размер окна установки
//begin
  //WizardForm.ClientHeight:= 800;
//  WizardForm.ClientWidth:= 750;
  //WizardForm.Height:= 500;
//  WizardForm.Width:= 700;
begin
  InfoPage := CreateCustomPage(wpLicense, 'Аппаратное и программное обеспечение',
                                          'Программа установки обнаружила следующие необходимые компоненты.')
  CreateCheckForm()  // Создание объектов TMemo, в которых будет выводится информация о системе
  UpdateInfo()  // Обновление информации о системе

  // ну не все же 26 штук перечислять
  for i:= 2 to 27 do ExtractTemporaryFile('Image_' + IntToStr(i) + '.bmp');

  currTime := 0;

  with WizardForm do begin
    WelcomeLabel1.Hide;
    WelcomeLabel2.Hide;
    PageNameLabel.Hide;
    PageDescriptionLabel.Hide;
    FinishedHeadingLabel.Hide;
    FinishedLabel.Hide;
    // незнаю почему, но Hide не действует. Поэтому просто уменьшил размер
    RunList.Height := 0;
    RunList.Width := 0;
    FilenameLabel.Hide;

    with StatusLabel do begin
      Parent := WizardForm;
      Top := ScaleY(315);
      Left := ScaleX(10);
      Width := ScaleX(200);
      Hide;
    end;
    
    with ProgressGauge do begin
      Parent := WizardForm;
      Top := ScaleY(330);
      // Сдвигаем прогресс бар вниз
      //WizardForm.ProgressGauge.Top := ScaleY(430);
      Left := ScaleX(10);
      Width := ScaleX(380);
      Height := ScaleX(18);
      Hide;
    end;
  end;

  SplashImage := TBitmapImage.Create(WizardForm);
  with SplashImage do begin
    Top := 0;
    Left := 0;
    Width := WizardForm.MainPanel.Width;
    Height := WizardForm.Bevel.Top;
    Parent := WizardForm.InnerPage;
    Stretch := True;
    Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_10.bmp'));
    Hide;
  end;

  with WizardForm do begin
    WizardBitmapImage.Align:=true;
    WizardBitmapImage2.Align:=true;
    WizardSmallBitmapImage.Align:=true;
  end;
  
  WelcomeLabel1:= TLabel.Create(WizardForm);
  with WelcomeLabel1 do begin
    Left:=ScaleX(10);
    Top := ScaleY(10);
    Width := ScaleX(350);
    Height := ScaleY(75);
    AutoSize := False;
    WordWrap := True;
    Font.Color := clGreen;
  // здесь можно поиграть шрифтом
  //  WelcomeLabel1.Font.Style := [fsBold];
  //  WelcomeLabel1.Font.Name:='MS Sans Serif';
    Font.Size := 14;
    Transparent := True;
    Parent := WizardForm.WelcomePage;
  end;
  
  WelcomeLabel2:=TLabel.Create(WizardForm);
  with WelcomeLabel2 do begin
    Left := ScaleX(10);
    Top := ScaleY(70);
    Width := ScaleX(200);
    Height := ScaleY(300);
    AutoSize := False;
    WordWrap := True;
    Font.Color := clGreen;
    Font.Style := [fsBold];
    Font.Size := 10;
    Transparent := True;
    Parent := WizardForm.WelcomePage;
  end;
  
  PageNameLabel := TLabel.Create(WizardForm);
  with PageNameLabel do begin
    Left := ScaleX(25);
    Top := ScaleY(10);
    Width := ScaleX(300);
    Height := ScaleY(14);
    AutoSize := False;
    WordWrap := True;
    Font.Color := $339933;
    Font.Style := [fsBold];
    Font.Size := 11;
    Transparent := True;
    Parent := WizardForm.MainPanel;
  end;
  
  PageDescriptionLabel := TLabel.Create(WizardForm);
  with PageDescriptionLabel do begin
    Left := ScaleX(40);
    Top := ScaleY(25);
    Width := ScaleX(475);
    Height := ScaleY(30);
    AutoSize := False;
    WordWrap := True;
    Font.Color := $339933;
    Font.Style := [fsBold];
    Font.Size := 9;
    Transparent := True;
    Parent := WizardForm.MainPanel;
  end;
  
  FinishedHeadingLabel:= TLabel.Create(WizardForm);
  with FinishedHeadingLabel do begin
    Left := ScaleX(10);
    Top := ScaleY(10);
    Width := ScaleX(320);
    Height := ScaleY(75);
    AutoSize := False;
    WordWrap := True;
    Font.Color := clBlue;
// здесь тоже можно поиграть шрифтом
//  FinishedHeadingLabel.Font.Style := [fsBold];
//  FinishedHeadingLabel.Font.Name:='MS Sans Serif';
    Font.Size := 14;
    Transparent := True;
    Parent := WizardForm.FinishedPage;
  end;
  
  FinishedLabel:= TLabel.Create(WizardForm);
  with FinishedLabel do begin
    Left := ScaleX(10);
    Top := ScaleY(70);
    Width := ScaleX(220);
    Height := ScaleY(300);
    AutoSize := False;
    WordWrap := True;
    Font.Color := clRed;
    Font.Size := 10;
    Transparent := True;
    Parent := WizardForm.FinishedPage;
  end;
  
  RunMyProg := TCheckBox.Create(WizardForm);
  with RunMyProg do begin
    Parent := WizardForm.FinishedPage;
    Left := ScaleX(10);
    Top := ScaleY(270);
    Width := ScaleX(13);
    Height := ScaleX(13);
    Checked := True; // чтоб чебокс был отмечен, раскоментируй строку
  end;
  
  RunLabel:= TLabel.Create(WizardForm);
  with RunLabel do begin
    Left := ScaleX(30);
    Top := ScaleY(270);
    Width := ScaleX(200);
    Height := ScaleY(20);
    AutoSize := False;
    WordWrap := True;
    Font.Color := clGreen;
    Font.Style := [fsBold];
    Font.Size := 10;
    OnClick := @RLabelOnClick;
    Transparent := True;
    Parent := WizardForm.FinishedPage;
  end;
end;

procedure DeinitializeSetup();
begin
  KillTimer(0, TimerID);
end;

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 21:25, 29-07-2009 | #1172


Ветеран


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

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


Цитата Drongo:
С первым пунктом мне кажется можно так, но я не уверен: »
Я тоже не уверен на все сто, но помоему так.
Цитата Drongo:
А вот со вторым пунктом, чтобы сделать активную кнопку при любом раскладе, не знаю где... »
Можно просто удалить WizardForm.NextButton.Enabled:= False и WizardForm.NextButton.Enabled:= True, т.е.:
читать дальше »
Код: Выделить весь код
...
if ChangeText = True then
    begin
      TopText.Top := 0;
      TopText.Caption := 'Не все компоненты удовлетворяют минимальным требованиям программы.' + #13 +
                         'Пожалуйста, проверьте позиции, выделенные красным цветом.';
      TopText.Font.Color := clRed;
    end
  else
    begin
      TopText.Caption := 'Все компоненты соответствуют минимальным требованиям программы.';
      TopText.Font.Color := clGreen;
      TopText.Top := 8;
    end;
end;
...


P.S.
Забываем про знаки ';' в конце строк...

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

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

Отправлено: 22:10, 29-07-2009 | #1173


Аватара для A1EXXX

Старожил


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

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


Ребята, у меня такой вопрос: я подставляю картинку в левый нижний угол, но можно ли как нибудь сделать, чтобы она отображалась на всех страницах, кроме страницы распаковки??? (использую слайд-шоу, и картинка выглядывает из-под прогресс-бара). И как вручную указать требуемое свободное место на диске здесь (своё число mb указать)

Отправлено: 22:28, 29-07-2009 | #1174


Аватара для Drongo

Будем жить, Маэстро...


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

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


Спасибо Serega, уже потихоньку соображаю самостоятельно.
Цитата Serega:
Забываем про знаки ';' в конце строк... »
Так тож я ничего не правил, как было.

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 11:21, 30-07-2009 | #1175


Аватара для x-net

Старожил


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

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


Подскажите пожалуйста как такой инсталл сделать, чтоб было такое оформление, и были функции удалений сохраненй и игр?
Сделано классно, я вытаскивал код, скомпилировал, а картинка сужается.
Сделать отдельно такую тему отдельно.

Последний раз редактировалось x-net, 02-12-2011 в 18:40.


Отправлено: 16:32, 30-07-2009 | #1176


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


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

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


Подскажите пожалуйста, как в inno setup реализовать следующее:

1. В программе удаления сделать список дополнительных задач (как [tasks] в программе установки; нужно для удаления определённого каталога со все его содержимым) . Показ стандартного (системного) диалога с запросом меня не очень устраивает, т.к. я делаю многоязычный инсталлятор, а в секции [code] {cm:*} не работает...
2. На черточке внизу диалогового окна написать текст (копирайт).
3. Во всех диалоговых окнах инсталлятора и деинсталлятора (кроме заголовка окна) сделать отображаение AppVerName вместо AppName.


Прошу прощение, если это уже обсуждалось... у меня дорогой интернет-трафик и поэтому я не имею возможности просматривать всё подряд... Заранее благодарен.

Отправлено: 17:56, 30-07-2009 | #1177


Аватара для Drongo

Будем жить, Маэстро...


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

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


Цитата Drongo:
1. Добавить строку, чтобы инсталятор проверял систему Windows 7, тоесть работал »
На Windows 7 в ветке
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion] значение ProductName следующее
Код: Выделить весь код
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion]
"ProductName"="Windows 7 Ultimate"
И я так понимаю, нужно так? Или прокатит и предыдущая запись?

Код: Выделить весь код
...
(Pos('Windows 7 Ultimate', SystemVersionPanel.Text) = 0) then  // Windows 7...

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 20:36, 30-07-2009 | #1178


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


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

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


Цитата A1EXXX:
чтобы она отображалась на всех страницах, кроме страницы распаковки??? »
конечно,

procedure CurPageChanged(CurPageID: Integer);
begin
показать картинку. (нужный код)
if CurPageID = wpInstalling then
begin
не показывать картинку. (нужный код)
end;
end;

Цитата A1EXXX:
И как вручную указать требуемое свободное место на диске здесь (своё число mb указать) »
[Setup]
ExtraDiskSpaceRequired=45678901234
; (1048576 bytes = 1 megabyte)
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:59, 30-07-2009 | #1179


Аватара для A1EXXX

Старожил


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

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


Цитата serg aka lain:
procedure CurPageChanged(CurPageID: Integer);
begin
показать картинку. (нужный код)
if CurPageID = wpInstalling then
begin
не показывать картинку. (нужный код)
end;
end; »
вот только я не знаю, что писать вместо того, что я выделил....

Отправлено: 01:40, 31-07-2009 | #1180



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




 
Переход