|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 9] |
|
|
Скрипты Inno Setup. Помощь и советы [часть 9]
|
|
Ветеран Сообщения: 1274 |
Внимание! Данная тема предназначена только для обсуждения написания скриптов!
Остальные вопросы, а также последние версии компилятора в теме 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 |
|
Ветеран Сообщения: 862
|
Профиль | Отправить 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 |
|
Ветеран Сообщения: 1274
|
Профиль | Отправить 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 |
|
Ветеран Сообщения: 1274
|
Профиль | Отправить 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 | |
|