|
Компьютерный форум 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 | Цитировать Вячеслав.Мартыновских@vk, в https://krinkels.org/ все это есть
|
------- Отправлено: 15:36, 22-11-2020 | #711 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 8
|
Профиль | Сайт | Отправить PM | Цитировать El Sanchez, Доброго времени суток. Недавно мне скинули сие чудо - http://forum.oszone.net/post-2012750-1182.html
Вопрос был такой: "Простите за мою тупость, но в коде довольно плохо разбираюсь. Я так понимаю там есть переменные которые зависят от действия? Можно небольшое пояснение к этому коду? Ну в плане того, как этим пользоваться, что нужно менять и в целом, как это использовать в целях распаковки моего архива. P.S. я там вижу, что у него есть какая то последовательность. Он сам пакует файл, а потом распаковывает? Или я как обычно несу херню)" Можете помочь в данном вопросе? Если вкратце, то меня интересует просто, как сделать бинарник большого размера (что я уже узнал, путём изменения расширения rar на bin) и как его подключить к своему установщику. |
Отправлено: 21:35, 14-12-2020 | #712 |
Ветеран Сообщения: 1264
|
Профиль | Отправить PM | Цитировать Цитата niki12899@vk:
Скрытый текст
[Setup] AppName=test AppVerName=test DefaultDirName={pf}\test [Languages] Name: ru; MessagesFile: compiler:Languages\russian.isl [CustomMessages] ru.SevenZipStatusExtractFiles=Распаковка файлов из %1: ru.SevenZipProgressCaptions=Прогресс:%nСкорость:%nПрошло:%nОсталось: ru.SevenZipProgressInfo=%1%% (%2 из %3)%n%4%n%5%n%6 ru.SevenZipExtractFailed=При распаковке архива %1 произошла ошибка. Код ошибки: %2 [Files] Source: 7-zip32.dll; Flags: dontcopy #ifndef IS_ENHANCED #if VER < 0x06000000 ; https://web.archive.org/web/20150510131335if_/http://restools.hanzify.org/inno/callbackctrl/InnoCallbackCtrl_V1.1.zip Source: CallbackCtrl.dll; Flags: dontcopy #endif #endif [Code] const WM_GETFONT = $0031; WM_SETTEXT = $000C; WM_USER = $0400; PBM_SETPOS = WM_USER + 2; PBM_SETRANGE32 = WM_USER + 6; GWL_STYLE = -16; WS_CLIPSIBLINGS = $04000000; WS_VISIBLE = $10000000; WS_CHILDWINDOW = $40000000; SS_RIGHT = $2; CP_ACP = 0; CP_UTF8 = 65001; FNAME_MAX32 = 512; MAX_PATH = 260; ARCEXTRACT_BEGIN = 0; ARCEXTRACT_INPROCESS = 1; type { 7-zip.dll. } TExtractingInfo = record szSourceFileName: PAnsiChar; szDestFileName: PAnsiChar; dwFileSize: DWORD; szFileSize: PAnsiChar; dwWriteSize: DWORD; szWriteSize: PAnsiChar; dwProgress: DWORD; szSpeed: PAnsiChar; szElapsed: PAnsiChar; szRemain: PAnsiChar; end; { User-defined data passed to callback. } TArcParam = record FilenameLabelHWND: HWND; ProgressGaugeHWND: HWND; ProgressInfoHWND: HWND; end; #ifndef IS_ENHANCED #if VER < 0x06000000 TExtractCallbackProc = function (nState: UINT; var ExtInfo: TExtractingInfo; var ArcParam: TArcParam): BOOL; #endif #endif // Unicode and Character Set Functions function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: string; cchWideChar: Integer; lpMultiByteStr: AnsiString; cbMultiByte, lpDefaultChar: Integer; lpUsedDefaultChar: Longint): Integer; external 'WideCharToMultiByte@kernel32.dll stdcall'; function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: AnsiString; cbMultiByte: Integer; lpWideCharStr: string; cchWideChar: Integer): Integer; external 'MultiByteToWideChar@kernel32.dll stdcall'; // Shell Lightweight Utility Functions function PathCompactPath(hDC: THandle; lpszPath: string; dx: UINT): BOOL; external 'PathCompactPathW@shlwapi.dll stdcall'; // Painting and Drawing Functions function GetDC(hWnd: HWND): THandle; external 'GetDC@user32.dll stdcall'; // Device Context Functions/ function SaveDC(hdc: THandle): Integer; external 'SaveDC@gdi32.dll stdcall'; function RestoreDC(hdc: THandle; nSavedDC: Integer): BOOL; external 'RestoreDC@gdi32.dll stdcall'; function ReleaseDC(hWnd: HWND; hDC: THandle): Integer; external 'ReleaseDC@user32.dll stdcall'; function SelectObject(hdc, hgdiobj: THandle): THandle; external 'SelectObject@gdi32.dll stdcall'; // Window Functions function GetClientRect(hWnd: HWND; var lpRect: TRect): BOOL; external 'GetClientRect@user32.dll stdcall'; // Message Functions function SendMessageString(hWnd: HWND; Msg: UINT; wParam: Longint; lParam: string): Longint; external 'SendMessageW@user32.dll stdcall'; // Window Class Functions function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLongW@user32.dll stdcall'; // 7-zip.dll Functions function SevenZip(const CmdLine: AnsiString; ArcProc: Longint; var LParam: TArcParam): Integer; external 'SevenZip@files:7-zip32.dll stdcall'; #ifndef IS_ENHANCED #if VER < 0x06000000 // CallbackCtrl.dll Functions function WrapExtractProc(Callback: TExtractCallbackProc; ParamCount: Integer): LongWord; external 'wrapcallbackaddr@files:callbackctrl.dll stdcall'; #endif #endif var ProgressInfoContainer, ProgressInfo: TNewStaticText; ArcProc: LongWord; function UTF8Encode(const Value: string): AnsiString; var Len: Integer; begin if Value = '' then Exit; Len := WideCharToMultiByte(CP_UTF8, 0, Value, -1, '', 0, 0, 0); if Len = 0 then Exit; Result := StringOfChar(#0, Len - 1); if WideCharToMultiByte(CP_UTF8, 0, Value, -1, Result, Len, 0, 0) = 0 then Exit; end; function UTF8Decode(const Value: AnsiString): string; var Len: Integer; begin if Value = '' then Exit; Len := MultiByteToWideChar(CP_UTF8, 0, Value, -1, '', 0); if Len = 0 then Exit; Result := StringOfChar(#0, Len - 1); if MultiByteToWideChar(CP_UTF8, 0, Value, -1, Result, Len) = 0 then Exit; end; function ExtractCallbackProc(nState: UINT; var ExtInfo: TExtractingInfo; var ArcParam: TArcParam): BOOL; var LText: string; DC, SaveIndex: THandle; LRect: TRect; begin { Avoid call VCL methods or get/set properties. } Result := True; case nState of ARCEXTRACT_BEGIN: begin DC := GetDC(ArcParam.FilenameLabelHWND); SaveIndex := SaveDC(DC); try SelectObject(DC, SendMessage(ArcParam.FilenameLabelHWND, WM_GETFONT, 0, 0)); GetClientRect(ArcParam.FilenameLabelHWND, LRect); LText := UTF8Decode(ExtInfo.szDestFileName); PathCompactPath(DC, LText, LRect.Right - LRect.Left); SendMessageString(ArcParam.FilenameLabelHWND, WM_SETTEXT, 0, LText); finally if SaveIndex <> 0 then RestoreDC(DC, SaveIndex); ReleaseDC(ArcParam.FilenameLabelHWND, DC); end; end; ARCEXTRACT_INPROCESS: begin PostMessage(ArcParam.ProgressGaugeHWND, PBM_SETRANGE32, 0, 100); PostMessage(ArcParam.ProgressGaugeHWND, PBM_SETPOS, ExtInfo.dwProgress, 0); LText := FmtMessage(CustomMessage('SevenZipProgressInfo'), [IntToStr(ExtInfo.dwProgress), ExtInfo.szWriteSize, ExtInfo.szFileSize, ExtInfo.szSpeed, ExtInfo.szElapsed, ExtInfo.szRemain]); SendMessageString(ArcParam.ProgressInfoHWND, WM_SETTEXT, 0, LText); end; end; end; procedure ExtractPackage(const AFileName, ADestPath: string); var CmdLine: AnsiString; ArcParam: TArcParam; ResultCode: Integer; begin if FileExists(AFileName) then try WizardForm.StatusLabel.Caption := FmtMessage(CustomMessage('SevenZipStatusExtractFiles'), [ExtractFileName(AFileName)]); ProgressInfoContainer.Show; CmdLine := UTF8Encode(ExpandConstant(Format('x -y "%s" -o"%s\"', [AFileName, ADestPath]))); ArcParam.FilenameLabelHWND := WizardForm.FilenameLabel.Handle; ArcParam.ProgressGaugeHWND := WizardForm.ProgressGauge.Handle; ArcParam.ProgressInfoHWND := ProgressInfo.Handle; ResultCode := SevenZip(CmdLine, ArcProc, ArcParam); if ResultCode <> 0 then RaiseException(FmtMessage(CustomMessage('SevenZipExtractFailed'), [ExtractFileName(AFileName), Format('0x%.8x', [ResultCode])])); except ShowExceptionMessage; finally ProgressInfoContainer.Hide; WizardForm.StatusLabel.Caption := SetupMessage(msgStatusExtractFiles); WizardForm.FilenameLabel.Caption := ''; end; end; procedure CreateInstallingPage; begin { ProgressInfoContainer. } ProgressInfoContainer := TNewStaticText.Create(WizardForm); with ProgressInfoContainer do begin Parent := WizardForm.InstallingPage; Align := alBottom; AutoSize := False; Caption := CustomMessage('SevenZipProgressCaptions'); Height := Parent.ClientHeight - WizardForm.ProgressGauge.Top - WizardForm.ProgressGauge.Height - ScaleY(5); end; { ProgressInfo. } ProgressInfo := TNewStaticText.Create(WizardForm); with ProgressInfo do begin Parent := ProgressInfoContainer; Align := alRight; AutoSize := False; Width := Parent.ClientWidth div 2; SetWindowLong(Handle, GWL_STYLE, WS_CHILDWINDOW or WS_VISIBLE or WS_CLIPSIBLINGS or SS_RIGHT); end; #ifdef IS_ENHANCED ArcProc := CallbackAddr('ExtractCallbackProc'); #elif VER >= 0x06000000 ArcProc := CreateCallback(@ExtractCallbackProc); #else ArcProc := WrapExtractProc(@ExtractCallbackProc, 3); #endif end; procedure InitializeWizard; begin CreateInstallingPage; end; procedure CurStepChanged(CurStep: TSetupStep); begin case CurStep of ssPostInstall: begin ExtractPackage(ExpandConstant('{src}\dummy.bin'), ExpandConstant('{app}')); end; end; end; В шаблоне нет секции UninstallDelete, т.к. я не знаю структуры ваших файлов и папок. Деинсталлятор ничего не знает про извлекаемые из архива файлы, поэтому в ней описываете корневые файлы и папки из архивов. |
|
Последний раз редактировалось El Sanchez, 15-12-2020 в 19:25. Отправлено: 16:44, 15-12-2020 | #713 |
Новый участник Сообщения: 8
|
Профиль | Сайт | Отправить PM | Цитировать El Sanchez, Видимо я совсем тупой... Простите, можете подробнее процесс описать? Я вставил этот код в Inno Setup. После компиляции создался exe (mySetup) после установки которого создаётся папка "test", где лежит два файла. Но не суть. Я хочу узнать, как мне конкретно подключить свой архив с файлами, чтобы программа потом его распаковывала.
|
Отправлено: 18:03, 04-01-2021 | #714 |
Ветеран Сообщения: 1264
|
Профиль | Отправить PM | Цитировать Цитата niki12899@vk:
|
|
Отправлено: 19:06, 08-01-2021 | #715 |
Новый участник Сообщения: 2
|
Профиль | Сайт | Отправить PM | Цитировать Всем Привет. Можете подсказать как написать код : Вот что я хочу. Есть игра. Я сделал к ней дополнение и у меня получилось три папки и в игре есть такие же папки. И мне надо чтоб из моих установилось все туда. А то я не пойму как это сделать.
|
Последний раз редактировалось Евгений.Довгополый@vk, 23-03-2021 в 03:47. Отправлено: 19:11, 22-03-2021 | #716 |
Новый участник Сообщения: 2
|
Профиль | Сайт | Отправить PM | Цитировать niki12899@vk,
|
Отправлено: 03:47, 23-03-2021 | #717 |
Новый участник Сообщения: 2
|
Профиль | Отправить PM | Цитировать Народ помогите выкачать скрипт пожалуйста с кринкла https://krinkels.org/resources/r-g-mexaniki.82/
очень прошу помочь) можна кинуть на burzabu@gmail.com |
Отправлено: 21:37, 02-04-2021 | #718 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 22:20, 02-04-2021 | #719 |
Новый участник Сообщения: 2
|
Профиль | Отправить PM | Цитировать Цитата Iska:
|
|
Отправлено: 22:58, 02-04-2021 | #720 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Скрипты 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 |
|