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

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

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

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

Ветеран


Contributor


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


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

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


Изменения
Автор: El Sanchez
Дата: 06-06-2020
Внимание! Данная тема предназначена только для обсуждения написания скриптов!
Остальные вопросы, а также последние версии компилятора в теме
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.3.0 [17.01.2015] - Скачать;



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

Скрипты 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

 

Аватара для habib2302

Ветеран


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

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


Цитата Iska:
либо работайте непосредственно в коде »
В принципе я надеялся на помощь т.к я в коде не силен. (Если есть возможность сделать код)
Цитата Iska:
P.S. Я надеюсь, Ваша инсталляция не состоит только из одного этого файла? »
Нет

-------
Помог? От "Полезное сообщение" не откажусь!!!


Отправлено: 22:46, 03-03-2019 | #271



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

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


Аватара для boss911

Alien


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

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


Цитата habib2302:
Например: При выборе задачи "Создать ярлык на РС" добавлялась команда SHORTCUT_DESKTOP=1. »
Код: Выделить весь код
[Tasks]
Name: DesktopIcon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Run]
Filename: {sys}\msiexec.exe; Parameters: "/I Setup.msi /qf ALL_USERS=1 SHORTCUT_DESKTOP=1 INSTALLDIR=""{app}"""; Check: not WizardSilent; Flags: waituntilterminated hidewizard; Tasks: DesktopIcon
Filename: {sys}\msiexec.exe; Parameters: "/I Setup.msi /qf ALL_USERS=1 INSTALLDIR=""{app}"""; Check: not WizardSilent; Flags: waituntilterminated hidewizard; Tasks: not DesktopIcon
В зависимости от выбора или не выбора задачи (по умолчанию не выбрано, флаг 'unchecked'), будет выполняться только один из указанных запусков (по умолчанию без параметра 'SHORTCUT_DESKTOP=1'). С компонентом можно сделать аналогично.

Отправлено: 02:00, 04-03-2019 | #272


Аватара для habib2302

Ветеран


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

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


boss911, помимо ярлыков на рс есть 4 компонента и ярлык в пуск

-------
Помог? От "Полезное сообщение" не откажусь!!!


Отправлено: 02:15, 04-03-2019 | #273


Ветеран


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

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


Начинают выясняться интересные подробности…
Цитата habib2302:
boss911, помимо ярлыков на рс есть 4 компонента и ярлык в пуск »
habib2302, о которых мы, конечно, должны были догадаться? Вы написали конкретный пример «например» — Вам дали на него конкретный ответ. Хотите чего-то сложного с кучей условий и зависимостей — изучайте и берите в руки PascalScript.

Отправлено: 04:09, 04-03-2019 | #274


Аватара для habib2302

Ветеран


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

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


Iska, уже сделал. посредством записи команд в ini файл через секцию [Ini] и чтение из ini файла через код

-------
Помог? От "Полезное сообщение" не откажусь!!!


Отправлено: 04:30, 04-03-2019 | #275


Аватара для OldGamer

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


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

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


Изображения
Тип файла: jpg SelectLanguage.jpg
(6.8 Kb, 17 просмотров)

Ребята, подскажите пожалуйста, как можно изменить стандартное окно с выбором языков установки?
Чтобы было похоже на то, что во вложении.

Отправлено: 22:39, 05-03-2019 | #276


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


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

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


помогите забороть странный колбек:

Скрытый текст

[Setup]
AppName=DeltaMAX
AppVerName=DeltaMAX 2.0.1.0
DefaultDirName={tmp}
OutputDir=c:\Files\

[code]
type
EnumCallback=procedure(retcode: integer;lpUser:Longint);

function WrapMyCallback(callback:EnumCallback; paramcount:integer):longword;
external 'wrapcallback@{sd}\Files\innocallback.dll stdcall';

type
DELTAMAX_ENCODE_OPTIONS = record
lpszLicensedTo: ansistring;
lpszLicenseKey: ansistring;
nMemoryMax: Integer;
nMemoryMaxPercent: Integer;
nFreeMemoryMin: Integer;
nLowMemMode: Integer;
nFootprintSize: Integer;
bAutoIncreaseFootprintSize: bool;
bEnableMultiPass: bool;
nMultiPassThreshold: Integer;
nMultiPassMaxAdditionalPasses: Integer;
pProgressCallback: longword;
lpUserData: integer;
end;

procedure DeltaMAXInitEncodeOptions(pOptions: DELTAMAX_ENCODE_OPTIONS);
external 'DeltaMAXInitEncodeOptions@{sd}\Files\DeltaMAX.dll cdecl';

function DeltaMAXEncode(szSource: ansistring; szTarget: ansistring; szDiff: ansistring; pOptions: DELTAMAX_ENCODE_OPTIONS): Integer;
external 'DeltaMAXEncode@{sd}\Files\DeltaMAX.dll cdecl';

procedure ProcessDiff(code: integer; lpUser:Longint);
begin
MsgBox('data', mbError, MB_OK);
end;

var
Data: PAnsiChar;
Options: DELTAMAX_ENCODE_OPTIONS;
callback:longword;
userdata:ansistring;

function initializesetup():boolean;
var
err: Integer;
n,s: ansistring;
begin
callback:=WrapMyCallback(@ProcessDiff,2);

n := 'DEMO';
s := 'DEMO';

DeltaMAXInitEncodeOptions(Options);

Options.lpszLicensedTo := n;
Options.lpszLicenseKey := s;
Options.nMemoryMax := 0;
Options.nMemoryMaxPercent := 80;
Options.nFreeMemoryMin := 8;
Options.nLowMemMode := 1;
Options.nFootprintSize := 0;
Options.bAutoIncreaseFootprintSize := true;
Options.bEnableMultiPass := false;
Options.nMultiPassThreshold := 0;
Options.nMultiPassMaxAdditionalPasses := 1;

//Options.lpUserData := 0;
//Options.pProgressCallback := callback;

err := DeltaMAXEncode('D:\1.txt', 'D:\2.txt', 'D:\patch.diff', Options);

if err <> 0 then
MsgBox('Bad! ' + IntToStr(err), mbError, MB_OK) else
MsgBox('Success! ' + IntToStr(err), mbError, MB_OK);
end;


сам sdk в аттаче. нужно, чтобы в структуре параметр pProgressCallback корректно исполнял колбек для обсчета процентов согласно документации SDK. полагаю, у меня ошибка в данных lpUserData, я не знаю какой указатель и куда должен быть использован.

для использования надо из папки SDK\Redist скопировать ANSI версию DeltaMAX.dll в C:\Files, туда же InnoCallback.dll.
также нужно поместить 1.txt и 2.txt с различающимися данными. D:\patch.diff - сюда будут записаны файл с изменениями.
из соображений копирайтов, серийный номер не прикладываю, нужно будет подождать пять секунд и нажать OK для запуска процесса.

Последний раз редактировалось usermode, 29-04-2019 в 15:03.


Отправлено: 20:36, 08-03-2019 | #277


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

Ветеран


Contributor


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

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


Цитата usermode:
помогите забороть странный колбек »
usermode,
Скрытый текст

Код: Выделить весь код
[Setup]
AppName=DeltaMAX
AppVerName=DeltaMAX 2.0.1.0
DefaultDirName={tmp}
OutputDir=.

[Files]
Source: {#ifdef UNICODE}Unicode\{#endif}DeltaMAX.dll; Flags: dontcopy;
Source: InnoCallback.dll; Flags: dontcopy

[Code]
type
  TMessageCallback = function(nMessageCode: Integer; lpUserData: LongWord): BOOL;
  TProgressCallback = function(dPercentDone: Single; lpUserData: LongWord): BOOL;

  TDeltaMAXEncodeOptions = record
    lpszLicensedTo: string;
    lpszLicenseKey: string;
    nMemoryMax: Integer;
    nMemoryMaxPercent: Integer;
    nFreeMemoryMin: Integer;
    nLowMemMode: Integer;
    nFootprintSize: Integer;
    bAutoIncreaseFootprintSize: BOOL;
    bEnableMultiPass: BOOL;
    nMultiPassThreshold: Integer;
    nMultiPassMaxAdditionalPasses: Integer;
    pProgressCallback: LongWord;
    pMessageCallback: LongWord;
    lpUserData: LongWord;
  end;

function WrapMessageCallback(Callback: TMessageCallback; ParamCount: Integer): LongWord; external 'wrapcallback@files:innocallback.dll stdcall';
function WrapProgressCallback(Callback: TProgressCallback; ParamCount: Integer): LongWord; external 'wrapcallback@files:innocallback.dll stdcall';
procedure DeltaMAXInitEncodeOptions(var pOptions: TDeltaMAXEncodeOptions); external 'DeltaMAXInitEncodeOptions@files:DeltaMAX.dll cdecl';
function DeltaMAXEncode(szSource, szTarget, szDiff: string; var pOptions: TDeltaMAXEncodeOptions): Integer; external 'DeltaMAXEncode@files:DeltaMAX.dll cdecl';

function ProgressCallback(dPercentDone: Single; lpUserData: LongWord): BOOL;
begin
  Result := True;
  Log(Format('Progress: %n%%', [dPercentDone]));
end;

function MessageCallback(nMessageCode: Integer; lpUserData: LongWord): BOOL;
begin
  Result := True;
  Log(Format('Message code: %d', [nMessageCode]));
end;

function InitializeSetup: Boolean;
var
  LOptions: TDeltaMAXEncodeOptions;
  LResultCode: Integer;
begin
  try
    DeltaMAXInitEncodeOptions(LOptions);
    LOptions.lpszLicensedTo := 'DEMO';
    LOptions.lpszLicenseKey := 'DEMO';
    LOptions.bEnableMultiPass := False;
    LOptions.nMultiPassThreshold := 0;
    LOptions.nMultiPassMaxAdditionalPasses := 1;
    LOptions.pProgressCallback := WrapProgressCallback(@ProgressCallback, 2);
    LOptions.pMessageCallback := WrapMessageCallback(@MessageCallback, 2);
    LResultCode := DeltaMAXEncode(ExpandConstant('{src}\1.txt'), ExpandConstant('{src}\2.txt'), ExpandConstant('{src}\patch.diff'), LOptions);
    if LResultCode <> 0 then
      RaiseException(Format('Encode failed with error code: %d', [LResultCode]));
  except
    ShowExceptionMessage;
  finally
  end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:17, 10-03-2019 | #278


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


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

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


El Sanchez, благодарю!

Давно не кодил и ошибка основная у меня была в том, что я полностью не описал структуру, почему то решил, что можно некоторые параметры не описывать и оставить себе только нужные - а так делать нельзя, такое можно только в коде функции. К тому же не выполнил главного условия True функции колбека, без которого это дело тоже не заведется. Также прошляпил var в прототипах, хотя использовал почему-то out и работало..

Вопрос у меня следующий, проценты выполнения привязаны только к прогресс бару? Вообще я хотел бы адаптировать под консольное приложение на дельфи и мне там было бы неплохо прогресс выполнения привязать к строке, отображающей проценты в числовом виде. Пока не могу придумать как описать проценты от 0 до 100 в ProgressCallback, ибо даже если вручную указать min 0, max 100, step 1, то общее количество вызовов в колбеке мы не знаем, их может быть 250, 400 и т.д.

по идее в dPercentDone должно лежать число максимального цикла колбека, чтобы выполнить обсчет процентов? может быть потому что другой тип данных Single, а не Double? а с Double работать не хочет. надо будет с дельфи повозиться, посмотреть как там дела будут обстоять с Double.

добавлено
вобщем, проблема решена на дельфи:
Скрытый текст
function DiffProgressCallback(nn:double; lpUserData:pointer): bool; stdcall;
begin
Application.ProcessMessages;
Form1.edt1.Text := IntToStr(round(nn));
Form1.pb1.position:=round(nn);
Result:=True;
end;

double нормально отрабатывает, только сначала не понял, почему по третьему кругу прогресс бар и проценты идут. оказалось, так надо разные этапы так разделяются.

я проверил код на Inno и на Delphi, что-то типа:
ppos:=0;
...
в колбеке:
inc(ppos);
и считаем проценты по ppos, минусуя 100 процентов при превышении интервала.
сравнив выполнение с double на дельфи и там же рядом inc кода на Inno - абсолютно одинаково считает, единственное на Inno надо учитывать "переполнение" счетчика процентов, когда идет вторая и третяя стадия выполнения. извращаться с Single в данном случае не обязательно

Последний раз редактировалось usermode, 10-03-2019 в 19:24.


Отправлено: 15:02, 10-03-2019 | #279


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

Ветеран


Contributor


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

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


Цитата usermode:
Также прошляпил var в прототипах, хотя использовал почему-то out и работало.. »
usermode, в данном случае без разницы.
Цитата usermode:
Вопрос у меня следующий, проценты выполнения привязаны только к прогресс бару? »
usermode, прогресс там привязан к разным операциям в течении сессии. Запустите Bin\MFC60Client.exe и увидите, что прогресс там несколько раз полностью доходит до конца, общего нет.
Цитата usermode:
по идее в dPercentDone должно лежать число максимального цикла колбека, чтобы выполнить обсчет процентов? может быть потому что другой тип данных Single, а не Double? а с Double работать не хочет. надо будет с дельфи повозиться, посмотреть как там дела будут обстоять с Double. »
usermode, нормально в Delphi должно быть, это в PascalScript флоаты дурные. Single я поставил, потому что с другими типами ошибки, с ним же без ошибок, но проценты не считает .
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:18, 10-03-2019 | #280



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

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

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




 
Переход