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

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

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

Ветеран


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


Конфигурация

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


Изменения
Автор: jameszero
Дата: 08-11-2010
Описание: тема закрыта
Лимит страниц.
Тема закрыта.
Продолжение по ссылке Скрипты Inno Setup. Помощь и советы [часть 3]




Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
  • ISTool - неплохой редактор скриптов Inno Setup.
    Последняя версия: 5.3.0.1 [29.09.2009] - Скачать | зеркало;
    Предыдущая версия: 5.3.0 [07.04.2009] - Скачать (зеркало) | Русификатор (зеркало);

  • Inno Script Generator - ещё один редактор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать;

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы. Официальный сайт - недоступен.
    Последняя версия: 2.0.8 [12.11.2006] - Страница с зеркалами;

  • Inno Setup GameScript Generator - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;

  • ISSkin - Программа для создания и добавления в инсталлятор скинов. Инструкция.
    Последняя версия: 3.0.0.0 [19.01.2010] - Скачать;

  • InnoSetup Script Joiner - Программа для объединения нескольких скриптов InnoSetup в один;

  • Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
    Последняя версия: 0.1.3 [11.09.2009] - Скачать;


Ссылка на архив предыдущей темы (также можно скачать из вложения)

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


Отправлено: 22:06, 23-08-2009

 

Аватара для R.i.m.s.k.y.

Ветеран


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

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


Цитата SeDmY:
Даже не менял ничего »
Чудесато, я брал этот скрипт из шапки этой темы и все робит, попробуйте, все должно работать изначально
Код: Выделить весь код
[_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;

 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 = 2200;
  NeedVideoRAM = 256;
  NeedSoundCard = 'Realtek HD';
  NeedMB = 1024;
  NeedPageFile = 2048;

var
  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';

// Дополнить число до кратного 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 := clGray
    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 := clBlack
  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 := clBlack
  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 := clBlack
  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 := clBlack
  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 := clBlack
  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 := clBlack
  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 := clBlack
    SystemVersionPanel.Font.Color := clGreen

  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 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 := clBlack
      SystemVersionPanel.Font.Color := clRed
      ChangeText := True
     end

  // Процессор:
  ProcessorMHzPanel.Color := clBlack
  ProcessorMHzPanel.Font.Color := clGreen

  if not CheckCPU(NeedMHz) then
     begin
       ProcessorMHzPanel.Color := clBlack
       ProcessorMHzPanel.Font.Color := clRed
       ChangeText := True
     end

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

  // Видеокарта:
  VideoRAMPanel.Color := clBlack
  VideoRAMPanel.Font.Color := clGreen

  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 := clBlack
      VideoRAMPanel.Font.Color := clRed
      ChangeText := True
     end
  if (DeviceValue/oneMB < NeedVideoRAM) then
     begin
      VideoRAMPanel.Color := clBlack
      VideoRAMPanel.Font.Color := clRed
       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 := clBlack
  AudioNamePanel.Font.Color := clGreen

  // 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 := clBlack
      AudioNamePanel.Font.Color := clRed
      ChangeText := True
     end
      else
       AudioNamePanel.Text := Keys[0]
  if Pos(NeedSoundCard, AudioNamePanel.Text) = 0 then
     AudioNamePanel.Text := AudioNamePanel.Text + ' (рекомендуется ' + NeedSoundCard + ')'

  // Объём памяти:
    RAMTotalPanel.Color := clBlack
    RAMTotalPanel.Font.Color := clGreen
  if not CheckMemorySize(NeedMB) then
    begin
    RAMTotalPanel.Color := clBlack
    RAMTotalPanel.Font.Color := clRed
      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 := clBlack
  PageFileTotalPanel.Font.Color := clGreen
  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 := clBlack
  PageFileTotalPanel.Font.Color := clRed
      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 InitializeWizard();
begin
  InfoPage := CreateCustomPage(wpLicense, 'Аппаратное и программное обеспечение',
                                          'Программа установки обнаружила следующие наобходимые компоненты.')
  CreateCheckForm()  // Создание объектов TMemo, в которых будет выводится информация о системе
  UpdateInfo()  // Обновление информации о системе
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = InfoPage.ID then UpdateInfo()  // Обновление информации о системе
end;
Цитата tema47:
данные об игре попали в реестр »
Что? Куда? Зачем? Какие данные?

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Отправлено: 11:28, 18-06-2010 | #1961



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

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


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


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

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


Цитата R.i.m.s.k.y.:
Параметры тихой установки PsysX я не знаю. Запустите установщик PsysX с ключом /? (PsysX.exe /?) - он должен написать какой параметр для тихой установки, его и пропишите вместо ???
{src} - путь к файлу вашего скомпилированного установщика. Рядом с этим установщиком должны лежать папки DirectX и PsysX »
Спасибо огромное

Отправлено: 11:57, 18-06-2010 | #1962


Аватара для R.i.m.s.k.y.

Ветеран


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

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


Цитата -S.S.V.-:
Спасибо огромное »
Огромное пожалуйста!

Чтобы сказать спасибо надо внизу сообщения, за которое благодарите, нажать "полезное сообщение"

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!

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

Отправлено: 12:04, 18-06-2010 | #1963


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


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

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


Ну например установил я игру. В реестре появились данные о ней. Например

Я сделал репак, но этих данных в реестре нет и игра получается на англ. языке.
Как сделать чтобы эти данные добавлялись автоматически?

Модератор: Пользуйтесь тегами форума. Такие огромные картинки мешают другим читать форум.

Последний раз редактировалось volk1234, 20-06-2010 в 15:58.


Отправлено: 12:51, 18-06-2010 | #1964


Аватара для R.i.m.s.k.y.

Ветеран


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

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


Цитата tema47:
Как сделать чтобы эти данные добавлялись автоматически »
00. Если неизвестны ключи реестра:
01. Ищем качаем утилитку RegShot - сильно облегчает жизнь
02. Удаляем игру/прогу, чистим реестр, и потом с помощью регшота делаем список необходимых ключей + получаем reg файлик с изменениями
03. Запускаем ISTool, загружаем inno-проект, в меню Progect - Import From File - Registry... выбираем reg файлик
04. Проходим глазами по секции [Registry] в проекте, все пути к программе заменяем на {app}\путь, удаляем явный шлак.
05. ЕСЛИ ПРОГА ПРИ УСТАНОВКЕ ПИШЕТ КЛЮЧИ FILTERDATA С ОГРОМНЫМИ ЗНАЧЕНИЯМИ - экспортируем из реестра руками и в секции [Run] руками импортируем эти ключи, RegShot не переваривает здоровые строки и обрубает их.
Код: Выделить весь код
[Files]
Source: FilterData.reg; DestDir: {tmp}; Flags: ignoreversion
[Run]
Filename: {sys}\reg.exe; Parameters: " import ""{tmp}\FilterData.reg"""; StatusMsg: Регистрация; Flags: runhidden waituntilterminated
10. Если известно наверняка какие ключи пишет прога - экспортируем их и Go To 03, но лучше предположить что мы ключи не знаем, мало ли что прога пишет.

После этого уже можно понять что и как в Inno в секции [Registry], если нет - Go To справка по ключевому слову [Registry] и прочим непонятным словам, встречающимся в коде Inno. Рекомендую бесплатный словарик Dicto. В шапке есть ссылка на русифицированную справку, она староватая, но годится.

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Отправлено: 13:23, 18-06-2010 | #1965


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


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

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


R.i.m.s.k.y., что касается моего вопроса, он снимается - я уже помудрил и создал-таки цикл.
Меня интересует шифрование. Я предполагал, что им можно защитить инсталлятор от декомпилляции, а получается, что этот пароль спрашивается у самого пользователя в процессе установки.
Есть ли средство шифрования именно инсталлятора (входящих в него файлов и самого кода ISS) от всяких декомпиляторов, чтобы без задания пароля пользователем?

Отправлено: 17:39, 18-06-2010 | #1966


Аватара для paravozik2009

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


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

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


Что не кто не скажет ?! Есть,ли скрипт что CAB распаковует?

-------
Если я вам помог , незабывайте про кнопку "Полезное сообщение"


Отправлено: 18:43, 18-06-2010 | #1967


Аватара для semiono

Ветеран


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

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


Нужен хелп! И просьба не динамить, так как очень нужно.

Вот код который граббит реестр (REG_NONE) и пишет в файл результат.
Код: Выделить весь код
const
  KEY_QUERY_VALUE = 1;

function RegOpenKeyEx(
  hKey: Integer;
  const lpSubKey: String;
  ulOptions: Integer;
  samDesired: Integer;
  var hkeyResult: Integer
): Integer;
external 'RegOpenKeyExA@AdvAPI32.DLL stdcall';

function RegCloseKey(
  hKey: Integer
): Integer;
external 'RegCloseKey@AdvAPI32.DLL stdcall';

type
  Data = array [0..259] of Byte;

function RegQueryValueEx(
  hKey: Integer;
  const lpValueName: String;
  lpReserved: Integer;
  var lpType: Integer;
  var lpData: Data;
  var lpcbData: Integer
): Integer;
external 'RegQueryValueExA@AdvAPI32.DLL stdcall';

function InitializeSetup(): Boolean;
var
  hKey, ValueType, ValueDataLen, i, j: Integer;
  ValueData: Data;
  Value: String;
begin
  RegOpenKeyEx(HKLM, 'SOFTWARE\Classes\Trilogy', 0, KEY_QUERY_VALUE, hKey);
  for i := 1 to 3 do begin
    Value := Format('Value%u', [i]);
    ValueDataLen := SizeOf(ValueData);
    RegQueryValueEx(hKey, Value, 0, ValueType, ValueData, ValueDataLen);
    Value := Format('HKLM,"SOFTWARE\Classes\Trilogy","%s",0x20001', [Value]);
    for j := 0 to ValueDataLen-1 do
      Value := Value+Format(',%.2x', [ValueData[j]]);
    SaveStringToFile('C:\test.txt', Value+#13#10, i>1);
  end;
  RegCloseKey(hKey);
  Result := False;
end;
Вот мой незатейливый код
Код: Выделить весь код
 [_Code]
procedure DeinitializeSetup();
var
  S: TArrayOfString;
  F: String;
begin
  F := ExpandConstant('{reg:HKLM32\Software\VST,VSTPluginsPath|{syswow64}\Plugins}\Trilogy\Trilogy.inf');
  SetArrayLength(S, 9);
// -------------------------------------------------------------------------------------------------------------------------------------
  S[00] := '[Version]'
  S[01] := 'Signature=$Windows NT$'
  S[02] := ''
  S[03] := '[DefaultInstall]'
  S[04] := 'AddReg=Add.Reg'
  S[05] := ''
  S[06] := '[Add.Reg]'
  S[07] := 'HKLM,"Software\Microsoft\Windows\CurrentVersion\App Paths\Trilogy.exe",,0x4000,"' + ExpandConstant('{reg:HKLM32\Software\VST,Proton.exe|{syswow64}\Proton}') + '\Trilogy\Trilogy.exe"'
  S[08] := 'HKLM,"Software\Microsoft\Windows\CurrentVersion\App Paths\Trilogy.exe","Path",0x4000,"' + ExpandConstant('{reg:HKLM32\Software\VST,Proton.exe|{syswow64}\Proton}') + '\Trilogy"'
// -------------------------------------------------------------------------------------------------------------------------------------
  SaveStringsToFile(F, S, False);
end;
Мне нужно к моему коду привязать то, что было выше для того, чтобы дописать
экспортируемые значения из реестра в конец этого файла:
ExpandConstant('{reg:HKLM32\Software\VST,VSTPluginsPath|{syswow64}\Plugins}\Trilogy\Trilogy.inf')

Причём это должно неизменно выполниться под процедурой DeinitializeSetup();

Экспорт происходит с тремя значениями Value1, Value2 и Value3, если нужно то можно явно
это указать в коде экспорта вместо индексов типа i>1.

Одним словом проблема в том, что SaveStringToFile() переписывает весь файл,
а мне надо прибавить к моему файлу эти строки в таком виде:

SetArrayLength(S, 12);
...

S[09] :=...
S[10] :=...
S[11] :=...

Так как я в этом нибум-бум, помогите преобразовать? Только желательно целиком код напишите.
Напомню, то что было http://j.imagehost.org/0295/Snap1_1.png

-------
Полезное сообщение


Отправлено: 19:47, 19-06-2010 | #1968


Ветеран


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

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


Привет всем, извиняюсь кому не ответил, просто меня давно не было, со свободным временем туго стало...
Цитата Cinot:
Есть ли средство шифрования именно инсталлятора »
Почитайте в справке описание Password и Encryption, эти параметры должныы быть в инсталляторе (секция Setup)...

Цитата paravozik2009:
Есть,ли скрипт что CAB распаковует? »
скрипта, я такого не видел, но если не ошибаюсь, в NT должна присутствовать extrac32.exe, которая отвечает за распаковку cab архивов...

Цитата semiono:
Одним словом проблема в том, что SaveStringToFile() переписывает весь файл,
а мне надо прибавить к моему файлу эти строки в таком виде »
извиняюсь, за бестактность, но бред полнейший, вы почитайте описание данной функции:
Код: Выделить весь код
function SaveStringsToFile(const FileName: String; const S: TArrayOfString; const Append: Boolean): Boolean;
в принципе видно даже из самой функции, Append - о чём это говорит? да о том, что вы можете задать, перезаписать файл или создать заново...
из вашего примера выходит, что вы даёте команду создать новый файл:
Код: Выделить весь код
SaveStringsToFile(F, S, False);
если хотие дописать:
Код: Выделить весь код
SaveStringsToFile(F, S, True);

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


Отправлено: 20:53, 20-06-2010 | #1969


Аватара для Habetdin


Автор проектов


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

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


Цитата Cinot:
Есть ли средство шифрования именно инсталлятора (входящих в него файлов и самого кода ISS) от всяких декомпиляторов, чтобы без задания пароля пользователем? »
Смотрите в PM

-------
Рекомендую: $25 на тест виртуального сервера (VPS) за регистрацию по ссылке

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

Отправлено: 21:54, 20-06-2010 | #1970



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 3] Serega Автоматическая установка приложений 3755 26-10-2011 17:58
[архив] Inno Setup .:[все вопросы]:. Mchik Автоматическая установка приложений 1329 23-08-2009 20:13
[архив - Часть 2] AutoIt скрипты Vadikan AutoIt 985 21-01-2008 09:58
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59
[Архив - Часть 1.1] AutoIt скрипты EgOrus AutoIt 335 04-02-2006 16:58




 
Переход