Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 6]
Lex_from_Belarus, ну тогда вручную, или адаптировать способ, предложенный Johny777.
а что значит "not component1"? »
Проще говоря "если не отмечен component1"
audiofeel
23-04-2013, 12:38
ilya_klimovich, isdone 0.4 подойдет? а то влом все сначала делать » Скачайте не ленитесь "ISDone0.6final", сперва все испробуйте на "чистом", а уж потом и "картинки" добавляйте, вчитайтесь в справку к ИСДону, что он "может", чем "проще" скрипт тем надежнее.Вот я буквально полгода назад чем занимался - скачивал все готовое на Кринкелсе = ну надоело, имея перед собой кучу примеров сам кое чему "научился". свой та лучше всех, по крайней мере знаешь что и где искать
ilya_klimovich
23-04-2013, 17:33
если батником izma сжимаю то все норм а если precomp+izma то вот такая обшибка
http://www.fotohost.by/pic_b/13/04/23/b5a15d64b9c4c92fce54f0e26e410acc.png
insombia
23-04-2013, 18:17
ilya_klimovich не хватает оператвы
ilya_klimovich
23-04-2013, 18:18
3 гига у меня
insombia
23-04-2013, 18:22
ilya_klimovich значит прекомп не нашел файл который он может расжать
ilya_klimovich
23-04-2013, 18:32
да я уже любые файлы закидывал и каждый раз выбивается одна и та же ошибка
audiofeel
23-04-2013, 19:00
да я уже любые файлы закидывал и каждый раз выбивается одна и та же ошибка » проверил толь ко что = все три работают, попробуй закинуть файлы которые идут вместе с "PrecompInside0.23" в папке "packeddata" если ошибки нет - то разжимать в ваших файлах нечего, используй просто "среп" или любой другой,
insombia
23-04-2013, 22:50
как сделать переход языка на ходу? я нашел один пример но там он не полный
http://rghost.ru/45310084
insombia
23-04-2013, 23:12
и ещё одно,нужно текстурировать кнопку обзор http://rghost.ru/45507461
Как добавить верний прогресс-бар (нижной - отображает общий прогресс, верхний - распаковку одного файла) с процентами рядом с каждым для обычных файлов, к єтому скрипту
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirName={pf}\MyApp
[Files]
Source: innocallback.dll; DestDir: {tmp}; Flags: dontcopy
Source: files\*; DestDir: {app}; Flags: recursesubdirs
[Languages]
Name: Ukrainian; MessagesFile: compiler:Languages\Ukrainian.isl
[code]
type
TTimerProc = procedure(HandleW, Msg, idEvent, TimeSys: LongWord);
var
TimerID: LongWord;
PercentsLabel: TLabel;
function WrapTimerProc(callback: TTimerProc; Paramcount: Integer): longword; external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): longword; external 'SetTimer@user32';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32 stdcall delayload';
Procedure MyTimerProc(h, msg, idevent, dwTime: Longword);
Begin
if WizardForm.CurPageID = wpInstalling then with WizardForm.ProgressGauge do PercentsLabel.Caption:= Format('%s'#32'%s', ['Установка игры:', FormatFloat('0.0 %', (Position*100)/Max)]);
End;
procedure DeinitializeSetup();
begin
KillTimer(0, TimerID);
end;
procedure InitializeWizard();
begin
PercentsLabel:= TLabel.Create(WizardForm);
with PercentsLabel do
begin
Left:= WizardForm.DirEdit.Left;
Top:= ScaleY(WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 30);
Width:= WizardForm.StatusLabel.Width;
Height:= WizardForm.StatusLabel.Height;
AutoSize:= False;
Transparent := True;
Alignment := taCenter;
Font.Style:= [fsBold, fsItalic];
Font.Size:= 14;
Font.Name:= 'Times New Roman';
Font.Color:= ClMaroon;
Parent:= WizardForm.InstallingPage;
end;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then TimerID:= SetTimer(0, 0, 500 {Установка игры}, WrapTimerProc(@MyTimerProc, 4));
end;
Как добавить верний прогресс-бар (нижной - отображает общий прогресс, верхний - распаковку одного файла) с процентами рядом с каждым для обычных файлов, к єтому скрипту »
Средствами Inno? Создать кастомный прогресс бар, и таймер, который будет передвигать прогресс бар основываясь на размере копируемого файла(наверное), и т.д. Есть где-то пример реализации подобного, но там, если я не путаю, учитываются только файлы лежащие в корневом каталоге, тоесть подпапки в расчет не берутся. Все файлы нужно раскидывать по каталогам вручную, в секции Files, посредством DestDir, и если файлов сотни, а то и тысячи... Вообщем игра не стоит свеч.
Gnom_aka_Lexander
24-04-2013, 13:16
neorom, вот, поправлял как-то существующий пример до удобоваримого. на 100% корректно сделать невозможно по множеству причин. главная из них - прегресс рассчитывается исходя из размера сжатого файла.
скачать (http://innoultra.ru/downloads/scr.7z)
прегресс рассчитывается исходя из размера сжатого файла »
А эсли не жимать файли, то получеться.
Может кто подскажет, где эсть информация как роботать з inno setup китайськая версия в Редакторе форм.
audiofeel
25-04-2013, 06:13
Доброе утро, Всем. в примере "GameuxInstallHelper.iss" реализованно все для одного ГДФБинари, "проблема" в том что их два, один для MP второй для SP - как быть, просто "повторить" - "if CurStep = ssPostInstall then begin"
и "if CurUninstallStep = usUninstall then begin" просто вписывая данные для каждого отдельно. как бы это сделать все правильно что ли , что бы при удалении не было эррор
audiofeel, я ведь вам уже говорил, объявлять дважды один и тот же шаг установки или деинсталяции(CurStep, CurUninstallStep) не имеет смысла. Объявляйте все процедуры в порядке выполнения внутри шага. Покажите, что там за пример, а то я, что-то у себя не нахожу.
audiofeel
25-04-2013, 06:26
saurn, У ГДФ "названия" разные и "MainExe" разные
пример
type
TGUID = record
Data1: Cardinal;
Data2,
Data3: Word;
Data4: array [0..8] of char;
end;
function GenerateGUID(var GUID: TGUID): Cardinal;
external 'GenerateGUID@files:GameuxInstallHelper.dll stdcall setuponly';
function AddToGameExplorer(Binary: String; Path: String; InstallType: Integer; var GUID: TGUID): Cardinal;
external 'AddToGameExplorerA@files:GameuxInstallHelper.dll stdcall setuponly';
function CreateTask(InstallType: Integer; var GUID: TGUID; TaskType: Integer; TaskNumber: Integer; TaskName: String; Binary: String; Parameters: String): Cardinal;
external 'CreateTaskA@files:GameuxInstallHelper.dll stdcall setuponly';
function RetrieveGUIDForApplication(Binary: String; var GUID: TGUID): Cardinal;
external 'RetrieveGUIDForApplicationA@{app}\GameuxInstallHelper.dll stdcall uninstallonly';
function RemoveFromGameExplorer(var GUID: TGUID): Cardinal;
external 'RemoveFromGameExplorer@{app}\GameuxInstallHelper.dll stdcall uninstallonly';
function RemoveTasks(var GUID: TGUID): Cardinal;
external 'RemoveTasks@{app}\GameuxInstallHelper.dll stdcall uninstallonly';
const
PlayTask = 0;
SupportTask = 1;
var
GUID: TGUID;
procedure CurStepChanged2(CurStep: TSetupStep);
var
Binary, MainExe: String;
begin
if CurStep = ssInstall then
GenerateGUID(GUID);
if CurStep = ssPostInstall then begin
Binary := ExpandConstant('{app}\GDFBinary.dll');
MainExe := ExpandConstant('{app}\Binaries\MoHUpdater.exe');
AddToGameExplorer(Binary, ExpandConstant('{app}'), 3, GUID);
CreateTask(3, GUID, PlayTask, 0, 'Play', MainExe, '');
CreateTask(3, GUID, PlayTask, 1, 'Medal of Honor (TM) - Повторно авторизуйте данное устройство', 'Binaries\moh.exe', ' -ead_gl_remove');
CreateTask(3, GUID, PlayTask, 2, 'Readme', 'Support\readme.ru.txt', '');
CreateTask(3, GUID, PlayTask, 3, 'EA EULA', 'Support\EAEula\ru_eula.rtf', '');
CreateTask(3, GUID, PlayTask, 4, 'Техническая поддержка', 'Support\EA Help\Electronic_Arts_Technical_Support.htm', '');
end;
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
Binary: String;
GUID: TGUID;
begin
if CurUninstallStep = usUninstall then begin
Binary := ExpandConstant('{app}\GDFBinary.dll');
RetrieveGUIDForApplication(Binary, GUID);
RemoveFromGameExplorer(GUID);
RemoveTasks(GUID);
UnloadDll(ExpandConstant('{app}\GameuxInstallHelper.dll'));
end;
end;
audiofeel, я использую другой способ. Пробуйте, работает - не работает, проверить сейчас не могу. Только имена бинарников в шапке скрипта свои укажите.
#define GDFSP "{app}\GDFsp.dll"
#define GDFMP "{app}\GDFmp.dll"
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
OutputDir=...
[Files]
Source: GameuxInstallHelper.dll; DestDir: {app}; Flags: overwritereadonly
[Code]
type
TGUID = record
D1: Cardinal;
D2: Word;
D3: Word;
D4: Array [0..8] of Byte;
end;
function AddToGameExplorer(BinaryPatch: String; Path: String; InstallType: Integer; var GUID: TGUID): Cardinal; external 'AddToGameExplorerA@files:GameuxInstallHelper.dll stdcall setuponly';
function RetrieveGUIDForApplication(BinaryPatch: String; var GUID: TGUID): Cardinal; external 'RetrieveGUIDForApplicationA@{app}\GameuxInstallHelper.dll stdcall uninstallonly';
function RemoveFromGameExplorer(var GUID: TGUID): Cardinal; external 'RemoveFromGameExplorer@{app}\GameuxInstallHelper.dll stdcall uninstallonly';
var
GUID: TGUID;
GDFSP, GDFMP: String;
procedure CurStepChanged(CurStep: TSetupStep);
begin
case CurStep of
ssPostInstall:
begin
GDFSP := ExpandConstant('{#GDFsp}');
GDFMP := ExpandConstant('{#GDFmp}');
AddToGameExplorer(GDFSP, ExpandConstant('{app}'), 3, GUID);
AddToGameExplorer(GDFMP, ExpandConstant('{app}'), 3, GUID);
end;
end;
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
case CurUninstallStep of
usUninstall:
begin
GDFSP := ExpandConstant('{#GDFsp}');
GDFMP := ExpandConstant('{#GDFmp}');
RetrieveGUIDForApplication(GDFSP, GUID);
RetrieveGUIDForApplication(GDFMP, GUID);
RemoveFromGameExplorer(GUID);
UnloadDll(ExpandConstant('{app}\GameuxInstallHelper.dll'));
end;
end;
end;
audiofeel
25-04-2013, 09:00
saurn, проверил - создается один ярлык в Game Explorer, причем пустой не кликабельный именно на второй GDFBinary2.DLL (для мульта), но зато для всех пользователей (ну это так к слову)
type
TGUID = record
D1: Cardinal;
D2: Word;
D3: Word;
D4: Array [0..8] of Byte;
end;
function AddToGameExplorer(BinaryPatch: String; Path: String; InstallType: Integer; var GUID: TGUID): Cardinal;
external 'AddToGameExplorerA@files:GameuxInstallHelper.dll stdcall setuponly';
function RetrieveGUIDForApplication(BinaryPatch: String; var GUID: TGUID): Cardinal;
external 'RetrieveGUIDForApplicationA@{app}\GameuxInstallHelper.dll stdcall uninstallonly';
function RemoveFromGameExplorer(var GUID: TGUID): Cardinal;
external 'RemoveFromGameExplorer@{app}\GameuxInstallHelper.dll stdcall uninstallonly';
var
GUID: TGUID;
GDFSP, GDFMP: String;
procedure CurStepChanged2(CurStep: TSetupStep);
begin
case CurStep of
ssPostInstall:
begin
GDFSP := ExpandConstant('{app}\GDFBinary.dll');
GDFMP := ExpandConstant('{app}\GDFBinary2.dll');
AddToGameExplorer(GDFSP, ExpandConstant('{app}'), 3, GUID);
AddToGameExplorer(GDFMP, ExpandConstant('{app}'), 3, GUID);
end;
end;
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
case CurUninstallStep of
usUninstall:
begin
GDFSP := ExpandConstant('{app}\GDFBinary.dll');
GDFMP := ExpandConstant('{app}\GDFBinary2.dll');
RetrieveGUIDForApplication(GDFSP, GUID);
RetrieveGUIDForApplication(GDFMP, GUID);
RemoveFromGameExplorer(GUID);
UnloadDll(ExpandConstant('{app}\GameuxInstallHelper.dll'));
end;
end;
end;
audiofeel, да нет, все добавляется корректно. есть косяки с удалением(остается мертвый ярлык) пока нет времени ковырять, может разберетесь раньше. Может кто более сведущий нам подскажет, я-то тоже не особо спец. На счет пустых ярлыков, смотрите в сторону бинарников.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.