InnoSetup Ultra

Inno Setup Ultra 5.5.1Программа для создания инсталляционных пакетов. Созданный утилитой инсталляционный файл какого-либо приложения, позволяет
  1. Оффлайн

    Leserg

    Звание: Ветеран

    Команда сайта

    Сообщений: 929

    Создано тем: 79

    Рейтинг: 8

    Репа: (131|131|0)

    Баллы: 1596

    Был: 2024-04-28 00:36

    Лайков: 140

    Цитата: Gnom
    есть несколько процедур InitializeWizard


    Я правильно понял, что процедуры InitializeWizard можно переименовать, а оставить только одну. И вот в неё вставить обращение к этим, переименованным. Причем, в коде сначала должны идти переименованные процедуры, а только потом главная, т.е. так как ты показал в своем примере. Или порядок не играет роли? Хотя нет, наверное порядок важен.

    Сообщение отредактировал 25 января 2023 - 21:09

    Кто ищет, тот всегда найдет!

    6 октября 2012 - 09:30 / #61
  2. Оффлайн

    Gnom

    Звание: Новичок

    Знаток

    Сообщений: 79

    Создано тем: 1

    Рейтинг: 2

    Репа: (6|6|0)

    Баллы: 51

    Страна: не указана!

    Был: 2023-04-05 20:55

    Лайков: 2

    с процедурами - все правильно. переименовывая - ты вместо встроенной получаешь свои, которые вызываешь тогда, когда тебе нужно. с функциями-же - все совершенно неоднозначно. просто приведи содержимое своих функций и я покажу, как нужно сделать именно в твоем случае, поскольку с функциями всегда разное решение их объединения.
    А модульное строение скрипта - это да, но от объединения все равно никуда не уйти, компилятор все равно обрабатывает все это как одну портянку, и соответственно дублирования не допустит.
    6 октября 2012 - 09:33 / #62
  3. Оффлайн

    Leserg

    Звание: Ветеран

    Команда сайта

    Сообщений: 929

    Создано тем: 79

    Рейтинг: 8

    Репа: (131|131|0)

    Баллы: 1596

    Был: 2024-04-28 00:36

    Лайков: 140

    Цитата: 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 ...

    ... а что делать дальше, не знаю.
    Сообщение отредактировал 25 января 2023 - 21:10

    Кто ищет, тот всегда найдет!

    7 октября 2012 - 16:45 / #63
  4. Оффлайн

    Gnom

    Звание: Новичок

    Знаток

    Сообщений: 79

    Создано тем: 1

    Рейтинг: 2

    Репа: (6|6|0)

    Баллы: 51

    Страна: не указана!

    Был: 2023-04-05 20:55

    Лайков: 2

    В твоем случае функции объединяются просто, как процедуры, поскольку они маленькие, то лучше просто собрать все в одну.
    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, соответсвенно, нужно смотреть именно ее, в чем может быть причина.
    Сообщение отредактировал 25 января 2023 - 21:10
    8 октября 2012 - 08:14 / #64
  5. Оффлайн

    Leserg

    Звание: Ветеран

    Команда сайта

    Сообщений: 929

    Создано тем: 79

    Рейтинг: 8

    Репа: (131|131|0)

    Баллы: 1596

    Был: 2024-04-28 00:36

    Лайков: 140

    Спасибо, буду пробовать.

    Цитата: 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;
    //******************************************************
    Сообщение отредактировал 25 января 2023 - 21:10

    Кто ищет, тот всегда найдет!

    9 октября 2012 - 01:31 / #65
  6. Оффлайн

    Gnom

    Звание: Новичок

    Знаток

    Сообщений: 79

    Создано тем: 1

    Рейтинг: 2

    Репа: (6|6|0)

    Баллы: 51

    Страна: не указана!

    Был: 2023-04-05 20:55

    Лайков: 2

    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); вот так будет правильно и работать будет как в анси, так и в юникоде.
    Сообщение отредактировал 25 января 2023 - 21:10
    9 октября 2012 - 08:04 / #66
  7. Оффлайн

    Leserg

    Звание: Ветеран

    Команда сайта

    Сообщений: 929

    Создано тем: 79

    Рейтинг: 8

    Репа: (131|131|0)

    Баллы: 1596

    Был: 2024-04-28 00:36

    Лайков: 140

    Цитата: 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
  8. Оффлайн

    Gnom

    Звание: Новичок

    Знаток

    Сообщений: 79

    Создано тем: 1

    Рейтинг: 2

    Репа: (6|6|0)

    Баллы: 51

    Страна: не указана!

    Был: 2023-04-05 20:55

    Лайков: 2

    Leserg, мне нравится тратить время. это наверное, самый большой из моих минусов. с заменой в юникоде "String" на "AnsiString" нужно так-же быть аккуратнее, смело можно менять только в тех местах, где в этой перменной передается путь к файлу, в других случаях нужно уже смотреть точно параметры функций. многие API-функции имеют так-же юникодные аналоги, и это тоже нужно учитывать. в данном случае sndPlaySound относится к MMAPI, по сути довольно устаревшая и вроде-бы не имеет юникодных версий своих функций. в общем, головняк сплошной с этими функциями, которые берутся из системных библиотек
    10 октября 2012 - 16:41 / #68
  9. Оффлайн

    kaktustv

    Звание: Бывалый

    Команда сайта

    Сообщений: 336

    Создано тем: 30

    Рейтинг: 5

    Репа: (17|17|0)

    Баллы: 101

    Страна: не указана!

    Был: 2024-03-06 22:23

    Лайков: 18

    Gnom, с таким вопросом, видимо, лучше обратиться к автору программы, но все-таки, может, какую-никакую логику поясните?
    Суть в чем:
    В инсталляторе нескольких програм лежат два идентичных исполняемых файла программы, отличающиеся только именами.


    И собственно вопрос: а зачем?
    Файлы, повторяю, идентичны.
    Сообщение отредактировал 25 января 2023 - 21:10
    14 октября 2012 - 15:18 / #69
  10. Оффлайн

    Gnom

    Звание: Новичок

    Знаток

    Сообщений: 79

    Создано тем: 1

    Рейтинг: 2

    Репа: (6|6|0)

    Баллы: 51

    Страна: не указана!

    Был: 2023-04-05 20:55

    Лайков: 2

    В общем, посмотрел - файлы идентичны на 100%. Единственная мысль - заложенная возможность объединить в один инсталлятор х86 и х64 версии с флагом IsWin64, других предположений нет.
    14 октября 2012 - 22:22 / #70

Статистика форума, пользователей онлайн: 0 (за последние 20 минут)

---
Создано тем
1178
Всего сообщений
15356
Пользователей
17857
Новый участник
27fylhtq