|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 9] |
|
Скрипты Inno Setup. Помощь и советы [часть 9]
|
Ветеран Сообщения: 1264 |
Профиль | Отправить PM | Цитировать
Внимание! Данная тема предназначена только для обсуждения написания скриптов!
Остальные вопросы, а также последние версии компилятора в теме 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 |
Ветеран Сообщения: 855
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 22:46, 03-03-2019 | #271 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Alien Сообщения: 4262
|
Профиль | Отправить PM | Цитировать Цитата habib2302:
[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
|
|
Отправлено: 02:00, 04-03-2019 | #272 |
Ветеран Сообщения: 855
|
Профиль | Отправить PM | Цитировать boss911, помимо ярлыков на рс есть 4 компонента и ярлык в пуск
|
------- Отправлено: 02:15, 04-03-2019 | #273 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Начинают выясняться интересные подробности…
Цитата habib2302:
|
|
Отправлено: 04:09, 04-03-2019 | #274 |
Ветеран Сообщения: 855
|
Профиль | Отправить PM | Цитировать Iska, уже сделал. посредством записи команд в ini файл через секцию [Ini] и чтение из ini файла через код
|
------- Отправлено: 04:30, 04-03-2019 | #275 |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать Ребята, подскажите пожалуйста, как можно изменить стандартное окно с выбором языков установки?
Чтобы было похоже на то, что во вложении. |
Отправлено: 22:39, 05-03-2019 | #276 |
Новый участник Сообщения: 28
|
Профиль | Отправить 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 |
Ветеран Сообщения: 1264
|
Профиль | Отправить PM | Цитировать Цитата 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
|
Профиль | Отправить 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 |
Ветеран Сообщения: 1264
|
Профиль | Отправить PM | Цитировать Цитата usermode:
Цитата usermode:
Цитата usermode:
|
|||
Отправлено: 19:18, 10-03-2019 | #280 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Скрипты 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 |
|