Ru-Board.club
← Вернуться в раздел «Программы»

» Inno Setup (создание инсталяционных пакетов)

Автор: Gnom3
Дата сообщения: 01.04.2012 16:12

Цитата:
ведь до перехода на юникод

Угадай, почем основная масса сидит на анси? Да потому, что анси гораздо лояльнее относится к мелким ошибкам. И даже допускает такие грубейшие, как забытые точка с запятой в конце строки. Юникод гораздо более придирчив и любит точное выражение мысли. Если ты не знаешь, что хочешь сказать своим кодом, то юникодный компилятор и подавно тебя не поймет.
Автор: JHeavy
Дата сообщения: 01.04.2012 16:46
Здравствуйте, подскажите как заставить Inno распаковывать один и тот же файл файл в разные папки в зависимости от выбора компонентов к примеру если выбраны компоненты ХХ (этот файл) и уу в одну папку, а ХХ и zz уже в другую. Спасибо
Автор: Nasgul1987
Дата сообщения: 01.04.2012 17:00
JHeavy

[Setup]

AppName=My program
AppVerName=My program
DefaultDirName={pf}\My program

MergeDuplicateFiles=true

[Files]
Source: A.doc; DestDir: {app}\dir1; Components: a; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Source: A.doc; DestDir: {app}\dir2; Components: b; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Source: A.doc; DestDir: {app}\dir3; Components: c; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension

[Components]
Name: a; Description: a
Name: b; Description: b
Name: c; Description: c
Автор: JHeavy
Дата сообщения: 01.04.2012 17:29
Спасибо за ответ. Может я не верно выражаюсь, но это не совсем то. Если я выбираю компоненты a и b то компонент b копируется одну папку, а если b и с, то компонент b копируется в другую папку. И все три файла разные.
Автор: Nasgul1987
Дата сообщения: 01.04.2012 18:12
JHeavy
a и b
b и с
а 3-й файл к какому компоненту относится? Не понимаю логику.
дочерних компонентов нет?
Автор: AntonOVS
Дата сообщения: 01.04.2012 18:46
Нужна помощь. Как убрать выделенный текст на скрине ?

Скрипт:
[more]
;#define Physx
;Название игры
#define appname "Skyrim"
;Версия игры
#define appver "1.5.24.0.5"
;Ваш ник
#define repacker "pe4enko"
#define publisher "Bethesda Softworks"
;Exe
#define exe "FalloutNVLauncher.exe"
;Реестр
#define Registry
;Сколько требуется для установки
#define NeedSize 9340
#define NeedInstallSize 9340

#define NeedMem 512

;#define SecondProgressBar

#define Components

;#define records

#define facompress

#define PrecompInside
#define SrepInside
;#define MSCInside
;#define precomp "0.42"
;#define unrar
;#define XDelta
;#define PackZIP

[Setup]
AppId={{66EA0B65-82F8-4306-B206-F42F4F254E7B}
AppName={#appname}
AppVerName={#appname} v.{#appver}
AppPublisher={#publisher}
DefaultDirName={pf}\{#appname}
DefaultGroupName={#publisher}\{#appname}
InternalCompressLevel=ultra64
SolidCompression=true
Compression=lzma/ultra64
AllowNoIcons=yes
OutputDir=.
SetupIconFile=icon.ico
ShowTasksTreeLines=yes
OutputBaseFilename=setup
VersionInfoProductName={#appname}
VersionInfoProductVersion=1.0
VersionInfoVersion=1.0
VersionInfoCopyright={#repacker}
VersionInfoDescription={#appname} repack by {#repacker}
WizardImageFile=Files\1.bmp
WizardSmallImageFile=Files\55x58.bmp

#ifdef Components
[Types]
Name: full; Description: "Полная установка"; Flags: iscustom

[Components]
Name: Text; Description: "Язык текста:"; Types: full; Flags: fixed;
Name: Text\rus; Description: "Русский"; Flags: exclusive;
Name: Text\eng; Description: "Английский"; Flags: exclusive;
Name: dlcs; Description: "Дополнения:"; Types: full;
Name: dlc1\eng; Description: "Lonesome Road";
Name: dlc2\eng; Description: "Old World Blues";
Name: dlc3\eng; Description: "Honest Hearts";
Name: dlc4\eng; Description: "Dead Money";
Name: dlc5\eng; Description: "Gun Runners' Arsenal";
Name: dlc6\eng; Description: "Courier’s Stash";
Name: dlcsrus; Description: "Русификация дополнений:"; Types: full;
Name: dlc1\rus; Description: "Русифицировать Lonesome Road";
Name: dlc2\rus; Description: "Русифицировать Old World Blues";
Name: dlc3\rus; Description: "Русифицировать Honest Hearts";
Name: dlc4\rus; Description: "Русифицировать Dead Money";
Name: dlc5\rus; Description: "Русифицировать Gun Runners' Arsenal";
Name: dlc6\rus; Description: "Русифицировать Courier’s Stash";
#endif

#ifdef Registry
[Registry]
Root: HKLM; SubKey: SOFTWARE\Bethesda Softworks; Flags: uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Bethesda Softworks\FalloutNV; ValueType: string; ValueName: Installed Path; ValueData: {app}\; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Bethesda Softworks; Flags: uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Bethesda Softworks\FalloutNV; ValueType: string; ValueName: Installed Path; ValueData: {app}\; Flags: uninsdeletevalue uninsdeletekeyifempty
#endif

[Icons]
Name: "{group}\{#appname} v.{#appver}"; Filename: "{app}\{#exe}"; Check: CheckError
Name: "{group}\{cm:UninstallProgram,{#appname}}"; Filename: "{uninstallexe}"; Check: CheckError
Name: "{commondesktop}\{#appname}"; Filename: "{app}\{#exe}"; Tasks: desktopicon; Check: CheckError

[Tasks]
Name: desktopicon; Description: "Добавить ярлык на рабочий стол"; GroupDescription: Создание ярлыков:
Name: Redist; Description: "Дополнительное программное обеспечение:"
Name: Redist\DirectXCheck; Description: "Обновить DirectX (требуется интернет-подключение)"; Flags: unchecked
#ifdef Physx
Name: Redist\PhysXCheck; Description: "Установить Nvidia PhysX"; Flags: unchecked
#endif
Name: Redist\VCCheck; Description: "Установить Microsoft Visual C++"; Flags: unchecked

[Run]
Filename: {src}\Soft\vcredist_x86.exe; Parameters: /q; StatusMsg: Устанавливаем Microsoft Visual C++ Redist x86...; Flags: skipifdoesntexist; Tasks: Redist\VCCheck; Check: CheckError and not IsWin64
Filename: {src}\Soft\vcredist_x64.exe; Parameters: /q; StatusMsg: Устанавливаем Microsoft Visual C++ Redist x64...; Flags: skipifdoesntexist; Tasks: Redist\VCCheck; Check: CheckError and IsWin64
#ifdef Physx
Filename: {src}\Soft\PhysX.bat; StatusMsg: Устанавливаем Nvidia PhysX...; Flags: waituntilterminated; Tasks: Redist\PhysXCheck; Check: CheckError
#endif
Filename: {src}\Soft\dxwebsetup.exe; StatusMsg: Обновляем DirectX...; Flags: waituntilterminated; Tasks: Redist\DirectXCheck; Check: CheckError

[Files]
Source: Include\English.ini; DestDir: {tmp}; Flags: dontcopy
Source: Include\unarc.dll; DestDir: {tmp}; Flags: dontcopy
Source: ISDone.dll; DestDir: {tmp}; Flags: dontcopy
#ifdef records
Source: records.inf; DestDir: {tmp}; Flags: dontcopy
#endif

#ifdef PrecompInside
Source: Include\CLS-precomp.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\packjpg_dll.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\packjpg_dll1.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\precomp.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\zlib1.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef SrepInside
Source: Include\CLS-srep.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef MSCInside
Source: Include\CLS-MSC.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef facompress
Source: Include\facompress.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef precomp
#if precomp == "0.38"
Source: Include\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
#else
#if precomp == "0.4"
Source: Include\precomp040.exe; DestDir: {tmp}; Flags: dontcopy
#else
#if precomp == "0.41"
Source: Include\precomp041.exe; DestDir: {tmp}; Flags: dontcopy
#else
#if precomp == "0.42"
Source: Include\precomp042.exe; DestDir: {tmp}; Flags: dontcopy
#else
Source: Include\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\precomp040.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\precomp041.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\precomp042.exe; DestDir: {tmp}; Flags: dontcopy
#endif
#endif
#endif
#endif
#endif
#ifdef unrar
Source: Include\Unrar.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef XDelta
Source: Include\XDelta3.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef PackZIP
Source: Include\7z.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\packZIP.exe; DestDir: {tmp}; Flags: dontcopy
#endif
Source: Files\final.bmp; DestDir: {tmp}; Flags: dontcopy

[CustomMessages]
russian.Extracted=Распаковка архивов...
russian.CancelButton=Отменить установку
russian.Error=Ошибка распаковки!
russian.ElapsedTime=Прошло:
russian.RemainingTime=Осталось времени:

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

[UninstallDelete]
Type: filesandordirs; Name: {app}

[Code]
const
PCFonFLY=true;
notPCFonFLY=false;
var
LabelPct1, LabelTime1, LabelTime2: TLabel;
TotalSpaceLabel, FreeSpaceLabel, NeedSpacelabel, InstallSpaceLabel: TLabel;
WelcomeLabel1, WelcomeLabel2, FinishedLabel, FinishedHeadingLabel: TLabel;
FreeMB, TotalMB: Cardinal;
ISDoneProgressBar1: TNewProgressBar;
#ifdef SecondProgressBar
LabelPct2: TLabel;
ISDoneProgressBar2:TNewProgressBar;
#endif
MyCancelButton: TButton;
ISDoneCancel:integer;
ISDoneError:boolean;
PCFVer:double;

type
TCallback = function (OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;

function WrapCallback(callback:TCallback; paramcount:integer):longword;external 'wrapcallback@files:ISDone.dll stdcall delayload';

function ISArcExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath, ExtractedPath: AnsiString; DeleteInFile:boolean; Password, CfgFile, WorkPath: AnsiString; ExtractPCF: boolean ):boolean; external 'ISArcExtract@files:ISDone.dll stdcall delayload';
function IS7ZipExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; Password: AnsiString):boolean; external 'IS7zipExtract@files:ISDone.dll stdcall delayload';
function ISRarExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; Password: AnsiString):boolean; external 'ISRarExtract@files:ISDone.dll stdcall delayload';
function ISPrecompExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString; DeleteInFile:boolean):boolean; external 'ISPrecompExtract@files:ISDone.dll stdcall delayload';
function ISSRepExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString; DeleteInFile:boolean):boolean; external 'ISSrepExtract@files:ISDone.dll stdcall delayload';
function ISxDeltaExtract(CurComponent:Cardinal; PctOfTotal:double; minRAM,maxRAM:integer; InName, DiffFile, OutFile: AnsiString; DeleteInFile, DeleteDiffFile:boolean):boolean; external 'ISxDeltaExtract@files:ISDone.dll stdcall delayload';
function ISPackZIP(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString;ComprLvl:integer; DeleteInFile:boolean):boolean; external 'ISPackZIP@files:ISDone.dll stdcall delayload';
function ShowChangeDiskWindow(Text, DefaultPath, SearchFile:AnsiString):boolean; external 'ShowChangeDiskWindow@files:ISDone.dll stdcall delayload';

function Exec2 (FileName, Param: PAnsiChar;Show:boolean):boolean; external 'Exec2@files:ISDone.dll stdcall delayload';
function ISFindFiles(CurComponent:Cardinal; FileMask:AnsiString; var ColFiles:integer):integer; external 'ISFindFiles@files:ISDone.dll stdcall delayload';
function ISPickFilename(FindHandle:integer; OutPath:AnsiString; var CurIndex:integer; DeleteInFile:boolean):boolean; external 'ISPickFilename@files:ISDone.dll stdcall delayload';
function ISGetName(TypeStr:integer):PAnsichar; external 'ISGetName@files:ISDone.dll stdcall delayload';
function ISFindFree(FindHandle:integer):boolean; external 'ISFindFree@files:ISDone.dll stdcall delayload';
function ISExec(CurComponent:Cardinal; PctOfTotal,SpecifiedProcessTime:double; ExeName,Parameters,TargetDir,OutputStr:AnsiString;Show:boolean):boolean; external 'ISExec@files:ISDone.dll stdcall delayload';

function SrepInit(TmpPath:PAnsiChar;VirtMem,MaxSave:Cardinal):boolean; external 'SrepInit@files:ISDone.dll stdcall delayload';
function PrecompInit(TmpPath:PAnsiChar;VirtMem:cardinal;PrecompVers:single):boolean; external 'PrecompInit@files:ISDone.dll stdcall delayload';
function FileSearchInit(RecursiveSubDir:boolean):boolean; external 'FileSearchInit@files:ISDone.dll stdcall delayload';
function ISDoneInit(RecordFileName:AnsiString; TimeType,Comp1,Comp2,Comp3:Cardinal; WinHandle, NeededMem:longint; callback:TCallback):boolean; external 'ISDoneInit@files:ISDone.dll stdcall';
function ISDoneStop:boolean; external 'ISDoneStop@files:ISDone.dll stdcall';
function ChangeLanguage(Language:AnsiString):boolean; external 'ChangeLanguage@files:ISDone.dll stdcall delayload';
function SuspendProc:boolean; external 'SuspendProc@files:ISDone.dll stdcall';
function ResumeProc:boolean; external 'ResumeProc@files:ISDone.dll stdcall';

function NumToStr(Float: Extended): String;
begin
Result:= format('%.2n', [Float]); StringChange(Result, ',', '.');
while (Result[Length(Result)] = '0')or((Result[Length(Result)] = '.')and(Pos('.', Result) > 0)) do
SetLength(Result, Length(Result)-1);
end;

function MbOrTb(Float: Extended): String;
begin
if Float < 1024 then Result:= NumToStr(Float)+' Мб' else
if Float/1024 < 1024 then Result:= NumToStr(Float/1024)+' Гб' else
Result:= NumToStr(Float/(1024*1024))+' Тб';
end;

procedure DirEditOnChange(Sender: TObject);
var Drive: String;
begin
Drive:= ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Drive, True, FreeMB, TotalMB);
TotalSpaceLabel.Caption:= 'Всего места на диске: '+MbOrTb(TotalMB);
FreeSpaceLabel.Caption:= 'Доступно места на диске: '+MbOrTb(FreeMB)+' ('+IntToStr(round(FreeMB*100/TotalMB))+'%)';
InstallSpacelabel.Caption:= 'Требуется места для установки: '+MbOrTb({#NeedInstallSize});
NeedSpaceLabel.Caption:= 'Требуется места на диске: '+MbOrTb({#NeedSize});
WizardForm.NextButton.Enabled:= (FreeMB>{#NeedInstallSize})and(FreeMB>{#NeedSize}) ;
end;

function ProgressCallback(OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;
begin
if OveralPct<=1000 then ISDoneProgressBar1.Position := OveralPct;
LabelPct1.Caption := IntToStr(OveralPct div 10)+'.'+chr(48 + OveralPct mod 10)+'%';
#ifdef SecondProgressBar
if CurrentPct<=1000 then ISDoneProgressBar2.Position := CurrentPct;
LabelPct2.Caption := IntToStr(CurrentPct div 10)+'.'+chr(48 + CurrentPct mod 10)+'%';
#endif
LabelTime1.Caption:=ExpandConstant('{cm:ElapsedTime} ')+TimeStr2;
LabelTime2.Caption:=ExpandConstant('{cm:RemainingTime} ')+TimeStr1;
Result := ISDoneCancel;
end;

procedure CancelButtonOnClick(Sender: TObject);
begin
SuspendProc;
if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_YESNO) = IDYES then ISDoneCancel:=1;
ResumeProc;
end;

procedure HideControls;
begin
WizardForm.FileNamelabel.Hide;
ISDoneProgressBar1.Hide;
LabelPct1.Hide;
LabelTime1.Hide;
LabelTime2.Hide;
MyCancelButton.Hide;
#ifdef SecondProgressBar
ISDoneProgressBar2.Hide;
LabelPct2.Hide;
#endif
end;

procedure CreateControls;
var PBTop:integer;
begin
PBTop:=ScaleY(50);
ISDoneProgressBar1 := TNewProgressBar.Create(WizardForm);
with ISDoneProgressBar1 do begin
Parent := WizardForm.InstallingPage;
Height := WizardForm.ProgressGauge.Height;
Left := ScaleX(0);
Top := PBTop;
Width := ScaleX(365);
Max := 1000;
end;
LabelPct1 := TLabel.Create(WizardForm);
with LabelPct1 do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Left := ISDoneProgressBar1.Width+ScaleX(5);
Top := ISDoneProgressBar1.Top + ScaleY(2);
Width := ScaleX(80);
end;
#ifdef SecondProgressBar
PBTop:=PBTop+ScaleY(25);
ISDoneProgressBar2 := TNewProgressBar.Create(WizardForm);
with ISDoneProgressBar2 do begin
Parent := WizardForm.InstallingPage;
Left := ScaleX(0);
Top := PBTop+ScaleY(8);
Width := ISDoneProgressBar1.Width;
Max := 1000;
Height := WizardForm.ProgressGauge.Height;
end;
LabelPct2 := TLabel.Create(WizardForm);
with LabelPct2 do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Left := ISDoneProgressBar2.Width+ScaleX(5);
Top := ISDoneProgressBar2.Top + ScaleY(2);
Width := ScaleX(80);
end;
#endif
LabelTime1 := TLabel.Create(WizardForm);
with LabelTime1 do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Width := ISDoneProgressBar1.Width div 2;
Left := ScaleX(0);
Top := PBTop + ScaleY(35);
end;
LabelTime2 := TLabel.Create(WizardForm);
with LabelTime2 do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Width := LabelTime1.Width+ScaleX(40);
Left := ISDoneProgressBar1.Width div 2;
Top := LabelTime1.Top;
end;
MyCancelButton:=TButton.Create(WizardForm);
with MyCancelButton do begin
Parent:=WizardForm;
Width:=ScaleX(135);
Caption:=ExpandConstant('{cm:CancelButton}');
Left:=ScaleX(360);
Top:=WizardForm.cancelbutton.top;
OnClick:=@CancelButtonOnClick;
end;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
if (CurPageID = wpFinished) and ISDoneError then
begin
WizardForm.Caption:= ExpandConstant('{cm:Error}');
WizardForm.FinishedLabel.Font.Color:= clRed;
WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) ;
end;
if CurPageID=wpSelectDir then begin
DirEditOnChange(nil)
end;
begin
FinishedLabel.Caption:= WizardForm.FinishedLabel.Caption;
end;
end;

function CheckError:boolean;
begin
result:= not ISDoneError;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var Comps1,Comps2,Comps3, TmpValue:cardinal;
FindHandle1,ColFiles1,CurIndex1,tmp:integer;
ExecError:boolean;
InFilePath,OutFilePath,OutFileName:PAnsiChar;
begin
if CurStep = ssInstall then begin //Если необходимо, можно поменять на ssPostInstall
WizardForm.ProgressGauge.Hide;
WizardForm.CancelButton.Hide;
CreateControls;
WizardForm.StatusLabel.Caption:=ExpandConstant('{cm:Extracted}');
ISDoneCancel:=0;

// Распаковка всех необходимых файлов в папку {tmp}.

ExtractTemporaryFile('unarc.dll');

#ifdef PrecompInside
ExtractTemporaryFile('CLS-precomp.dll');
ExtractTemporaryFile('packjpg_dll.dll');
ExtractTemporaryFile('packjpg_dll1.dll');
ExtractTemporaryFile('precomp.exe');
ExtractTemporaryFile('zlib1.dll');
#endif
#ifdef SrepInside
ExtractTemporaryFile('CLS-srep.dll');
#endif
#ifdef MSCInside
ExtractTemporaryFile('CLS-MSC.dll');
#endif
#ifdef facompress
ExtractTemporaryFile('facompress.dll'); //ускоряет распаковку .arc архивов.
#endif
#ifdef records
ExtractTemporaryFile('records.inf');
#endif
#ifdef precomp
#if precomp == "0.38"
ExtractTemporaryFile('precomp038.exe');
#else
#if precomp == "0.4"
ExtractTemporaryFile('precomp040.exe');
#else
#if precomp == "0.41"
ExtractTemporaryFile('precomp041.exe');
#else
#if precomp == "0.42"
ExtractTemporaryFile('precomp042.exe');
#else
ExtractTemporaryFile('precomp038.exe');
ExtractTemporaryFile('precomp040.exe');
ExtractTemporaryFile('precomp041.exe');
ExtractTemporaryFile('precomp042.exe');
#endif
#endif
#endif
#endif
#endif
#ifdef unrar
ExtractTemporaryFile('Unrar.dll');
#endif
#ifdef XDelta
ExtractTemporaryFile('XDelta3.dll');
#endif
#ifdef PackZIP
ExtractTemporaryFile('7z.dll');
ExtractTemporaryFile('PackZIP.exe');
#endif

ExtractTemporaryFile('English.ini');

// Подготавливаем переменную, содержащую всю информацию о выделенных компонентах для 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('dlc1\eng') then Comps1:=Comps1+TmpValue; //компонент 3
TmpValue:=TmpValue*2;
if IsComponentSelected('dlc2\eng') then Comps1:=Comps1+TmpValue; //компонент 4
TmpValue:=TmpValue*2;
if IsComponentSelected('dlc3\eng') then Comps1:=Comps1+TmpValue; //компонент 5
TmpValue:=TmpValue*2;
if IsComponentSelected('dlc4\eng') then Comps1:=Comps1+TmpValue; //компонент 6
TmpValue:=TmpValue*2;
if IsComponentSelected('dlc5\eng') then Comps1:=Comps1+TmpValue; //компонент 7
TmpValue:=TmpValue*2;
if IsComponentSelected('dlc6\eng') then Comps1:=Comps1+TmpValue; //компонент 8
TmpValue:=TmpValue*2;
if IsComponentSelected('dlc1\rus') then Comps1:=Comps1+TmpValue; //компонент 9
TmpValue:=TmpValue*2;
if IsComponentSelected('dlc2\rus') then Comps1:=Comps1+TmpValue; //компонент 10
TmpValue:=TmpValue*2;
if IsComponentSelected('dlc3\rus') then Comps1:=Comps1+TmpValue; //компонент 11
TmpValue:=TmpValue*2;
if IsComponentSelected('dlc4\rus') then Comps1:=Comps1+TmpValue; //компонент 12
TmpValue:=TmpValue*2;
if IsComponentSelected('dlc5\rus') then Comps1:=Comps1+TmpValue; //компонент 13
TmpValue:=TmpValue*2;
if IsComponentSelected('dlc6\rus') then Comps1:=Comps1+TmpValue; //компонент 14
// .....
// см. справку
#endif

#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
// ChangeLanguage('English');

if not ISArcExtract ( 0, 0, ExpandConstant('{src}\data1.bin'), ExpandConstant('{app}\Data\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\data2.bin'), ExpandConstant('{app}\Data\'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\data3.bin'), ExpandConstant('{app}\Data\'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\data4.bin'), ExpandConstant('{app}\'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ISArcExtract ( 1, 0, ExpandConstant('{src}\data12.bin'), ExpandConstant('{app}\'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ISArcExtract ( 2, 0, ExpandConstant('{src}\data11.bin'), ExpandConstant('{app}\'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ISArcExtract ( 3, 0, ExpandConstant('{src}\data5.bin'), ExpandConstant('{app}\Data\'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ISArcExtract ( 4, 0, ExpandConstant('{src}\data6.bin'), ExpandConstant('{app}\Data\'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ISArcExtract ( 5, 0, ExpandConstant('{src}\data7.bin'), ExpandConstant('{app}\Data\'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ISArcExtract ( 6, 0, ExpandConstant('{src}\data8.bin'), ExpandConstant('{app}\Data\'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ISArcExtract ( 7, 0, ExpandConstant('{src}\data9.bin'), ExpandConstant('{app}\Data\'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ISArcExtract ( 8, 0, ExpandConstant('{src}\data10.bin'), ExpandConstant('{app}\Data\'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ISArcExtract ( 9, 0, ExpandConstant('{src}\Rus\LonesomeRoad.bin'), ExpandConstant('{app}\Data\'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ISArcExtract ( 10, 0, ExpandConstant('{src}\Rus\OldWorldBlues.bin'), ExpandConstant('{app}\Data\'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ISArcExtract ( 11, 0, ExpandConstant('{src}\Rus\HonestHearts.bin'), ExpandConstant('{app}\Data\'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ISArcExtract ( 12, 0, ExpandConstant('{src}\Rus\DeadMoney.bin'), ExpandConstant('{app}\Data\'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ISArcExtract ( 13, 0, ExpandConstant('{src}\Rus\GunRunnerArsenal.bin'), ExpandConstant('{app}\Data\'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ISArcExtract ( 14, 0, ExpandConstant('{src}\Rus\CouriersStash.bin'), ExpandConstant('{app}\Data\'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;


// далее находятся закомментированые примеры различных функций распаковки (чтобы каждый раз не лазить в справку за примерами)
(*
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\arc.arc'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;
if not IS7ZipExtract ( 0, 0, ExpandConstant('{src}\CODMW2.7z'), ExpandConstant('{app}\data1'), false, '') then break;
if not ISRarExtract ( 0, 0, ExpandConstant('{src}\data_*.rar'), ExpandConstant('{app}'), false, '') then break;
if not ISSRepExtract ( 0, 0, ExpandConstant('{app}\data1024_1024.srep'),ExpandConstant('{app}\data1024.arc'), true) then break;
if not ISPrecompExtract( 0, 0, ExpandConstant('{app}\data.pcf'), ExpandConstant('{app}\data.7z'), true) then break;
if not ISxDeltaExtract ( 0, 0, 0, 640, ExpandConstant('{app}\in.pcf'), ExpandConstant('{app}\*.diff'), ExpandConstant('{app}\out.dat'), false, false) then break;
if not ISPackZIP ( 0, 0, ExpandConstant('{app}\1a1\*'), ExpandConstant('{app}\1a1.pak'), 2, false ) then break;
if not ISExec ( 0, 0, 0, ExpandConstant('{tmp}\Arc.exe'), ExpandConstant('x -o+ "{src}\001.arc" "{app}\"'), ExpandConstant('{tmp}'), '...',false) then break;
if not ShowChangeDiskWindow ('Пожалуйста, вставьте второй диск и дождитесь его инициализации.', ExpandConstant('{src}'),'CODMW_2.arc') then break;

// распаковка группы файлов посредством внешнего приложения

FindHandle1:=ISFindFiles(0,ExpandConstant('{app}\*.ogg'),ColFiles1);
ExecError:=false;
while not ExecError and ISPickFilename(FindHandle1,ExpandConstant('{app}\'),CurIndex1,true) do begin
InFilePath:=ISGetName(0);
OutFilePath:=ISGetName(1);
OutFileName:=ISGetName(2);
ExecError:=not ISExec(0, 0, 0, ExpandConstant('{tmp}\oggdec.exe'), '"'+InFilePath+'" -w "'+OutFilePath+'"',ExpandConstant('{tmp}'),OutFileName,false);
end;
ISFindFree(FindHandle1);
if ExecError then break;
*)

ISDoneError:=false;
until true;
ISDoneStop;
end;
HideControls;
WizardForm.CancelButton.Visible:=true;
WizardForm.CancelButton.Enabled:=false;
end;
if (CurStep=ssPostInstall) and ISDoneError then begin
Exec2(ExpandConstant('{uninstallexe}'), '/VERYSILENT', false);
end;
end;

///////////////////////////////////////Изоображения///////////////////////////////////////////////
procedure InitializeWizard1();
begin
ExtractTemporaryFile('final.bmp');

WizardForm.WizardBitmapImage.Width:= ScaleX(497);
WizardForm.WizardBitmapImage.Height:=ScaleY(280);
WizardForm.WizardBitmapImage2.Width:= ScaleX(497);
WizardForm.WizardBitmapImage2.Height:=ScaleY(280);
WizardForm.WizardBitmapImage2.Bitmap.LoadFromFile(ExpandConstant('{tmp}\final.bmp'));

WelcomeLabel1:= TLabel.Create(WizardForm);
WelcomeLabel1.AutoSize:= False;
with WizardForm.WelcomeLabel1 do
WelcomeLabel1.SetBounds(Left, Top, Width, Height);
WelcomeLabel1.Font:= WizardForm.WelcomeLabel1.Font
WelcomeLabel1.Font.Color:= clWhite;
WelcomeLabel1.Transparent:= True;
WelcomeLabel1.WordWrap:= true;
WelcomeLabel1.Caption:= WizardForm.WelcomeLabel1.Caption;
WelcomeLabel1.Parent:= WizardForm.WelcomePage

WelcomeLabel2:= TLabel.Create(WizardForm);
WelcomeLabel2.AutoSize:= False;
with WizardForm.WelcomeLabel2 do
WelcomeLabel2.SetBounds(Left, Top, Width, Height);
WelcomeLabel2.Font:= WizardForm.WelcomeLabel2.Font
WelcomeLabel2.Font.Color:= clWhite;
WelcomeLabel2.Transparent:= True;
WelcomeLabel2.WordWrap:= true;
WelcomeLabel2.Caption:= WizardForm.WelcomeLabel2.Caption;
WelcomeLabel2.Parent:= WizardForm.WelcomePage

FinishedHeadingLabel:= TLabel.Create(WizardForm);
FinishedHeadingLabel.AutoSize:= False;
with WizardForm.FinishedHeadingLabel do
FinishedHeadingLabel.SetBounds(Left, Top, Width, Height);
FinishedHeadingLabel.Font:= WizardForm.FinishedHeadingLabel.Font
FinishedHeadingLabel.Font.Color:= clWhite;
FinishedHeadingLabel.Transparent:= True;
FinishedHeadingLabel.WordWrap:= true;
FinishedHeadingLabel.Caption:= WizardForm.FinishedHeadingLabel.Caption;
FinishedHeadingLabel.Parent:= WizardForm.FinishedPage

FinishedLabel:= TLabel.Create(WizardForm);
FinishedLabel.AutoSize:= False;
with WizardForm.FinishedLabel do
FinishedLabel.SetBounds(Left, Top, Width, Height);
FinishedLabel.Font:= WizardForm.FinishedLabel.Font
FinishedLabel.Font.Color:= clWhite;
FinishedLabel.Transparent:= True;
FinishedLabel.WordWrap:= true;
FinishedLabel.Caption:= WizardForm.FinishedLabel.Caption;
FinishedLabel.Parent:= WizardForm.FinishedPage

WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.FinishedLabel.Hide;
WizardForm.FinishedHeadingLabel.Hide;
end;
///////////////////////////////////////Изоображения (Конец)///////////////////////////////////////////////

///////////////////////////////////////Место на диске///////////////////////////////////////////////
procedure InitializeWizard2();
begin
TotalSpaceLabel:= TLabel.Create(WizardForm);
TotalSpaceLabel.AutoSize:= False;
TotalSpaceLabel.SetBounds(0, 120, 300, 20);
TotalSpaceLabel.Parent:= WizardForm.SelectDirpage;

FreeSpaceLabel:= TLabel.Create(WizardForm);
FreeSpaceLabel.AutoSize:= False;
FreeSpaceLabel.SetBounds(0, 140, 300, 20);
FreeSpaceLabel.Parent:= WizardForm.SelectDirpage;

InstallSpacelabel:= TLabel.Create(WizardForm);
InstallSpacelabel.AutoSize:= False;
InstallSpacelabel.SetBounds(0, 160, 300, 20);
InstallSpacelabel.Parent:= WizardForm.SelectDirpage;

NeedSpaceLabel:= TLabel.Create(WizardForm);
NeedSpaceLabel.AutoSize:= False;
NeedSpaceLabel.SetBounds(0, 180, 300, 20);
NeedSpaceLabel.Parent:= WizardForm.SelectDirpage;

WizardForm.DirEdit.OnChange:=@DirEditOnChange;
end;
///////////////////////////////////////Место на диске (Конец)///////////////////////////////////////////////

procedure InitializeWizard();
begin
InitializeWizard1();
InitializeWizard2();
WizardForm.Position:=poScreenCenter;
end;
[/more]
Автор: JHeavy
Дата сообщения: 01.04.2012 19:41
Nasgul1987 a это 1 файл, b 2-ой файл и с третий, при выборе первого и второго они в одну папку копируются, а при выборе 2 и 3 в другую. Посмотрите сообщение, простите за дубли инет глючит
Автор: Nasgul1987
Дата сообщения: 01.04.2012 19:46
AntonOVS
первый это кажется NeedSpaceLabel
удали его из процедуры InitializeWizard1()
второй скрыть так
WizardForm.ComponentsDiskSpaceLabel.Hide;

Добавлено:
JHeavy
[Setup]
AppName=My program
AppVerName=My program
DefaultDirName={pf}\My program

MergeDuplicateFiles=true

[Files]
Source: A.exe; DestDir: {app}\dir1; Components: a b; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Source: B.rar; DestDir: {app}\dir1; Components: a b; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Source: C.doc; DestDir: {app}\dir1; Components: a b; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension

Source: A.exe; DestDir: {app}\dir2; Components: b c; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Source: B.rar; DestDir: {app}\dir2; Components: b c; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Source: C.doc; DestDir: {app}\dir2; Components: b c; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension

[Components]
Name: a; Description: a
Name: b; Description: b
Name: c; Description: c


Автор: JHeavy
Дата сообщения: 01.04.2012 20:02
Nasgul1987
Что то подобное я делал но тогда при выборе только одного компонента в папку копируется 2 компонента.
Млин может я не так объясняю что хочу...

Добавлено:
Попробую подробнее написать

суть такая, что при выборе rus1 и voice они (файлы) должны копироваться в одну папку, а при выборе rus2 и voice в другую папку, но файл звука (Voice) один и тот же, просто в зависимости от выбора rus1 или rus2 копируется в разные папки

[Components]
Name: game; Description: Игрушка; Types: full compact custom; Flags: fixed
Name: Lang; Description: Русики и звук; Types: custom
Name: Lang\rus1; Description: русик первый; Types: custom; Flags: exclusive
Name: Lang\rus2; Description: русик второй; Types: custom; Flags: exclusive
Name: Voice; Description: Русский звук; Types: custom

[Files]
Source: "game\*"; DestDir: "{app}"; Components: game
Source: "rus1\*"; DestDir: "{app}\eng"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: Lang\rus1
Source: "rus2\*"; DestDir: "{app}\deu"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: Lang\rus2
Source: "Voice\*"; DestDir: "{app}\eng"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: Voice - как быть с этой строчкой
Автор: AntonOVS
Дата сообщения: 01.04.2012 20:06
Nasgul1987
со страницы компонентов текст исчез, спасибо. Но вот насчет NeedSpaceLabel, не уверен, я же использовал скрипт проверки места на диске от Shegorat, так вот там строка NeedSpaceLabel использована, так что если я ее уберу, то надпись "Требуется места на диске..." исчезнет.
Автор: vint56
Дата сообщения: 01.04.2012 20:09
AntonOVS
WizardForm.DiskSpaceLabel.Hide;
Автор: Nasgul1987
Дата сообщения: 01.04.2012 20:10
AntonOVS
ааа блин
извини за невнимательность
вот
WizardForm.DiskSpaceLabel.Hide;
просто в расширенной версии открой и нажав на элемент посмотри как он называется
Автор: JHeavy
Дата сообщения: 01.04.2012 20:43
Ну вот как не пытаюсь не чего не получается, может есть другое решение например через секцию [code]
Автор: nik1967
Дата сообщения: 01.04.2012 21:35
JHeavy
[more]
Код: [Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: game; Description: Игрушка; Types: full; Flags: fixed
Name: Lang; Description: Русики и звук; Types: full
Name: Lang\rus1; Description: русик первый; Flags: exclusive
Name: Lang\rus2; Description: русик второй; Flags: exclusive
Name: Voice; Description: Русский звук; Types: full

[Files]
Source: "game\*"; DestDir: "{app}"; Components: game
Source: "rus1\*"; DestDir: "{app}\eng"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: Lang\rus1 and Voice
Source: "rus2\*"; DestDir: "{app}\deu"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: Lang\rus2 and Voice
Source: "Voice\*"; DestDir: "{app}\eng"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: Voice and Lang\rus1
Source: "Voice\*"; DestDir: "{app}\deu"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: Voice and Lang\rus2
Автор: GameOver
Дата сообщения: 02.04.2012 01:10
Разобрался сам со своей проблемой.
Автор: CAHEK77
Дата сообщения: 02.04.2012 17:34

Как это исправить? помогите!!!
Автор: CAHEK77
Дата сообщения: 02.04.2012 18:43
nik1967
Отправил в личку.
Автор: Raf_SE
Дата сообщения: 04.04.2012 16:09
Ктонить может [more=в этом коде][Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
ComponentsListTVStyle=true

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

[CustomMessages]
russian.ComponentsName1=Моя программа™
russian.ComponentsName2=Помощь
russian.ComponentsName2_1=Документация
russian.ComponentsName2_2=Руководство пользователя
russian.ComponentsInfoPanel1=Описание
russian.ComponentsInfoPanel2=Наведите курсор мыши на компонент, чтобы прочитать его описание.
russian.ComponentsDescription1=Устанавливается обязательно
russian.ComponentsDescription2=Помощь
russian.ComponentsDescription3=Прочитать документацию
russian.ComponentsDescription4=Прочитать руководство пользователя

[Components]
Name: readme; Description: Справка; Types: full custom;
Name: readme\en; Description: "Английская "; Types: full custom; Flags: fixed
Name: readme\ru; Description: Русская; Types: full

;*************************************************************************
Name: plugs; Description: Плагины; Types: full ; Flags: collapsed
Name: plugs\wlx; Description: Внутреннего просмотра; Types: full
Name: plugs\wcx; Description: Архиваторные; Types: full
Name: plugs\wfx; Description: Системные; Types: full
Name: plugs\wfx\CanonCam; Description: CanonCam; Types: full
Name: plugs\wfx\PluginManager; Description: PluginManager; Types: full
Name: plugs\wfx\Registry; Description: Registry; Types: full
Name: plugs\wfx\Services; Description: Services; Types: full
Name: plugs\wfx\StartupGuard; Description: StartupGuard; Types: full
Name: plugs\wdx; Description: Другие; Types: full

[Code]
{ RedesignWizardFormBegin } // Не удалять эту строку!
// Не изменять эту секцию. Она создана автоматически.
var
DRTF: TRichEditViewer;

procedure RedesignWizardForm;
begin
with WizardForm.ComponentsList do
begin
Width := ScaleX(201);
end;

{ DRTF }
DRTF := TRichEditViewer.Create(WizardForm);
with DRTF do
begin
Name := 'DRTF';
Parent := WizardForm.SelectComponentsPage;
Left := ScaleX(208);
Top := ScaleY(74);
Width := ScaleX(209);
Height := ScaleY(131);
Color := clMenu;
ReadOnly := True;
ScrollBars := ssVertical;
RTFText := '{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset204 Tahoma;}{\f1\fnil\fcharset134 Tahoma;}}' + #13#10 +
'\viewkind4\uc1\pard\lang1049\f0\fs16\''cd\''e0\''e2\''e5\''e4\''e8\''f2\''e5 \''ea\''f3\''f0\''f1\''ee\''f0 \''ec\''fb\''f8\''e8 \''ed\''e0 \''ea\''ee\''ec\''ef\''ee\''ed\''e5\''ed\''f2, \''f7\''f2\''ee\''e1\''fb \''ef\''f0\''ee\''f7\''e8\''f2\''e0\''f2\''fc \''e5\''e3\''ee \''ee\''ef\''e8\''f1\''e0\''ed\''e8\''e5.\f1\par' + #13#10 +
'}' + #13#10 +
'';
end;

DRTF.TabOrder := 4;

{ ReservationBegin }
// Вы можете добавить ваш код здесь.

{ ReservationEnd }
end;
// Не изменять эту секцию. Она создана автоматически.
{ RedesignWizardFormEnd } // Не удалять эту строку!

type
TComponentDesc = record Description: String; Index: Integer; end;

var
Descs: array of TComponentDesc;
Indx: Integer;

procedure ShowDescription(Sender: TObject; X, Y, Index: Integer; Area: TItemArea);
var i: Integer;
begin
Indx:=-1;
for i:= 0 to GetArrayLength(Descs)-1 do begin
if (Descs[i].Index=Index) then begin Indx:=i; Break end; end;
if (Indx >=0)and(Area=iaItem) then DRTF.Text:= Descs[Indx].Description else DRTF.Text:= ExpandConstant('{cm:ComponentsInfoPanel2}');
end;

procedure AddDescription(AIndex: Integer; ADescription: String);
var i, k: Integer;
begin
i:= GetArrayLength(Descs); SetArrayLength(Descs, i+1);
Descs[i].Description:= ADescription; Descs[i].Index:= AIndex-1
end;

procedure InitializeWizard();
begin
RedesignWizardForm;
WizardForm.ComponentsList.OnItemMouseMove:= @ShowDescription


AddDescription(1, 'Справка'); //первый параметр - это номер компонента, идет последовательно от начала записи компонентов
AddDescription(2, 'Эта сказка возникла в устных рассказах, пока не стала историей Великой Войны Кольца, включая множество эскурсов в более древние времена. Она начала создаваться после того, как был написан "Хоббит", и по его первой публикации в 1937 году: но я не торопился с продолжением, потому что хотел прежде собрать и привести в порядок мифологию и легенды древних дней, а для этого потребовалось несколько лет. Я делал это для собственного удовольствия и мало надеялся, что другие люди заинтересуются моей работой, особенно потому что она была преимущественно лингвистической по побуждениям и возникла из необходимости привести в порядок мои отрывочные сведения о языках эльфов.'); //Второй параметр - это собственно описание компонента
AddDescription(3, 'Русская справка');
AddDescription(4, 'Плагины');
AddDescription(5, 'Внутреннего просмотра');
AddDescription(6, 'Архиваторные');
AddDescription(7, 'Системные');
AddDescription(8, 'CanonCam');
AddDescription(9, 'PluginManager');
AddDescription(10, 'Registry');
AddDescription(11, 'Services');
AddDescription(12, 'StartupGuard');
AddDescription(13, 'Другие');

end;

[ISFormDesigner]
WizardFormя0A005457495A415244464F524D0030103804000054504630F10B5457697A617264466F726D0A57697A617264466F726D0C436C69656E744865696768740368010B436C69656E74576964746803F1010C4578706C696369744C65667402000B4578706C69636974546F7002000D4578706C6963697457696474680301020E4578706C69636974486569676874038E010D506978656C73506572496E636802600A54657874486569676874020D00F10C544E65774E6F7465626F6F6B0D4F757465724E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167650B57656C636F6D65506167650D4578706C69636974576964746803F1010E4578706C696369744865696768740339010000F110544E65774E6F7465626F6F6B5061676509496E6E6572506167650D4578706C69636974576964746803F1010E4578706C6963697448656967687403390100F10C544E65774E6F7465626F6F6B0D496E6E65724E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167650B4C6963656E7365506167650D4578706C69636974576964746803A1010E4578706C6963697448656967687403ED000000F110544E65774E6F7465626F6F6B506167651453656C656374436F6D706F6E656E7473506167650D4578706C69636974576964746803A1010E4578706C6963697448656967687403ED0000F11[/more] сделать так, чтобы текст описания компонентов нельзя было скопировать? ИЛИ сделать так, [more=чтобы в этом коде][Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
ComponentsListTVStyle=true

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

[CustomMessages]
russian.ComponentsInfoPanel1=Описание
russian.ComponentsInfoPanel2=Наведите курсор мыши на компонент, чтобы прочитать его описание.



[Components]
Name: "Game"; Description: "Компонент 1:"; Flags: fixed; Types: full compact custom;
Name: "Game\Full"; Description: "Компонент 2"; Flags: exclusive;
Name: "Game\Lokal"; Description: "Компонент 3"; Flags: exclusive;

Name: "SoundUnit"; Description: "Компонент 4:"; Flags: fixed; Types: full compact custom;
Name: "SoundUnit\eng"; Description: "Компонент 5"; Flags: exclusive;
Name: "SoundUnit\fra"; Description: "Компонент 6"; Flags: exclusive; ExtraDiskSpaceRequired: 74772480
Name: "SoundUnit\deu"; Description: "Компонент 7"; Flags: exclusive; ExtraDiskSpaceRequired: 76926976
Name: "SoundUnit\ita"; Description: "Компонент 8"; Flags: exclusive; ExtraDiskSpaceRequired: 80142336

[code]
type
TComponentDesc = record Description: String; Index: Integer; end;

var
Descs: array of TComponentDesc;
Info: TNewStaticText;
InfoCaption: TNewStaticText;
InfoPanel: TPanel;
Indx: Integer;

procedure ShowDescription(Sender: TObject; X, Y, Index: Integer; Area: TItemArea);
var i: Integer;
begin
Indx:=-1;
for i:= 0 to GetArrayLength(Descs)-1 do begin
if (Descs[i].Index=Index) then begin Indx:=i; Break end; end;
if (Indx >=0)and(Area=iaItem) then Info.Caption:= Descs[Indx].Description else Info.Caption:= ExpandConstant('{cm:ComponentsInfoPanel2}');
end;

procedure AddDescription(AIndex: Integer; ADescription: String);
var i, k: Integer;
begin
i:= GetArrayLength(Descs); SetArrayLength(Descs, i+1);
Descs[i].Description:= ADescription; Descs[i].Index:= AIndex-1
end;

procedure InitializeWizard();
begin
WizardForm.TypesCombo.Visible:ъlse;
WizardForm.ComponentsList.Height := WizardForm.ComponentsList.Height + WizardForm.ComponentsList.Top - WizardForm.TYPESCOMBO.Top;
WizardForm.ComponentsList.Top := WizardForm.TYPESCOMBO.Top;
WizardForm.ComponentsList.Width := ScaleX(200);
WizardForm.ComponentsList.OnItemMouseMove:= @ShowDescription

InfoPanel := TPanel.Create(WizardForm);
InfoPanel.Parent := WizardForm.SelectComponentsPage;
InfoPanel.Caption := '';
InfoPanel.Top := WizardForm.ComponentsList.Top;//ScaleY(12); // поднимает панель, но опускает панель с текстом
InfoPanel.Left := ScaleX(216);
InfoPanel.Width := ScaleX(200);
InfoPanel.Height := WizardForm.ComponentsList.Height; //ScaleY(40);
InfoPanel.BevelInner := bvRaised;
InfoPanel.BevelOuter := bvLowered;
InfoCaption := TNewStaticText.Create(WizardForm);
InfoCaption.Parent := WizardForm.SelectComponentsPage;
InfoCaption.Caption := ExpandConstant('{cm:ComponentsInfoPanel1}');
InfoCaption.Left := ScaleX(224);
InfoCaption.Top := InfoPanel.Top - ScaleY(5); //поднять слово Описание
InfoCaption.Font.Color := clActiveCaption;

Info := TNewStaticText.Create(WizardForm);
Info.Parent := InfoPanel;
Info.AutoSize := False;
Info.Left := ScaleX(6);
Info.Width := ScaleX(188); //шырина текста
Info.Top := ScaleY(12); //Чем больше значение, тем ниже опускаеться полоска текста
Info.Height := WizardForm.ComponentsList.Height - ScaleY(18); //Чем больше значение, тем ниже опускаеться полоска текста
Info.Caption := ExpandConstant('{cm:ComponentsInfoPanel2}');
Info.WordWrap := true;

AddDescription(1, 'Это дополнение выпущенно 31 июля 1998 года. Созданно Aztech New Media. Этот продукт был официально признан Blizzard Entertainment, разработчиком оригинальной игры. Дополнение содержит три кампании, по 10 миссий каждая, и более чем 100 дополнительных карт.123456789'); //первый параметр - это номер компонента, идет последовательно от начала записи компонентов
AddDescription(2, 'Английская справка'); //Второй параметр - это собственно описание компонента
AddDescription(3, 'Русская справка');
AddDescription(4, 'Плагины');
AddDescription(5, 'Внутреннего просмотра');
AddDescription(6, 'Архиваторные');
AddDescription(7, 'Системные');
AddDescription(8, 'CanonCam');
AddDescription(9, 'PluginManager');
AddDescription(10, 'Registry');
AddDescription(11, 'Services');
AddDescription(12, 'StartupGuard');
AddDescription(13, 'Другие');

end;[/more], когда текста слишком много, появлялся вертикальный скроллбар?
Автор: sasaAlex
Дата сообщения: 04.04.2012 16:54
Перечитываю всю ветку, но не могу найти ответ на такой вопрос. Как сделать, чтобы перед установкой или после установки открывался сайт браузером по умолчанию? Подскажите и прошу не пинайте сильно.
Автор: Raf_SE
Дата сообщения: 04.04.2012 17:18
sasaAlex
К примеру так:

[Run]
Filename: "{app}\The Best Tracker in Ukraine.url"; Description: "Открытие возможностей"; Flags: shellexec
Автор: troyan90
Дата сообщения: 04.04.2012 17:53
sasaAlex
[more]
Код: //до установки
function InitializeSetup(): Boolean;
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://forum.ru-board.com/',
'', '', SW_SHOW, ewNoWait, ErrorCode);
result:=true;
end;

//после установки
procedure DeinitializeSetup();
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://forum.ru-board.com/',
'', '', SW_SHOW, ewNoWait, ErrorCode);
end;
Автор: sasaAlex
Дата сообщения: 04.04.2012 17:57
Огромное спасибо. Еще вопросик как создать на рабочем столе иконку с адресом сайта после установки и чтобы она не удалялась при деинсталяции.
Автор: troyan90
Дата сообщения: 04.04.2012 18:01
Raf_SE

Цитата:
сделать так, чтобы текст описания компонентов нельзя было скопировать?

DRTF.Enabled:= false;

Добавлено:

Цитата:
Еще вопросик как создать на рабочем столе иконку с адресом сайта после установки и чтобы она не удалялась при деинсталяции.

пример с оф сайта http://jrsoftware.org/isfaq.php#urls
чтобы не удалялась поствь флаг Flags: uninsneveruninstall;
Автор: Raf_SE
Дата сообщения: 04.04.2012 18:50
troyan90 (18:01 04-04-2012)
Цитата:
DRTF.Enabled:= false;

В таком случае отключается скролбар и меняется цвет текста. А я собсно и использую этот код из-за скролбара =\
Если бы можно было добавить скролбар [more=в эту реализацию]
[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
ComponentsListTVStyle=true

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

[CustomMessages]
russian.ComponentsInfoPanel1=Описание
russian.ComponentsInfoPanel2=Наведите курсор мыши на компонент, чтобы прочитать его описание.



[Components]
Name: "Game"; Description: "Компонент 1:"; Flags: fixed; Types: full compact custom;
Name: "Game\Full"; Description: "Компонент 2"; Flags: exclusive;
Name: "Game\Lokal"; Description: "Компонент 3"; Flags: exclusive;

Name: "SoundUnit"; Description: "Компонент 4:"; Flags: fixed; Types: full compact custom;
Name: "SoundUnit\eng"; Description: "Компонент 5"; Flags: exclusive;
Name: "SoundUnit\fra"; Description: "Компонент 6"; Flags: exclusive; ExtraDiskSpaceRequired: 74772480
Name: "SoundUnit\deu"; Description: "Компонент 7"; Flags: exclusive; ExtraDiskSpaceRequired: 76926976
Name: "SoundUnit\ita"; Description: "Компонент 8"; Flags: exclusive; ExtraDiskSpaceRequired: 80142336

[code]
type
TComponentDesc = record Description: String; Index: Integer; end;

var
Descs: array of TComponentDesc;
Info: TNewStaticText;
InfoCaption: TNewStaticText;
InfoPanel: TPanel;
Indx: Integer;

procedure ShowDescription(Sender: TObject; X, Y, Index: Integer; Area: TItemArea);
var i: Integer;
begin
Indx:=-1;
for i:= 0 to GetArrayLength(Descs)-1 do begin
if (Descs[i].Index=Index) then begin Indx:=i; Break end; end;
if (Indx >=0)and(Area=iaItem) then Info.Caption:= Descs[Indx].Description else Info.Caption:= ExpandConstant('{cm:ComponentsInfoPanel2}');
end;

procedure AddDescription(AIndex: Integer; ADescription: String);
var i, k: Integer;
begin
i:= GetArrayLength(Descs); SetArrayLength(Descs, i+1);
Descs[i].Description:= ADescription; Descs[i].Index:= AIndex-1
end;

procedure InitializeWizard();
begin
WizardForm.TypesCombo.Visible:ъlse;
WizardForm.ComponentsList.Height := WizardForm.ComponentsList.Height + WizardForm.ComponentsList.Top - WizardForm.TYPESCOMBO.Top;
WizardForm.ComponentsList.Top := WizardForm.TYPESCOMBO.Top;
WizardForm.ComponentsList.Width := ScaleX(200);
WizardForm.ComponentsList.OnItemMouseMove:= @ShowDescription

InfoPanel := TPanel.Create(WizardForm);
InfoPanel.Parent := WizardForm.SelectComponentsPage;
InfoPanel.Caption := '';
InfoPanel.Top := WizardForm.ComponentsList.Top;//ScaleY(12); // поднимает панель, но опускает панель с текстом
InfoPanel.Left := ScaleX(216);
InfoPanel.Width := ScaleX(200);
InfoPanel.Height := WizardForm.ComponentsList.Height; //ScaleY(40);
InfoPanel.BevelInner := bvRaised;
InfoPanel.BevelOuter := bvLowered;
InfoCaption := TNewStaticText.Create(WizardForm);
InfoCaption.Parent := WizardForm.SelectComponentsPage;
InfoCaption.Caption := ExpandConstant('{cm:ComponentsInfoPanel1}');
InfoCaption.Left := ScaleX(224);
InfoCaption.Top := InfoPanel.Top - ScaleY(5); //поднять слово Описание
InfoCaption.Font.Color := clActiveCaption;

Info := TNewStaticText.Create(WizardForm);
Info.Parent := InfoPanel;
Info.AutoSize := False;
Info.Left := ScaleX(6);
Info.Width := ScaleX(188); //шырина текста
Info.Top := ScaleY(12); //Чем больше значение, тем ниже опускаеться полоска текста
Info.Height := WizardForm.ComponentsList.Height - ScaleY(18); //Чем больше значение, тем ниже опускаеться полоска текста
Info.Caption := ExpandConstant('{cm:ComponentsInfoPanel2}');
Info.WordWrap := true;

AddDescription(1, 'Это дополнение выпущенно 31 июля 1998 года. Созданно Aztech New Media. Этот продукт был официально признан Blizzard Entertainment, разработчиком оригинальной игры. Дополнение содержит три кампании, по 10 миссий каждая, и более чем 100 дополнительных карт.123456789'); //первый параметр - это номер компонента, идет последовательно от начала записи компонентов
AddDescription(2, 'Английская справка'); //Второй параметр - это собственно описание компонента
AddDescription(3, 'Русская справка');
AddDescription(4, 'Плагины');
AddDescription(5, 'Внутреннего просмотра');
AddDescription(6, 'Архиваторные');
AddDescription(7, 'Системные');
AddDescription(8, 'CanonCam');
AddDescription(9, 'PluginManager');
AddDescription(10, 'Registry');
AddDescription(11, 'Services');
AddDescription(12, 'StartupGuard');
AddDescription(13, 'Другие');

end;[/more] описания компонентов, то использовал бы её.
Автор: sasaAlex
Дата сообщения: 04.04.2012 19:45
Иконку с адресом сайта создал а вот как указать ей значок из папки с установленной игрой к примеру. Мой код такой для иконки:

[Files]
Source: compiler:\website.url; DestDir: "{app}"

[Icons]
Name: "{userdesktop}\сайт.com"; Filename: "{app}\website.url"; Tasks: desktopicon; Flags: uninsneveruninstall;

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}

Что здесь не верно чтобы иконка стала картинкой с названием сайта?
файл website.url = [InternetShortcut]
URL=http://www.сайт.com/ Filename: "{app}\иконка.ico"
Автор: troyan90
Дата сообщения: 04.04.2012 19:55
sasaAlex
[more]
Код:
[Files]
Source: compiler:website.url; DestDir: "{app}"; Flags: uninsneveruninstall;

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}

[Icons]
Name: "{userdesktop}\сайт.com"; Filename: "{app}\website.url"; Tasks: desktopicon; Flags: uninsneveruninstall; IconFilename: "{app}\icon.ico"
Автор: streamdown
Дата сообщения: 04.04.2012 20:54
Как зарегистрировать DLL в любой битности винды?
Батник выглядит так:

Код: if %processor_architecture%==AMD64 goto x64
rem Run x32 installer
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe "My Prog.dll" /codebase
:x64
rem Run x64 installer
C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\RegAsm.exe "My Prog.dll" /codebase
Автор: Raf_SE
Дата сообщения: 04.04.2012 21:27
streamdown
Для варианта с x64 виндой нужно дописать Check: IsWin64
Автор: streamdown
Дата сообщения: 04.04.2012 21:33
Raf_SE
круто)) в 2-х словах вся последовательность и код))) минималист вы батенька.

Нашел сам:

Код: [Run]
; v2.0.50727 {FrameWorkName}
; 32 bit stuff
Filename: {win}\Microsoft.NET\Framework\{code:FrameWorkName}\RegAsm.exe; Parameters: " ""{app}\"" /codebase ""{app}\My Prog.dll"""; WorkingDir: {app}; MinVersion: 0,5.0.2195
;Filename: {win}\Microsoft.NET\Framework\{code:FrameWorkName}\gacutil.exe; Parameters: /i {app}\My Prog.dll; WorkingDir: {app}; MinVersion: 0,5.0.2195
;Filename: {win}\Microsoft.NET\Framework\{code:FrameWorkName}\gacutil.exe; Parameters: ii {app}\My Prog.dll; WorkingDir: {app}; MinVersion: 0,5.0.2195
; 64 bit stuff
Filename: {win}\Microsoft.NET\Framework64\{code:FrameWorkName}\RegAsm.exe; Parameters: " ""{app}\My Prog.dll"" /codebase ""{app}\My Prog.dll"""; WorkingDir: {app}; MinVersion: 0,5.0.2195; Check: IsWin64
;Filename: {win}\Microsoft.NET\Framework64\{code:FrameWorkName}\gacutil.exe; Parameters: /i {app}\My Prog.dll; WorkingDir: {app}; MinVersion: 0,5.0.2195; Check: IsWin64
;Filename: {win}\Microsoft.NET\Framework64\{code:FrameWorkName}\gacutil.exe; Parameters: /i {app}\My Prog.dll; WorkingDir: {app}; MinVersion: 0,5.0.2195; Check: IsWin64

[UninstallRun]
; 32 bit stuff
Filename: {win}\Microsoft.NET\Framework\{code:FrameWorkName}\RegAsm.exe; Parameters: "/unregister ""{app}\My Prog.dll"""; WorkingDir: {app}; MinVersion: 0,5.0.2195
;Filename: {win}\Microsoft.NET\Framework\{code:FrameWorkName}\gacutil.exe; Parameters: /u "My Prog"; WorkingDir: {app}; MinVersion: 0,5.0.2195
;Filename: {win}\Microsoft.NET\Framework\{code:FrameWorkName}\gacutil.exe; Parameters: /u "My Prog"; WorkingDir: {app}; MinVersion: 0,5.0.2195
; 64 bit stuff
Filename: {win}\Microsoft.NET\Framework64\{code:FrameWorkName}\RegAsm.exe; Parameters: "/unregister ""{app}\My Prog.dll"""; WorkingDir: {app}; MinVersion: 0,5.0.2195; Check: IsWin64
;Filename: {win}\Microsoft.NET\Framework64\{code:FrameWorkName}\gacutil.exe; Parameters: /u "My Prog"; WorkingDir: {app}; MinVersion: 0,5.0.2195; Check: IsWin64
;Filename: {win}\Microsoft.NET\Framework64\{code:FrameWorkName}\gacutil.exe; Parameters: /u "My Prog"; WorkingDir: {app}; MinVersion: 0,5.0.2195; Check: IsWin64

[Code]
function IsWin32: Boolean;
begin
Result := not IsWin64;
end;

function FrameWorkName(Param: String): String;
begin
Result := 'v2.0.50727';
end;

function FrameWorkName_(Param: String): String;
var
Names: TArrayOfString;
I: Integer;
FrameworkInstall: Cardinal;
begin
Result := '';
if RegGetSubkeyNames(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP', Names) then begin
for I := 0 to GetArrayLength(Names) - 1 do begin
RegQueryDwordValue(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\'+Names[I], 'Install', FrameworkInstall);
if FrameworkInstall = 1 then begin
Result := Names[I];
end;
end;
end;
end;
Автор: MISHANCHYK
Дата сообщения: 05.04.2012 02:57
Подскажите пожалуйста, бывает при деинсталяции программ какая-либо из dll удаляемой программы используется сторонним приложением(по крайней мере так пишет), в результате чего программа удаляется не полностью, остаётся папка программы а в ней данная dll. Можно ли как-то зная заранее имя этой dll реализовать её коректное удаление вместе с програмой?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177

Предыдущая тема: поиск


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.