|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 8] |
|
Скрипты Inno Setup. Помощь и советы [часть 8]
|
Ветеран Сообщения: 1265 |
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме Inno Setup. Прочие вопросы. Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах: Скрипты Inno Setup. Помощь и советы (Archive Pack 1):
Скрипты Inno Setup. Помощь и советы [часть 6] Скрипты Inno Setup. Помощь и советы [часть 7] |
|
Отправлено: 08:52, 02-02-2015 |
Ветеран Сообщения: 1640
|
Профиль | Отправить PM | Цитировать вот такой
procedure DeinitializeSetup(); begin BASS_DeInit; //Освобождаем процесс gdipShutdown ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0); WizardForm.Hide; Sleep(200); ShowWindow(WizardForm.Handle,0); UnloadSkin(); RF(ExpandConstant('{src}\!!!.txt')); end; если при старте установщика в окне выбора языка нажать "отмена" то вываливается ошибка на строчке ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0); Подскажите, как избавиться? |
------- Отправлено: 14:33, 02-09-2015 | #921 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1265
|
Профиль | Отправить PM | Цитировать Цитата R.i.m.s.k.y.:
Цитата R.i.m.s.k.y.:
Цитата R.i.m.s.k.y.:
Цитата R.i.m.s.k.y.:
Если в DeinitializeSetup есть обращение к WizardForm или {wizardhwnd}, то нужно делать проверку: |
||||
Отправлено: 16:00, 02-09-2015 | #922 |
Ветеран Сообщения: 1640
|
Профиль | Отправить PM | Цитировать Цитата El Sanchez:
где он лежит или как его вытащить? Цитата El Sanchez:
сталкивался с тем что во время установки чтение оттуда выдает пустые строки Цитата El Sanchez:
теперь выдает ошибку could not call proc на строчке if ExpandConstant('{wizardhwnd}') <> '0' then begin |
|||
------- Последний раз редактировалось R.i.m.s.k.y., 02-09-2015 в 16:20. Отправлено: 16:14, 02-09-2015 | #923 |
Ветеран Сообщения: 1640
|
Профиль | Отправить PM | Цитировать а как называется функция, инициализирующая окошко выбора языка? что-то initializelanguagewindow чтоле? попробую через нее
|
------- Отправлено: 16:45, 02-09-2015 | #924 |
Ветеран Сообщения: 1640
|
Профиль | Отправить PM | Цитировать вывернулся
var FormInitialized : boolean; function InitializeLanguageDialog(): Boolean; begin FormInitialized := false; ... end; procedure DeinitializeSetup(); begin if (FormInitialized) then begin BASS_DeInit; // gdipShutdown ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0); WizardForm.Hide; Sleep(200); ShowWindow(WizardForm.Handle,0); UnloadSkin(); RF(ExpandConstant('{src}\!!!.txt')); end; end; procedure InitializeWizard(); begin FormInitialized := true; ... end; |
------- Отправлено: 17:00, 02-09-2015 | #925 |
![]() Новый участник Сообщения: 46
|
Подскажите, а есть ли адекватное решение для работы с REG_BINARY?
function GetHKLM: Integer; begin if IsWin64 then Result := HKLM64 else Result := HKLM32; end; procedure InitializeWizard(); var RegKey10: AnsiString; begin RegQueryBinaryValue(GetHKLM(), 'SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\ShellFolder', 'Attributes', RegKey10); MsgBox(RegKey10, mbInformation, MB_OK); end; Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\ShellFolder] "Attributes"=hex:70,01,00,20 Решение найдено: function GetRegBinStr(key: integer; subkey, value: string): string; var s: Ansistring; i: integer; begin RegQueryBinaryValue(key, subkey, value, s); for i := 1 to Length(s) do begin result := result + Format('%.2x', [Ord(s[i])]); if not (i = Length(s)) then result := result + ','; end; end; function HexToStr(str_hex: string): string; var i: Integer; begin StringChange(str_hex, ',', ''); for i:= 1 to Length(str_hex) div 2 do Result:= Result + Chr(StrToInt('$' + Copy(str_hex, (i-1)*2+1, 2))); end; function GetHKLM: Integer; begin if IsWin64 then Result := HKLM64 else Result := HKLM32; end; procedure InitializeWizard(); var RegKey10: AnsiString; S: string; begin RegKey10:= GetRegBinStr(GetHKLM(), 'SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\ShellFolder', 'Attributes'); //получаем значение из реестра и конвертируем в читабельный вид MsgBox(RegKey10, mbInformation, MB_OK); //смотрим что на выходе S:= '70,01,00,20'; //задаем свое значение RegKey10:= HexToStr(S); //конвертируем значение в hex RegWriteBinaryValue(GetHKLM(), 'SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\ShellFolder', 'Attributes', RegKey10); //пишем в реестр //здесь можно посмотреть результат записи в том же порядке, убрать комментарий строк ниже для наглядности работы //RegKey10:= GetRegBinStr(GetHKLM(), 'SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\ShellFolder', 'Attributes'); //MsgBox(RegKey10, mbInformation, MB_OK); end; P.P.S. Ключ для теста лучше заменить, например, на такой 'SOFTWARE\Test', 'Test', т.к. в моем примере закрытый ключ на запись, но это уже другая история(SetACL). |
Последний раз редактировалось Stealthmax, 08-09-2015 в 15:56. Причина: найдено решение Отправлено: 12:30, 08-09-2015 | #926 |
Ветеран Сообщения: 1265
|
Профиль | Отправить PM | Цитировать Цитата Stealthmax:
Цитата Stealthmax:
|
||
Отправлено: 15:48, 08-09-2015 | #927 |
![]() Новый участник Сообщения: 46
|
Цитата El Sanchez:
Цитата El Sanchez:
|
||
Отправлено: 16:01, 08-09-2015 | #928 |
Ветеран Сообщения: 1265
|
Профиль | Отправить PM | Цитировать Цитата Stealthmax:
Цитата Stealthmax:
// читать RegQueryBinaryValue(HKLM, 'SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\ShellFolder', 'Attributes', RegKey10); // сравнить MsgBox(Format('%d', [(RegKey10 = #$70#$01#$00#$20)]), mbInformation, MB_OK); // записать RegWriteBinaryValue(HKLM, 'SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\ShellFolder', 'Attributes', #$70#$01#$00#$20); |
||
Отправлено: 16:35, 08-09-2015 | #929 |
![]() Новый участник Сообщения: 46
|
Цитата El Sanchez:
Цитата El Sanchez:
Поэтому и пояснил этот момент, в плане того, что учел эту особенность и проверил работоспособность именно на x64, где есть Wow6432Node. |
||
Отправлено: 17:11, 08-09-2015 | #930 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Скрипты 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 |
|