|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 8] |
|
Скрипты Inno Setup. Помощь и советы [часть 8]
|
Ветеран Сообщения: 1274 |
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме Inno Setup. Прочие вопросы. Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах: Скрипты Inno Setup. Помощь и советы (Archive Pack 1):
Скрипты Inno Setup. Помощь и советы [часть 6] Скрипты Inno Setup. Помощь и советы [часть 7] |
|
Отправлено: 08:52, 02-02-2015 |
Старожил Сообщения: 212
|
Профиль | Отправить PM | Цитировать habib2302, проблемного места, которое есть в первом прикреплённом вами скрипте, нет во втором (полном). Они отличаются.
|
------- Отправлено: 11:04, 09-10-2015 | #981 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 862
|
Профиль | Отправить PM | Цитировать kotyarko@fb, это понятно, что они отличаются. Вот ссылка на скрипт который был добавлен в первый прикрепленный скрипт https://yadi.sk/i/V_hiV_Sqjcvw5 и добавил реестр из пользовательского раздела sid
|
Последний раз редактировалось habib2302, 09-10-2015 в 12:17. Отправлено: 12:11, 09-10-2015 | #982 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата habib2302:
|
|
Отправлено: 16:53, 12-10-2015 | #983 |
Ветеран Сообщения: 1640
|
Профиль | Отправить PM | Цитировать господа состоятельные кроты
подскажите, пожалуйста, как сделать кнопку проверки установщика по чексумме я в своих установщиках использую стандартные методы сжатия самим инно (bzip или 7zip) |
------- Отправлено: 15:11, 16-10-2015 | #984 |
![]() Новый участник Сообщения: 46
|
Приветствую всех!
Подскажите решение с бэкапом ветки/веток реестра. Возможно ли добавить бэкап в {uninstallexe}, т.е. наподобие функции GetFromRes, но наоборот. Дабы после установки содержимое бэкапа сохранилось в деинсталляторе для последующего восстановления при удалении. Бэкап реестра
[Setup] AppName=My Application AppVersion=1.5 DefaultDirName={pf}\My Application [_code] #define A = (Defined UNICODE) ? "W" : "A" const SE_BACKUP_NAME = 'SeBackupPrivilege'; SE_RESTORE_NAME = 'SeRestorePrivilege'; TOKEN_QUERY = $8; TOKEN_ADJUST_PRIVILEGES = $20; SE_PRIVILEGE_ENABLED = $2; ERROR_SUCCESS = 0; KEY_WOW64_64KEY = $0100; MAXIMUM_ALLOWED = $02000000; REG_FORCE_RESTORE = $00000008; type LUID = record LowPart: DWORD; HighPart: Longint; end; LUID_AND_ATTRIBUTES = record Luid: LUID; Attributes: DWORD; end; TOKEN_PRIVILEGES = record PrivilegeCount: DWORD; Privileges: array [0..0] of LUID_AND_ATTRIBUTES; end; REGSAM = DWORD; HKEY = LongWord; function RegSaveKey(hKey: HKEY; lpFile: String; lpSecurityAttributes: Longint):longint; external 'RegSaveKey{#A}@advapi32.dll stdcall'; function RegOpenKeyEx(hKey: HKEY; lpSubKey: String; ulOptions: DWORD; samDesired: REGSAM; var phkResult: HKEY): Longint; external 'RegOpenKeyEx{#A}@advapi32.dll stdcall'; function RegCreateKeyEx(hKey: HKEY; lpSubKey: String; Reserved: DWORD; lpClass: String; dwOptions: DWORD; samDesired: REGSAM; lpSecurityAttributes: Longint; var phkResult: HKEY; var lpdwDisposition: DWORD): Longint; external 'RegCreateKeyEx{#A}@advapi32.dll stdcall'; function RegCloseKey(hKey: HKEY): Longint; external 'RegCloseKey@advapi32.dll stdcall'; function RegRestoreKey(hKey: HKEY; lpFile: String; lpSecurityAttributes: Longint):longint; external 'RegRestoreKey{#A}@advapi32.dll stdcall'; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function OpenProcessToken(ProcessHandle: THandle; DesiredAccess: DWORD; var TokenHandle: THandle): BOOL; external 'OpenProcessToken@advapi32.dll stdcall'; function GetCurrentProcess(): THandle; external 'GetCurrentProcess@kernel32.dll stdcall'; function LookupPrivilegeValue(lpSystemName, lpName: String; var lpLuid: LUID): BOOL; external 'LookupPrivilegeValue{#A}@advapi32.dll stdcall'; function AdjustTokenPrivileges(TokenHandle: THandle; DisableAllPrivileges: BOOL; NewState: TOKEN_PRIVILEGES; BufferLength: DWORD; var PreviousState: TOKEN_PRIVILEGES; var ReturnLength: Longint): BOOL; external 'AdjustTokenPrivileges@advapi32.dll stdcall'; function CloseHandle(hObject: THandle): BOOL; external 'CloseHandle@kernel32.dll stdcall'; function GetLastError(): DWORD; external 'GetLastError@Kernel32 stdcall'; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function NTSetPrivilege(sPrivilege: string; bEnabled: Boolean): Boolean; var hToken: THandle; TokenPriv: TOKEN_PRIVILEGES; PrevTokenPriv: TOKEN_PRIVILEGES; ReturnLength: Cardinal; Version: TWindowsVersion; ret: Longint; begin GetWindowsVersionEx(Version); if not Version.NTPlatform then Exit; if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then begin try if LookupPrivilegeValue('', PAnsiChar(sPrivilege), TokenPriv.Privileges[0].Luid) then begin TokenPriv.PrivilegeCount := 1; case bEnabled of True: TokenPriv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; False: TokenPriv.Privileges[0].Attributes := 0; end; ReturnLength := 0; PrevTokenPriv := TokenPriv; AdjustTokenPrivileges(hToken, False, TokenPriv, SizeOf(PrevTokenPriv), PrevTokenPriv, ret); end; finally CloseHandle(hToken); end; end; Result := GetLastError = ERROR_SUCCESS; if not Result then MsgBox(SysErrorMessage(GetLastError), mbInformation, MB_OK); end; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure RegBackupTofile(intKey: HKEY; intSubKey, outfile: string; Wow32: BOOL); //Процедура бэкапа ветки реестра в файл //intKey - корневой раздел //intSubKey - Путь к ветке реестра //outfile - Имя бэкапа //Wow32 - если true то вкл перенаправление Wow3264Node var phkResult: HKEY; begin if not NTSetPrivilege(SE_BACKUP_NAME, true) then if MsgBox('Ошибка прав доступа!', mbInformation, MB_OK) = IDOK then Exit; if Wow32 then begin if RegOpenKeyEx(intKey, intSubKey, 0, MAXIMUM_ALLOWED, phkResult) > ERROR_SUCCESS then begin MsgBox('Ошибка чтения реестра!', mbInformation, MB_OK); Exit; end; end else if RegOpenKeyEx(intKey, intSubKey, 0, MAXIMUM_ALLOWED or KEY_WOW64_64KEY, phkResult) > ERROR_SUCCESS then begin MsgBox('Ошибка чтения реестра!', mbInformation, MB_OK); Exit; end; if RegSaveKey(phkResult, outfile, 0) > ERROR_SUCCESS then begin MsgBox('Ошибка сохранения файла!', mbInformation, MB_OK); Exit; end; RegCloseKey(phkResult); end; procedure RegRestorefromfile(outKey: HKEY; outSubKey, infile: string; Wow32: BOOL); //Процедура востановление реестра из файла, параметры по аналогии var phkResult: HKEY; lpdwDisposition: DWORD; begin if not FileExists(infile) then begin MsgBox('Файл не найден!', mbInformation, MB_OK); Exit; end; NTSetPrivilege(SE_BACKUP_NAME, true); NTSetPrivilege(SE_RESTORE_NAME, true); if Wow32 then begin if RegCreateKeyEx(outKey, outSubKey, 0, '', 0, MAXIMUM_ALLOWED, 0, phkResult, lpdwDisposition) > ERROR_SUCCESS then begin MsgBox('Ошибка записи в реестр!', mbInformation, MB_OK); Exit; end; end else if RegCreateKeyEx(outKey, outSubKey, 0, '', 0, MAXIMUM_ALLOWED or KEY_WOW64_64KEY, 0, phkResult, lpdwDisposition) > ERROR_SUCCESS then begin MsgBox('Ошибка записи в реестр!', mbInformation, MB_OK); Exit; end; if RegRestoreKey(phkResult, infile, REG_FORCE_RESTORE) > ERROR_SUCCESS then begin MsgBox('Ошибка доступа к реестру!', mbInformation, MB_OK); Exit; end; RegCloseKey(phkResult); end; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure CurStepChanged(CurStep: TSetupStep); begin if CurStep = ssPostInstall then begin RegBackupTofile(HKEY_LOCAL_MACHINE, 'Software\2345Pic', ExpandConstant('{tmp}\RegBackup.dat'), true); RegRestorefromfile(HKEY_LOCAL_MACHINE, 'Software\2345Pic_BackUp', ExpandConstant('{tmp}\RegBackup.dat'), true); DeleteFile(ExpandConstant('{tmp}\RegBackup.dat')); end; end; procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); begin if CurUninstallStep = usPostUninstall then begin RegBackupTofile(HKEY_LOCAL_MACHINE, 'Software\2345Pic_BackUp', ExpandConstant('{tmp}\RegBackup.dat'), true); RegRestorefromfile(HKEY_LOCAL_MACHINE, 'Software\2345Pic', ExpandConstant('{tmp}\RegBackup.dat'), true); DeleteFile(ExpandConstant('{tmp}\RegBackup.dat')); RegDeleteKeyIncludingSubkeys(HKLM, 'Software\2345Pic_BackUp'); end; end; Мой вариант
[Setup] AppName=My Application AppVersion=1.5 DefaultDirName={pf}\My Application [_code] #define A = (Defined UNICODE) ? "W" : "A" const SE_BACKUP_NAME = 'SeBackupPrivilege'; SE_RESTORE_NAME = 'SeRestorePrivilege'; TOKEN_QUERY = $8; TOKEN_ADJUST_PRIVILEGES = $20; SE_PRIVILEGE_ENABLED = $2; ERROR_SUCCESS = 0; KEY_WOW64_64KEY = $0100; MAXIMUM_ALLOWED = $02000000; REG_FORCE_RESTORE = $00000008; type LUID = record LowPart: DWORD; HighPart: Longint; end; LUID_AND_ATTRIBUTES = record Luid: LUID; Attributes: DWORD; end; TOKEN_PRIVILEGES = record PrivilegeCount: DWORD; Privileges: array [0..0] of LUID_AND_ATTRIBUTES; end; REGSAM = DWORD; HKEY = LongWord; function RegSaveKey(hKey: HKEY; lpFile: String; lpSecurityAttributes: Longint):longint; external 'RegSaveKey{#A}@advapi32.dll stdcall'; function RegOpenKeyEx(hKey: HKEY; lpSubKey: String; ulOptions: DWORD; samDesired: REGSAM; var phkResult: HKEY): Longint; external 'RegOpenKeyEx{#A}@advapi32.dll stdcall'; function RegCreateKeyEx(hKey: HKEY; lpSubKey: String; Reserved: DWORD; lpClass: String; dwOptions: DWORD; samDesired: REGSAM; lpSecurityAttributes: Longint; var phkResult: HKEY; var lpdwDisposition: DWORD): Longint; external 'RegCreateKeyEx{#A}@advapi32.dll stdcall'; function RegCloseKey(hKey: HKEY): Longint; external 'RegCloseKey@advapi32.dll stdcall'; function RegRestoreKey(hKey: HKEY; lpFile: String; lpSecurityAttributes: Longint):longint; external 'RegRestoreKey{#A}@advapi32.dll stdcall'; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function OpenProcessToken(ProcessHandle: THandle; DesiredAccess: DWORD; var TokenHandle: THandle): BOOL; external 'OpenProcessToken@advapi32.dll stdcall'; function GetCurrentProcess(): THandle; external 'GetCurrentProcess@kernel32.dll stdcall'; function LookupPrivilegeValue(lpSystemName, lpName: String; var lpLuid: LUID): BOOL; external 'LookupPrivilegeValue{#A}@advapi32.dll stdcall'; function AdjustTokenPrivileges(TokenHandle: THandle; DisableAllPrivileges: BOOL; NewState: TOKEN_PRIVILEGES; BufferLength: DWORD; var PreviousState: TOKEN_PRIVILEGES; var ReturnLength: Longint): BOOL; external 'AdjustTokenPrivileges@advapi32.dll stdcall'; function CloseHandle(hObject: THandle): BOOL; external 'CloseHandle@kernel32.dll stdcall'; function GetLastError(): DWORD; external 'GetLastError@Kernel32 stdcall'; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function NTSetPrivilege(sPrivilege: string; bEnabled: Boolean): Boolean; var hToken: THandle; TokenPriv: TOKEN_PRIVILEGES; PrevTokenPriv: TOKEN_PRIVILEGES; ReturnLength: Cardinal; Version: TWindowsVersion; ret: Longint; begin GetWindowsVersionEx(Version); if not Version.NTPlatform then Exit; if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then begin try if LookupPrivilegeValue('', PAnsiChar(sPrivilege), TokenPriv.Privileges[0].Luid) then begin TokenPriv.PrivilegeCount := 1; case bEnabled of True: TokenPriv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; False: TokenPriv.Privileges[0].Attributes := 0; end; ReturnLength := 0; PrevTokenPriv := TokenPriv; AdjustTokenPrivileges(hToken, False, TokenPriv, SizeOf(PrevTokenPriv), PrevTokenPriv, ret); end; finally CloseHandle(hToken); end; end; Result := GetLastError = ERROR_SUCCESS; if not Result then MsgBox(SysErrorMessage(GetLastError), mbInformation, MB_OK); end; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure RegBackupTofile(intKey: HKEY; intSubKey, outfile: string; Wow32: BOOL); //Процедура бэкапа ветки реестра в файл //intKey - корневой раздел //intSubKey - Путь к ветке реестра //outfile - Имя бэкапа //Wow32 - если true то вкл перенаправление Wow3264Node var phkResult: HKEY; begin if not NTSetPrivilege(SE_BACKUP_NAME, true) then if MsgBox('Ошибка прав доступа!', mbInformation, MB_OK) = IDOK then Exit; if Wow32 then begin if RegOpenKeyEx(intKey, intSubKey, 0, MAXIMUM_ALLOWED, phkResult) > ERROR_SUCCESS then begin MsgBox('Ошибка чтения реестра!', mbInformation, MB_OK); Exit; end; end else if RegOpenKeyEx(intKey, intSubKey, 0, MAXIMUM_ALLOWED or KEY_WOW64_64KEY, phkResult) > ERROR_SUCCESS then begin MsgBox('Ошибка чтения реестра!', mbInformation, MB_OK); Exit; end; if RegSaveKey(phkResult, outfile, 0) > ERROR_SUCCESS then begin MsgBox('Ошибка сохранения файла!', mbInformation, MB_OK); Exit; end; RegCloseKey(phkResult); end; procedure RegRestorefromfile(outKey: HKEY; outSubKey, infile: string; Wow32: BOOL); //Процедура востановление реестра из файла, параметры по аналогии var phkResult: HKEY; lpdwDisposition: DWORD; begin if not FileExists(infile) then begin MsgBox('Файл не найден!', mbInformation, MB_OK); Exit; end; NTSetPrivilege(SE_BACKUP_NAME, true); NTSetPrivilege(SE_RESTORE_NAME, true); if Wow32 then begin if RegCreateKeyEx(outKey, outSubKey, 0, '', 0, MAXIMUM_ALLOWED, 0, phkResult, lpdwDisposition) > ERROR_SUCCESS then begin MsgBox('Ошибка записи в реестр!', mbInformation, MB_OK); Exit; end; end else if RegCreateKeyEx(outKey, outSubKey, 0, '', 0, MAXIMUM_ALLOWED or KEY_WOW64_64KEY, 0, phkResult, lpdwDisposition) > ERROR_SUCCESS then begin MsgBox('Ошибка записи в реестр!', mbInformation, MB_OK); Exit; end; if RegRestoreKey(phkResult, infile, REG_FORCE_RESTORE) > ERROR_SUCCESS then begin MsgBox('Ошибка доступа к реестру!', mbInformation, MB_OK); Exit; end; RegCloseKey(phkResult); end; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // мой вариант procedure CurStepChanged(CurStep: TSetupStep); begin if CurStep = ssInstall then begin //бэкап непосредственно перед установкой RegBackupTofile(HKEY_LOCAL_MACHINE, 'SOFTWARE\2345Pic', ExpandConstant('{app}\RegBackup.dat'), true); //сохраняем ключ 1 RegBackupTofile(HKEY_LOCAL_MACHINE, 'SOFTWARE\Google', ExpandConstant('{app}\RegBackup_1.dat'), true); //сохраняем ключ 2 end; end; procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); begin if CurUninstallStep = usPostUninstall then begin RegRestorefromfile(HKEY_LOCAL_MACHINE, 'Software\2345Pic', ExpandConstant('{app}\RegBackup.dat'), true); //восстанавливаем ключ 1 RegRestorefromfile(HKEY_LOCAL_MACHINE, 'Software\Google', ExpandConstant('{app}\RegBackup_1.dat'), true); //восстанавливаем ключ 2 DeleteFile(ExpandConstant('{app}\RegBackup.dat')); DeleteFile(ExpandConstant('{app}\RegBackup_1.dat')); end; end; Восстановить из файла RegBackup.dat и RegBackup_1.dat ничто не мешает, но хотелось бы некой эстетики и не плодить множество файлов *.dat. Цитата R.i.m.s.k.y.:
|
|
Отправлено: 22:31, 16-10-2015 | #985 |
Старожил Сообщения: 440
|
Профиль | Сайт | Отправить PM | Цитировать R.i.m.s.k.y., ISMD5.
|
------- Отправлено: 07:45, 17-10-2015 | #986 |
![]() Новый участник Сообщения: 46
|
Тут как-то поднимали вопрос по поводу ключей командной строки, т.е. сделать их менее подробными и компактными.
Измененные ключи
/SILENT- /NS /VERYSILENT- /S /NOICONS- /NI /DIR- /D /SUPPRESSMSGBOXES- /SMB /NOCANCEL- /NC /NORESTART- /NR /RESTARTEXITCODE- /REC /NOCLOSEAPPLICATIONS- /NCA /LANG- /L /GROUP- /G /TASKS- /T /TYPE- /TP /MERGETASKS- /MT /PASSWORD- /PASS /NORESTARTAPPLICATIONS- /NRA /COMPONENTS- /C Также убрана приставка _is1 при создании ключа деинсталляции в реестре. Выкладываю 3 версии для Restools 5.5.1.ee2(u) (build 121216). Скопировать с заменой в папку, не забывайте про бэкап. Setup.e32<-- без изменений деинсталлятора, т.е. имеет вид unins000.exe(стабильный вариант) Setup.e32(with _is1)<-- без изменений деинсталлятора, возвращена приставка _is1 Setup.e32_(uninstall) <-- в этой версии деинсталлятор имеет вид uninstall.exe, но есть баг, при установке поверх выдает ошибку и откатывает установку. |
Последний раз редактировалось Stealthmax, 20-10-2015 в 04:44. Отправлено: 23:00, 17-10-2015 | #987 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата Stealthmax:
Цитата Stealthmax:
Цитата Stealthmax:
|
|||
Отправлено: 10:38, 18-10-2015 | #988 |
Новый участник Сообщения: 26
|
Профиль | Отправить PM | Цитировать Всем привет. Делаю сборку CS:S nosteam. Гуглил на просторах интернета скрипт, который сможет изменять ник и клан тэг в файле rev.ini. Нашёл, пришлось, правда, доделать ввод клантэга. Проблема в следующем: как заставить установщик по дефолту сохранять клантэг и ник в UTF-8 и убрать чекбокс "сохранить в UTF-8". Может кто подсказать решение проблемы? Скрипт прилагаю ниже. Заранее спасибо!
#ifndef UNICODE #error Unicode version of Inno Setup is required to compile this script #endif var RevEmuPage: TInputQueryWizardPage; ConvertCheckBox: TCheckBox; procedure SetNickname(Nickname: String; Filename: String; IsConvert: Boolean); var arrAnsi, arrUtf8: TArrayOfString; i: Integer; begin if IsConvert then begin LoadStringsFromFile(Filename, arrAnsi); SetArrayLength(arrUtf8, 1); for i := 0 to GetArrayLength(arrAnsi)-1 do begin if Pos(LowerCase('PlayerName='), LowerCase(arrAnsi[i])) = 0 then SaveStringToFile(Filename, arrAnsi[i] + #13#10, i <> 0) else begin arrUtf8[0] := Copy(arrAnsi[i], 0, Length('PlayerName=')) + Nickname + #10; SaveStringsToUTF8File(Filename, arrUtf8, i <> 0); end; end; end else SetIniString('steamclient', 'PlayerName', Nickname, Filename); end; procedure SetClantag(Clantag: String; Filename: String; IsConvert: Boolean); var arrAnsi, arrUtf8: TArrayOfString; i: Integer; begin if IsConvert then begin LoadStringsFromFile(Filename, arrAnsi); SetArrayLength(arrUtf8, 1); for i := 0 to GetArrayLength(arrAnsi)-1 do begin if Pos(LowerCase('Clantag='), LowerCase(arrAnsi[i])) = 0 then SaveStringToFile(Filename, arrAnsi[i] + #13#10, i <> 0) else begin arrUtf8[0] := Copy(arrAnsi[i], 0, Length('Clantag=')) + Clantag + #10; SaveStringsToUTF8File(Filename, arrUtf8, i <> 0); end; end; end else SetIniString('steamclient', 'Clantag', Clantag, Filename); end; procedure NicknameOnChange (Sender: TObject); begin WizardForm.NextButton.Enabled := RevEmuPage.Values[0] <> ''; end; procedure InitializeWizard(); begin RedesignWizardForm; RevEmuPage := CreateInputQueryPage(wpInfoAfter, 'Игровая информация', '', 'Пожалуйста, введите введите свой ник и Clan-tag и нажмите Далее.'); with RevEmuPage do begin Add('Ник:', False); Edits[0].OnChange := @NicknameOnChange; Add('Клан-тэг:', False); end; ConvertCheckBox := TCheckBox.Create(WizardForm); with ConvertCheckBox do begin Parent := RevEmuPage.Surface; SetBounds(RevEmuPage.Edits[0].Left, RevEmuPage.Edits[0].Top + ScaleY(100), ScaleX(200), ScaleY(17)); Caption := 'Сохранить в UTF-8'; end; end; procedure CurPageChanged(CurPageID: Integer); begin if CurPageID = RevEmuPage.ID then WizardForm.NextButton.Enabled := RevEmuPage.Values[0] <> ''; if CurPageID = wpFinished then SetNickname(RevEmuPage.Values[0], ExpandConstant('{app}\rev.ini'), ConvertCheckBox.Checked); if CurPageID = wpFinished then SetClantag(RevEmuPage.Values[0], ExpandConstant('{app}\rev.ini'), ConvertCheckBox.Checked); end; |
Отправлено: 14:25, 18-10-2015 | #989 |
![]() Новый участник Сообщения: 46
|
Цитата El Sanchez:
Цитата El Sanchez:
Цитата El Sanchez:
|
|||
Последний раз редактировалось Stealthmax, 18-10-2015 в 22:30. Отправлено: 20:37, 18-10-2015 | #990 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Скрипты Inno Setup. Помощь и советы [часть 7] | El Sanchez | Автоматическая установка приложений | 2499 | 02-02-2015 08:59 | |
Скрипты Inno Setup. Помощь и советы [часть 6] | El Sanchez | Автоматическая установка приложений | 2494 | 10-03-2014 11:51 | |
Скрипты Inno Setup. Помощь и советы [часть 5] | El Sanchez | Автоматическая установка приложений | 1999 | 28-03-2013 19:09 | |
Скрипты Inno Setup. Помощь и советы [часть 4] | El Sanchez | Автоматическая установка приложений | 2099 | 22-05-2012 23:16 | |
Скрипты Inno Setup. Помощь и советы [часть 3] | Serega | Автоматическая установка приложений | 3755 | 26-10-2011 17:58 |
|