InnoSetup Ultra
Inno Setup Ultra 5.5.1Программа для создания инсталляционных пакетов. Созданный утилитой инсталляционный файл какого-либо приложения, позволяет
-
Оффлайн
Звание: Ветеран
Команда сайта
Сообщений: 945
Создано тем: 79
Рейтинг: 8
Репа: (131|131|0)
Баллы: 1676
Был: 2024-07-28 22:59
Лайков: 167
Цитата: Gnomесть несколько процедур InitializeWizard
Я правильно понял, что процедуры InitializeWizard можно переименовать, а оставить только одну. И вот в неё вставить обращение к этим, переименованным. Причем, в коде сначала должны идти переименованные процедуры, а только потом главная, т.е. так как ты показал в своем примере. Или порядок не играет роли? Хотя нет, наверное порядок важен.6 октября 2012 - 09:30 / #61 -
с процедурами - все правильно. переименовывая - ты вместо встроенной получаешь свои, которые вызываешь тогда, когда тебе нужно. с функциями-же - все совершенно неоднозначно. просто приведи содержимое своих функций и я покажу, как нужно сделать именно в твоем случае, поскольку с функциями всегда разное решение их объединения.
А модульное строение скрипта - это да, но от объединения все равно никуда не уйти, компилятор все равно обрабатывает все это как одну портянку, и соответственно дублирования не допустит.6 октября 2012 - 09:33 / #62 -
Оффлайн
Звание: Ветеран
Команда сайта
Сообщений: 945
Создано тем: 79
Рейтинг: 8
Репа: (131|131|0)
Баллы: 1676
Был: 2024-07-28 22:59
Лайков: 167
Цитата: Gnomпросто приведи содержимое своих функций и я покажу, как нужно сделать...
Вот смотри две функции InitializeSetup():// функция инициализации звука function InitializeSetup():Boolean; begin ExtractTemporaryFile('temp.wav'); Play(ExpandConstant('{tmp}')+' emp.wav'); Result:= True; end; // функция инициализации скина function InitializeSetup():Boolean; begin ExtractTemporaryFile('temp.cjstyles'); LoadSkin(ExpandConstant('{tmp} emp.cjstyles'), ''); Result := True; end;
Еще обратил, когда проверяю отдельно функцию воспроизведения звука, что если по каким-то причинам его проиграть не удалось (наверное функция возвращает False), то инсталлятор автоматически закрывается без каких-либо сообщений. Это можно как-то обойти? Т.е. если не удалось воспроизвести музыку, то продолжить работу инсталлятора, не закрывая его. Я так понимаюif Result = False then ...
... а что делать дальше, не знаю.7 октября 2012 - 16:45 / #63 -
В твоем случае функции объединяются просто, как процедуры, поскольку они маленькие, то лучше просто собрать все в одну.
function InitializeSetup(): Boolean; begin ExtractTemporaryFile('temp.wav'); Play(ExpandConstant('{tmp} emp.wav')); ExtractTemporaryFile('temp.cjstyles'); LoadSkin(ExpandConstant('{tmp} emp.cjstyles'), ''); Result := True; end;
по второму моменту, можно попробовать добавить в конце строчку:if not Result then Result := true;
хотя, привязок результата к проигрыванию музыки нет, то скорей всего происходит крах инсталла при запуске команды Play, соответсвенно, нужно смотреть именно ее, в чем может быть причина.8 октября 2012 - 08:14 / #64 -
Оффлайн
Звание: Ветеран
Команда сайта
Сообщений: 945
Создано тем: 79
Рейтинг: 8
Репа: (131|131|0)
Баллы: 1676
Был: 2024-07-28 22:59
Лайков: 167
Спасибо, буду пробовать.Цитата: Gnomскорей всего происходит крах инсталла при запуске команды Play, соответсвенно, нужно смотреть именно ее
Э-э-э, как смотреть?// 1 //************************************************* // Воспроизведение звука // ***************************************************** const SND_FILENAME = $00020000; SND_SYNC = $0001; function sndPlaySound(lpszSoundName: PansiChar; uFlags: cardinal):Integer; external 'sndPlaySoundA@winmm.dll'; Procedure Play(filename:String); begin sndPlaySound(filename,SND_FILENAME or SND_SYNC); end; //******************************************************
9 октября 2012 - 01:31 / #65 -
Leserg, теперь смотри Вылет из установки бывает только на юникоде, так? На нескольких форумах уже отвечал, и тут недавно тоже. элементарное несоответствие типов.
сопоставляем:function sndPlaySound(lpszSoundName: PansiChar; uFlags: cardinal):Integer; Procedure Play(filename:String);
тоесть, зявляем мы явный тип PansiChar, точнее, этот тип и является родным для функции, ну точнее, можно посмотреть на MSDN:BOOL sndPlaySound( LPCTSTR lpszSoundName, UINT fuSound );
LPCTSTR можно представить как PAnsichar так и AnsiSrting, но никак не WideString, каковым в юникоде является тип string.
отсюда -
Procedure Play(filename:AnsiSrting); вот так будет правильно и работать будет как в анси, так и в юникоде.9 октября 2012 - 08:04 / #66 -
Оффлайн
Звание: Ветеран
Команда сайта
Сообщений: 945
Создано тем: 79
Рейтинг: 8
Репа: (131|131|0)
Баллы: 1676
Был: 2024-07-28 22:59
Лайков: 167
Цитата: Gnomно никак не WideString, каковым в юникоде является тип string
Это меня натолкнуло заглянуть в справку к Unicode версии Inno Setup. Там есть такая строка:
"If you want to compile an existing script that imports ANSI Windows API calls with the Unicode compiler, either upgrade to the "W" Unicode API call or change the parameters from "String" or "PChar" to "AnsiString". The "AnsiString" approach will make your [Code] compatible with both the Unicode and the non Unicode version."
В общем здесь сказано о том, о чем ты рассказал выше.
Заменил "String" на "AnsiString" и вроде бы работает . Спасибо, что потратил на меня свое время.10 октября 2012 - 12:48 / #67 -
Leserg, мне нравится тратить время. это наверное, самый большой из моих минусов. с заменой в юникоде "String" на "AnsiString" нужно так-же быть аккуратнее, смело можно менять только в тех местах, где в этой перменной передается путь к файлу, в других случаях нужно уже смотреть точно параметры функций. многие API-функции имеют так-же юникодные аналоги, и это тоже нужно учитывать. в данном случае sndPlaySound относится к MMAPI, по сути довольно устаревшая и вроде-бы не имеет юникодных версий своих функций. в общем, головняк сплошной с этими функциями, которые берутся из системных библиотек10 октября 2012 - 16:41 / #68
-
Gnom, с таким вопросом, видимо, лучше обратиться к автору программы, но все-таки, может, какую-никакую логику поясните?
Суть в чем:
В инсталляторе нескольких програм лежат два идентичных исполняемых файла программы, отличающиеся только именами.
И собственно вопрос: а зачем?
Файлы, повторяю, идентичны.14 октября 2012 - 15:18 / #69 -
В общем, посмотрел - файлы идентичны на 100%. Единственная мысль - заложенная возможность объединить в один инсталлятор х86 и х64 версии с флагом IsWin64, других предположений нет.14 октября 2012 - 22:22 / #70
Статистика форума, пользователей онлайн: 0 (за последние 20 минут)
---
- Создано тем
- 1198
- Всего сообщений
- 15787
- Пользователей
- 18037
- Новый участник
- filespayout