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

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

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

Аватара для El Sanchez

Ветеран


Contributor


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


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

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


Изменения
Автор: El Sanchez
Дата: 22-10-2015
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:

Показать/скрыть: Ссылки на примеры скриптов:

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

  • Inno Script Generator - генератор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать | зеркало на русифицированную программу;
    Примечание: Родной сайт www.hisoft2000.de более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы.
    Последняя версия: 2.0.8 [12.11.2006] - Скачать;
    Примечание: Родной сайт http://isfd.kaju74.de/index.php?isfd более недоступен, поэтому здесь расположены сторонние ссылки.

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

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

  • ISSJoiner - Программа для объединения нескольких скриптов InnoSetup в один.
    Последняя версия: 3.0 [23.07.2009]

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

  • RegExporter - Фриварная утилита для экспорта реестра и конвертации файлов *.reg и *.ini в инсталляционные скрипты Inno Setup и NSIS.
    Последняя версия: 1.2.0 [23.09.2014] - Скачать;



Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:

Скрипты Inno Setup. Помощь и советы [часть 6]
Скрипты Inno Setup. Помощь и советы [часть 7]

Отправлено: 08:52, 02-02-2015

 

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

Ветеран


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

Профиль | Отправить 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



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

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


Аватара для El Sanchez

Ветеран


Contributor


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

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


Цитата R.i.m.s.k.y.:
этот способ не прокатывает тк МС в великой мудрости сменила инсталлер с MSI на что-то другое »
R.i.m.s.k.y., это что-то другое содержит в себе 2 msi, так что способ прокатывает.
Цитата R.i.m.s.k.y.:
не прокатит - если установщик запущен не под одмином доступ к hklm может блокироваться »
R.i.m.s.k.y., с чего вдруг? Читать можно всем.
Цитата R.i.m.s.k.y.:
ругается на синтаксис case (syntax error)
что ему не нравится? »
R.i.m.s.k.y., двойные кавычки вместо одинарных, нет точки с запятой после каждого выбора.
Цитата R.i.m.s.k.y.:
если при старте установщика в окне выбора языка нажать "отмена" то вываливается ошибка на строчке ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0); »
R.i.m.s.k.y., форма-то еще не проинициализирована, {wizardhwnd} нема, а ShowWindow уже чего-то хочет. Да и незачем временно скрывать форму при выгрузке скина.
Если в DeinitializeSetup есть обращение к WizardForm или {wizardhwnd}, то нужно делать проверку:
Код: Выделить весь код
if ExpandConstant('{wizardhwnd}') <> '0' then
    // что-то делаем с WizardForm или {wizardhwnd}
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:00, 02-09-2015 | #922


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

Ветеран


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

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


Цитата El Sanchez:
что-то другое содержит в себе 2 msi, так что способ прокатывает. »
я в темпах шарился во время установки - нет там MSI
где он лежит или как его вытащить?

Цитата El Sanchez:
с чего вдруг? Читать можно всем. »
хз
сталкивался с тем что во время установки чтение оттуда выдает пустые строки

Цитата El Sanchez:
форма-то еще не проинициализирована, {wizardhwnd} нема, а ShowWindow уже чего-то хочет. »
я знаю,
теперь выдает ошибку 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


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

Ветеран


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

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


а как называется функция, инициализирующая окошко выбора языка? что-то initializelanguagewindow чтоле? попробую через нее

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


Отправлено: 16:45, 02-09-2015 | #924


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

Ветеран


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

Профиль | Отправить 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


Аватара для Stealthmax

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


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

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


Подскажите, а есть ли адекватное решение для работы с 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;
Сам твик в формате *.reg :
Код: Выделить весь код
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.S. Отдельная благодарность Serega за функцию HexToStr
P.P.S. Ключ для теста лучше заменить, например, на такой 'SOFTWARE\Test', 'Test', т.к. в моем примере закрытый ключ на запись, но это уже другая история(SetACL).

Последний раз редактировалось Stealthmax, 08-09-2015 в 15:56. Причина: найдено решение


Отправлено: 12:30, 08-09-2015 | #926


Аватара для El Sanchez

Ветеран


Contributor


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

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


Цитата Stealthmax:
Подскажите, а есть ли адекватное решение для работы с REG_BINARY? »
Stealthmax, неадекватного здесь только функция GetHKLM.
Цитата Stealthmax:
Как получить читабельный вид значения »
Stealthmax, зачем? Бинарные данные некрасивы в любом виде. В данном примере после вызова RegQueryBinaryValue некрасивое значение переменной RegKey10 эквивалентно некрасивой строке #$70#$01#$00#$20.
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:48, 08-09-2015 | #927


Аватара для Stealthmax

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


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

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


Цитата El Sanchez:
неадекватного здесь только функция GetHKLM. »
А как корректнее подключить взаимодействие HKLM64 и HKLM32? У меня обработка веток происходит в соответствии с разрядностью системы, т.е. на x64 у меня отработал скрипт, на x86 пока не тестировал.
Цитата El Sanchez:
В данном примере после вызова RegQueryBinaryValue некрасивое значение переменной RegKey10 эквивалентно некрасивой строке #$70#$01#$00#$20 »
А с учетом уже найденного решения?

Отправлено: 16:01, 08-09-2015 | #928


Аватара для El Sanchez

Ветеран


Contributor


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

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


Цитата Stealthmax:
А как корректнее подключить взаимодействие HKLM64 и HKLM32? У меня обработка веток происходит в соответствии с разрядностью системы, т.е. на x64 у меня отработал скрипт, на x86 пока не тестировал. »
Stealthmax, да оно-то при чтении может и ничего, но если писать, то может оказаться, что на 64-разрядной системе CLSID находится не только в 64-разрядной ветке реестра, но и в 32-разрядной.
Цитата 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


Аватара для Stealthmax

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


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

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


Цитата El Sanchez:
я еще понимаю строки/числа из реестра читать и выводить в удобной форме, но бинарные данные зачем? »
Возникла проблема, когда в ключе потребовалось изменить туда/обратно значение, в частности, данный CLSID - это корзина, т.е. все что требовалось, это изменить "Attributes"=hex:40,01,00,20 на "Attributes"=hex:70,01,00,20. Говоря проще, скрыть или показать корзину в переходах Проводника Windows(и по аналогии другие элементы, но там проще получилось с Dword).
Цитата El Sanchez:
может оказаться, что на 64-разрядной системе CLSID находится не только в 64-разрядной ветке реестра, но и в 32-разрядной »
В точку. В примере, я не указывал ключ RegWriteBinaryValue(GetHKLM(), 'SOFTWARE\Wow6432Node\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\ShellFolder', 'Attributes', RegKey11);
Поэтому и пояснил этот момент, в плане того, что учел эту особенность и проверил работоспособность именно на x64, где есть Wow6432Node.

Отправлено: 17:11, 08-09-2015 | #930



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты 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




 
Переход