|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » [архив] Скрипты Inno Setup. Помощь и советы [часть 2] |
|
[архив] Скрипты Inno Setup. Помощь и советы [часть 2]
|
Ветеран Сообщения: 1133 |
Лимит страниц.
Тема закрыта. Продолжение по ссылке Скрипты Inno Setup. Помощь и советы [часть 3] Внимание! Данная тема предназначена только для обсуждения написания скриптов ! Остальные вопросы, а также последние версии компилятора в теме Inno Setup. Прочие вопросы. Ссылка на архив предыдущей темы (также можно скачать из вложения) |
|
------- Отправлено: 22:06, 23-08-2009 |
Ветеран Сообщения: 1640
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать Цитата R.i.m.s.k.y.:
|
|
Отправлено: 11:57, 18-06-2010 | #1962 |
Ветеран Сообщения: 1640
|
Профиль | Отправить PM | Цитировать Цитата -S.S.V.-:
Чтобы сказать спасибо надо внизу сообщения, за которое благодарите, нажать "полезное сообщение" |
|
------- Отправлено: 12:04, 18-06-2010 | #1963 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать Ну например установил я игру. В реестре появились данные о ней. Например
Я сделал репак, но этих данных в реестре нет и игра получается на англ. языке. Как сделать чтобы эти данные добавлялись автоматически? Модератор: Пользуйтесь тегами форума. Такие огромные картинки мешают другим читать форум. |
Последний раз редактировалось volk1234, 20-06-2010 в 15:58. Отправлено: 12:51, 18-06-2010 | #1964 |
Ветеран Сообщения: 1640
|
Профиль | Отправить PM | Цитировать Цитата tema47:
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 После этого уже можно понять что и как в Inno в секции [Registry], если нет - Go To справка по ключевому слову [Registry] и прочим непонятным словам, встречающимся в коде Inno. Рекомендую бесплатный словарик Dicto. В шапке есть ссылка на русифицированную справку, она староватая, но годится. |
|
------- Отправлено: 13:23, 18-06-2010 | #1965 |
Новый участник Сообщения: 6
|
Профиль | Отправить PM | Цитировать R.i.m.s.k.y., что касается моего вопроса, он снимается - я уже помудрил и создал-таки цикл.
Меня интересует шифрование. Я предполагал, что им можно защитить инсталлятор от декомпилляции, а получается, что этот пароль спрашивается у самого пользователя в процессе установки. Есть ли средство шифрования именно инсталлятора (входящих в него файлов и самого кода ISS) от всяких декомпиляторов, чтобы без задания пароля пользователем? |
Отправлено: 17:39, 18-06-2010 | #1966 |
Пользователь Сообщения: 73
|
Профиль | Сайт | Отправить PM | Цитировать Что не кто не скажет ?! Есть,ли скрипт что CAB распаковует?
|
------- Отправлено: 18:43, 18-06-2010 | #1967 |
Ветеран Сообщения: 842
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать Привет всем, извиняюсь кому не ответил, просто меня давно не было, со свободным временем туго стало...
Цитата Cinot:
Цитата paravozik2009:
Цитата semiono:
function SaveStringsToFile(const FileName: String; const S: TArrayOfString; const Append: Boolean): Boolean; из вашего примера выходит, что вы даёте команду создать новый файл: если хотие дописать: |
|||
------- Отправлено: 20:53, 20-06-2010 | #1969 |
![]() Сообщения: 3649
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Cinot:
![]() |
|
------- Отправлено: 21:54, 20-06-2010 | #1970 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Скрипты 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 |
|