|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 9] |
|
Скрипты Inno Setup. Помощь и советы [часть 9]
|
Ветеран Сообщения: 1269 |
Внимание! Данная тема предназначена только для обсуждения написания скриптов!
Остальные вопросы, а также последние версии компилятора в теме Inno Setup. Прочие вопросы. Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах: Скрипты Inno Setup. Помощь и советы [часть 6] | Скрипты Inno Setup. Помощь и советы [часть 6].7z Скрипты Inno Setup. Помощь и советы [часть 7] | Скрипты Inno Setup. Помощь и советы [часть 7].7z Скрипты Inno Setup. Помощь и советы [часть 8] | Скрипты Inno Setup. Помощь и советы [часть 8].7z |
|
Отправлено: 16:09, 04-04-2018 |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать Цитата iglezz:
Может как то переделать код, или объеденить 2 функции по другому? ПопробЫвал вызвать через procedure Получилось что-то такое: Скрытый текст
Procedure Skins(); begin ExtractTemporaryFile('Amakrits.vsf'); LoadVCLStyle(ExpandConstant('{tmp}\Amakrits.vsf')); end; Function InitializeSetup2(): Boolean; var ResultStr: String; begin RegQueryStringValue(HKCU, 'Software\WoTBlitz', 'Version', ResultStr); if ResultStr='{#AppVer}' then begin Result := MsgBox('Поиск клиента игры...' #13#13 'Клиент игры найден. Продолжить установку?', mbConfirmation, MB_YESNO) = idYes; if Result = False then MsgBox('Обновление клиента отменено!', mbInformation, MB_OK); end else MsgBox('Поиск клиента игры...' #13 'Клиент игры не найден!' #13#13 'Обновление не может быть установлено!', mbConfirmation, MB_OK); Skins(); Result := True; end; Но скин срабатывает только после Splash, тоисть окна проверки (Обновления) без оформления. Тоисть нужна procedura наоборот, вроде такого: Скрытый текст
Procedure Update(); var ResultStr: String; begin RegQueryStringValue(HKCU, 'Software\WoTBlitz', 'Version', ResultStr); if ResultStr='{#AppVer}' then begin Result := MsgBox('Поиск клиента игры...' #13#13 'Клиент игры найден. Продолжить установку?', mbConfirmation, MB_YESNO) = idYes; if Result = False then MsgBox('Обновление клиента отменено!', mbInformation, MB_OK); end else MsgBox('Поиск клиента игры...' #13 'Клиент игры не найден!' #13#13 'Обновление не может быть установлено!', mbConfirmation, MB_OK); end; Function InitializeSetup2(): Boolean; begin ExtractTemporaryFile('Amakrits.vsf'); LoadVCLStyle(ExpandConstant('{tmp}\Amakrits.vsf')); Result := True; Update(); end; Но она отказывается работать. |
|
Последний раз редактировалось passstrada, 17-04-2020 в 18:27. Отправлено: 15:44, 17-04-2020 | #611 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 352
|
Профиль | Отправить PM | Цитировать passstrada,
Например так
function CheckInstalled(): Boolean; var ResultStr: String; begin RegQueryStringValue(HKCU, 'Software\WoTBlitz', 'Version', ResultStr); if ResultStr='{#AppVer}' then Result := True else Result := False; end; function GetUserConfirmation(Message: String): Boolean; begin if MsgBox(Message, mbConfirmation, MB_YESNO) = IDYES then Result := True else Result := False; end; function InitializeSetup(): Boolean; var ReturnValue: Boolean; begin // это вместо InitializeSetup1() ExtractTemporaryFile('Amakrits.vsf'); LoadVCLStyle(ExpandConstant('{tmp}\Amakrits.vsf')); // это вместо InitializeSetup2() ReturnValue := False; if CheckInstalled() then ReturnValue := GetUserConfirmation('Поиск клиента игры...' #13#13 'Клиент игры найден. Продолжить установку?') else MsgBox('Поиск клиента игры...' #13 'Клиент игры не найден!' #13#13 'Обновление не может быть установлено!', mbConfirmation, MB_OK) Result := ReturnValue; end; Хотя непонятно зачем дополнительно спрашивать про "Продолжить установку?", если гуй всё равно используется. add: Чтобы не лепить "Result := True;" где попало неплохо бы справку почитать по Inno и Pascal |
Отправлено: 19:02, 17-04-2020 | #612 |
Ветеран Сообщения: 1269
|
Профиль | Отправить PM | Цитировать Цитата passstrada:
Скрытый текст
function InitializeSetup: Boolean; var ResultStr: string; begin Result := False; ExtractTemporaryFile('Amakrits.vsf'); LoadVCLStyle(ExpandConstant('{tmp}\Amakrits.vsf')); if RegQueryStringValue(HKCU, 'Software\WoTBlitz', 'Version', ResultStr) and (ResultStr = '{#AppVer}') then begin Result := MsgBox('Поиск клиента игры...' #13#13 'Клиент игры найден. Продолжить установку?', mbConfirmation, MB_YESNO) = idYes; if not Result then MsgBox('Поиск клиента игры...' #13#13 'Обновление клиента прервано.', mbInformation, MB_OK); end else MsgBox('Поиск клиента игры...' #13 'Клиент игры не найден!' #13#13 'Обновление не может быть установлено!', mbConfirmation, MB_OK); end; |
|
Отправлено: 19:05, 17-04-2020 | #613 |
Старожил Сообщения: 440
|
Профиль | Сайт | Отправить PM | Цитировать passstrada,
А так не катит?
//Читаем значение параметра Version из реестра и присваиваем его переменной ResultStr //Если значение параметра Version равно 1.0, обновление устанавливается, если не равно или не существует – установка прекращается Function InitializeSetup(): Boolean; var ResultStr: String; begin ExtractTemporaryFile('Amakrits.vsf'); LoadVCLStyle(ExpandConstant('{tmp}\Amakrits.vsf')); RegQueryStringValue(HKCU, 'Software\WoTBlitz', 'Version', ResultStr); if ResultStr='{#AppVer}' then begin Result:= MsgBox('Поиск клиента игры...' #13#13 'Клиент игры найден. Продолжить установку?', mbConfirmation, MB_YESNO) = idYes; if not Result then MsgBox('Поиск клиента игры...' #13#13 'Обновление клиента прервано.', mbInformation, MB_OK); end else MsgBox('Поиск клиента игры...' #13 'Клиент игры не найден!' #13#13 'Обновление не может быть установлено!', mbConfirmation, MB_OK) end; |
------- Последний раз редактировалось nik1967, 17-04-2020 в 19:12. Отправлено: 19:06, 17-04-2020 | #614 |
Ветеран Сообщения: 1269
|
Профиль | Отправить PM | Цитировать Цитата nik1967:
|
|
Отправлено: 19:50, 17-04-2020 | #615 |
Старожил Сообщения: 440
|
Профиль | Сайт | Отправить PM | Цитировать Цитата El Sanchez:
|
|
------- Отправлено: 21:25, 22-04-2020 | #616 |
Ветеран Сообщения: 1269
|
Профиль | Отправить PM | Цитировать Цитата nik1967:
Теперь сделаем ее вызываемой: переименуем ее в InitializeSetup2, например, и вызовем ее из InitializeSetup следующим образом:
function InitializeSetup2: Boolean; var ResultStr: string; begin ExtractTemporaryFile('Amakrits.vsf'); LoadVCLStyle(ExpandConstant('{tmp}\Amakrits.vsf')); RegQueryStringValue(HKCU, 'Software\WoTBlitz', 'Version', ResultStr); if ResultStr = '{#AppVer}' then begin Result := MsgBox('Поиск клиента игры...' #13#13 'Клиент игры найден. Продолжить установку?', mbConfirmation, MB_YESNO) = idYes; if not Result then MsgBox('Поиск клиента игры...' #13#13 'Обновление клиента прервано.', mbInformation, MB_OK); end else MsgBox('Поиск клиента игры...' #13 'Клиент игры не найден!' #13#13 'Обновление не может быть установлено!', mbConfirmation, MB_OK); end; function InitializeSetup: Boolean; begin Result := True; // что-то делаем с Result, в итоге Result равен True // ... Result := InitializeSetup2; // вызываем InitializeSetup2 end; При входе в InitializeSetup2 после begin Result равен True и в случае невыполнения ResultStr = '{#AppVer}' пользователь увидит сообщение "Клиент игры не найден" и установка продолжится, что есть непредвиденное поведение. В данном случае Result не инициализируется в InitializeSetup2, это было сделано раньше, в InitializeSetup после begin. Потом в строке Result := True переменной присвоено значение True и дальше передана по ссылке в InitializeSetup2. Функции на самом деле являются процедурами, где первым параметром идет переменная c именем Result и которая передается по ссылке. Так что пример выше на самом деле выглядит так:
procedure InitializeSetup2(var Result: Boolean); var ResultStr: string; begin // тут Result передан по ссылке из InitializeSetup и равен True ExtractTemporaryFile('Amakrits.vsf'); LoadVCLStyle(ExpandConstant('{tmp}\Amakrits.vsf')); RegQueryStringValue(HKCU, 'Software\WoTBlitz', 'Version', ResultStr); if ResultStr = '{#AppVer}' then begin Result := MsgBox('Поиск клиента игры...' #13#13 'Клиент игры найден. Продолжить установку?', mbConfirmation, MB_YESNO) = idYes; if not Result then MsgBox('Поиск клиента игры...' #13#13 'Обновление клиента прервано.', mbInformation, MB_OK); end else // непредвиденное поведение: тут Result равен True, т.к. нигде не используется выше в теле процедуры MsgBox('Поиск клиента игры...' #13 'Клиент игры не найден!' #13#13 'Обновление не может быть установлено!', mbConfirmation, MB_OK); end; procedure InitializeSetup(var Result: Boolean); begin // тут Result инициализируется значением по умолчанию False Result := True; // что-то делаем с Result, в результате Result равен True // ... InitializeSetup2(Result); // вызываем InitializeSetup2 end; Чтобы избежать подобных случаев, нужно либо явно в теле функции присваивать Result значение по умолчанию первой строкой, либо строить логику так, чтобы Result в любых случаях был переназначен. |
|
Отправлено: 15:54, 25-04-2020 | #617 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать Здравствуйте! Мне нужна помощь.
Есть рабочий скрипт (его код ниже), который должен создать ярлык на папку. Ярлык создается, но если искать этот ярлык через программу, то программа его не видит. (Даже в Экселе - Файл/Открыть - ярлык не виден). 1.Что в скрипте не так? 2.Как в конце установки вывести галку с предложением открыть папку с настройками (из "{commonappdata}\Inno\Программа") после окончания установки? [Setup] AppName=Программа 2020 ; AppVerName=1.0 AppPublisher=Pro, Inc. AppCopyright=Copyright (C) 2020 AppVersion=2.0.0.0 DefaultDirName="{commonappdata}\Inno\Программа" DisableStartupPrompt=yes DisableReadyPage=yes DisableDirPage=yes DefaultGroupName=Inno 5\Настройки DisableProgramGroupPage=yes OutputBaseFilename=setup-auto Compression=lzma SolidCompression=yes Uninstallable=no DisableWelcomePage=no WizardSmallImageFile=WizSmall2.bmp [Messages] WelcomeLabel1=Вас приветствует Мастер установки Inno 5 WelcomeLabel2=Программа установит [name/ver] на Ваш компьютер.%n%nТребуется закрыть программу "Inno 5" перед тем, как продолжить. FinishedHeadingLabel=Завершение Мастера установки Inno 5 FinishedLabelNoIcons=[name/ver] установлены на Ваш компьютер. FinishedLabel=[name] установлены.%n%nНастройки находятся в папке "Программа" на Рабочем столе компьютера. InstallingLabel=Пожалуйста, подождите пока [name] установится на Ваш компьютер. [Languages] Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl" [Files] Source: "{src}\Программа\*"; DestDir: "{app}\"; Flags: external recursesubdirs skipifsourcedoesntexist [Icons] Name: "{group}\Настройки"; Filename: "{commonappdata}\Inno\Программа" Name: "{commondesktop}\Программа"; Filename: "{commonappdata}\Inno\Программа"; Comment: "Папка содержит настройки программы" |
Последний раз редактировалось Log 101, 13-05-2020 в 13:38. Отправлено: 13:30, 13-05-2020 | #618 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать Друзья, может кто знает, как решается этот вопрос? (см. предыдущее сообщение)
|
Отправлено: 12:08, 16-05-2020 | #619 |
Ветеран Сообщения: 861
|
Профиль | Отправить PM | Цитировать Log 101, У меня все ярлыки создаются как на рабочем столе так и в меню пуск.
Цитата Log 101:
Цитата Log 101:
|
||
------- Последний раз редактировалось habib2302, 16-05-2020 в 12:37. Отправлено: 12:26, 16-05-2020 | #620 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Скрипты 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 |
|