Войти

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 5]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 [89] 90 91 92 93 94 95 96 97 98 99 100

Gnom_aka_Lexander
28-02-2013, 17:27
habib2302, дай полный свой скрипт. как я тебе,наугад чтоль делать буду?

Gnom_aka_Lexander
28-02-2013, 18:04
habib2302, с такой кучей вопросов тебе тогда проще самому разобраться. открываешь справку и читаешь там все,что касается битности. там и параметры секции Setup и встроенные функции. Плюс в папке примеров есть примеры: 64Bit, 64BitTwoArch, и 64BitThreeArch. там есть абсолютно все ответы на твои вопросы.

sergey3695
28-02-2013, 19:30
insombia, Хотя не это уже по аккуратнее. (Rikill/Wr0ng1eR, наверное Rikill делал скрипт).

habib2302
28-02-2013, 19:41
люди помогите.у меня есть 2 exe фала для запуска.один для x86 bit,а другой для x64 bit.как сделать так,чтобы создавались ярлыки, запускались эти 2 файла после установки, реестр заносился, прога устанавливалась в папку. и все это под битность системы

insombia
28-02-2013, 19:50
sergey3695 забей!

Johny777
28-02-2013, 20:14
habib2302, оптимизировал код, добавил проверку разрядности. Изучай! :)
насчёт секции реестра не знаю какие ключи ты хочешь вносить в зависимости от разрядности, но помнится инно делает это сама, то бишь пишет в 64 или 32 кусты в зависимости от системы
пусть меня поправят если я гоню.


; Скрипт создан через Мастер Inno Setup Script.
; ИСПОЛЬЗУЙТЕ ДОКУМЕНТАЦИЮ ДЛЯ ПОДРОБНОСТЕЙ ИСПОЛЬЗОВАНИЯ INNO SETUP!

#define MyAppName "CCleaner"
#define MyAppVersion "3.28.1913"
#define MyAppPublisher "Copyright © 2005-2013 Piriform Ltd"
#define MyAppURL "http://www.piriform.com/ccleaner"
#define AppExeName86 "CCleaner.exe"
#define AppExeName64 "CCleaner64.exe"
;(*Автор репака*);
#define AuthRep "Xabib"

[Setup]
WizardSmallImageFile={tmp}\WizardSmallImage.bmp
WizardImageFile={tmp}\WizardImage.bmp
; Примечание: Значение AppId идентифицирует это приложение.
; Не используйте одно и тоже значение в разных установках.
; (Для генерации значения GUID, нажмите Инструменты | Генерация GUID.)
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=true
OutputBaseFilename={#MyAppName} {#MyAppVersion}
SetupIconFile={tmp}\ico.ico
Compression=lzma2/Ultra64
SolidCompression=true
InternalCompressLevel=Ultra64
DiskSpanning=false
DiskSliceSize=736000000
ShowLanguageDialog=auto
SlicesPerDisk=4
UninstallDisplayIcon={app}\ico.ico
;Авторские права.
VersionInfoCopyright={#MyAppPublisher}
;Производитель.
AppPublisher={#MyAppPublisher}
BitmapResource=logo:logo.bmp
; "ArchitecturesInstallIn64BitMode=x64" requests that the install be
; done in "64-bit mode" on x64, meaning it should use the native
; 64-bit Program Files directory and the 64-bit view of the registry.
; On all other architectures it will install in "32-bit mode".
ArchitecturesInstallIn64BitMode=x64
; Note: We don't set ProcessorsAllowed because we want this
; installation to run on all architectures (including Itanium,
; since it's capable of running 32-bit code too).

[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Tasks]
Name: icons; Description: Создать Ярлыки:;
Name: icons\desktop; Description: На Рабочем Столе;
Name: icons\quicklaunchicon; Description: В Панели Задач;

[Files]
;Файлы распаковываемые в папку с игрой. Необходимы для деинсталлятора
Source: WinTB.dll; Flags: dontcopy;
Source: logo.bmp; Flags: dontcopy
Source: {tmp}\SGS2.png; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: {tmp}\isgsg.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: {tmp}\WizardImage.bmp; DestDir: {app}; Flags: ignoreversion; Attribs: Hidden;
Source: {tmp}\WizardSmallImage.bmp; DestDir: {app}; Flags: ignoreversion; Attribs: Hidden;
Source: {tmp}\ico.ico; DestDir: {app}; Flags: ignoreversion
Source: {app}\{#AppExeName86}; DestDir: "{app}"; Flags: ignoreversion Check: not IsWin64();
Source: {app}\{#AppExeName64}; DestDir: "{app}"; Flags: ignoreversion Check: IsWin64();
Source: {app}\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
; Примечание: Не используйте "Flags: ignoreversion" для системных файлов

[Registry]
Root: HKLM; SubKey: SOFTWARE\Piriform\CCleaner; ValueType: string; ValueName: UpdateCheck; ValueData: 1;
Root: HKLM; SubKey: SOFTWARE\Piriform\CCleaner; ValueType: string; ValueData: "C:\Program Files\CCleaner";

[Icons]
Name: {group}\{#MyAppName}; Filename: {app}\{#AppExeName86}; IconFilename: {app}\ico.ico; Check: not IsWin64();
Name: {group}\{#MyAppName}; Filename: {app}\{#AppExeName64}; IconFilename: {app}\ico.ico; Check: IsWin64();
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}; IconFilename: {app}\ico.ico;
Name: {group}\Ririform.Com; Filename: {#MyAppURL}
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#AppExeName86}; Tasks: icons\desktop; IconFilename: {app}\ico.ico; Check: not IsWin64();
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#AppExeName64}; Tasks: icons\desktop; IconFilename: {app}\ico.ico; Check: IsWin64();
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}; Filename: {app}\{#AppExeName86}; Tasks: icons\quicklaunchicon; IconFilename: {app}\ico.ico; Check: not IsWin64();
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}; Filename: {app}\{#AppExeName64}; Tasks: icons\quicklaunchicon; IconFilename: {app}\ico.ico; Check: IsWin64();

[Run]
Filename: {app}\{#AppExeName86}; Description: {cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}; Flags: nowait postinstall skipifsilent Unchecked; Check: not IsWin64();
Filename: {app}\{#AppExeName64}; Description: {cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}; Flags: nowait postinstall skipifsilent Unchecked; Check: IsWin64();

[Messages]
BeveledLabel=RePack by {#AuthRep}

[Code]
procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload'

procedure FolderTreeViewOnChange(Sender: TObject);
begin
if TObject(Sender) is TFolderTreeView then WizardForm.DirEdit.Text := AddBackslash(TFolderTreeView(Sender).Directory) + '{#MyAppName}' else
WizardForm.GroupEdit.Text := AddBackslash(TStartMenuFolderTreeView(Sender).Directory)+'{#MyAppName}';
end;


#include "WinTB.iss"

procedure InitializeWizard;
begin
ExtractTemporaryFile('WinTB.dll');
SetTaskBarProgressValue(0, 60);
SetTaskBarProgressState(0, TBPF_ERROR);
TaskBarV10(MainForm.Handle, WizardForm.Handle, false, false, 0, 0, _m_);
ExtractTemporaryFile('SGS2.png');
ShowSplashScreen(WizardForm.Handle, ExpandConstant('{tmp}')+'\SGS2.png', 1000, 3000, 1000, 0, 255, False, $FFFFFF, 10);

with TFolderTreeView.Create(WizardForm) do
begin
Parent := WizardForm.SelectDirPage;
Top := ScaleY(WizardForm.DirEdit.Top+28);
Width := ScaleX(417);
Height := ScaleY(100);
OnChange := @FolderTreeViewOnChange;
end;

with TStartMenuFolderTreeView.Create(WizardForm) do
begin
Parent:= WizardForm.SelectProgramGroupPage;
Top := ScaleY(WizardForm.GroupEdit.Top+28);
Width := ScaleX(417);
Height := ScaleY(100);
SetPaths(ExpandConstant('{userprograms}'), ExpandConstant('{commonprograms}'), ExpandConstant('{userstartup}'), ExpandConstant('{commonstartup}'));
OnChange := @FolderTreeViewOnChange;
end;

with TBitmapImage.Create(WizardForm) do
begin
Parent:= WizardForm;
ExtractTemporaryFile('logo.bmp');
Bitmap.LoadFromFile(ExpandConstant('{tmp}\logo.bmp'));
SetBounds(ScaleX(20), ScaleY(315), ScaleX(154), ScaleY(42)); {первые 2 параметра - координаты левогого верхнего угла по горизонтали и вертикали, дальше ширина и высота, до которой растянуть}
Stretch:= True;
end;
end;

procedure DeinitializeSetup();
begin
TaskBarDestroy;
end;

procedure InitializeUninstallProgressForm();
begin
FileCopy(ExpandConstant('{app}\WizardSmallImage.bmp'), ExpandConstant('{app}\WizardSmallImage.bmp'), False);
with UninstallProgressForm.WizardSmallBitmapImage do Bitmap.LoadFromFile(ExpandConstant('{app}\WizardSmallImage.bmp'));
with TBitmapImage.Create(UninstallProgressForm) do
begin
Parent := UninstallProgressForm;
Stretch:= true;
SetBounds(ScaleX(20), ScaleY(315), ScaleX(154), ScaleY(42));
Bitmap.LoadFromResourceName(HInstance, '_IS_logo');
end;
end;


UPD: забыл добавить ArchitecturesInstallIn64BitMode=x64
Исправил

================================================================================

insombia, sergey3695,
sergey3695 забей! »
insombia, Хотя не это уже по аккуратнее. (Rikill/Wr0ng1eR, наверное Rikill делал скрипт). »


Какие у вас содержательные комментарии! Спасибо за активность ребята! :)

insombia
28-02-2013, 21:34
sergey3695 я находил коды и вставлял,что не получалось он помогал
p.s.думаю вопрос закрыт оффтоп вне зоны

habib2302
28-02-2013, 21:56
Johny777, огромное спасибо!!!!

cliff99
01-03-2013, 09:16
Johny777,
не проблема, используй: AnsiToUtf8(AddBackslash(ExpandConstant('{src}')) + 'main.arc')
константа {src} - путь к "рядом с экзешником инсталла" »
Всё равно не распаковывает архивы.
if IsComponentSelected('main') then FreeArcExtract (CallbackAddr('ArcCallBack'), 'x', '-o+', '-dp' + AnsiToUtf8(AddBackslash(ExpandConstant('{src}')) + 'main.arc'), '--', AnsiToUtf8(AddBackslash(ExpandConstant('{src}')) + 'main.arc'), '', '', '', '', '');
Скинь , если можно пример с уже распаковывающимся main.arc
то есть , где пути настроены.

alert30
01-03-2013, 10:02
cliff99, main.arc стоит рядом с Вашим компилированным инсталлятором?

cliff99
01-03-2013, 11:54
alert30,
Да, рядом.

http://i51.fastpic.ru/thumb/2013/0301/87/575cb346c450c106f931cab4b9b73587.jpeg (http://fastpic.ru/view/51/2013/0301/575cb346c450c106f931cab4b9b73587.jpg.html)

Johny777
01-03-2013, 13:59
cliff99, у меня всё извлекается. Положил рядом с экзешником инсталла data.arc и выполнил код
сам убедись. Причём у меня ещё кириллица в пути была - моё имя пользователя


[Setup]
AppName=FreeArc Example
AppVerName=FreeArc Example 3.3
DefaultDirName={pf}\FreeArc Example
OutputDir=.

[Components]
Name: "main"; Description: "Main Files";
Name: "help"; Description: "Help Files";

[Files]
Source: unarc.dll; DestDir: {tmp}; Flags: dontcopy

[ code]
const
CP_ACP = 0;
CP_UTF8 = 65001;

var
CancelCode: Integer;

function FreeArcExtract (callback: Longword; cmd1, cmd2, cmd3, cmd4, cmd5, cmd6, cmd7, cmd8, cmd9, cmd10: String): integer; external 'FreeArcExtract@files:unarc.dll cdecl';
function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: PAnsiChar; cbMultiByte: Integer; lpWideCharStr: PAnsiChar; cchWideChar: Integer): Longint; external 'MultiByteToWideChar@kernel32.dll stdcall';
function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: PAnsiChar; cchWideChar: Integer; lpMultiByteStr: PAnsiChar; cbMultiByte: Integer; lpDefaultChar: Integer; lpUsedDefaultChar: Integer): Longint; external 'WideCharToMultiByte@kernel32.dll stdcall';

function AnsiToUtf8(const strSource: String): String;
var
WideCharBuf: String;
begin
SetLength( WideCharBuf, Length( strSource + chr(0) ) * 2 );
SetLength( Result, Length( strSource + chr(0) ) * 2 );
MultiByteToWideChar( CP_ACP, 0, strSource + chr(0), -1, WideCharBuf, Length(WideCharBuf) );
WideCharToMultiByte( CP_UTF8, 0, WideCharBuf, -1, Result, Length(Result), 0, 0);
end;


function ArcCallBack(what: PAnsiChar; WriteSize, FileSize: Integer; str: PAnsiChar): Integer;
begin
if (WriteSize <> 0) and (FileSize <> 0) then with WizardForm do
begin
WizardForm.ProgressGauge.Position := Round(WizardForm.ProgressGauge.Max*WriteSize/FileSize);
StatusLabel.Caption := 'Filesize:' + #32 + IntToStr(FileSize) + #32 + 'MB,' + #32 + 'Extracted:' + #32 + IntToStr(WriteSize) + #32 + 'MB';
end;
Application.ProcessMessages;
Result:= CancelCode;
end;

procedure CancelFreeArcextracting(Sedner: TObject);
begin
CancelCode := -127;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
WizardForm.ProgressGauge.Position := 0;
with TButton.Create(nil) do
begin
Parent := WizardForm.InstallingPage;
Caption := SetupMessage(msgButtonCancel);
SetBounds(ScaleX(100), ScaleY(100), ScaleX(75), ScaleY(25));
OnClick := @CancelFreeArcextracting;
end;
WizardForm.ProgressGauge.Max := 100;
if IsComponentSelected('main') and (CancelCode <> -127) then FreeArcExtract (CallbackAddr('ArcCallBack'), 'x', '-o+', '-dp' + AnsiToUtf8('C:\setup'), '--', AnsiToUtf8(AddBackslash(ExpandConstant('{src}')) + 'main.arc') , '', '', '', '', '');
end;
end;

ищи у себя ошибки. С моей стороны всё в порядке!
обновил/улучшил ещё каллбэк функцию. Выделил жирным. Поменяй у себя

==============================================================================================

habib2302,
очень надеюсь, что ты изучишь пример и научишься а не просто возьмёшь готовое
чтоб не плодить благодарственные сообщения и не засорять форум есть кнопка "Полезное сообщение" под каждым сообщением

cliff99
01-03-2013, 14:16
Johny777,
А, да нашёл, извлекает, только не в папку назначения а в c:\setup.
А мне нужно в ту папку, которую я буду указывать в инсталлере
Поэтому я и не видел, что извлекает.
Потом создал архив потяжелее и вижу время повысилось.
и через поиск нашёл.

saurn
01-03-2013, 14:33
Здравствуйте. Была такая идея реализовать страницу с выбором типа установки, по типу - Обычный и Расширенный. По задумке, при выборе обычного типа текст кнопки далее менялся на "Установить", при выборе расширенно менялся обратно на "Далее", соответственно. Собственно реализовать-то получилось, но средствами самих радио-кнопок процедура смены надписи работала криво. Так как при переходе на страницу с выбором типа кнопка "Обычный" уже была выбрана(она checked по умолчанию) текст не менялся. Пришлось запихнуть эту задачу еще и в CurPageChanged. Это конечно не критично, задумка работает, как надо, однако может есть возможность реализовать это, как то по-проще. Кусок скрипта с кастомной страницей и радио-кнопками я прикрепил.


[...Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[...Code]
var
SelectInstallModPage: TWizardPage;
StandardInstallMod: TNewRadioButton;
ExtendedInstallMod: TNewRadioButton;

function CheckExtendedInstallMod: Boolean;
begin
Result:=ExtendedInstallMod.Checked;
end;

function CheckStandardInstallMod: Boolean;
begin
Result:=StandardInstallMod.Checked;
end;

procedure StandardInstallModOnClick(Sender: TObject);
begin
if CheckStandardInstallMod then
with WizardForm do
begin
NextButton.Caption := 'Установка';
end;
end;

procedure ExtendedInstallModOnClick(Sender: TObject);
begin
if CheckExtendedInstallMod then
with WizardForm do
begin
NextButton.Caption := 'Далее';
end;
end;


procedure InitializeWizard();
begin
SelectInstallModPage := CreateCustomPage(wpInfoBefore, 'Заголовок', 'Подзаголовок');
StandardInstallMod := TNewRadioButton.Create(nil);
with StandardInstallMod do
begin
Parent := SelectInstallModPage.Surface;
Left := ScaleX(0);
Top := ScaleY(80);
Width := ScaleX(89);
Height := ScaleY(17);
Caption := 'Обычный';
Checked := True;
OnClick:= @StandardInstallModOnClick;
end;

ExtendedInstallMod := TNewRadioButton.Create(nil);
with ExtendedInstallMod do
begin
Parent := SelectInstallModPage.Surface;
Left := ScaleX(0);
Top := ScaleY(137);
Width := ScaleX(97);
Height := ScaleY(17);
Caption := 'Расширенный';
OnClick:= @ExtendedInstallModOnClick;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = SelectInstallModPage.ID then
begin
if CheckStandardInstallMod then
with WizardForm do
begin
NextButton.Caption := 'Установка';
if CheckExtendedInstallMod then
with WizardForm do
begin
NextButton.Caption := 'Далее';
end;
end;
end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
Result := False;
begin
if CheckStandardInstallMod then
begin
if PageID = wpSelectDir then Result := True;
if PageID = wpSelectComponents then Result := True;
if PageID = wpSelectProgramGroup then Result := True;
end;
end;
end;

cliff99
01-03-2013, 15:10
Johny777,
Freearc не покатил.
У меня он начинает конфликтовать с isdone.
И как я уже говорил распаковывает не туда куда нужно. (путь то можно исправить, но ладно)
Дело вот в чём.
Основные файлы репака, запакованы freearc, но распаковываются через isdone
Вот они:

#ifdef precomp
PCFVer:={#precomp};
#else
PCFVer:=0;
#endif
ISDoneError:=true;
if ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, Comps1,Comps2,Comps3, MainForm.Handle, {#NeedMem}, @ProgressCallback) then begin
repeat
if not SrepInit('',512,0) then break;
if not PrecompInit(PCFVer) then break;
if not FileSearchInit(false) then break;

if not ISArcExtract ( 0, 5, ExpandConstant('{src}\LowData.bin'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;
if not ISArcExtract ( 0, 93, ExpandConstant('{src}\BigData.bin'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;
if not ISArcExtract ( 0, 2, ExpandConstant('{src}\UpDate.bin'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;


То есть три архива по очереди распаковываются. LowData.bin-BigData.bin-UpDate.bin (они же arc, только расширение изменено)
Так можно ли сюда прикрутить этот самый "main.arc" , но только чтобы он распаковывался, когда в компонентах выбран main ?

В самом моём скрипте видно даже пояснение как эти компоненты оформлять.

// Подготавливаем переменную содержащую всю информацию о выбранных компонентах для ISDone.dll
// максимум 96 компонентов.
Comps1:=0; Comps2:=0; Comps3:=0;
#ifdef Components
TmpValue:=1;
if IsComponentSelected('text\rus') then Comps1:=Comps1+TmpValue; //êîìïîíåíò 1
TmpValue:=TmpValue*2;
if IsComponentSelected('text\eng') then Comps1:=Comps1+TmpValue; //êîìïîíåíò 2
TmpValue:=TmpValue*2;
if IsComponentSelected('voice\rus') then Comps1:=Comps1+TmpValue; //êîìïîíåíò 3
TmpValue:=TmpValue*2;
if IsComponentSelected('voice\eng') then Comps1:=Comps1+TmpValue; //êîìïîíåíò 4
// .....

Я как раз пытаюсь разобраться, но покуда безрезультатно.

saurn
01-03-2013, 15:41
Так можно ли сюда прикрутить этот самый "main.arc" , но только чтобы он распаковывался, когда в компонентах выбран main ? »

Пример из справки к ISDone, как работать с компонентами.


[...Components]
Name: text; Description: Язык субтитров; Types: full; Flags: fixed
Name: text\rus; Description: Русский; Flags: exclusive;
Name: text\eng; Description: Английский; Flags: exclusive;
Name: voice; Description: Язык озвучки; Types: full; Flags: fixed
Name: voice\rus; Description: Русский; Flags: exclusive;
Name: voice\eng; Description: Английский; Flags: exclusive;

....

Comps1:=0; Comps2:=0; Comps3:=0;
TmpValue:=1;
if IsComponentSelected('text\rus') then Comps1:=Comps1+TmpValue; //компонент 1
TmpValue:=TmpValue*2;
if IsComponentSelected('text\eng') then Comps1:=Comps1+TmpValue; //компонент 2
TmpValue:=TmpValue*2;
if IsComponentSelected('voice\rus') then Comps1:=Comps1+TmpValue; //компонент 3
TmpValue:=TmpValue*2;
if IsComponentSelected('voice\eng') then Comps1:=Comps1+TmpValue; //компонент 4

....

ISDoneError:=true;
if ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, Comps1,Comps2,Comps3, MainForm.Handle, {#NeedMem}, @ProgressCallback) then begin
repeat
if not FileSearchInit(false) then break;
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\BasicData.arc'), ExpandConstant('{app}\'), '', false, '', '', '', notPCFonFLY) then break; //компонент без привязки
if not ISArcExtract ( 1, 0, ExpandConstant('{src}\rustext.arc'), ExpandConstant('{app}'), '', false, '', '', '', notPCFonFLY) then break; //компонент 1
if not ISArcExtract ( 2, 0, ExpandConstant('{src}\engtext.arc'), ExpandConstant('{app}'), '', false, '', '', '', notPCFonFLY) then break; //компонент 2
if not ISArcExtract ( 3, 0, ExpandConstant('{src}\rusvoice.arc'), ExpandConstant('{app}'), '', false, '', '', '', notPCFonFLY) then break; //компонент 3
if not ISArcExtract ( 4, 0, ExpandConstant('{src}\engvoice.arc'), ExpandConstant('{app}'), '', false, '', '', '', notPCFonFLY) then break; //компонент 4
ISDoneError:=false;
until true;
ISDoneStop;
end;

cliff99
01-03-2013, 16:05
saurn,
Спасибо, правда уже сам справился. В этой же справке пример взял.
Я с самого начала не правильно вопрос поставил. Нужно было уточнять , что у меня исдоне

insombia
01-03-2013, 20:21
почему в слайдах после завершения установки вечно ругается на эту строчку?
http://i51.fastpic.ru/big/2013/0301/8c/571d397ea1e089157776b9525f261c8c.png

Johny777
01-03-2013, 20:58
saurn, может есть возможность реализовать это, как то по-проще »
function CheckStandardInstallMod: Boolean;
function CheckStandardInstallMod: Boolean;
эти функции есть тормоза - в них нет смысла
короче переписал и оптимизировал код, изучай:


[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Components]
Name: "main"; Description: "Main Files"; Types: full compact custom; Flags: fixed
Name: "help"; Description: "Help Files"; Types: full

[ Code]
var
SelectInstallModPage: TWizardPage;
StandardInstallMod, ExtendedInstallMod: TNewRadioButton;

procedure InstTyprRadiosOnClick(Sender: TObject);
begin
case TNewRadioButton(Sender).Caption of
'Обычный': WizardForm.NextButton.Caption := SetupMessage(msgButtonInstall);
'Расширенный': WizardForm.NextButton.Caption := SetupMessage(msgButtonNext);
end;
end;

procedure InitializeWizard();
begin
SelectInstallModPage := CreateCustomPage(wpInfoBefore, 'Заголовок', 'Подзаголовок');
StandardInstallMod := TNewRadioButton.Create(WizardForm);
with StandardInstallMod do
begin
Parent := SelectInstallModPage.Surface;
SetBounds(ScaleX(0), ScaleY(80), ScaleX(89), ScaleY(17));
Caption := 'Обычный';
Checked := True;
OnClick:= @InstTyprRadiosOnClick;
end;

ExtendedInstallMod := TNewRadioButton.Create(nil);
with ExtendedInstallMod do
begin
Parent := SelectInstallModPage.Surface;
SetBounds(ScaleX(0), ScaleY(137), ScaleX(97), ScaleY(17));
Caption := 'Расширенный';
OnClick:= @InstTyprRadiosOnClick;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = SelectInstallModPage.ID then if StandardInstallMod.Checked then WizardForm.NextButton.Caption := SetupMessage(msgButtonInstall);
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
case PageID of
wpSelectDir, wpSelectComponents, wpSelectProgramGroup, wpReady: Result := StandardInstallMod.Checked;
end;
end;



для пущей оптимизации можно в обработчике OnClick переключателя писать значения в глобальную булев перемененную и проверять её значение в той же ShouldSkipPage например
вот так:

var
bStandartInst: Boolean; - глобально
...

procedure InstTyprRadiosOnClick(Sender: TObject);
begin
case TNewRadioButton(Sender).Caption of
'Обычный':
begin
WizardForm.NextButton.Caption := SetupMessage(msgButtonInstall);
bStandartInst := True;
...

end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
case PageID of
wpSelectDir, wpSelectComponents, wpSelectProgramGroup, wpReady: Result := bStandartInst;
end;
end;


==================================================================================================== ==========

insombia, прежде чем задать вопрос поставь себя мысленно на место того кто может быть тебе ответит и подумай сможет ли он это сделать на основе предоставляемой тобой информации!
по твоему вопросу:
не знаю, установить и посмотреть что не так не могу, хотя уже по скрину видно, что код перегружен. Нафига писать имена слайдов в стринглист, те они 1, 2, 3... Их можно извлесть в цикле и в цикле же грузить из темпа
ну это так навскидку.
в каллбэк функции таймера неточные типы переменных
вот так надо procedure TimerProc(hwnd: HWND; uMsg: UINT; idEvent: UINT_PTR; dwTime: DWORD);
дабы не быть голословным http://msdn.microsoft.com/en-us/library/windows/desktop/ms644907%28v=vs.85%29.aspx
да и смысл в них? Один фиг не используются!

insombia
01-03-2013, 21:05
Johny777 там даже в оригинальном скрипте тоже самое выкидывает




© OSzone.net 2001-2012