Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Автоматическая установка приложений (http://forum.oszone.net/forumdisplay.php?f=61)
-   -   [архив] Скрипты Inno Setup. Помощь и советы [часть 2] (http://forum.oszone.net/showthread.php?t=148703)

Serega 23-08-2009 22:06 1201436

[архив] Скрипты Inno Setup. Помощь и советы [часть 2]
 
Вложений: 1
Лимит страниц.
Тема закрыта.
Продолжение по ссылке Скрипты Inno Setup. Помощь и советы [часть 3]




Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
  • ISTool - неплохой редактор скриптов Inno Setup.
    Последняя версия: 5.3.0.1 [29.09.2009] - Скачать | зеркало;
    Предыдущая версия: 5.3.0 [07.04.2009] - Скачать (зеркало) | Русификатор (зеркало);

  • Inno Script Generator - ещё один редактор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать;

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы. Официальный сайт - недоступен.
    Последняя версия: 2.0.8 [12.11.2006] - Страница с зеркалами;

  • Inno Setup GameScript Generator - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;

  • ISSkin - Программа для создания и добавления в инсталлятор скинов. Инструкция.
    Последняя версия: 3.0.0.0 [19.01.2010] - Скачать;

  • InnoSetup Script Joiner - Программа для объединения нескольких скриптов InnoSetup в один;

  • Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
    Последняя версия: 0.1.3 [11.09.2009] - Скачать;


Ссылка на архив предыдущей темы (также можно скачать из вложения)

EN130 23-08-2009 23:26 1201469

вопрос немножко не по теме, но покачто некуда задавать.
У меня есть битый установщик inno setup. можно ли заставить его автоматически записать в лог имена и адреса не извлеченных файлов?
И может можно не сильно напрягаясь извлеч битые файлы. И пофик, что они извликуться битыми.

Serega 23-08-2009 23:41 1201477

Цитата:

Цитата EN130
У меня есть битый установщик inno setup »

Подробнее...
Можете скинуть инсталлятор, если только он не большой, у меня интернет платный.

EN130 23-08-2009 23:49 1201482

Инсталятор большой. Но если Вам нужен толко Setup.exe, тогда могу. он маленький :)

Serega 24-08-2009 00:06 1201492

Цитата:

Цитата EN130
Но если Вам нужен толко Setup.exe, тогда могу. »

Не поможет, тогда объясните подробнее, как понять битый инсталлятор. Т.е. вы запускаете инсталлятор, а он не запускается или выскакивает сообщение?

EN130 24-08-2009 00:23 1201497

Попробую.
Инсталятор состоит из файла setup.exe, setup-1.bin и вот setup-1.bin как раз битый (ошибка в данныйх CRC) Я скопировал с диска с помощю одной программы. Без понятия, что она сделала с битыми секторами. Я запускаю инсталятор, указываю все необходимые параметры и начинается установка. И когда доходит до битых секторов, на первом файле выдало сообщение:
Цитата:

Произошла ошибка при попытке копирования файла.
Исходный файл поврежден
Прервать Повторить Пропустить
На всех остольных поврежденных файлах
Цитата:

Произошла ошибка при попытке чтения исходного файла.
Исходный файл поврежден
Прервать Повторить Пропустить
Так десяток файлов. Потом кончаются битые сектора, и устаовка идет дальше.

volk1234 24-08-2009 00:46 1201514

EN130 и Все
дальнейшее обсуждение установщика в новой теме. Ссылка в шапке.

zl0ybot 24-08-2009 02:05 1201542

Все привет надо бы вот этот скрипт доделать
читать дальше »
[setup]
AppName=Hitman
AppVerName=Hitman
DefaultDirName={pf}\Hitman
OutputDir=.
WizardImageFile=WizardImageFile.bmp
WizardSmallImageFile=WizardSmallImageFile.bmp
DisableReadyPage=true
UninstallFilesDir={app}\Uninstall

[Languages]
Name: "ENG"; MessagesFile: "compiler:Default.isl"
Name: "RUS"; MessagesFile: "compiler:Languages\Russian.isl"

[Files]

Source: 3.bmp; DestDir: {tmp}; Flags: dontcopy
Source: 1.bmp; Flags: dontcopy;

[Run]
Filename: {src}\DirectX\dxsetup.exe; Parameters: /silent; StatusMsg: ExpandConstant('{cm:UP}'); Check: DirectX

[CustomMessages]
ENG.PAGE_CAPTION=Setup has finished installing Vin Diesel Wheelman on your computer.
RUS.PAGE_CAPTION=Программа Vin Diesel Wheelman установлена на Ваш компютер.
ENG.STR=Click Finish to exit Setup.
RUS.STR=Нажмите «Завершить», чтобы выйти из программы установки.
ENG.BUT=Install
RUS.BUT=Установить
ENG.SPACE=Available place on disk:
RUS.SPACE=Доступно места на диске:
ENG.SPACE1=Place is Required on disk:
RUS.SPACE1=Требуется места на диске:
ENG.DRT=Will Update DirectX
RUS.DRT=Обновить DirectX
ENG.UP=Goes the renovation DirectX...
RUS.UP=Идет обновление DirectX...
ENG.GB=GB
RUS.GB=Гб
[_CODE_]

var
Upload: TCheckBox;
bottom_img:TBitmapImage;
lblCheckBox, lblSelectDir, lblSelectDirBrowse: TLabel;
PageNameLabel, PageDescriptionLabel: TLabel;
WLabel1, WLabel2,
FLabel1, FLabel2, FLabel3: TLabel;
NeedSize:Integer;
FreeMB, TotalMB: Cardinal;
NeedSpaceLabel,FreeSpaceLabel: TLabel;
BmpFile: TBitmapImage;

function DirectX: Boolean;
begin
Result:=Upload.Checked;
end;

procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
FreeSpaceLabel.Caption := ExpandConstant('{cm:SPACE} ')+ FloatToStr(round(FreeMB/1024*100)/100) + ExpandConstant(' {cm:GB}') else
FreeSpaceLabel.Caption := ExpandConstant('{cm:SPACE} ')+ IntToStr(FreeMB)+ ' MB';
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False else
WizardForm.NextButton.Enabled := True;
end;

procedure GetNeedSpaceCaption;
begin
if NeedSize > 1024 then
NeedSpaceLabel.Caption := ExpandConstant('{cm:SPACE1} ')+ FloatToStr(round(NeedSize/1024*100)/100) + ExpandConstant(' {cm:GB}') else
NeedSpaceLabel.Caption := ExpandConstant('{cm:SPACE1} ')+ IntToStr(NeedSize)+ ' MB';
end;

// задал процедуру, чтоб отмечался чебокс еси кликнуть по надписи lblCheckBox
procedure lblCheckBoxOnClick(Sender: TObject);
begin
if Upload.Checked = False then
Upload.Checked:= True else
Upload.Checked:= False;
end;

procedure InitializeWizard();
begin
WizardForm.FileNameLabel.Visible:= False;
ExtractTemporaryFile('1.bmp');
ExtractTemporaryFile('3.bmp');

NeedSize:= 7000;

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.Width:= ScaleX(497);
BmpFile.Height:= ScaleY(252);
BmpFile.Parent:= WizardForm.SelectDirPage;


bottom_img:= TBitmapImage.Create(WizardForm);
bottom_img.Bitmap.LoadFromFile(ExpandConstant('{tmp}\3.bmp'));
{первые 2 параметра - координаты левогого верхнего угла по горизонтали и вертикали, дальше ширина и высота,
до которой растянуть}
bottom_img.SetBounds(0, 315, 497, 48);
bottom_img.Parent:= WizardForm;
bottom_img.Stretch:= True;

with WizardForm do
begin
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
WelcomeLabel1.Hide;
WelcomeLabel2.Hide;
DiskSpaceLabel.Hide;
SelectDirBitmapImage.Hide;
SelectDirBrowseLabel.Hide;
SelectDirLabel.Hide;
FinishedHeadingLabel.Hide;
FinishedLabel.Hide;

DirBrowseButton.Left:= DirBrowseButton.Left + ScaleX(40);
DirBrowseButton.Top:= DirBrowseButton.Top + ScaleY(12);
DirEdit.Left:= DirEdit.Left + ScaleX(40);
DirEdit.Top:= DirEdit.Top + ScaleY(12);

WizardBitmapImage.Width:= 497;
WizardBitmapImage.Height:= 314;
WizardBitmapImage2.Width:= 497;
WizardBitmapImage2.Height:= 314;
with MainPanel do
begin
with WizardSmallBitmapImage do
begin
Left:= Mainpanel.Left;
Top:= Mainpanel.Top;
Width:= Mainpanel.Width;
Height:= MainPanel.Height;
end;
end;
end;

WLabel1:= TLabel.Create(WizardForm);
with WLabel1 do
begin
Left:= ScaleX(176);
Top:= ScaleY(16);
Width:= ScaleX(301);
Height:= ScaleY(54);
AutoSize:= False;
WordWrap:= True;
Font.Size:= 12;
Font.Style:= [fsBold];
Font.Color:= clwhite;
ShowAccelChar:= False;
Caption:= WizardForm.WelcomeLabel1.Caption;
Transparent:= True;
Parent:= WizardForm.WelcomePage;
end;

WLabel2:=TLabel.Create(WizardForm);
with WLabel2 do
begin
Top:= ScaleY(76);
Left:= ScaleX(176);
Width:= ScaleX(301);
Height:= ScaleY(234);
AutoSize:= False;
WordWrap:= True;
Font.Color:= clWhite;
ShowAccelChar:= False;
Caption:= WizardForm.WelcomeLabel2.Caption;
Transparent:= True;
Parent:= WizardForm.WelcomePage;
end;

FLabel1:= TLabel.Create(WizardForm);
with FLabel1 do
begin
Left:= ScaleX(176);
Top:= ScaleY(16);
Width:= ScaleX(301);
Height:= ScaleY(54);
AutoSize:= False;
WordWrap:= True;
Font.Size:= 12;
Font.Style:= [fsBold];
Font.Color:= clWhite;
ShowAccelChar:= False;
Caption:= WizardForm.FinishedHeadingLabel.Caption;
Transparent:= True;
Parent:= WizardForm.FinishedPage;
end;

FLabel2:=TLabel.Create(WizardForm);
with FLabel2 do
begin
Top:= ScaleY(76);
Left:= ScaleX(176);
Width:= ScaleX(301);
Height:= ScaleY(53);
AutoSize:= False;
WordWrap:= True;
Font.Color:= clWhite;
ShowAccelChar:= False;
Caption:= ExpandConstant('{cm:PAGE_CAPTION}');
Transparent:= True;
Parent:= WizardForm.FinishedPage;
end;

FLabel3 :=TLabel.Create(WizardForm);
with FLabel3 do
begin
Top := ScaleY(110);
Left := ScaleX(176);
Width := ScaleX(301);
Height := ScaleY(53);
AutoSize := False;
WordWrap := True;
Font.Color:= clblack;
ShowAccelChar := False;
Caption := ExpandConstant('{cm:STR}');
Transparent := True;
Parent := WizardForm.FinishedPage;
end;

// уменьшил размер CheckBox'а, по другому никак
Upload:= TCheckBox.Create(WizardForm);
with Upload do
begin
Parent:= WizardForm.SelectDirPage;
Left:= WizardForm.DirEdit.Left;
Top:= WizardForm.DirEdit.Top + 35;
Width:= ScaleX(14);
Height:= ScaleY(14);
TabOrder:= 0;
Checked:= False;
end;

// создаём надпись для CheckBox'а
lblCheckBox:= TLabel.Create(WizardForm);
with lblCheckBox do
begin
Caption:= ExpandConstant('{cm:DRT}');
Left:= WizardForm.DirEdit.Left + 20;
Top:= WizardForm.DirEdit.Top + 35;
Width:= ScaleX(150);
Height:= ScaleY(13);
Transparent := True;
Parent:= WizardForm.SelectDirPage;
OnClick:= @lblCheckBoxOnClick;
end;

// создаём lblSelectDir
lblSelectDir:= TLabel.Create(WizardForm);
with lblSelectDir do
begin
Caption:= WizardForm.SelectDirLabel.Caption;
Left:= ScaleX(40);
Top:= WizardForm.SelectDirLabel.Top + ScaleY(12);
Width:= WizardForm.SelectDirLabel.Width;
Height:= WizardForm.SelectDirLabel.Height;
Transparent := True;
Parent:= WizardForm.SelectDirPage;
end;

// создаём lblSelectDirBrowse
lblSelectDirBrowse:= TLabel.Create(WizardForm);
with lblSelectDirBrowse do
begin
Caption:= WizardForm.SelectDirBrowseLabel.Caption;
Left:= ScaleX(40);
Top:= WizardForm.SelectDirBrowseLabel.Top + ScaleY(12);
Width:= WizardForm.SelectDirBrowseLabel.Width;
Height:= WizardForm.SelectDirBrowseLabel.Height;
WordWrap:= True;
Transparent:= True;
Parent:= WizardForm.SelectDirPage;
end;

NeedSpaceLabel:= TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent:= WizardForm.SelectDirPage;
Left:= WizardForm.DirEdit.Left;
Top:= ScaleY(202);
Width:= ScaleX(209);
Height:= ScaleY(13);
Transparent:= True;
end;

FreeSpaceLabel:= TLabel.Create(WizardForm);
with FreeSpaceLabel do
begin
Parent:= WizardForm.SelectDirPage;
Left:= WizardForm.DirEdit.Left;
Top:= ScaleY(220);
Width:= ScaleX(209);
Height:= ScaleY(13);
Transparent:= True;
end;

WizardForm.DirEdit.OnChange:= @GetFreeSpaceCaption;
WizardForm.DirEdit.Text:= WizardForm.DirEdit.Text + #0;

PageNameLabel:= TLabel.Create(WizardForm);
with PageNameLabel do
begin
Left:= ScaleX(10);
Top:= ScaleY(10);
Width:= ScaleX(300);
Height:= ScaleY(14);
AutoSize:= False;
WordWrap:= True;
Font.Color:= clblack;
Font.Style:= [fsBold];
Transparent:= True;
Parent:= WizardForm.MainPanel;
end;

PageDescriptionLabel:= TLabel.Create(WizardForm);
with PageDescriptionLabel do
begin
Left:= ScaleX(15);
Top:= ScaleY(25);
Width:= ScaleX(475);
Height:= ScaleY(30);
AutoSize:= False;
WordWrap:= True;
Font.Color:= clblack;
Transparent:= True;
Parent:= WizardForm.MainPanel;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
PageNameLabel.Caption:= WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption:= WizardForm.PageDescriptionLabel.Caption;
if CurPageID = wpSelectDir then
begin
WizardForm.NextButton.Caption:= ExpandConstant('{cm:BUT}');
GetNeedSpaceCaption;
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled:=False;
with WizardForm do
begin
InnerNotebook.Left := ScaleX(0);
InnerNotebook.Top := ScaleY(60);
InnerNotebook.Width := ScaleX(497);
InnerNotebook.Height := ScaleY(252)
end;
end;
if CurPageID = wpInstalling then
begin
with WizardForm do
begin
BmpFile.Parent:= WizardForm.InstallingPage;
ProgressGauge.Left:= 20;
ProgressGauge.Top:= 160;
ProgressGauge.Width:= 215;
ProgressGauge.Height:= 20;
end;
end;
end;
вот не достататки а патом все соединить с этим скриптом
читать дальше »
#define MainExe "{app}\Smersh.exe"
#define GDFBinary "{app}\Smersh.exe"

[Setup]
AppName=Смерть шпионам.Момент истины
AppVerName=Смерть шпионам.Момент истины
DefaultDirName={pf}\Смерть шпионам.Момент истины
OutputDir=Output
Compression=none
DisableReadyPage=true
InternalCompressLevel=ultra64
SolidCompression=true
ArchitecturesInstallIn64BitMode=x64
ArchitecturesAllowed=x64 x86
RestartIfNeededByRun=false
UsePreviousAppDir=false
DirExistsWarning=no
DisableProgramGroupPage=true
DefaultGroupName=Bully
UsePreviousGroup=false
UsePreviousSetupType=false
UsePreviousTasks=false
UninstallFilesDir={app}\Uninstall
[Files]
Source: arc.exe; DestDir: {tmp}; Flags: dontcopy
Source: GameuxInstallHelper.dll; DestDir: {app}\Uninstall; Flags: overwritereadonly ignoreversion
[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[Messages]
SelectDirBrowseLabel=Нажмите «Установить», чтобы начать установку. Если Вы хотите выбрать другую папку, нажмите «Обзор».
[LangOptions]
WelcomeFontName=Tahoma
WelcomeFontSize=11

[Registry]
Root: HKLM; SubKey: SOFTWARE\1C\{{E07CEDD1-108A-4304-B820-EAFF5D37F5F0}; ValueType: string; ValueName: InstallDir; ValueData: {app}\
Root: HKLM; SubKey: SOFTWARE\1C\{{E07CEDD1-108A-4304-B820-EAFF5D37F5F0}; ValueType: string; ValueName: AppFile; ValueData: {app}\SmershAddon.exe
Root: HKLM; SubKey: SOFTWARE\1C\{{E07CEDD1-108A-4304-B820-EAFF5D37F5F0}; ValueType: string; ValueName: AppVersion; ValueData: 1.0.0.0

[Run]
Filename: {app}\Smersh.exe; WorkingDir: {app}\; Description: Начать игру; Flags: postinstall
Filename: {src}\DirectX\DXSETUP.exe; Parameters: /silent; StatusMsg: Обновление:Microsoft DirectX 9.0c...; Check: InstallDirectX
Filename: {src}\Redistributables\vcredist_x86.exe; Parameters: "/q:a /c:""VCREDI~3.EXE /q:a /c:""""msiexec /i vcredist.msi /qn"""" """; StatusMsg: Обновление:Microsoft Visual C++ 2005...; Check: InstallDirectX

[Icons]
Name: {group}\Играть; Filename: {app}\Smersh.exe; WorkingDir: {app}\
Name: {group}\Настроить игру; Filename: {app}\SmershSetup.exe; WorkingDir: {app}\
Name: {group}\Удалить игру; Filename: {uninstallexe}
Name: {commondesktop}\Смерть шпионам.Момент истины; Filename: {app}\Smersh.exe; WorkingDir: {app}\; Check: MakeDesktopIcon

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

[_Code_]
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}\Uninstall\GameuxInstallHelper.dll stdcall uninstallonly';
function RemoveFromGameExplorer(var GUID: TGUID): Cardinal; external 'RemoveFromGameExplorer@{app}\Uninstall\GameuxInstallHelper.dll stdcall uninstallonly';
function RemoveTasks(var GUID: TGUID): Cardinal; external 'RemoveTasks@{app}\Uninstall\GameuxInstallHelper.dll stdcall uninstallonly';

const
PlayTask = 0;
SupportTask = 1;

var
NeedSize:Integer;
FreeMB, TotalMB: Cardinal;
NeedSpaceLabel,FreeSpaceLabel: TLabel;
DesktopIcon, DirectX: TCheckBox;
GUID: TGUID;
ProgressBar1: TNewProgressBar;
/////Вычисление свободного места на диске
procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
FreeSpaceLabel.Caption := 'Доступно места на диске: '+ FloatToStr(round(FreeMB/1024*100)/100) + ' GB' else
FreeSpaceLabel.Caption := 'Доступно места на диске: '+ IntToStr(FreeMB)+ ' MB';
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False else
WizardForm.NextButton.Enabled := True; end;

procedure animateprogress;
begin ProgressBar1.Position := ProgressBar1.Position+1
end;

procedure GetNeedSpaceCaption; /////Вычисление требуемого места для установки
begin
if NeedSize > 1024 then
NeedSpaceLabel.Caption := 'Требуется места на диске: '+ FloatToStr(round(NeedSize/1024*100)/100) + ' GB' else
NeedSpaceLabel.Caption := 'Требуется места на диске: '+ IntToStr(NeedSize)+ ' MB';end;

function MakeDesktopIcon: Boolean;
begin
Result:=DesktopIcon.Checked;end;

function InstallDirectX: Boolean;
begin
Result:=DirectX.Checked;end;

procedure InitializeWizard();
begin
begin
NeedSize := 3210; //Здесь указывается место для приложения
WizardForm.DiskSpaceLabel.Hide;
WizardForm.FilenameLabel.Hide;
WizardForm.ProgressGauge.Top:=ScaleY(100); //Изменение стандартного прогрессбара
WizardForm.ProgressGauge.Width:=262; //
WizardForm.ProgressGauge.Left:=155; //
WizardForm.StatusLabel.Top:=ScaleY(80);
WizardForm.WelcomeLabel2.Top:=ScaleY(90);
NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(202);
Width := ScaleX(209);
Height := ScaleY(13);
end;
end;
FreeSpaceLabel := TLabel.Create(WizardForm);
with FreeSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(220);
Width := ScaleX(209);
Height := ScaleY(13);
end;
WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
begin //Создание чекбокса для создания ярлыка на рабочем столе
DesktopIcon := TCheckBox.Create(WizardForm);
with DesktopIcon do
begin
Parent := WizardForm.SelectDirPage;
Caption := 'Добавить ярлык на Рабочий стол';
Left := ScaleX(0);
Top := WizardForm.DirEdit.Top+35;
Width := ScaleX(400);
Height := ScaleY(15);
TabOrder := 0;
Checked := True;
end;
end;
begin //Создание чекбокса для установки DirectX
DirectX := TCheckBox.Create(WizardForm);
with DirectX do
begin
Parent := WizardForm.SelectDirPage;
Caption := 'Установить дополнительное программное обеспечение';
Left := ScaleX(0);
Top := WizardForm.DirEdit.Top+55;
Width := ScaleX(400);
Height := ScaleY(15);
TabOrder := 0;
Checked := True;
end;
end;
begin ///Создание нового прогрессбара
ProgressBar1 := TNewProgressBar.Create(wizardform);
with ProgressBar1 do
begin
Parent := wizardform.installingpage;
Top := 100
Width := 150;
Height := wizardform.progressgauge.height;
Max :=3; //кол-во архивов
end;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
begin
if CurPageID=wpSelectDir then
begin //Тут если Свободное место на диске < требуемого то кнопка "Установвить" на PageSelectDir неактивна
GetNeedSpaceCaption;
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled:=False
WizardForm.NextButton.Caption:='Установить'; //Rename кнопки "Далее" на SelectDir
end;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep); ///Регистрация в GameExplorer
var
Binary, MainExe: String;
ResultCode:Integer;
begin
if CurStep = ssInstall then //Перед установкой
begin
GenerateGUID(GUID);
ExtractTemporaryFile('arc.exe'); //Извлечение Arc.exe в Temp
if (FileExists(AddBackslash(ExpandConstant('{tmp}')) + 'arc.exe')) and (FileExists(AddBackslash(ExpandConstant('{src}')) + 'data-a.bin')) then
begin
WizardForm.StatusLabel.Caption:='Распаковка файлов...'; //Извлечение из 1-го архива
Exec(ExpandConstant('{tmp}\Arc.exe'), 'x '+AddQuotes(ExpandConstant('{src}\data-a.bin'))+' -y -dp'+AddQuotes(ExpandConstant('{app}')), '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
ProgressBar1.Position := ProgressBar1.Position+1

WizardForm.StatusLabel.Caption:='Распаковка файлов...'; //Извлечение из 2-го архива
Exec(ExpandConstant('{tmp}\Arc.exe'), 'x '+AddQuotes(ExpandConstant('{src}\data-b.bin'))+' -y -dp'+AddQuotes(ExpandConstant('{app}')), '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
ProgressBar1.Position := ProgressBar1.Position+1

WizardForm.StatusLabel.Caption:='Распаковка файлов...'; //Извлечение из 3-го архива
Exec(ExpandConstant('{tmp}\Arc.exe'), 'x '+AddQuotes(ExpandConstant('{src}\data-c.bin'))+' -y -dp'+AddQuotes(ExpandConstant('{app}')), '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
ProgressBar1.Position := ProgressBar1.Position+1

end else begin
MsgBox('Исполняемый файл:' + #13#10#13#10 + (AddBackslash(ExpandConstant('{tmp}')) + 'arc.exe') + #13#10#13#10 + 'не найден. Установка отменена', mbInformation, MB_OK);
Abort;
end;
end;
if CurStep = ssPostInstall then
begin
Binary:=ExpandConstant('{#GDFBinary}');
MainExe:=ExpandConstant('{#MainExe}');
AddToGameExplorer(Binary, ExpandConstant('{app}'), 3, GUID);
CreateTask(3, GUID, PlayTask, 0, 'Play', MainExe, '');
end;
end;

function InitializeSetup(): Boolean;
var
UnStr: String;
ErrorCode, Mesages: Integer;
begin //Повторный запуск
Result := True;
if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\Smersh2_is1', 'UninstallString', UnStr) then
begin
If UnStr <> '' then
begin
Mesages := MsgBox('Смерть шпионам.Момент истины уже установлена в Вашей системе.'+#10#10+'Хотите удалить приложение?', mbInformation, MB_YESNOCANCEL);
case Mesages of
idYes:
begin
UnStr := RemoveQuotes(UnStr);
Exec(UnStr, '/silent', '', SW_Show, ewWaitUntilTerminated, ErrorCode);
Result := True;
end
idNo:
begin
Result := True;
end
idCancel:
begin
Result := False;
end;
end;
end;
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
ResultStr:String;
Binary: String;
GUID: TGUID;
begin /////////////////////////////////////////Удаление игровых сохранений
if CurUninstallStep=usPostUninstall then
begin
RegQueryStringValue(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\Smersh2_is1', 'UnInstConfirm', ResultStr)
if DirExists(ExpandConstant('{userdocs}')+'\smersh') then
if MsgBox('Удалить сохраненные игры и настройки?',mbconfirmation, mb_YesNo) = IDYES then
begin
if not DelTree(ExpandConstant('{userdocs}')+'\Smersh', True, True, True)
then
MsgBox('Папка не удалена!' #13#13 'Папка не существует или задействована.', mbError, MB_OK);
end;
end;
begin
if CurUninstallStep=usUninstall then //Удаление из GameExplorer
begin
Binary:=ExpandConstant('{#GDFBinary}');
RetrieveGUIDForApplication(Binary, GUID);
RemoveFromGameExplorer(GUID);
RemoveTasks(GUID);
UnloadDll(ExpandConstant('{app}\Uninstall\GameuxInstallHelper.dll'));
end;
end;
end;
через joins script ни как

ilyaalex 24-08-2009 06:27 1201576

Народ, помогите. Может кто знает. Нужно определить наличие учетной записи windows, используя средства Inno setup. ВОзможно ли это? Можно ли реализовать это через WinApi в Inno setup? По сути все сводится к функции где один параметр - имя учетки. Функция выплевывает true если учетка существует и false если нет.

user_123 24-08-2009 13:17 1201853

Подскажите пожалуйста, как в программе установки, написанной в inno setup, сделать:

1) вывод стандартного системного запроса (Да/Нет) с использованием текста из секции CustomMessages при снятии флажка в дополнительных задачах / компонентах (секция tasks), при нажатии кнопки "да" снять флажок. p.s. должно появиться уведомление пользователя о возможных последствиях отказа от выполнения задачи / установки компонента с запросом на продолжение (снятие флажка).

2) вывод дополнительного стандартного системного запроса (Да/Нет) с использованием текста из секции CustomMessages при удалении установленной программы. При нажатии кнопки "да" должен удалиться определённый подкаталог программы (и чтобы строка состояния отображала проццес удаления подкаталога, т.к. нём может быть более 50 тыс. файлов). p.s. Нужно, чтобы пользователь решал, удалять подкаталог программы, или нет.

volk1234 24-08-2009 23:04 1202285

ilyaalex
Цитата:

Цитата Serega
Цитата ilyaalex:
Нужно определить наличие учетной записи windows, используя средства Inno setup. »
Почитайте в Справке по Inno Setup, раздел:
Pascal Scripting: Introduction->Pascal Scripting: Support Functions Reference->function GetUserNameString: String; »


Serega 25-08-2009 17:26 1202947

Цитата:

Цитата user_123
1) вывод стандартного системного запроса (Да/Нет) с использованием текста из секции CustomMessages »

Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[CustomMessages]
tsk=Попробуйте, снимите с меня галку... ;)
msg=бла... бла... бла... %n Вы уверенны?

[Tasks]
Name: tsk; Description: {cm:tsk}; GroupDescription: Дополнительно:

[Code]
procedure OnClickCheck(Sender: TObject);
begin
  if not IsTaskSelected('tsk') then
  if MsgBox(ExpandConstant('{cm:msg}'), mbConfirmation, MB_YESNO) = IDYES then
    begin
      MsgBox('Я всё видел, Вы нажали "Да"', mbInformation, MB_OK);
    end
  else
    begin
      MsgBox('Вы нажали "Нет", очень жаль...', mbInformation, MB_OK);
    end;
end;

procedure InitializeWizard;
begin
  WizardForm.TasksList.OnClickCheck:= @OnClickCheck;
end;


DemonAk 25-08-2009 20:00 1203083

Вложений: 1
Привет всем, подскажите пожалуйста, как сделать так, чтобы копирование файлов (Source: D:\TEMP\silnet hill homecoming\rus\*; DestDir: {app}; Flags: recursesubdirs ignoreversion createallsubdirs; Components: Full_Russian EngSRusT), создание ярлыков и выполнение секции run происходило после распаковки архивов, именно в таком порядке. Скрипт прилагается.

lmiol 26-08-2009 23:02 1204187

можно ли какимнибудь способом в секции Run внести возможность поставить флаг exclusive а также мог бы её снять

Filename: "http://www.quakelive.com/#register"; Description: "Создать аккаунт"; Flags: nowait shellexec postinstall skipifsilent
Filename: "http://www.quakelive.com/#home"; Description: "Войти чтобы играть"; Flags: nowait shellexec postinstall skipifsilent

это для того чтобы если человек выбрал один из любых вариантов или мог бы его отключить
К примеру выбирать он может чтото одно скажем или регистрацию или вход, но также может и убрать галку и с того и другого (всмысле не хочет не входить и регистрироваться)

A1EXXX 28-08-2009 01:34 1205135

Вложений: 1
Есть скрипт для задания чёрного фона (прикрепил), но вот беда, не все текста присутствуют, например, как на скрине (та же фигня на всех страницах), а на странице лицензионного соглашения нет текста "я принимаю..." и "я не принимаю...", тупо две галки =((( Помогите это исправить!!!

FlatX007 28-08-2009 01:45 1205139

Вопрос : как сделать чтобы деинстилятор(unins000.exe) ,созданый установщиком, при запуске удалил ключ из реестра.

Просто никогда этим незанимался :dont-know

A1EXXX 28-08-2009 01:53 1205143

FlatX007, добавь флаг uninsdeletevalue, например:

[Registry]
Root: HKLM; Subkey: "SOFTWARE\Activision"; ValueType: String; Flags: uninsdeletevalue

FlatX007 28-08-2009 19:26 1205759

Цитата:

Цитата A1EXXX
FlatX007, добавь флаг uninsdeletevalue, например:
[Registry]
Root: HKLM; Subkey: "SOFTWARE\Activision"; ValueType: String; Flags: uninsdeletevalue »

Так ключ реестра поппадает в реестр не через установщик, он там есть до него.
Неработает кароче.

BlackSelf 28-08-2009 20:09 1205783

FlatX007,
читать дальше »
Код:

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep=usPostUninstall then
  RegDeleteValue(HKLM, 'Software\My Program', 'InstallDir')
end;


Serega 28-08-2009 21:28 1205853

Вложений: 1
Цитата:

Цитата DemonAk
как сделать так, чтобы »

Попробуйте, скрипт прикрепил к сообщению. Работоспасобность, не проверял.

Цитата:

Цитата lmiol
Есть скрипт для задания чёрного фона (прикрепил), но вот беда, не все текста присутствуют »

стандартным способом нет, придётся вручную рисовать чебоксы и обрабатывать клики мышкой по ним.

Цитата:

Цитата A1EXXX
Есть скрипт для задания чёрного фона (прикрепил), но вот беда, не все текста присутствуют »

добавьте:
Код:

WizardForm.PageNameLabel.Font.Color:=clWhite;
а лицензионное соглашение, помоему это:
Код:

WizardForm.LicenseAcceptedRadio.Font.Color:= clWhite;
WizardForm.LicenseNotAcceptedRadio.Font.Color:= clWhite;


FlatX007 28-08-2009 21:51 1205866

Цитата:

Цитата BlackSelf
BlackSelf »

Так тоже не работает ... =)

получилось только так (с третей попытки)

Код:

[UninstallRun]
Filename: "{cmd}"; Parameters: "/c REG DELETE HKEY_CURRENT_USER\Software\Launcher /f"


Def191 29-08-2009 02:34 1206060

Делаю инсталлятор для игры. Необходимо, чтобы помимо установки основных файлов в директорию, указанную юзером, в корень любого логического диска распаковывалась папка с доп. файлами (аудио, необходимы для nocd). Диск для установки должен либо автоматически определяться из пути установки (константы соответсвующей я не нашел, а как получить его из {app} - не знаю), либо с помощью дополнительного диалога сразу после выбора пути установки - например, выпадающее меню со списком логических дисков. В принципе, оба варианта приемлемы. Можно ли это реализовать стандартными средствами, или надо писать скрипт на паскале (ни разу не пробовал, да и с языком плохо знаком) ? Заранее спасибо.

BlackSelf 29-08-2009 02:48 1206064

Def191, вот константа для распаковки в корень системного диска: {sd}
Цитата:

Цитата Def191
Диск для установки должен либо автоматически определяться из пути установки (константы соответсвующей я не нашел, а как получить его из {app} - не знаю) »

Можно вот так: {drive:{app}}

Def191 29-08-2009 17:43 1206478

BlackSelf, спасибо. То, что нужно.

AjaX_too 29-08-2009 20:28 1206586

помогите реализовать следующее:

в установщике нужно сделать страничку с двумя регистрами, при выборе одного - добавляеться одно значение в реестр, при выборе другого - второе (или не добавляется вообще). Как добавить данные в реестр я знаю, мне нужна лишь логика реализации регистров. Спасибо.

Serega 29-08-2009 20:31 1206592

Цитата:

Цитата AjaX_too
в установщике нужно сделать страничку с двумя регистрами »

что вы подразумеваете под словом регистр?

AjaX_too 29-08-2009 21:00 1206621

Цитата:

Цитата Serega
что вы подразумеваете под словом регистр? »

забыл название, есть чекбоксы где можно несколько выбрать галок, а есть вроде радиокнопка, где можно выбрать один вариант (по нубски кружок с точкой вообщем :))

Serega 29-08-2009 21:37 1206645

AjaX_too, можно использовать страницу с дополнительными задачами, т.е. секция [Tasks]
Код:

[Tasks]
Name: chk1; Description: Ключ 1; GroupDescription: Дополнительно:
Name: chk2; Description: Ключ 2; GroupDescription: Дополнительно:

[Registry]
Root: HKCU; Subkey: Software\My Company1; Tasks: chk1; Flags: uninsdeletekeyifempty
Root: HKCU; Subkey: Software\My Company2; Tasks: chk2; Flags: uninsdeletekeyifempty


AjaX_too 29-08-2009 22:17 1206673

Вложений: 1
Serega, в принципе можно и так, только нужны не чекбоксы а радиобутоны.
нужно вот так:

Serega 29-08-2009 23:29 1206723

Цитата:

Цитата AjaX_too
нужно вот так »

добавьте для каждого элемента в секции [Tasks] флаг exclusive, т.е.:
Код:

[Tasks]
Name: chk1; Description: Ключ 1; GroupDescription: Дополнительно:; Flags: exclusive
Name: chk2; Description: Ключ 2; GroupDescription: Дополнительно:; Flags: exclusive


AjaX_too 29-08-2009 23:35 1206733

отлично, спасибо!

pa60t9ra 30-08-2009 17:39 1207155

Всем привет. На данный момент не атк много вопросов. :)
1. Как поставить фоновую музыку, чтобы проигрывало во время установки приложения.
2. Почему не все отображается в меню пуск, что прописано в секции [Icons]? А что и прописано. то не в той последовательности, как в самой секции.

Serega 30-08-2009 19:09 1207261

Цитата:

Цитата pa60t9ra
1. Как поставить фоновую музыку, чтобы проигрывало во время установки приложения. »

Воспользуйтесь Inno Setup GameScript Generator, ссылка есть в шапке темы.
Цитата:

Цитата pa60t9ra
Почему не все отображается в меню пуск, что прописано в секции [Icons]? »

Ошибка в 24 строке... скрипт покажите.

pa60t9ra 30-08-2009 20:07 1207342

читать дальше »

[Icons]

Name: "{group}\GreylinkDC++"; Filename: "{app}\greylink.exe"; Components: "all";
Name: "{group}\{cm:UninstallProgram,GreyLinkDC++}"; Filename: "{uninstallexe}"; Components: "all";

Name: "{group}\Help\"; Filename: "{app}\Help\FAQ.rtf"; Components: "all";
Name: "{group}\Help\"; Filename: "{app}\Help\Nastrojka DC++.chm"; Components: "all";

Name: "{group}\SSearch\"; Filename: "{app}\SSearch\SSearch.exe"; Components: "all";
Name: "{group}\SSearch\"; Filename: "{app}\SSearch\Hom\p_ssearch.html"; Components: "all";

Name: "{userdesktop}\GreylinkDC++"; Filename: "{app}\greylink.exe"; IconFilename: "{app}\greylink.exe"; Components: "all"; Tasks: "desktopicon";

Name: "{commonstartup}\GreylinkDC++"; Filename: "{app}\greylink.exe"; Components: "all"; Tasks: "AutoLaunch";
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\greylink.exe"; Filename: "{app}\greylink.exe"; Components: "all"; Tasks: "quicklaunchicon";


Некоторые в принципе то и отображаются-но абсолютно без имен...

Serega 30-08-2009 20:26 1207358

pa60t9ra, основная ошибка, в том, что одинаковых имён у ярлыков быть не может, т.е. один ярлык перезапишет другой с таким же именем. Так же нужно использовать WorkingDir, она говорит о папке расположения файла на который ссылается ярлык.
Пример
Код:

[Icons]
Name: {group}\GreylinkDC++; Filename: {app}\greylink.exe; WorkingDir: {app}; Components: all
Name: {group}\{cm:UninstallProgram,GreyLinkDC++}; Filename: {uninstallexe}; WorkingDir: {app}; Components: all

Name: {group}\Help_FAQ; Filename: {app}\Help\FAQ.rtf; WorkingDir: {app}\Help; Components: all
Name: {group}\Help_Nastrojka; Filename: {app}\Help\Nastrojka DC++.chm; WorkingDir: {app}\Help; Components: all

Name: {group}\SSearch; Filename: {app}\SSearch\SSearch.exe; WorkingDir: {app}\SSearch; Components: all
Name: {group}\SSearch_P; Filename: {app}\SSearch\Hom\p_ssearch.html; WorkingDir: {app}\SSearch\Hom; Components: all

Name: {userdesktop}\GreylinkDC++; Filename: {app}\greylink.exe; WorkingDir: {app}; IconFilename: {app}\greylink.exe; Components: all; Tasks: desktopicon

Name: {commonstartup}\GreylinkDC++; Filename: {app}\greylink.exe; WorkingDir: {app}; Components: all; Tasks: AutoLaunch
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\Greylink; Filename: {app}\greylink.exe; WorkingDir: {app}; Components: all; Tasks: quicklaunchicon


pa60t9ra 31-08-2009 20:51 1208186

Когда устанавливается программа, то сам мастер не прекращает работу до тех пор, пока потом саму прогу не закроешь.. С чем это связано?:(
И как сделать. чтобы в конце мастера установки появилсь окно с выбором запускаемых файлов? В частности не все файлы ехе-шные.

Serega 31-08-2009 21:02 1208195

Цитата:

Цитата pa60t9ra
Когда устанавливается программа, то сам мастер не прекращает работу до тех пор, пока потом саму прогу не закроешь.. С чем это связано? »

Опять приходится гадать...
Видимо в секции [Run] вы прописали запуск программы, без запроса об этом у пользователя и поставили флаг waituntilidle. Подробнее об этом флаге, можете прочитать в справке.
Цитата:

Цитата pa60t9ra
И как сделать. чтобы в конце мастера установки появилсь окно с выбором запускаемых файлов? »

Используйте в секции [Run] для файла котрый предлагается запустить флаг postinstall
Цитата:

Цитата pa60t9ra
В частности не все файлы ехе-шные. »

К этим файлам прибавьте флаг shellexec

Raf-9600 31-08-2009 21:57 1208245

А реально ли сделать так, чтоб допустим если выбран компонент Steam, то:
1. Инсталлятор предлагал установиться в {reg:HKLM\SOFTWARE\Valve\Steam,InstallPath|{pf}\ARPS}
2. Инсталлятор не предлагал (и не создавал) папку в меню Пуск.
3. Инсталлятор не создавал деинсталлятора.

А если выбран NoSteam, то:
1. Инсталлятор предлагал установиться в {pf}\Half-Life 2
2. Инсталлятор предлагал создание директории "Half-Life 2" в меню Пуск.
3. Инсталлятор создавал деинсталлятора. (после инсталляции)

Serega 31-08-2009 23:04 1208323

Цитата:

Цитата Raf-9600
А реально ли сделать так »

Я думаю, да.
1. В секции [Setup] в DefaultDirName делаете ссылку на функцию = {code:MyFunc}, которая возвращает путь в зависимости от выбранного компонента IsComponentSelected;
2. Думаю, придётся создавать страницу и в зависимости от выбора компонента показывать её или нет;
3. В секции [Setup] в Uninstallable делаете ссылку на функцию = {code:MyFunc2}, которая возвращает True или False в зависимости от выбранного компонента IsComponentSelected.

Raf-9600 31-08-2009 23:19 1208335

Serega, а Вы бы немогли бы написать скрипт, для реализации этого всего? :)
Знаю что наглею, но просто я не шарю в языках программирования... :blush2:

volk1234 31-08-2009 23:41 1208359

Пора создавать ветку - Стол заказов [скрипты]
:)

p3rf3ct1c 01-09-2009 18:04 1208974

volk1234, неплохая идея, а в шапке выложить уже существующие скрипты какие есть.

volk1234 01-09-2009 18:17 1208986

про стол заказов - думаю не сильно будет популярная ветка - ибо желающих, чтобы сделали за них много, а чтобы сделать за других раз два и обчелся...
Я предлогал Serega сделать шаблоны тех случаев которые он уже решал.
Но перелопатить тему на 1350 страниц это не из весёлых занятий, так что это
по его желанию. Если хотите помогите всем сделайте свою сборку скриптов - выложим ее в шапке :)

Serega 02-09-2009 01:29 1209259

Цитата:

Цитата Raf-9600
А реально ли сделать так »

Сделал, не совсем как вы хотели, т.е. сделал отдельную страницу с выбором Steam или NoSteam.
Пример
Код:

[Setup]
AppID={{9C9D1016-916D-40D5-B034-A0071759F1B7}
AppName=Half-Life 2
AppVerName=My Half-Life 2
DefaultDirName={pf}\Half-Life 2
DefaultGroupName=Half-Life 2
OutputDir=.
UninstallFilesDir={app}\UninstallDir

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

[CustomMessages]
INST_MODE=Режим установки
INST_MODE_CPT=Пожалуйста, выберите в каком режиме будет устанавливаться программа
INST_EXPR=Steam
INST_EXPR_STR=Установка программы с параметрами Steam.
INST_CUST=NoSteam
INST_CUST_STR=Установка программы с параметрами NoSteam.
NEXT=Нажмите «Далее», чтобы продолжить.

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion

[Icons]
Name: {group}\My Program; Filename: {app}\MyProg.exe; WorkingDir: {app}; Check: MyFuncIcons

[Code]
function GetModuleHandle(lpModuleName: LongInt): LongInt;
  external 'GetModuleHandleA@kernel32.dll stdcall';

function ExtractIcon(hInst: LongInt; lpszExeFileName: PChar; nIconIndex: LongInt): LongInt;
  external 'ExtractIconA@shell32.dll stdcall';

function DrawIconEx(hdc: LongInt; xLeft, yTop: Integer; hIcon: LongInt; cxWidth, cyWidth: Integer; istepIfAniCur, hbrFlickerFreeDraw, diFlags: LongInt): LongInt;
  external 'DrawIconEx@user32.dll stdcall';

var
  SupportPage: TWizardPage;
  Steam, NoSteam: TNewRadiobutton;
 
function MyFuncIcons: Boolean;
begin
  if Steam.Checked = True then
    Result:= False
  else Result:= True;
end;

procedure InitializeWizard();
var
  Str1, Str2, Str3: TNewStaticText;
  Rect: TRect;
  hIcon: LongInt;
begin
  SupportPage:= CreateCustomPage(wpWelcome, ExpandConstant('{cm:INST_MODE}'), ExpandConstant('{cm:INST_MODE_CPT}'));

  Steam:= TNewRadiobutton.Create(SupportPage);
  with Steam do
    begin
      SetBounds(ScaleX(20), ScaleY(40), ScaleX(200), ScaleY(16));
      Font.Style:= [fsBold];
      Caption:= ExpandConstant('{cm:INST_EXPR}');
      Checked:= True;
      Parent:= SupportPage.Surface;
    end;
 
  hIcon:= ExtractIcon(GetModuleHandle(0), ExpandConstant('{sys}\shell32.dll'), 118);
  with TBitmapImage.Create(SupportPage) do
    begin
      SetBounds(ScaleX(36), Steam.Top + ScaleY(20), ScaleX(32), ScaleY(32));
      with Bitmap do
        begin
          Width:= ScaleX(32);
          Height:= ScaleY(32);
          Rect.Right:= ScaleX(32);
          Rect.Bottom:= ScaleY(32);
          Rect.Left:= ScaleX(0);
          Rect.Top:= ScaleY(0);
          Canvas.Brush.Color:= clBtnFace;
          Canvas.FillRect(Rect);
          DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, 3);
        end;
      Parent:= SupportPage.Surface;
    end;

  Str1:= TNewStaticText.Create(SupportPage);
  with Str1 do
    begin
      SetBounds(ScaleX(78), Steam.Top + ScaleY(20), ScaleX(349), ScaleY(32));
      Autosize:= False;
      WordWrap:= True;
      Caption:= ExpandConstant('{cm:INST_EXPR_STR}');
      Parent:= SupportPage.Surface;
    end;
 
  NoSteam:= TNewRadiobutton.Create(SupportPage);
  with NoSteam do
    begin
      SetBounds(ScaleX(20), Str1.Top + ScaleY(52), ScaleX(200), ScaleY(16));
      Font.Style:= [fsBold];
      Caption:= ExpandConstant('{cm:INST_CUST}');
      Parent:= SupportPage.Surface;
    end;
 
  hIcon:= ExtractIcon(GetModuleHandle(0), ExpandConstant('{sys}\shell32.dll'), 119);
  with TBitmapImage.Create(SupportPage) do
    begin
      SetBounds(ScaleX(36), NoSteam.Top + ScaleY(20), ScaleX(32), ScaleY(32));
      with Bitmap do
        begin
          Width:= ScaleX(32);
          Height:= ScaleY(32);
          Rect.Right:= ScaleX(32);
          Rect.Bottom:= ScaleY(32);
          Rect.Left:= ScaleX(0);
          Rect.Top:= ScaleY(0);
          Canvas.Brush.Color:= clBtnFace;
          Canvas.FillRect(Rect);
          DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, 3);
        end;
      Parent:= SupportPage.Surface;
    end;
 
  Str2:= TNewStaticText.Create(SupportPage);
  with Str2 do
    begin
      SetBounds(ScaleX(78), NoSteam.Top + ScaleY(20), ScaleX(349), ScaleY(50));
      Autosize:= False;
      WordWrap:= True;
      Caption:= ExpandConstant('{cm:INST_CUST_STR}');
      Parent:= SupportPage.Surface;
    end;
   
  Str3:= TNewStaticText.Create(SupportPage);
  with Str3 do
    begin
      SetBounds(ScaleX(36), ScaleY(221), ScaleX(381), ScaleY(16));
      Autosize:= False;
      WordWrap:= True;
      Caption:= ExpandConstant('{cm:NEXT}');
      Parent:= SupportPage.Surface;
    end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpSelectDir then
    begin
      if Steam.Checked = True then
        WizardForm.DirEdit.Text:= ExpandConstant('{reg:HKLM\SOFTWARE\Valve\Steam,InstallPath|{pf}\ARPS}')
      else WizardForm.DirEdit.Text:= ExpandConstant('{pf}\Half-Life 2');
    end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  if PageID = wpSelectProgramGroup then
    begin
      if Steam.Checked = True then
        Result:= True;
    end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssDone then
    begin
      if Steam.Checked = True then
        begin
          DelTree(ExpandConstant('{app}\UninstallDir'), True, True, True);
          RegDeleteKeyIncludingSubkeys(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{9C9D1016-916D-40D5-B034-A0071759F1B7}_is1');
        end;
    end;
end;

function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo,
    MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;
var
  S: String;
begin
  S := S + ExpandConstant('{cm:INST_MODE}') + NewLine;
  if Steam.Checked = True then
    S := S + Space + ExpandConstant('{cm:INST_EXPR}') + NewLine + NewLine
  else
    S := S + Space + ExpandConstant('{cm:INST_CUST}') + NewLine + NewLine;
  S := S + MemoDirInfo + NewLine + Newline;
  S := S + MemoGroupInfo + NewLine + Newline;
  S := S + MemoTasksInfo + NewLine + NewLine;
  Result := S;
end;

{
 HINT: В режиме "Экспресс Режим" (Steam) может возникнуть ситуация, когда к примеру не хватает места
      на жестком диске, а страница выбора папки установки в "Экспресс Режиме" будет пропущена,
      в результате чего получится так, что установка сообщит о нехватке места уже в процессе
      копирования файлов.
}


pa60t9ra 02-09-2009 21:42 1209925

Как в диалоге выбора места установки прописать рекомендации? А то в Висте изза UAC-а не все пашет...

Serega 02-09-2009 23:36 1210003

Цитата:

Цитата pa60t9ra
Как в диалоге выбора места установки прописать рекомендации? А то в Висте изза UAC-а не все пашет... »

Висту, не знаю, но вот пример, с запретом установки в корень системного диска.
Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
var
  text: TLabel;

function NextButtonClick(CurPageID: Integer): Boolean;
var
  i, n: Integer;
  str: string;
begin
  Result:= True;
  if CurPageID = wpSelectDir then
    begin
      str:= WizardForm.DirEdit.Text;
      for i:= 1 to Length(str) do if str[i] = '\' then n:= n + 1;
      if (n = 1) and (Pos(ExpandConstant('{sd}'), WizardForm.DirEdit.Text) > 0) then
        begin
          text.Caption:= 'Внимание, в корень системного диска, устанавливать нельзя.';
          Result:= False;
        end
      else text.Caption:= '';
    end;
end;

procedure InitializeWizard();
begin
  text:= TLabel.Create(WizardForm);
  with text do
    begin
      SetBounds(WizardForm.DirEdit.Left,120,300,100);
      AutoSize:= True;
      Font.Style:= [fsBold];
      Font.Color:= clRed;
      Parent:= WizardForm.SelectDirPage;
    end;
end;


pa60t9ra 03-09-2009 19:32 1210693

Как сделать, чтобы пользователь выбирал что ему поставить? То есть 5 компонентов, и он хочет поставить и 1 и 3? А не только 1?

A1EXXX 05-09-2009 13:51 1212059

Вложений: 1
Поправил скрипт Ultimate Test (проверка системных требований) для инсталла с чёрным фоном + теперь распознаёт XP SP3, может кому пригодится...


Krekerpro 07-09-2009 03:10 1213015

Доброго времени суток,кто нибудь знает,как реализовать это http://clip2net.com/page/m0/1799727 http://clip2net.com/page/m0/1799737 http://clip2net.com/page/m0/1799740 ???

A1EXXX 07-09-2009 15:00 1213366

Krekerpro, репак BlackSelf'a ))) самому интересно, поэтому к вопросу могу только присоединиться!!!

Bond01 07-09-2009 22:11 1213632

Подскажите - после установки программы созданной inno - папка под ярлык в пуске получается с названием (Default), где можно подправить скрипт?, что-то немогу найти.

Habetdin 07-09-2009 22:20 1213640

Bond01, это задается параметром DefaultGroupName=<Имя_папки>, в секции [SETUP]

Bond01 07-09-2009 22:24 1213644

Habetdin, спасибо, а со вчерашним вопросом так и не разобрался. Эту распаковал она без ошибок собирается , вот только одна, а ту ни как немогу.

Habetdin 07-09-2009 22:35 1213651

Bond01, выложите скрин всего окна, а не только строки с той ошибкой

Bond01 07-09-2009 22:43 1213661

1 часть.

Код:

[Setup]
AppName=Glary Utilities
AppVerName=Glary Utilities 2.15.0.738
DefaultDirName={pf}\Glary Utilities
OutputBaseFilename=gusetupnew
Compression=lzma
LicenseFile=embedded\License.txt
WizardImageFile=embedded\WizardImage.bmp
WizardSmallImageFile=embedded\WizardSmallImage.bmp

[Files]
Source: "{app}\License.rtf"; DestDir: "{app}"; Flags: dontcopy
Source: "{app}\toolbar.bmp"; DestDir: "{app}"; Flags: dontcopy
Source: "{app}\askBarSetup.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "{app}\Integrator.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\diskanalysis.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\dupefinder.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\eff.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\iehelper.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\junkcleaner.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\memdefrag.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\regrepair.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\shortcutsfixer.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\shredder.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\startup.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\TracksEraser.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\uninstaller.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\procmgr.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\cmm.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\webupdate.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\fileencrypt.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\encryptexe.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\filesplitter.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\joinexe.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\winstd.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\oneclickoptimizer.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\undelete.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\initialize.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\regdefrag.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\gsd.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\FILEDEL.AVI"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\scan.avi"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\autodll.dll"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\lockdll.dll"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\ZipDll.dll"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\UnzDll.dll"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\ContextHandler.dll"; DestDir: "{app}"; Flags: restartreplace regserver uninsrestartdelete ignoreversion
Source: "{sys}\msscript.ocx"; DestDir: "{sys}"; Flags: uninsneveruninstall regserver onlyifdoesntexist
Source: "{app}\help,1.chm"; DestDir: "{app}"; DestName: "help.chm"; Flags: ignoreversion
Source: "{app}\help,2.chm"; DestDir: "{app}"; DestName: "help.chm"; Check: "Doit('french')"; Flags: ignoreversion
Source: "{app}\help,3.chm"; DestDir: "{app}"; DestName: "help.chm"; Check: "Doit('italian')"; Flags: ignoreversion
Source: "{app}\data\apps.dat"; DestDir: "{app}\data"; Flags: ignoreversion
Source: "{app}\data\duplicates.dat"; DestDir: "{app}\data"; Flags: ignoreversion
Source: "{app}\data\duplicatesfolder.dat"; DestDir: "{app}\data"; Flags: ignoreversion
Source: "{app}\data\empty.dat"; DestDir: "{app}\data"; Flags: ignoreversion
Source: "{app}\data\junk.dat"; DestDir: "{app}\data"; Flags: ignoreversion
Source: "{app}\data\junkInfo.ini"; DestDir: "{app}\data"; Flags: ignoreversion
Source: "{app}\data\startup.dat"; DestDir: "{app}\data"; Flags: ignoreversion
Source: "{app}\data\htmldata.dat"; DestDir: "{app}\data"; Flags: ignoreversion
Source: "{app}\data\process.dat"; DestDir: "{app}\data"; Flags: ignoreversion
Source: "{app}\data\procsubmit.dat"; DestDir: "{app}\data"; Flags: ignoreversion
Source: "{app}\data\xdata.dat"; DestDir: "{app}\data"; Flags: ignoreversion
Source: "{app}\data\xt.dat"; DestDir: "{app}\data"; Flags: ignoreversion
Source: "{app}\data\xb.dat"; DestDir: "{app}\data"; Flags: ignoreversion
Source: "{app}\data\registry.dat"; DestDir: "{app}\data"; Flags: ignoreversion
Source: "{app}\languages\english.lng"; DestDir: "{app}\languages"; Flags: ignoreversion
Source: "{app}\languages\chinese.lng"; DestDir: "{app}\languages"; Flags: ignoreversion
Source: "{app}\languages\russian.lng"; DestDir: "{app}\languages"; Flags: ignoreversion
Source: "{app}\languages\hungarian.lng"; DestDir: "{app}\languages"; Flags: ignoreversion
Source: "{app}\languages\polish.lng"; DestDir: "{app}\languages"; Flags: ignoreversion
Source: "{app}\languages\french.lng"; DestDir: "{app}\languages"; Flags: ignoreversion
Source: "{app}\languages\french2.lng"; DestDir: "{app}\languages"; Flags: ignoreversion
Source: "{app}\languages\turkish.lng"; DestDir: "{app}\languages"; Flags: ignoreversion
Source: "{app}\languages\Chinese(Traditional).lng"; DestDir: "{app}\languages"; Flags: ignoreversion
Source: "{app}\languages\italian.lng"; DestDir: "{app}\languages"; Flags: ignoreversion
Source: "{app}\languages\spanish.lng"; DestDir: "{app}\languages"; Flags: ignoreversion
Source: "{app}\languages\ptbr.lng"; DestDir: "{app}\languages"; Flags: ignoreversion
Source: "{app}\languages\Korean.lng"; DestDir: "{app}\languages"; Flags: ignoreversion
Source: "{app}\languages\dutch.lng"; DestDir: "{app}\languages"; Flags: ignoreversion
Source: "{app}\languages\German.lng"; DestDir: "{app}\languages"; Flags: ignoreversion
Source: "{app}\languages\japanese.lng"; DestDir: "{app}\languages"; Flags: ignoreversion
Source: "{app}\languages\Czech.lng"; DestDir: "{app}\languages"; Flags: ignoreversion
Source: "{app}\languages\romanian.lng"; DestDir: "{app}\languages"; Flags: ignoreversion
Source: "{app}\languages\albanian.lng"; DestDir: "{app}\languages"; Flags: ignoreversion
Source: "{app}\languages\catalan.lng"; DestDir: "{app}\languages"; Flags: ignoreversion
Source: "{app}\languages\ukrainian.lng"; DestDir: "{app}\languages"; Flags: ignoreversion
Source: "{app}\languages\hebrew.lng"; DestDir: "{app}\languages"; Flags: ignoreversion
Source: "{app}\languages\svenska.lng"; DestDir: "{app}\languages"; Flags: ignoreversion
Source: "{app}\languages\arabic.lng"; DestDir: "{app}\languages"; Flags: ignoreversion
Source: "{app}\languages\indonesian.lng"; DestDir: "{app}\languages"; Flags: ignoreversion
Source: "{app}\rtl70.bpl"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\vcl70.bpl"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\vclx70.bpl"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\vcljpg70.bpl"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\vclsmp70.bpl"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\dxComnD7.bpl"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\dxGDIPlusD7.bpl"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\dxThemeD7.bpl"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\cxLibraryVCLD7.bpl"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\dxBarD7.bpl"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\dxNavBarD7.bpl"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\pngD7.bpl"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\VirtualTreesD7.bpl"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\GUControlD7.bpl"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\GUTrayIconD7.bpl"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\skins\default\btn_close.png"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\default\btn_min.png"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\default\button.png"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\default\category2_b.png"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\default\category2_m.png"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\default\category2_t.png"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\default\category_o.png"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\default\category_t.png"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\default\line.png"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\default\longbutton.png"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\default\mainfree.png"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\default\mainpro.png"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\default\menu.png"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\default\modules.png"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\default\oneclick.png"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\default\skin.ini"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\default\Status.png"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\default\tab.png"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\Icons\1.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\2.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\3.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\4.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\5.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\brower assistant.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\context menu manager.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\disk analysis.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\duplicate files finder.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\empty folder finder.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\file encrypter.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\file secure delete.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\file splitter.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\file undelete.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\junk files cleaner.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\main.ico"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\memory defrag.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\process manager.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\registry cleaner.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\registry defrag.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\shortcuts fixer.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\startup manager.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\tracks eraser.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\uninstall manager.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\web updater.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\windows standard-functions.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\btn_close.png"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\btn_min.png"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\button.png"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\category2_b.png"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\category2_m.png"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\category2_t.png"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\category_o.png"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\category_t.png"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\line.png"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\longbutton.png"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\mainfree.png"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\mainpro.png"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\menu.png"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\modules.png"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\oneclick.png"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\skin.ini"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\Status.png"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\tab.png"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\Navy\btn_close.png"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion
Source: "{app}\skins\Navy\btn_min.png"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion
Source: "{app}\skins\Navy\button.png"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion
Source: "{app}\skins\Navy\category2_b.png"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion
Source: "{app}\skins\Navy\category2_m.png"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion
Source: "{app}\skins\Navy\category2_t.png"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion
Source: "{app}\skins\Navy\category_o.png"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion
Source: "{app}\skins\Navy\category_t.png"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion
Source: "{app}\skins\Navy\line.png"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion
Source: "{app}\skins\Navy\longbutton.png"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion
Source: "{app}\skins\Navy\mainfree.png"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion
Source: "{app}\skins\Navy\mainpro.png"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion
Source: "{app}\skins\Navy\menu.png"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion
Source: "{app}\skins\Navy\modules.png"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion
Source: "{app}\skins\Navy\oneclick.png"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion
Source: "{app}\skins\Navy\skin.ini"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion
Source: "{app}\skins\Navy\status.png"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion
Source: "{app}\skins\Navy\tab.png"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion

[Registry]
Root: HKCU; Subkey: "SOFTWARE\GlarySoft\Glary Utilities"; ValueName: "Language"; ValueType: String; ValueData: "{code:curLanguage}";
Root: HKCU; Subkey: "SOFTWARE\GlarySoft\Glary Utilities"; ValueName: "RefVersion"; ValueType: String; ValueData: "2009-08-18";
Root: HKCU; Subkey: "SOFTWARE\GlarySoft\Glary Utilities"; ValueName: "LngVersion"; ValueType: String; ValueData: "2009-08-18";
Root: HKCU; Subkey: "SOFTWARE\GlarySoft\Glary Utilities"; ValueName: "UpdateFile"; ValueType: String;
Root: HKCU; Subkey: "SOFTWARE\GlarySoft\Glary Utilities"; ValueName: "RootDir"; ValueType: String; ValueData: "{app}";
Root: HKCR; Subkey: ".gfe"; Flags: uninsdeletekey
Root: HKCR; Subkey: ".gfe"; ValueType: String; ValueData: "GU.Encrypted";
Root: HKCR; Subkey: "GU.Encrypted"; Flags: uninsdeletekey
Root: HKCR; Subkey: "GU.Encrypted"; ValueType: String; ValueData: "Glary Utilities Encrypted File";
Root: HKCR; Subkey: "GU.Encrypted\DefaultIcon";
Root: HKCR; Subkey: "GU.Encrypted\DefaultIcon"; ValueType: String; ValueData: "{app}\fileencrypt.exe,0";
Root: HKCR; Subkey: "GU.Encrypted\Shell";
Root: HKCR; Subkey: "GU.Encrypted\Shell\Open";
Root: HKCR; Subkey: "GU.Encrypted\Shell\Open\Command";
Root: HKCR; Subkey: "GU.Encrypted\Shell\Open\Command"; ValueType: String; ValueData: "{app}\fileencrypt.exe -d %1";
Root: HKCR; Subkey: ".gfs"; Flags: uninsdeletekey
Root: HKCR; Subkey: ".gfs"; ValueType: String; ValueData: "GU.Splitted";
Root: HKCR; Subkey: "GU.Splitted"; Flags: uninsdeletekey
Root: HKCR; Subkey: "GU.Splitted"; ValueType: String; ValueData: "Glary Utilities Splitted File";
Root: HKCR; Subkey: "GU.Splitted\DefaultIcon";
Root: HKCR; Subkey: "GU.Splitted\DefaultIcon"; ValueType: String; ValueData: "{app}\filesplitter.exe,0";
Root: HKCR; Subkey: "GU.Splitted\Shell";
Root: HKCR; Subkey: "GU.Splitted\Shell\Open";
Root: HKCR; Subkey: "GU.Splitted\Shell\Open\Command";
Root: HKCR; Subkey: "GU.Splitted\Shell\Open\Command"; ValueType: String; ValueData: "{app}\filesplitter.exe -j %1";

Далее "Run" во второй части.

2 части и скрипт в архиве прикрепил.

Bond01 07-09-2009 22:44 1213662

2 часть.

Код:

[Run]
Filename: "{app}\Integrator.exe"; Description: "{cm:LaunchProgram,Glary Utilities}";
Filename: "{app}\initialize.exe"; Parameters: "/setupschedule";

[Icons]
Name: "{group}\Glary Utilities"; Filename: "{app}\Integrator.exe";
Name: "{group}\{cm:UninstallProgram,Glary Utilities}"; Filename: "{uninstallexe}";
Name: "{userdesktop}\Glary Utilities"; Filename: "{app}\Integrator.exe"; Tasks: "desktopicon";
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\Glary Utilities"; Filename: "{app}\Integrator.exe"; Tasks: "quicklaunchicon";

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

[CustomMessages]
en.NameAndVersion=%1 version %2
en.AdditionalIcons=Additional icons:
en.CreateDesktopIcon=Create a &desktop icon
en.CreateQuickLaunchIcon=Create a &Quick Launch icon
en.ProgramOnTheWeb=%1 on the Web
en.UninstallProgram=Uninstall %1
en.LaunchProgram=Launch %1
en.AssocFileExtension=&Associate %1 with the %2 file extension
en.AssocingFileExtension=Associating %1 with the %2 file extension...
fr.NameAndVersion=%1 version %2
fr.AdditionalIcons=Icônes supplémentaires :
fr.CreateDesktopIcon=Créer une icône sur le &Bureau
fr.CreateQuickLaunchIcon=Créer une icône dans la barre de &Lancement rapide
fr.ProgramOnTheWeb=Page d'accueil de %1
fr.UninstallProgram=Désinstaller %1
fr.LaunchProgram=Exécuter %1
fr.AssocFileExtension=&Associer %1 avec l'extension de fichier %2
fr.AssocingFileExtension=Associe %1 avec l'extension de fichier %2...
cn.NameAndVersion=%1 °æ±¾ %2
cn.AdditionalIcons=¸½¼Óͼ±ê:
cn.CreateDesktopIcon=ÔÚ×ÀÃæ´´½¨Í¼±ê(&d)
cn.CreateQuickLaunchIcon=ÔÚ¿ì½ÝÆô¶¯À¸´´½¨Í¼±ê(&Q)
cn.ProgramOnTheWeb=ÍøÂçÉ쵀 %1
cn.UninstallProgram=жÔØ %1
cn.LaunchProgram=ÔËÐÐ %1
cn.AssocFileExtension=½« %1 ÓëÀ©Õ¹Ãû %2 Á¬½Ó(&A)
cn.AssocingFileExtension=ÕýÔÚ½« %1 ÓëÀ©Õ¹Ãû %2 Á¬½Ó...
hu.NameAndVersion=%1 %2 verzió
hu.AdditionalIcons=További ikonok:
hu.CreateDesktopIcon=Ikon létrehozása az &Asztalon
hu.CreateQuickLaunchIcon=Ikon létrehozása a &Gyorsindítás eszköztáron
hu.ProgramOnTheWeb=%1 a weben
hu.UninstallProgram=%1 eltávolítása
hu.LaunchProgram=%1 elindítása
hu.AssocFileExtension=A(z) %1 &társítása a(z) %2 fájlkiterjesztéssel
hu.AssocingFileExtension=A(z) %1 társítása a(z) %2 fájlkiterjesztéssel...
ru.NameAndVersion=%1, âåðñèÿ %2
ru.AdditionalIcons=Äîïîëíèòåëüíûå çíà÷êè:
ru.CreateDesktopIcon=Ñîçäàòü çíà÷îê íà &Ðàáî÷åì ñòîëå
ru.CreateQuickLaunchIcon=Ñîçäàòü çíà÷îê â &Ïàíåëè áûñòðîãî çàïóñêà
ru.ProgramOnTheWeb=Ñàéò %1 â Èíòåðíåòå
ru.UninstallProgram=Äåèíñòàëëèðîâàòü %1
ru.LaunchProgram=Çàïóñòèòü %1
ru.AssocFileExtension=Ñâ&ÿçàòü %1 ñ ôàéëàìè, èìåþùèìè ðàñøèðåíèå %2
ru.AssocingFileExtension=Ñâÿçûâàíèå %1 ñ ôàéëàìè %2...
pl.NameAndVersion=%1 wersja %2
pl.AdditionalIcons=Dodatkowe ikony:
pl.CreateDesktopIcon=Utwórz ikonê na &pulpicie
pl.CreateQuickLaunchIcon=Utwórz ikonê na pasku &szybkiego uruchamiania
pl.ProgramOnTheWeb=Strona WWW programu %1
pl.UninstallProgram=Deinstalacja programu %1
pl.LaunchProgram=Uruchom program %1
pl.AssocFileExtension=&Przypisz program %1 do rozszerzenia pliku %2
pl.AssocingFileExtension=Przypisywanie programu %1 do rozszerzenia pliku %2...
tr.NameAndVersion=%1 %2 sürümü
tr.AdditionalIcons=Ek simgeler:
tr.CreateDesktopIcon=Masaüstü simg&esi oluþtur
tr.CreateQuickLaunchIcon=Hýzlý Baþlat simgesi &oluþtur
tr.ProgramOnTheWeb=%1 Web Sitesi
tr.UninstallProgram=%1 Programýný Kaldýr
tr.LaunchProgram=%1 Programýný Çalýþtýr
tr.AssocFileExtension=%2 dosya uzantýlarýný %1 ile iliþkilendir
tr.AssocingFileExtension=%2 dosya uzantýlarý %1 ile iliþkilendiriliyor...
ct.NameAndVersion=%1 ª©¥» %2
ct.AdditionalIcons=ªþ¥[¹Ï¥Ü:
ct.CreateDesktopIcon=«Ø¥ß®à*±¹Ï¥Ü(&D)
ct.CreateQuickLaunchIcon=«Ø¥ß§Ö³t±Ò°Ê¹Ï¥Ü(&Q)
ct.ProgramOnTheWeb=%1 ªººô¯¸
ct.UninstallProgram=¸Ñ°£¦w¸Ë %1
ct.LaunchProgram=±Ò°Ê %1
ct.AssocFileExtension=±N %1 »PÀÉ®×°ÆÀɦW %2 ²£¥ÍÃöÁp(&A)
ct.AssocingFileExtension=¥¿¦b±N %1 »PÀÉ®×°ÆÀɦW %2 ²£¥ÍÃöÁp...
it.NameAndVersion=%1 versione %2
it.AdditionalIcons=Icone aggiuntive:
it.CreateDesktopIcon=Crea un'icona sul &desktop
it.CreateQuickLaunchIcon=Crea un'icona nella barra &Avvio veloce
it.ProgramOnTheWeb=%1 sul Web
it.UninstallProgram=Disinstalla %1
it.LaunchProgram=Avvia %1
it.AssocFileExtension=&Associa l'estensione %2 a %1
it.AssocingFileExtension=Associazione dell'estensione %2 a %1 in corso...
sp.NameAndVersion=%1 versión %2
sp.AdditionalIcons=Iconos adicionales:
sp.CreateDesktopIcon=Crear un icono en el &escritorio
sp.CreateQuickLaunchIcon=Crear un icono de Inicio Rápido
sp.ProgramOnTheWeb=%1 en la Web
sp.UninstallProgram=Desinstalar %1
sp.LaunchProgram=Ejecutar %1
sp.AssocFileExtension=&Asociar %1 con la extensión de archivo %2
sp.AssocingFileExtension=Asociando %1 con la extensión de archivo %2...
bp.NameAndVersion=%1 versão %2
bp.AdditionalIcons=Ícones adicionais:
bp.CreateDesktopIcon=Criar um ícone na &Área de Trabalho
bp.CreateQuickLaunchIcon=Criar um ícone na &Barra de Inicialização Rápida
bp.ProgramOnTheWeb=%1 na Internet
bp.UninstallProgram=Desinstalar %1
bp.LaunchProgram=Executar %1
bp.AssocFileExtension=&Associar %1 com a extensão de arquivo %2
bp.AssocingFileExtension=Associando %1 com a extensão de arquivo...
kr.NameAndVersion=%1 ¹öÀü %2
kr.AdditionalIcons=¾ÆÀÌÄÜ »ý¼º:
kr.CreateDesktopIcon=¹ÙÅÁ È*¸é¿¡ ¾ÆÀÌÄÜ »ý¼º(&D)
kr.CreateQuickLaunchIcon=ºü¸¥ ½ÇÇà¿¡ ¾ÆÀÌÄÜ »ý¼º(&Q)
kr.ProgramOnTheWeb=À¥ »óÀÇ %1
kr.UninstallProgram=%1 Á¦°Å
kr.LaunchProgram=%1 ½ÇÇà
kr.AssocFileExtension=%2 È®ÀåÀÚ¸¦ %1 ¿¡ ¿¬°á(&A)
kr.AssocingFileExtension=%2 È®ÀåÀÚ¸¦ %1 ¿¡ ¿¬°á Áß...
nl.NameAndVersion=%1 versie %2
nl.AdditionalIcons=Extra snelkoppelingen:
nl.CreateDesktopIcon=Maak een snelkoppeling op het &bureaublad
nl.CreateQuickLaunchIcon=Maak een snelkoppeling op de &Snel starten werkbalk
nl.ProgramOnTheWeb=%1 op het Web
nl.UninstallProgram=Verwijder %1
nl.LaunchProgram=&Start %1
nl.AssocFileExtension=&Koppel %1 aan de %2 bestandsextensie
nl.AssocingFileExtension=Bezig met koppelen van %1 aan de %2 bestandsextensie...
de.NameAndVersion=%1 Version %2
de.AdditionalIcons=Zusätzliche Symbole:
de.CreateDesktopIcon=&Desktop-Symbol erstellen
de.CreateQuickLaunchIcon=Symbol in der Schnellstartleiste erstellen
de.ProgramOnTheWeb=%1 im Internet
de.UninstallProgram=%1 entfernen
de.LaunchProgram=%1 starten
de.AssocFileExtension=&Registriere %1 mit der %2-Dateierweiterung
de.AssocingFileExtension=%1 wird mit der %2-Dateierweiterung registriert...
jp.NameAndVersion=%1 ƒo�[ƒWƒ‡ƒ“ %2
jp.AdditionalIcons=ƒAƒCƒRƒ“‚ð’ljÁ‚·‚é:
jp.CreateDesktopIcon=ƒfƒXƒNƒgƒbƒv�ã‚ɃAƒCƒRƒ“‚ð�ì�¬‚·‚é(&d)
jp.CreateQuickLaunchIcon=&Quick Launch ƒAƒCƒRƒ“‚ð�ì�¬‚·‚é
jp.ProgramOnTheWeb=%1 on the Web
jp.UninstallProgram=%1 ‚ðƒAƒ“ƒCƒ“ƒXƒg�[ƒ‹‚·‚é
jp.LaunchProgram=%1 ‚ðŽÀ�s‚·‚é
jp.AssocFileExtension=%2 ƒtƒ@ƒCƒ‹Šg’£‚É %1‚ðŠÖ˜A•t‚¯‚Ü‚·�B
jp.AssocingFileExtension=%2 ‚É %1‚ðŠÖ˜A•t‚¯‚Ü‚·�B
cz.NameAndVersion=%1 verze %2
cz.AdditionalIcons=Další zástupci:
cz.CreateDesktopIcon=Vytvoøit zástupce na &ploše
cz.CreateQuickLaunchIcon=Vytvoøit zástupce na panelu &Snadné spuštìní
cz.ProgramOnTheWeb=Aplikace %1 na internetu
cz.UninstallProgram=Odinstalovat aplikaci %1
cz.LaunchProgram=Spustit aplikaci %1
cz.AssocFileExtension=Vytvoøit &asociaci mezi soubory typu %2 a aplikací %1
cz.AssocingFileExtension=Vytváøí se asociace mezi soubory typu %2 a aplikací %1...
ro.NameAndVersion=%1 versiunea %2
ro.AdditionalIcons=Icon-uri aditionale:
ro.CreateDesktopIcon=Creaza icon pe &desktop
ro.CreateQuickLaunchIcon=Creaza icon in bara &Quick Launch
ro.ProgramOnTheWeb=%1 pe Web
ro.UninstallProgram=Dezinstalez aplicatia %1
ro.LaunchProgram=Lansez aplicatia %1
ro.AssocFileExtension=&Asociez aplicatia %1 la extensia de fisier %2
ro.AssocingFileExtension=Procedez la asocierea aplicatiei %1 la extensia de fisier %2
cat.NameAndVersion=%1 versió %2
cat.AdditionalIcons=Icones addicionals:
cat.CreateDesktopIcon=Crea una icona a l'&Escriptori
cat.CreateQuickLaunchIcon=Crea una icona a la &Barra de tasques
cat.ProgramOnTheWeb=%1 a Internet
cat.UninstallProgram=Desinstal·la %1
cat.LaunchProgram=Obre %1
cat.AssocFileExtension=&Associa %1 amb l'extensió de fitxer %2
cat.AssocingFileExtension=Associant %1 amb l'extensió de fitxer %2...
al.NameAndVersion=%1 version %2
al.AdditionalIcons=Ikona shtesë:
al.CreateDesktopIcon=Krijo ikonë në &desktop
al.CreateQuickLaunchIcon=Krijo ikonë në &Quick Launch
al.ProgramOnTheWeb=%1 në Rrjet
al.UninstallProgram=Çinstalo %1
al.LaunchProgram=Lësho %1
al.AssocFileExtension=&Shoqëro %1 me shtojcën e skedës %2
al.AssocingFileExtension=Po shoqëroj %1 me shtojcën e skedës %2...
u.NameAndVersion=%1, âåðñ³ÿ %2
u.AdditionalIcons=Äîäàòêîâ³ ÿðëèêè:
u.CreateDesktopIcon=Ñòâîðèòè ÿðëèêè íà &Ðîáî÷îìó ñòîë³
u.CreateQuickLaunchIcon=Ñòâîðèòè ÿðëèêè ó &Ïàíåë³ øâèäêîãî ñòàðòó
u.ProgramOnTheWeb=Ñàéò %1 â ²íòåðíåò³
u.UninstallProgram=Äå³íñòàëþâàòè %1
u.LaunchProgram=Çàïóñòèòè %1
u.AssocFileExtension=Çâ&'ÿçàòè %1 ç ôàéëàìè, ùî ìàþòü ðîçøèðåííÿ  %2
u.AssocingFileExtension=Çâ'ÿçóâàííÿ %1 ç ôàéëàìè %2...
il.NameAndVersion=%1 âéøñä %2
il.AdditionalIcons=ñéîìåðéí ðåñôéí:
il.CreateDesktopIcon=öåø ÷éöåø ãøê òì &ùåìçï äòáåãä
il.CreateQuickLaunchIcon=öåø ñéîìåï áùåøú ääøöä äîäéøä
il.ProgramOnTheWeb=%1 áøùú
il.UninstallProgram=äñø àú %1
il.LaunchProgram=äôòì %1
il.AssocFileExtension=&÷ùø àú %1 òí ñéåîú ä÷åáõ %2
il.AssocingFileExtension=î÷ùø àú %1 òí ñéåîú ä÷åáõ %2
sv.NameAndVersion=%1 version %2
sv.AdditionalIcons=Återstående ikoner:
sv.CreateDesktopIcon=Skapa en ikon på skrivbordet
sv.CreateQuickLaunchIcon=Skapa en ikon i Snabbstartfältet
sv.ProgramOnTheWeb=%1 på Webben
sv.UninstallProgram=Avinstallera %1
sv.LaunchProgram=Starta %1
sv.AssocFileExtension=Associera %1 med %2 filnamnstillägg
sv.AssocingFileExtension=Associerar %1 med %2 filnamnstillägg...
ar.NameAndVersion=%1 ÇáäÓÎÉ %2
ar.AdditionalIcons=ÑãæÒ ÅÖÇÝíÉ :
ar.CreateDesktopIcon=ÅäÔÇÁ ÃíÞæäÉ Úáì ÓØÍ ÇáãßÊÈ :
ar.CreateQuickLaunchIcon=ÅäÔÇÁ ÃíÞæäÉ ÅØáÇÞ ÓÑíÚ ÈÌæÇÑ ÇÈÏÃ
ar.ProgramOnTheWeb=%1 Úáì ÇáÅäÊÑäÊ
ar.UninstallProgram=%1 ÅáÛÇÁ ÊËÈíÊ
ar.LaunchProgram=%1 ÊÔÛíá
ar.AssocFileExtension=ÅÔÑÇß %1 ãÚ ÅãÊÏÇÏ ãáÝ %2
ar.AssocingFileExtension=íÊã ÅÔÑÇß %1 ãÚ ÅãÊÏÇÏ ãáÝ %2 ...
aa_Caption=Install Ask Toolbar
aa_Description=The Toolbar makes Web browsing more convenient. Search the Web with Ask from any site, Block annoying pop-up ads
aa_CheckBox1_Caption0=I accept the license agreement and want to install the free Ask Toolbar
aa_CheckBox2_Caption0=Set Ask as the default search engine
aa_CheckBox3_Caption0=Set Ask.com as my homepage

[Languages]
; These files are stubs
; To achieve better results after recompilation, use the real language files
Name: "en"; MessagesFile: "embedded\en.isl";
Name: "fr"; MessagesFile: "embedded\fr.isl";
Name: "cn"; MessagesFile: "embedded\cn.isl";
Name: "hu"; MessagesFile: "embedded\hu.isl";
Name: "ru"; MessagesFile: "embedded\ru.isl";
Name: "pl"; MessagesFile: "embedded\pl.isl";
Name: "tr"; MessagesFile: "embedded\tr.isl";
Name: "ct"; MessagesFile: "embedded\ct.isl";
Name: "it"; MessagesFile: "embedded\it.isl";
Name: "sp"; MessagesFile: "embedded\sp.isl";
Name: "bp"; MessagesFile: "embedded\bp.isl";
Name: "kr"; MessagesFile: "embedded\kr.isl";
Name: "nl"; MessagesFile: "embedded\nl.isl";
Name: "de"; MessagesFile: "embedded\de.isl";
Name: "jp"; MessagesFile: "embedded\jp.isl";
Name: "cz"; MessagesFile: "embedded\cz.isl";
Name: "ro"; MessagesFile: "embedded\ro.isl";
Name: "cat"; MessagesFile: "embedded\cat.isl";
Name: "al"; MessagesFile: "embedded\al.isl";
Name: "u"; MessagesFile: "embedded\u.isl";
Name: "il"; MessagesFile: "embedded\il.isl";
Name: "sv"; MessagesFile: "embedded\sv.isl";
Name: "ar"; MessagesFile: "embedded\ar.isl";


Habetdin 07-09-2009 22:58 1213676

Bond01, в скрипте должна быть функция определения языка, вроде этого:
[code]
Код:

function curLanguage(Param: String): String;
begin
  <тут_код>
end;

Но при распаковке функция "теряется"
Можно обойтись заменой {code:curLanguage} в той строке на russian.lng

Bond01 07-09-2009 23:10 1213689

Невнимательность губит всех, и пришлось удалить help файлы, с ними ошибки еще были. Тестирую...
__________________________________________________________________________________
Ошибки выдает, при запуске установленной программы, я удалили только askbar, может из-за этого?

Habetdin 08-09-2009 00:08 1213733

Bond01, дайте ссылку на сайт программы

Bond01 08-09-2009 00:10 1213734

http://www.glaryutilities.com/ Glary Utilities 100% freeware

Habetdin 08-09-2009 00:37 1213738

Bond01, перепаковал Glary Utilities Free v2.15.0.738, удалил AskBar + ненужные языки (остались только русский, англ. и украинский)
P.S.: после установки программа не запусается, так что можно устанавливать "тихо"
Скачать

Bond01 08-09-2009 00:39 1213739

Мне интересно, что там изменил?

Habetdin 08-09-2009 00:48 1213746

Bond01, удалил askBarSetup.exe, toolbar.bmp, License.rtf - файлы, отвечающие за тулбар; удалил help,2.chm и help,3.chm - французскую и итальянскую справки; удалил все из папки languages, кроме english.lng, russian.lng, ukrainian.lng. Потом заменил файлы-пустышки в папке embedded (еn.isl и ru.isl) на реальные.
Поправил скрипт, чтобы программа не запускалась по окончании установки, поправил curLanguage на russian.lng. Почистил "мусор", задал значение DefaultGroupName.
Вот и все :)
Скрипт:
Код:

[Setup]
AppName=Glary Utilities
AppVerName=Glary Utilities 2.15.0.738
DefaultDirName={pf}\Glary Utilities
DefaultGroupName=Glary Utilities
OutputBaseFilename=gusetupnew
Compression=lzma
LicenseFile=embedded\License.txt
WizardImageFile=embedded\WizardImage.bmp
WizardSmallImageFile=embedded\WizardSmallImage.bmp

[Files]
Source: "{app}\Integrator.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\diskanalysis.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\dupefinder.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\eff.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\iehelper.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\junkcleaner.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\memdefrag.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\regrepair.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\shortcutsfixer.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\shredder.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\startup.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\TracksEraser.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\uninstaller.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\procmgr.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\cmm.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\webupdate.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\fileencrypt.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\encryptexe.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\filesplitter.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\joinexe.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\winstd.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\oneclickoptimizer.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\undelete.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\initialize.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\regdefrag.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\gsd.exe"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\FILEDEL.AVI"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\scan.avi"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\autodll.dll"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\lockdll.dll"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\ZipDll.dll"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\UnzDll.dll"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\ContextHandler.dll"; DestDir: "{app}"; Flags: restartreplace regserver uninsrestartdelete ignoreversion
Source: "{sys}\msscript.ocx"; DestDir: "{sys}"; Flags: uninsneveruninstall regserver onlyifdoesntexist
Source: "{app}\help.chm"; DestDir: "{app}"; DestName: "help.chm"; Flags: ignoreversion
Source: "{app}\data\apps.dat"; DestDir: "{app}\data"; Flags: ignoreversion
Source: "{app}\data\duplicates.dat"; DestDir: "{app}\data"; Flags: ignoreversion
Source: "{app}\data\duplicatesfolder.dat"; DestDir: "{app}\data"; Flags: ignoreversion
Source: "{app}\data\empty.dat"; DestDir: "{app}\data"; Flags: ignoreversion
Source: "{app}\data\junk.dat"; DestDir: "{app}\data"; Flags: ignoreversion
Source: "{app}\data\junkInfo.ini"; DestDir: "{app}\data"; Flags: ignoreversion
Source: "{app}\data\startup.dat"; DestDir: "{app}\data"; Flags: ignoreversion
Source: "{app}\data\htmldata.dat"; DestDir: "{app}\data"; Flags: ignoreversion
Source: "{app}\data\process.dat"; DestDir: "{app}\data"; Flags: ignoreversion
Source: "{app}\data\procsubmit.dat"; DestDir: "{app}\data"; Flags: ignoreversion
Source: "{app}\data\xdata.dat"; DestDir: "{app}\data"; Flags: ignoreversion
Source: "{app}\data\xt.dat"; DestDir: "{app}\data"; Flags: ignoreversion
Source: "{app}\data\xb.dat"; DestDir: "{app}\data"; Flags: ignoreversion
Source: "{app}\data\registry.dat"; DestDir: "{app}\data"; Flags: ignoreversion
Source: "{app}\languages\english.lng"; DestDir: "{app}\languages"; Flags: ignoreversion
Source: "{app}\languages\russian.lng"; DestDir: "{app}\languages"; Flags: ignoreversion
Source: "{app}\languages\ukrainian.lng"; DestDir: "{app}\languages"; Flags: ignoreversion
Source: "{app}\rtl70.bpl"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\vcl70.bpl"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\vclx70.bpl"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\vcljpg70.bpl"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\vclsmp70.bpl"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\dxComnD7.bpl"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\dxGDIPlusD7.bpl"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\dxThemeD7.bpl"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\cxLibraryVCLD7.bpl"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\dxBarD7.bpl"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\dxNavBarD7.bpl"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\pngD7.bpl"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\VirtualTreesD7.bpl"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\GUControlD7.bpl"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\GUTrayIconD7.bpl"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\skins\default\btn_close.png"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\default\btn_min.png"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\default\button.png"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\default\category2_b.png"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\default\category2_m.png"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\default\category2_t.png"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\default\category_o.png"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\default\category_t.png"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\default\line.png"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\default\longbutton.png"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\default\mainfree.png"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\default\mainpro.png"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\default\menu.png"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\default\modules.png"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\default\oneclick.png"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\default\skin.ini"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\default\Status.png"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\default\tab.png"; DestDir: "{app}\skins\default"; Flags: ignoreversion
Source: "{app}\skins\Icons\1.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\2.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\3.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\4.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\5.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\brower assistant.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\context menu manager.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\disk analysis.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\duplicate files finder.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\empty folder finder.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\file encrypter.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\file secure delete.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\file splitter.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\file undelete.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\junk files cleaner.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\main.ico"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\memory defrag.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\process manager.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\registry cleaner.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\registry defrag.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\shortcuts fixer.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\startup manager.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\tracks eraser.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\uninstall manager.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\web updater.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\Icons\windows standard-functions.png"; DestDir: "{app}\skins\Icons"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\btn_close.png"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\btn_min.png"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\button.png"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\category2_b.png"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\category2_m.png"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\category2_t.png"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\category_o.png"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\category_t.png"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\line.png"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\longbutton.png"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\mainfree.png"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\mainpro.png"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\menu.png"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\modules.png"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\oneclick.png"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\skin.ini"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\Status.png"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\LawnGreen\tab.png"; DestDir: "{app}\skins\LawnGreen"; Flags: ignoreversion
Source: "{app}\skins\Navy\btn_close.png"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion
Source: "{app}\skins\Navy\btn_min.png"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion
Source: "{app}\skins\Navy\button.png"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion
Source: "{app}\skins\Navy\category2_b.png"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion
Source: "{app}\skins\Navy\category2_m.png"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion
Source: "{app}\skins\Navy\category2_t.png"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion
Source: "{app}\skins\Navy\category_o.png"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion
Source: "{app}\skins\Navy\category_t.png"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion
Source: "{app}\skins\Navy\line.png"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion
Source: "{app}\skins\Navy\longbutton.png"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion
Source: "{app}\skins\Navy\mainfree.png"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion
Source: "{app}\skins\Navy\mainpro.png"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion
Source: "{app}\skins\Navy\menu.png"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion
Source: "{app}\skins\Navy\modules.png"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion
Source: "{app}\skins\Navy\oneclick.png"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion
Source: "{app}\skins\Navy\skin.ini"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion
Source: "{app}\skins\Navy\status.png"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion
Source: "{app}\skins\Navy\tab.png"; DestDir: "{app}\skins\Navy"; Flags: ignoreversion

[Registry]
Root: HKCU; Subkey: "SOFTWARE\GlarySoft\Glary Utilities"; ValueName: "Language"; ValueType: String; ValueData: "russian.lng";
Root: HKCU; Subkey: "SOFTWARE\GlarySoft\Glary Utilities"; ValueName: "RefVersion"; ValueType: String; ValueData: "2009-08-18";
Root: HKCU; Subkey: "SOFTWARE\GlarySoft\Glary Utilities"; ValueName: "LngVersion"; ValueType: String; ValueData: "2009-08-18";
Root: HKCU; Subkey: "SOFTWARE\GlarySoft\Glary Utilities"; ValueName: "UpdateFile"; ValueType: String;
Root: HKCU; Subkey: "SOFTWARE\GlarySoft\Glary Utilities"; ValueName: "RootDir"; ValueType: String; ValueData: "{app}";
Root: HKCR; Subkey: ".gfe"; Flags: uninsdeletekey
Root: HKCR; Subkey: ".gfe"; ValueType: String; ValueData: "GU.Encrypted";
Root: HKCR; Subkey: "GU.Encrypted"; Flags: uninsdeletekey
Root: HKCR; Subkey: "GU.Encrypted"; ValueType: String; ValueData: "Glary Utilities Encrypted File";
Root: HKCR; Subkey: "GU.Encrypted\DefaultIcon";
Root: HKCR; Subkey: "GU.Encrypted\DefaultIcon"; ValueType: String; ValueData: "{app}\fileencrypt.exe,0";
Root: HKCR; Subkey: "GU.Encrypted\Shell";
Root: HKCR; Subkey: "GU.Encrypted\Shell\Open";
Root: HKCR; Subkey: "GU.Encrypted\Shell\Open\Command";
Root: HKCR; Subkey: "GU.Encrypted\Shell\Open\Command"; ValueType: String; ValueData: "{app}\fileencrypt.exe -d %1";
Root: HKCR; Subkey: ".gfs"; Flags: uninsdeletekey
Root: HKCR; Subkey: ".gfs"; ValueType: String; ValueData: "GU.Splitted";
Root: HKCR; Subkey: "GU.Splitted"; Flags: uninsdeletekey
Root: HKCR; Subkey: "GU.Splitted"; ValueType: String; ValueData: "Glary Utilities Splitted File";
Root: HKCR; Subkey: "GU.Splitted\DefaultIcon";
Root: HKCR; Subkey: "GU.Splitted\DefaultIcon"; ValueType: String; ValueData: "{app}\filesplitter.exe,0";
Root: HKCR; Subkey: "GU.Splitted\Shell";
Root: HKCR; Subkey: "GU.Splitted\Shell\Open";
Root: HKCR; Subkey: "GU.Splitted\Shell\Open\Command";
Root: HKCR; Subkey: "GU.Splitted\Shell\Open\Command"; ValueType: String; ValueData: "{app}\filesplitter.exe -j %1";

[Run]
;Filename: "{app}\Integrator.exe"; Description: "{cm:LaunchProgram,Glary Utilities}";
Filename: "{app}\initialize.exe"; Parameters: "/setupschedule";

[Icons]
Name: "{group}\Glary Utilities"; Filename: "{app}\Integrator.exe";
Name: "{group}\{cm:UninstallProgram,Glary Utilities}"; Filename: "{uninstallexe}";
Name: "{userdesktop}\Glary Utilities"; Filename: "{app}\Integrator.exe"; Tasks: "desktopicon";
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\Glary Utilities"; Filename: "{app}\Integrator.exe"; Tasks: "quicklaunchicon";

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

[CustomMessages]
en.NameAndVersion=%1 version %2
en.AdditionalIcons=Additional icons:
en.CreateDesktopIcon=Create a &desktop icon
en.CreateQuickLaunchIcon=Create a &Quick Launch icon
en.ProgramOnTheWeb=%1 on the Web
en.UninstallProgram=Uninstall %1
en.LaunchProgram=Launch %1
en.AssocFileExtension=&Associate %1 with the %2 file extension
en.AssocingFileExtension=Associating %1 with the %2 file extension...
ru.NameAndVersion=%1, версия %2
ru.AdditionalIcons=Дополнительные значки:
ru.CreateDesktopIcon=Создать значок на &Рабочем столе
ru.CreateQuickLaunchIcon=Создать значок в &Панели быстрого запуска
ru.ProgramOnTheWeb=Сайт %1 в Интернете
ru.UninstallProgram=Деинсталлировать %1
ru.LaunchProgram=Запустить %1
ru.AssocFileExtension=Св&язать %1 с файлами, имеющими расширение %2
ru.AssocingFileExtension=Связывание %1 с файлами %2...

[Languages]
Name: "en"; MessagesFile: "embedded\en.isl";
Name: "ru"; MessagesFile: "embedded\ru.isl";


Bond01 08-09-2009 00:51 1213747

плин, быстро ты, здорово. И скрипт влез. :lol:
_____
Еще хочу спросить, существует какой-нибудь шаблон или шпаргалка, чтоб смотреть по ней и учиться?

Habetdin 08-09-2009 17:27 1214199

Bond01,
Цитата:

Цитата Bond01
Еще хочу спросить, существует какой-нибудь шаблон или шпаргалка, чтоб смотреть по ней и учиться? »

Можно искать в этой теме, либо в архиве старой
Цитата:

Цитата Serega
Архив предыдущей темы »

Часто можно встретить уже решенные вопросы
А так же читайте help к Inno Setup :)

Bond01 08-09-2009 18:26 1214246

Вот еще нашел программу по автоматизации http://kickme.to/inqsoft

NameVizavi 09-09-2009 17:48 1214977

Serega не хотелбы обидеть, но тем не мение, я обсолютно ничего не понимаю!
Я хотел бы научится писать скрипты, под Инно, вот только в обоих темах, нет и капли нужной информации!!
В шапках, все ссылке, по инструкциям, и доп софту, ведут во всю туже тему, в шапке, нет никакой полезной инфы, и даже какого-никакого FAQ это по меньшей мере, не солидно для подобного форума!

Bond01 09-09-2009 18:30 1215017

Цитата:

Цитата NameVizavi
нет и капли нужной информации!! »

Вы прикалываетесь?

NameVizavi, русский хелп есть, скрипты, примеры. Как только начнете что-то делать появятся вопросы, и сможете задать конкретный вопрос.

Serega 09-09-2009 19:24 1215056

Цитата:

Цитата NameVizavi
Serega не хотелбы обидеть »

Даже не надейтесь...
Цитата:

Цитата NameVizavi
я обсолютно ничего не понимаю! »

Для этого и создана эта ветка на форуме, чтоб помочь в решении не понятных для пользователя вопросов... Хочу заметить, не сделать за Вас, а именно помочь, т.е. подсказать как можно решить вашу задачу...
Цитата:

Цитата NameVizavi
Я хотел бы научится писать скрипты, под Инно »

Опыт приходит с практикой, просто нужно начать.
Цитата:

Цитата NameVizavi
вот только в обоих темах, нет и капли нужной информации!! »

Это вы про какую информацию имеете в виду?
Да, я согласен, информация не полная, т.е. некоторые утилиты я не добавил в шапку темы, но обещаю исправится... :) Просто времени на всё не хватает...
Цитата:

Цитата NameVizavi
В шапках, все ссылке, по инструкциям, и доп софту, ведут во всю туже тему, в шапке, нет никакой полезной инфы, и даже какого-никакого FAQ »

Вы говорите про FAQ, а не видите ссылку на Inno Setup Extensions Knowledge Base - это и есть FAQ, который создавался на протяжении многих лет. Если Вам тяжело понять на английском, специально для этого есть справка к Inno Setup на русском, где описаны основные возможности инсталлятора.
А так же как уже заметил Bond01, в шапке есть ссылки
Цитата:

Цитата Serega
Inno Setup Scripting 5.1 - руководство по расширенным возможностям Inno Setup от Kindly;
Коллекция скриптов | Сборник вопросов; »

Цитата:

Цитата NameVizavi
по меньшей мере, не солидно для подобного форума! »

Поверьте моему опыту, не стоит судить о форуме в целом, если вам не нравится только данная тема.
Может Вы найдёте себя в чём-то другом, а не именно в Inno Setup...

NameVizavi 09-09-2009 19:34 1215065

Serega Примного извиняюсь =)
Наверно браузер глючил, просто вместо открытия спойлера, у меня перекидывало на туже тему.
Сорри за неоправданную критику!

A1EXXX 10-09-2009 01:01 1215241

Я использую скрипт FreeArc от Bulat_Ziganshin для распаковки. В архиве есть обработанные precomp'ом файлы. Возврат из *.pcf в оригинал я задаю через командную строку в секции [Run], но вот беда, исталлятор хочет выполнить преобразование до распаковки архива, что невозможно. Кто знает как это исправить? Искал флаг, который мог бы задать запуск из Run'a после всего-всего, но так и не нашёл.....

BlackSelf 10-09-2009 01:04 1215243

A1EXXX, в процедуре CurStepChanged на шаге ssPostInstall после распаковки архивов запусти precomp с нужными параметрами через exec.

zl0ybot 10-09-2009 07:45 1215318

читать дальше »
[Files]
Source: 1.bmp; DestDir: {tmp}; Flags: dontcopy
Source: 2.bmp; DestDir: {tmp}; Flags: dontcopy
Source: 3.bmp; DestDir: {tmp}; Flags: dontcopy
Source: 4.bmp; DestDir: {tmp}; Flags: dontcopy
Source: 5.bmp; DestDir: {tmp}; Flags: dontcopy
Source: 6.bmp; DestDir: {tmp}; Flags: dontcopy
[code]
ExtractTemporaryFile('1.bmp');
ExtractTemporaryFile('2.bmp');
ExtractTemporaryFile('3.bmp');
ExtractTemporaryFile('4.bmp');
ExtractTemporaryFile('5.bmp');
ExtractTemporaryFile('6.bmp');

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.SetBounds(0, 0, 497, 360);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.WelcomePage;

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\2.bmp'));
BmpFile.SetBounds(0, 0, 497, 360);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.LicensePage;

BmpFile:= TBitmapImage.Create(SystemRequirementPage);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\3.bmp'));
BmpFile.SetBounds(0, 0, 497, 360);
BmpFile.Stretch:= true
BmpFile.Parent:= SystemRequirementPage.Surface;

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\4.bmp'));
BmpFile.SetBounds(0, 0, 497, 360);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.InfoBeforePage;

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\4.bmp'));
BmpFile.SetBounds(0, 0, 497, 360);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.SelectDirPage;
BmpFile:= TBitmapImage.Create(WizardForm);

BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\6.bmp'));
BmpFile.SetBounds(0, 0, 497, 360);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.SelectProgramGroupPage;

сделайте чтобы он работал:)

Berline 10-09-2009 10:24 1215425

Вопрос может уже звучал: как добавить на страницу выбора компонентов 2 галочки - выделить все - снять все отметки?

И
Цитата:

Цитата Krekerpro
Доброго времени суток,кто нибудь знает,как реализовать это http://clip2net.com/page/m0/1799727 http://clip2net.com/page/m0/1799737 http://clip2net.com/page/m0/1799740 ??? »

Подниму вопрос - мне интересно из этого - отмеченные сверху "вкладки" этапы установки...

zl0ybot 10-09-2009 12:15 1215515

Berline это все фотошоп ....

A1EXXX 10-09-2009 15:06 1215712

BlackSelf, можешь наглядно изобразить на примере любого файла, а то не совсем пойму какие именно параметры нужно задать... И чтоб появился StasusMsg, мол подождите и т.д.

BlackSelf 10-09-2009 16:31 1215807

A1EXXX, код на работоспособность не проверялся, но должно быть примерно так:
читать дальше »
Код:

...

[Files]
Source: precomp04.exe; DestDir: {app}; Flags: ignoreversion
Source: packjpg_dll.dll; DestDir: {app}; Flags: ignoreversion

[_code]
...

Var
  ProcessLabel: TLabel;

...

Procedure InitializeWizard();
begin
  ProcessLabel := TLabel.Create(WizardForm);
  with ProcessLabel do begin
    Left := ProgressBar.Left;
    Top := ProgressBar.Top + ProgressBar.Height + ScaleX(5); //положение под себя отредактируй
    AutoSize:= true;
    Caption:= 'Рекомпрессия файлов игры...'
    Parent := WizardForm.InstallingPage;
    Transparent:= True;
    Hide;
  end;
end;

...

procedure CurStepChanged(CurStep: TSetupStep);
var
res: Integer;
begin
    if CurStep = ssInstall then begin
        StartInstall:= GetTickCount   
        WndHookID:= SetWindowsHookEx(WH_CALLWNDPROC, WrapCWPSTRUCTProc(@OnWndHook, 3), 0, GetCurrentThreadID);
        TimerID:= SetTimer(0, 0, 500, WrapTimerProc(@MyTimerProc, 4)); 
        if not {#isFalse(SetupSetting("Uninstallable"))} then Status.count:= -1;
    end;
    if CurStep = ssPostInstall then
    begin
        StartInstall:= GetTickCount 
        UnPackError:= UnPack('{#Archives}')
        if UnPackError <> 0 then begin // Error occured, uninstall it then
            if not {#isFalse(SetupSetting("Uninstallable"))} then
                Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n); 
            WizardForm.caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
            SetTaskBarTitle(SetupMessage(msgErrorTitle))
        end else
            SetTaskBarTitle(SetupMessage(msgSetupAppTitle));
ProcessLabel.show
Exec(ExpandConstant('{app}\precomp04.exe'), ' -r data.pcf ', '', SW_HIDE, ewWaitUntilTerminated, res);
DeleteFile(ExpandConstant('{app}\data.pcf'));
    end;
    if CurStep = ssDone then
DeleteFile(ExpandConstant('{app}\precomp04.exe'));
DeleteFile(ExpandConstant('{app}\packjpg_dll.dll'));
end;

...


A1EXXX 10-09-2009 18:11 1215932

BlackSelf, спасибо большое, но другом форуме мне подкинули альтернативу попроще: просто заменить ssPostInstall на ssInstall - проверил, работает! Ну всё равно спасибо!!!

P.S. Никто не сталкивался с такой фигнёй при распаковке, когда, например, DefaultDirName={pf}\Название компании\Название игры\ такой, а я хочу установить в D:\Games\Название игры\ и распаковка сначала начинается во временный файл $$arcpackedfile$$.tmp возле setup.exe и лишь потом в нужную папку (наверно, до конца ждать не стал), а не сразу в неё!!! Тупо как-то! Можно это поправить, а то устанавливать по стандартно указанному пути мало кто станет.....

DemonAk 10-09-2009 20:27 1216027

Тоже заменил на ssInstall, но теперь проблемка не распаковывает архивы с прекомпом т.к файлы неоходимые для распаковки еще не скопировались на диск. Как бы сделать что бы вот это:
#ifdef precomp
Source: {#precomp}; DestDir: {sys}; Flags: deleteafterinstall
Source: {#GetEnv("ProgramFiles")}\FreeArc\bin\arc.ini; DestDir: {sd}; Flags: deleteafterinstall
#endif

скопировалось в назначенные каталоги как только запустил инсталятор, посоветовали вот это но он копирует файлы в темп =\
function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('precomp04.exe');
ExtractTemporaryFile('packjpg_dll.dll');
ExtractTemporaryFile('arc.ini');
end;

A1EXXX 10-09-2009 21:27 1216076

DemonAk, я precomp не так использую. Прекомпрессированные файлы запаковую вместе с остальными файлами игры FreeArc'ом (ну и плюс в одну папку с ними ложу precomp.exe и packjpg_dll.dll), а замет задаю рекомпрессию через командную строку в секции [Run], вот пример одного файла:

[Run]
Filename: {app}\precomp.exe; Parameters: "-o""mp_vacant.ff"" -r ""mp_vacant.pcf"""; WorkingDir: {app}; StatusMsg: Выполняется рекомпрессия файлов, подождите 10-15 минут...; Flags: runhidden runasoriginaluser => рекомпресиия
Filename: cmd.exe; WorkingDir: {app}; Parameters: /C del /F /Q mp_vacant.pcf; Flags: runhidden runasoriginaluser => удалить *.pcf файл
Filename: cmd.exe; WorkingDir: {app}; Parameters: /C del /F /Q packjpg_dll.dll precomp.exe; Flags: runhidden runasoriginaluser => удалить файлы precomp'а

С такой трактовкой ssInstall у меня работает

P.S. Проценты на месте )))

DemonAk 10-09-2009 21:38 1216085

Цитата:

Цитата A1EXXX
P.S. Проценты на месте ))) »

Тоже на месте вот только не изменяются все время 0.0 %, во втором прогресс баре все норм.

У тебя так?:
читать дальше »
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then begin
StartInstall:= GetTickCount {время начала извлечения файлов}
WndHookID:= SetWindowsHookEx(WH_CALLWNDPROC, WrapCWPSTRUCTProc(@OnWndHook, 3), 0, GetCurrentThreadID); {установка SendMessage хука}
TimerID:= SetTimer(0, 0, 500 {полсекунды}, WrapTimerProc(@MyTimerProc, 4)); {установка таймера}
if not {#isFalse(SetupSetting("Uninstallable"))} then Status.count:= -1; // не считать файл unins000.exe
end;
if CurStep = ssInstall then
begin
StartInstall:= GetTickCount {время начала распаковки}
UnPackError:= UnPack('{#Archives}')
if UnPackError <> 0 then begin // Error occured, uninstall it then
if not {#isFalse(SetupSetting("Uninstallable"))} then // деинсталляция разрешёна
Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n); // откат установки из-за ошибки unarc.dll
WizardForm.caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
SetTaskBarTitle(SetupMessage(msgErrorTitle))
end else
SetTaskBarTitle(SetupMessage(msgSetupAppTitle));
end;
end;

A1EXXX 10-09-2009 21:49 1216097

Вложений: 1
DemonAk, я в скрипте ничего не менял, кроме замены формата с arc на cab и ssInstall. У тебя какая версия скрипта? У меня 3.2 и всё нормально. На всякий прикрепил , попробуй (на ssInstall уже заменил)

A1EXXX 10-09-2009 22:01 1216104

А у тебя проблем с распаковкой не было, если меняешь изначально заданный путь установки на другой??

DemonAk 10-09-2009 22:14 1216110

Цитата:

Цитата A1EXXX
А у тебя проблем с распаковкой не было, если меняешь изначально заданный путь установки на другой?? »

Нет не было, я использую скрипт виктора доброва http://victor-dobrov.narod.ru/FreeArc_Example-ext.7z

A1EXXX 10-09-2009 22:46 1216136

DemonAk, я тоже, и прикреплял его же.... Проценты то пошли???

Serega 10-09-2009 23:03 1216149

Вложений: 1
Converter v.0.1.4

Описание

Converter - конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).

Что нового
  • Версия 0.1.4
    • Добавлена возможность создать секцию [Setup];
    • Удалён пункт - использовать тип данных qword;
    • Переписаны системные модули используемые программой, за счёт чего, уменьшен размер;
    • Исправлены найденные ошибки;
    • Исправлен алгоритм обработки reg файла;
      Раньше при обработке бинарных данных размером более ста строк, приводило к существенному замедлению в работе программы. К примеру, экспортирую в HKCU.reg целиком ветку реестра HKEY_CURRENT_USER (полученный размер 10 Мбайт), его обработка раньше занимала, приблизительно 30 минут, сейчас он обрабатывается за несколько секунд...
  • Версия 0.1.3
    • Полностью переписан код программы, без использования VCL, за счёт чего, значительно уменьшен размер программы;
    • Изменён интерфейс программы;
    • Исправлены незначительные ошибки;
    • Оптимизирован код программы;
  • Версия 0.1.2
    • Корректно читаются и конвертируются из HEX данных в читаемый вид, значения ключей REG_EXPAND_SZ (expandsz) и REG_MULTI_SZ (multisz);
    • Добавлена поддержка удаления веток и параметров (записи вида [-ветка] и "параметр"=-);
    • Добавлена возможность интеграции в контекстное меню;
    • Добавлена функция drag&drop, т.е. reg-файл можно перетащить мышкой на форму и программа конвертирует его;
    • Добавлена возможность закрыть программу, после конвертирования;
    • Добавлена возможность использования флагов и констант;
    • Добавлена возможность открыть файл, после конвертирования;
    • Все неподдерживаемые в Inno Setup ключи реестра, теперь прописываются в секции кода;
    • Оптимизирован код программы и изменено оформление;
  • Версия 0.1.1
    • Исправлена ошибка с преобразованием: HKEY_LOCAL_MACHINE -> HKLM;
    • Исправлена ошибка, связанная с пустыми данными в reg-файле;
    • Убрал ограничение на размер входного reg-файла;
    • Исправлены мелкие недочёты и ошибки;


Скачать программу можно с ifolder.ru, а так же прикрепил архив к сообщению.

P.S.
Если вы заметили ошибки в результате работы программы, сообщите пожалуйста об этом.

DemonAk 10-09-2009 23:39 1216173

Цитата:

Цитата A1EXXX
я тоже, и прикреплял его же.... Проценты то пошли??? »

Нет скрипты не одинаковые они отличаются причем значительно, поэтому я не пробЫвал

МИШАНЧИК 12-09-2009 10:48 1217056

Serega, подскажите пожалуйста, как поменять цвет шрифта на белый?

МИШАНЧИК 12-09-2009 16:37 1217273

Serega, подскажите пожалуйста, можно ли как-то сделать в этом(Вашем) скрипте чтобы картинки были фоном на каждой странице установки(не только на первой и последней), а цвет текста на фоне картинок был белым?

Bond01 12-09-2009 19:29 1217397

Есть полезная программа - Gene6 FTP Server, я в ней поменя русский файлик, начал собирать она выдает ошибку, хотя скрипт нетрогал.

Код:

[Setup]
AppName=Gene6 FTP Server
AppVerName=Gene6 FTP Server v3.10.0.2
DefaultDirName={pf}\Gene6 FTP Server
OutputBaseFilename=g6ftpdsetup_3.10.0.2
Compression=lzma
LicenseFile=embedded\License.txt
InfoBeforeFile=embedded\InfoBefore.txt
WizardImageFile=embedded\WizardImage.bmp
WizardSmallImageFile=embedded\WizardSmallImage.bmp
DefaultGroupName=Óòèëèòû\Gene6 FTP

[Files]
; Source: "{app}\Backup\,1"; DestDir: "{app}\Backup"; Flags: uninsneveruninstall skipifsourcedoesntexist
; Source: "{app}\Backup\,2"; DestDir: "{app}\Backup"; Flags: uninsneveruninstall skipifsourcedoesntexist
; Source: "{app}\Backup\,3"; DestDir: "{app}\Backup"; Flags: uninsneveruninstall skipifsourcedoesntexist
; Source: "{app}\Backup\,4"; DestDir: "{app}\Backup"; Flags: uninsneveruninstall skipifsourcedoesntexist
; Source: "{app}\Backup\,5"; DestDir: "{app}\Backup"; Flags: uninsneveruninstall skipifsourcedoesntexist
; Source: "{app}\Backup\Accounts\"; DestDir: "{app}\Backup\Accounts"; Flags: uninsneveruninstall skipifsourcedoesntexist
; Source: "{app}\Backup\RemoteAdmin\"; DestDir: "{app}\Backup\RemoteAdmin"; Flags: uninsneveruninstall skipifsourcedoesntexist
; Source: "{app}\Backup\Plugins\"; DestDir: "{app}\Backup\Plugins"; Flags: uninsneveruninstall skipifsourcedoesntexist
Source: {app}\Version.txt; DestDir: {app}; Flags: ignoreversion
Source: {app}\languages.sib; DestDir: {app}; Components: admin; Languages: fr; Flags: confirmoverwrite
Source: {app}\license.txt; DestDir: {app}; Flags: ignoreversion
Source: {app}\Help\manual,1.pdf; DestDir: {app}\Help; DestName: manual.pdf; Components: help; Flags: ignoreversion
Source: {app}\Help\manual,2.pdf; DestDir: {app}\Help; DestName: manual.pdf; Components: help; Languages: fr; Flags: ignoreversion
Source: {app}\G6FTPServer.exe; DestDir: {app}; Components: server; Flags: ignoreversion
Source: {app}\G6FTPTray,1.exe; DestDir: {app}; DestName: G6FTPTray.exe; Components: traymonitor; Flags: ignoreversion
Source: {app}\G6FTPTray,2.exe; DestDir: {app}; DestName: G6FTPTray.exe; Components: traymonitor; Languages: fr; Flags: ignoreversion
Source: {app}\RemoteAdminServer.dll; DestDir: {app}; Components: server; Flags: ignoreversion
Source: {app}\Plugins\g6_auth_db.dll; DestDir: {app}\Plugins; Components: server; Flags: ignoreversion
Source: {app}\Plugins\g6_auth_exe.dll; DestDir: {app}\Plugins; Components: server; Flags: ignoreversion
Source: {app}\Plugins\g6_auth_nt.dll; DestDir: {app}\Plugins; Components: server; Flags: ignoreversion
Source: {app}\Plugins\g6_compression_zlib.dll; DestDir: {app}\Plugins; Components: server; Flags: ignoreversion
Source: {app}\Plugins\g6_fs_empty.dll; DestDir: {app}\Plugins; Components: server; Flags: ignoreversion
Source: {app}\Plugins\g6_fs_ftp.dll; DestDir: {app}\Plugins; Components: server; Flags: ignoreversion
Source: {app}\Plugins\g6_fs_ramdisk.dll; DestDir: {app}\Plugins; Components: server; Flags: ignoreversion
Source: {app}\Plugins\g6_log_bandwidth.dll; DestDir: {app}\Plugins; Components: server; Flags: ignoreversion
Source: {app}\Plugins\g6_log_custom.dll; DestDir: {app}\Plugins; Components: server; Flags: ignoreversion
Source: {app}\Plugins\g6_log_sitemsg.dll; DestDir: {app}\Plugins; Components: server; Flags: ignoreversion
Source: {app}\Plugins\g6_log_syslog.dll; DestDir: {app}\Plugins; Components: server; Flags: ignoreversion
Source: {app}\Plugins\g6_log_system.dll; DestDir: {app}\Plugins; Components: server; Flags: ignoreversion
Source: {app}\Plugins\g6_log_transfers.dll; DestDir: {app}\Plugins; Components: server; Flags: ignoreversion
Source: {app}\Plugins\g6_log_w3c.dll; DestDir: {app}\Plugins; Components: server; Flags: ignoreversion
Source: {app}\Plugins\g6_pswd_email.dll; DestDir: {app}\Plugins; Components: server; Flags: ignoreversion
Source: {app}\Plugins\g6_pswd_nt.dll; DestDir: {app}\Plugins; Components: server; Flags: ignoreversion
Source: {app}\Plugins\g6_pswd_otp_md5.dll; DestDir: {app}\Plugins; Components: server; Flags: ignoreversion
Source: {app}\Plugins\g6_pswd_salted_md5.dll; DestDir: {app}\Plugins; Components: server; Flags: ignoreversion
Source: {app}\Plugins\g6_pswd_sha1.dll; DestDir: {app}\Plugins; Components: server; Flags: ignoreversion
Source: {app}\Plugins\g6_script_js_vb.dll; DestDir: {app}\Plugins; Components: server; Flags: ignoreversion
Source: {app}\Plugins\g6_tray.dll; DestDir: {app}\Plugins; Components: server; Flags: ignoreversion
Source: {app}\Plugins\plugins.ini; DestDir: {app}\Plugins; Components: server; Flags: ignoreversion
Source: {app}\Scripts\Log downloads.vbs; DestDir: {app}\Scripts; Components: server; Flags: confirmoverwrite
Source: {app}\Scripts\Log uploads.vbs; DestDir: {app}\Scripts; Components: server; Flags: confirmoverwrite
Source: {app}\Scripts\SiteCommands.vbs; DestDir: {app}\Scripts; Components: server; Flags: confirmoverwrite
Source: {app}\G6FTPAdmin.exe; DestDir: {app}; Components: admin; Flags: ignoreversion
Source: {app}\libssl32.dll; DestDir: {app}; Components: server,admin; Flags: ignoreversion
Source: {app}\libeay32.dll; DestDir: {app}; Components: server,admin; Flags: ignoreversion

[Registry]
Root: HKCU; Subkey: SOFTWARE\Microsoft\Windows\CurrentVersion\Run; ValueName: G6FTP Server Tray Monitor; ValueType: String; ValueData: """{app}\G6FTPTray.exe"""; Components: traymonitor; Tasks: trayiconstart; Flags: uninsdeletevalue

[Run]
Filename: regedit; Parameters: "/E ""{app}\Backup\Administrator.reg"" HKEY_CURRENT_USER\Software\Gene6\G6FTPAdmin"
Filename: {app}\G6FTPSERVER.EXE; Parameters: -install; StatusMsg: {cm:InstallingServiceStatus}; Components: server
Filename: {app}\G6FTPADMIN.EXE; WorkingDir: {app}; Description: {cm:StartAdmin}; Components: admin
Filename: {app}\G6FTPTRAY.EXE; WorkingDir: {app}; Description: {cm:StartTray}; Components: traymonitor

[UninstallRun]
Filename: {app}\G6FTPSERVER.EXE; Parameters: -uninstall; StatusMsg: {cm:UninstallingServiceStatus}

[Icons]
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{cm:IconsRemoteAdministratorName}; Filename: {app}\G6FTPADMIN.EXE; Comment: {cm:IconsRemoteAdministratorComment}; Components: admin; Tasks: quicklaunchicon
Name: {userdesktop}\{cm:IconsRemoteAdministratorName}; Filename: {app}\G6FTPADMIN.EXE; Comment: {cm:IconsRemoteAdministratorComment}; Components: admin; Tasks: desktopicon
Name: {group}\{cm:IconsRemoteAdministratorStartMenuName}; Filename: {app}\G6FTPADMIN.EXE; Comment: {cm:IconsRemoteAdministratorComment}; Components: admin; Tasks: startmenuicon
Name: {group}\{cm:IconsTrayIconName}; Filename: {app}\G6FTPTRAY.EXE; Comment: {cm:IconsTrayIconComment}; Components: traymonitor; Tasks: startmenuicon
Name: {group}\{cm:LinkStartServiceName}; Filename: {app}\G6FTPSERVER.EXE; Parameters: -start; IconFilename: {sys}\filemgmt.dll; Comment: {cm:LinkStartServiceComment}; Components: server; Tasks: startmenuicon
Name: {group}\{cm:LinkStopServiceName}; Filename: {app}\G6FTPSERVER.EXE; Parameters: -stop; IconFilename: {sys}\filemgmt.dll; Comment: {cm:LinkStopServiceComment}; Components: server; Tasks: startmenuicon
Name: {group}\{cm:LinkInstallServiceName}; Filename: {app}\G6FTPSERVER.EXE; Parameters: -install; IconFilename: {sys}\filemgmt.dll; Comment: {cm:LinkInstallServiceComment}; Components: server; Tasks: startmenuicon
Name: {group}\{cm:LinkUnInstallServiceName}; Filename: {app}\G6FTPSERVER.EXE; Parameters: -uninstall; IconFilename: {sys}\filemgmt.dll; Comment: {cm:LinkUnInstallServiceComment}; Components: server; Tasks: startmenuicon
Name: {group}\{cm:LinkManualName}; Filename: {app}\Help\Manual.pdf; Components: help; Tasks: startmenuicon
Name: {group}\{cm:LinkPurchaseName}; Filename: {app}\Help\Gene6 FTP Server Purchase.url; Components: help; Tasks: startmenuicon
Name: {group}\{cm:LinkFAQName}; Filename: {app}\Help\Gene6 FTP Server FAQ.url; Components: help; Tasks: startmenuicon
Name: {group}\{cm:LinkDownloadName}; Filename: {app}\Help\Gene6 FTP Server Update.url; Components: help; Tasks: startmenuicon
Name: {group}\{cm:LinkForumName}; Filename: {app}\Help\Gene6 FTP Server Forum.url; Components: help; Tasks: startmenuicon
Name: {group}\{cm:LinkManualName}; Filename: {app}\Help\Manual.pdf; Components: help; Tasks: startmenuicon
Name: {group}\{cm:LinkWebsiteName}; Filename: {app}\Help\Gene6 FTP Server Website.url; Comment: {cm:LinkWebsiteComment}; Components: admin,server,help; Tasks: startmenuicon
Name: {group}\{cm:UninstallApplicationName}; Filename: {uninstallexe}; Comment: {cm:UninstallApplicationComment}; Tasks: startmenuicon
Name: {group}\{cm:LicenseFileName}; Filename: {app}\{cm:LicenseFile}; Components: admin,server,help; Tasks: startmenuicon

[Tasks]
Name: trayiconstart; Description: {cm:TaskLaunchTrayAtStartup}; GroupDescription: {cm:TaskTrayMonitorDecription}; Components: traymonitor
Name: desktopicon; Description: {cm:TaskCreateDesktopIcon}; GroupDescription: {cm:TaskAdditionalIconsDescription}; Components: admin
Name: quicklaunchicon; Description: {cm:TaskCreateQuickLaunchIcon}; GroupDescription: {cm:TaskAdditionalIconsDescription}; Components: admin
Name: startmenuicon; Description: {cm:TaskCreateStartMenuIcon}; GroupDescription: {cm:TaskAdditionalIconsDescription}; Components: server,admin

[Components]
Name: server; Description: {cm:ServerEngine}; Types: full custom
Name: admin; Description: {cm:AdministrationClient}; Types: full admin custom
Name: traymonitor; Description: {cm:TrayMonitor}; Types: full custom
Name: help; Description: {cm:HelpFiles}; Types: full admin custom

[Types]
Name: full; Description: {cm:FullInstallation}
Name: admin; Description: {cm:InstallAdminOnly}
Name: custom; Description: {cm:CustomInstallation}

[CustomMessages]
en.AdditionalIcons=Additional icons:
en.CreateDesktopIcon=Create a &desktop icon
en.CreateQuickLaunchIcon=Create a &Quick Launch icon
en.ProgramOnTheWeb=%1 on the Web
en.UninstallProgram=Uninstall %1
en.LaunchProgram=Launch %1
en.AssocFileExtension=&Associate %1 with the %2 file extension
en.AssocingFileExtension=Associating %1 with the %2 file extension...
fr.AdditionalIcons=Icônes supplémentaires :
fr.CreateDesktopIcon=Créer une icône sur le &Bureau
fr.CreateQuickLaunchIcon=Créer une icône dans la barre de &Lancement rapide
fr.ProgramOnTheWeb=Page d'accueil de %1
fr.UninstallProgram=Désinstallation de %1
fr.LaunchProgram=Exécuter %1
fr.AssocFileExtension=&Associer %1 avec l'extension de fichier %2
fr.AssocingFileExtension=Associe %1 avec l'extension de fichier %2...
de.AdditionalIcons=Zusätzliche Symbole:
de.CreateDesktopIcon=&Desktop-Symbol anlegen
de.CreateQuickLaunchIcon=Symbol in der Schnellstartleiste anlegen
de.ProgramOnTheWeb=%1 im Internet
de.UninstallProgram=%1 entfernen
de.LaunchProgram=%1 starten
de.AssocFileExtension=&Registriere %1 mit der %2-Dateierweiterung
de.AssocingFileExtension=%1 wird mit der %2-Dateierweiterung registriert...
nl.AdditionalIcons=Extra snelkoppelingen:
nl.CreateDesktopIcon=Maak een snelkoppeling op het &bureaublad
nl.CreateQuickLaunchIcon=Maak een snelkoppeling op de &Snel starten werkbalk
nl.ProgramOnTheWeb=%1 op het Web
nl.UninstallProgram=Verwijder %1
nl.LaunchProgram=&Start %1
nl.AssocFileExtension=&Koppel %1 aan de %2 bestandsextensie
nl.AssocingFileExtension=Bezig met koppelen van %1 aan de %2 bestandsextensie...
sp.AdditionalIcons=Additional icons:
sp.CreateDesktopIcon=Create a &desktop icon
sp.CreateQuickLaunchIcon=Create a &Quick Launch icon
sp.ProgramOnTheWeb=%1 on the Web
sp.UninstallProgram=Uninstall %1
sp.LaunchProgram=Launch %1
sp.AssocFileExtension=&Associate %1 with the %2 file extension
sp.AssocingFileExtension=Associating %1 with the %2 file extension...
it.AdditionalIcons=Additional icons:
it.CreateDesktopIcon=Create a &desktop icon
it.CreateQuickLaunchIcon=Create a &Quick Launch icon
it.ProgramOnTheWeb=%1 on the Web
it.UninstallProgram=Uninstall %1
it.LaunchProgram=Launch %1
it.AssocFileExtension=&Associate %1 with the %2 file extension
it.AssocingFileExtension=Associating %1 with the %2 file extension...
ru.AdditionalIcons=Äîïîëíèòåëüíûå çíà÷êè:
ru.CreateDesktopIcon=Ñîçäàòü çíà÷îê íà &Ðàáî÷åì ñòîëå
ru.CreateQuickLaunchIcon=Ñîçäàòü çíà÷îê â &Ïàíåëè áûñòðîãî çàïóñêà
ru.ProgramOnTheWeb=Ñàéò %1 â Èíòåðíåòå
ru.UninstallProgram=Äåèíñòàëëèðîâàòü %1
ru.LaunchProgram=Çàïóñòèòü %1
ru.AssocFileExtension=Ñâ&ÿçàòü %1 ñ ôàéëàìè, èìåþùèìè ðàñøèðåíèå %2
ru.AssocingFileExtension=Ñâÿçûâàíèå %1 ñ ôàéëàìè %2...
se.AdditionalIcons=Återstående ikoner:
se.CreateDesktopIcon=Skapa en ikon på srivbordet
se.CreateQuickLaunchIcon=Skapa en ikon i Snabbstartfältet
se.ProgramOnTheWeb=%1 på Webben
se.UninstallProgram=Avinstallera %1
se.LaunchProgram=Starta %1
se.AssocFileExtension=&Associera %1 med %2 filnamnstillägg
se.AssocingFileExtension=Associerar %1 med %2 filnamnstillägg...
FullInstallation=Full installation (administration & server)
fr.FullInstallation=Installation complète (administration distante & serveur)
InstallAdminOnly=Administration client only
fr.InstallAdminOnly=Client d'administration à distance seulement
CustomInstallation=Custom installation
fr.CustomInstallation=Installation personnalisée
ServerEngine=Server engine
fr.ServerEngine=Serveur FTP
AdministrationClient=Administration client
fr.AdministrationClient=Client d'administration à distance
TrayMonitor=Tray monitor
fr.TrayMonitor=Observateur trayicon
HelpFiles=Help files
fr.HelpFiles=Aide
StartTray=Launch tray monitor
fr.StartTray=Démarrer l'observateur trayicon
StartAdmin=Launch administration tool
fr.StartAdmin=Démarrer l'administration à distance
TaskLaunchTrayAtStartup=Launch Tray &monitor at windows startup
fr.TaskLaunchTrayAtStartup=Démarrer l'observateur trayicon au lancement de windows
TaskCreateDesktopIcon=Create a &Desktop icon
fr.TaskCreateDesktopIcon=Créer une icône sur le bureau
TaskCreateQuickLaunchIcon=Create a &Quick launch icon
fr.TaskCreateQuickLaunchIcon=Créer une icône de lancement rapide
TaskCreateStartMenuIcon=Create &Start menu icons
fr.TaskCreateStartMenuIcon=Créer les icônes dans le menu Démarrer
TaskTrayMonitorDecription=Tray monitor:
fr.TaskTrayMonitorDecription=Observateur serveur:
TaskAdditionalIconsDescription=Additional icons:
fr.TaskAdditionalIconsDescription=Icônes additionnelles:
IconsRemoteAdministratorName=G6FTP Server Administrator
fr.IconsRemoteAdministratorName=G6FTP Server Administrateur
MA_IconsRemoteAdministratorName=FTP Serveur Expert
EC_IconsRemoteAdministratorName=FTP Server
IconsRemoteAdministratorStartMenuName=G6FTP Server Administrator
fr.IconsRemoteAdministratorStartMenuName=G6FTP Server Administration à distance
MA_IconsRemoteAdministratorStartMenuName=Administration à distance
EC_IconsRemoteAdministratorStartMenuName=Beheer op afstand
IconsRemoteAdministratorComment=Remote administration client
fr.IconsRemoteAdministratorComment=Administration à distance
MA_IconsRemoteAdministratorComment=Administration à distance
EC_IconsRemoteAdministratorComment=Beheer op afstand client
IconsTrayIconName=G6FTP Server Tray Monitor
fr.IconsTrayIconName=G6FTP Server Observateur Trayicon
MA_IconsTrayIconName=Observateur Trayicon
EC_IconsTrayIconName=FTP Server Tray Monitor
IconsTrayIconComment=Server tray monitor
fr.IconsTrayIconComment=Observateur trayicon
MA_IconsTrayIconComment=Observateur trayicon
EC_IconsTrayIconComment=Server tray monitor
LinkStartServiceName=Administrative tools\Start Service
fr.LinkStartServiceName=Outils d'administration\Démarrer le service
LinkStartServiceComment=Start the system service
fr.LinkStartServiceComment=Démarrer le service
LinkStopServiceName=Administrative tools\Stop Service
fr.LinkStopServiceName=Outils d'administration\Arrêter le service
LinkStopServiceComment=Stop the system service
fr.LinkStopServiceComment=Arrêter le service
LinkInstallServiceName=Administrative tools\Install Service
fr.LinkInstallServiceName=Outils d'administration\Installer le service
LinkInstallServiceComment=Install as a system service
fr.LinkInstallServiceComment=Installer le service
LinkUnInstallServiceName=Administrative tools\Uninstall Service
fr.LinkUnInstallServiceName=Outils d'administration\Désinstaller le service
LinkUnInstallServiceComment=Uninstall the system service
fr.LinkUnInstallServiceComment=Désinstaller le service
MA_LinkProductName=Fiche produit
EC_LinkProductName=Productfiche
MA_LinkProductComment=Visiter le site web
EC_LinkProductComment=Bezoek de site
LinkDownloadName=Help\Download update
fr.LinkDownloadName=Aide\Mise à jour
LinkFAQName=Help\FAQ
fr.LinkFAQName=Aide\FAQ
LinkPurchaseName=Help\Purchase
fr.LinkPurchaseName=Aide\Achat
LinkForumName=Help\Forum
fr.LinkForumName=Aide\Forum
LinkManualName=Help\Manual
fr.LinkManualName=Aide\Manuel
LinkWebsiteName=G6FTP Server Website
fr.LinkWebsiteName=Site web de G6FTP Server
LinkWebsiteComment=Visit G6FTP Server website
fr.LinkWebsiteComment=Visiter le site web de G6FTP Server
LicenseFileName=License
fr.LicenseFileName=Licence
LicenseFile=License.txt
MA_LicenseFile=eula.rtf
EC_LicenseFile=Licence.txt
UninstallApplicationName=Uninstall G6FTP Server
fr.UninstallApplicationName=Désinstaller G6FTP Server
MA_UninstallApplicationName=Désinstaller l'application
EC_UninstallApplicationName=Verwijder FTP Server
UninstallApplicationComment=Uninstall the software
fr.UninstallApplicationComment=Désinstaller le logiciel
MA_UninstallApplicationComment=Désinstaller le logiciel
EC_UninstallApplicationComment=Verwijder de software
InstallingServiceStatus=Installing as system service...
fr.InstallingServiceStatus=Installation en service système...
UninstallingServiceStatus=Uninstalling system service...
fr.UninstallingServiceStatus=Désinstallation du service...
MsgServerIsRunning=Setup has detected that Gene6 FTP Server is currently running.

Click OK to stop the service, or Cancel to abort installation.=
fr.MsgServerIsRunning=L'installation a détecté que Gene6 FTP Server est actuellement en cours d''utilisation.

Cliquez sur OK pour arrêter le service, ou Annuler pour abandonner l'installation.=
MsgAdminIsRunning=Please close all running instances of Gene6 FTP Server Administrator & Tray monitor.

Click Retry to continue, or Cancel to abort installation.=
fr.MsgAdminIsRunning=Veuillez quitter toutes les instances de Gene6 FTP Server Administrateur (administration à distance) et de l'observateur trayicon.

Cliquez sur Réessayer pour continuer, ou Annuler pour abandonner l'installation.=
MsgEnterPort=Enter port number (1-65535, %s = default, 21 is not accepted) :
fr.MsgEnterPort=Entrez un port (1-65535, %s = défaut, 21 n'est pas accepté) :
MsgPortNumberMissing=You must enter a port number between 1 and 65535, not 21!
fr.MsgPortNumberMissing=Vous devez entrer un port entre 1 et 65535, différent de 21!
MsgRemoteAdminCaption=Remote administration
fr.MsgRemoteAdminCaption=Administration à distance
MsgRemoteAdminSubCaption1=Select the port to use for remote administration
fr.MsgRemoteAdminSubCaption1=Sélectionnez un port pour l'administration à distance
MsgRemoteAdminSubCaption2=Please indicate the port the remote administration will be listening to.
This is not the FTP port 21 which is reserved for FTP.=
fr.MsgRemoteAdminSubCaption2=Indiquez le port à utiliser pour l'administration à distance.
Le port 21 est reservé pour le FTP.=
MsgAdministratorName=Administrator
fr.MsgAdministratorName=Administrateur
MsgAdministratorCaption=Administrator account setup
fr.MsgAdministratorCaption=Création du compte Administrateur
MsgAdministratorSubCaption1=Please enter login and password for the server administrator account.
fr.MsgAdministratorSubCaption1=Entrez le nom d'utilisateur et le mot de passe du compte administrateur du serveur.
MsgAdministratorSubCaption2=This account is important as it will be used to administer your FTP server.
fr.MsgAdministratorSubCaption2=Ce compte est important car il vous permet d'administrer votre serveur FTP.
MsgAdministratorError=You must enter an administrator login and a password!
fr.MsgAdministratorError=Vous devez entrer un nom et un mot de passe!
MsgAdministratorPasswordError=Passwords do not match, please reenter!
fr.MsgAdministratorPasswordError=Les mots de passe ne correspondent pas, réentrez les s'il vous plaît!
MsgAdministratorLogin=Login:
fr.MsgAdministratorLogin=Utilisateur:
MsgAdministratorPassword=Password:
fr.MsgAdministratorPassword=Mot de passe:
MsgAdministratorPasswordConfirm=Confirm password:
fr.MsgAdministratorPasswordConfirm=Confirmation du mot de passe:
MsgLicenseUpdateExpired=Setup has detected that your current license update period has expired.
You should update your license before attempting to upgrade.=

Click OK to continue, or Cancel to abort installation.=
fr.MsgLicenseUpdateExpired=L'installation a détecté que votre période de mise à jour a expiré.
Vous devriez mettre à jour votre license avant de continuer l'installation.=

Cliquez sur OK pour continuer, ou Annuler pour abandonner l'installation.=
MsgEnterSerial=Your serial number :
fr.MsgEnterSerial=Votre numéro de série :
MsgSerialCaption=Serial number
fr.MsgSerialCaption=Numéro de série
MsgSerialSubCaption1=Please enter you serial number.
fr.MsgSerialSubCaption1=Veuillez s'il vous plaît entrer votre numéro de série.
MsgSerialSubCaption2=Your serial number is printed on the software Cdrom, it looks like :

ABCDEF-GHIJK-LMNOP-QRSTU-VWXYZ-01234=
fr.MsgSerialSubCaption2=Vous pourrez trouver ce numéro de série sur le CD de votre logiciel, il est de la forme :

ABCDEF-GHIJK-LMNOP-QRSTU-VWXYZ-01234=
MsgSerialInvalid=The serial number you have entered is not valid, please check that you entered it correctly.
fr.MsgSerialInvalid=Le numéro de série que vous avez entré est invalide, vérifiez votre saisie s'il vous plaît.
LocalMachine=Local Machine
fr.LocalMachine=Administration Locale
LocalMachineDescription=Local FTP server administration
fr.LocalMachineDescription=Administration du serveur FTP local
MsgG6WebAdminWrongVersion=Your web administration plugin is not compatible with this version of Gene6 FTP Server, please update it after installation.
Current version will be moved to the backup folder and deactivated.=
fr.MsgG6WebAdminWrongVersion=La version installée de l'administration web n'est pas compatible avec cette version de Gene6 FTP Server, veuillez la mettre à jour après l'installation.
La version actuelle sera déplacée dans le dossier de sauvegarde et désactivée.=

[Languages]
; These files are stubs
; To achieve better results after recompilation, use the real language files
Name: en; MessagesFile: embedded\en.isl
Name: fr; MessagesFile: embedded\fr.isl
Name: de; MessagesFile: embedded\de.isl
Name: nl; MessagesFile: embedded\nl.isl
Name: sp; MessagesFile: embedded\sp.isl
Name: it; MessagesFile: embedded\it.isl
Name: ru; MessagesFile: embedded\ru.isl
Name: se; MessagesFile: embedded\se.isl

Ошибку найти немогу. Показывает на Click OK to stop the service, or Cancel to abort installation.=

Habetdin 12-09-2009 20:11 1217427

Bond01, скриншот ошибки можно увидеть?

Bond01 12-09-2009 20:15 1217432

Это всегда пожалуйста :)

Serega 12-09-2009 20:23 1217442

Цитата:

Цитата Berline
Вопрос может уже звучал: как добавить на страницу выбора компонентов »

Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Types]
Name: full; Description: Полная установка
Name: custom; Description: Выборочная установка; Flags: iscustom

[Components]
Name: a; Description: Моя программа™; Types: full custom
Name: a\a; Description: Руководство пользователя; Types: full
Name: a\a\a; Description: Русский; Flags: exclusive
Name: a\a\b; Description: English; Flags: exclusive
Name: a\b; Description: Справка; Types: full

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Components: a
Source: compiler:Examples\Readme-ru.txt; DestDir: {app}; Components: a\a\a
Source: compiler:Examples\Readme-en.txt; DestDir: {app}; Components: a\a\b
Source: compiler:Examples\MyProg.chm; DestDir: {app}; Components: a\b

[Code]
var
  btn1, btn2: TButton;

procedure btnClick(Sender: TObject);
var
  i: Integer;
begin
  // не знаю почему, но при WizardForm.SelectComponentsPage.ControlCount-1 выскакивает сообщение:
  // 'List index out of bounds.'
  for i:= 0 to WizardForm.SelectComponentsPage.ControlCount-2 do
    case TButton(Sender) of
      btn1: WizardForm.ComponentsList.Checked[i]:= True;
      btn2: WizardForm.ComponentsList.Checked[i]:= False;
    end;
end;

procedure InitializeWizard();
begin
  btn1:= TButton.Create(WizardForm);
  with btn1 do
    begin
      SetBounds(260,210,75,25);
      Caption:= 'Выбрать все';
      OnClick:= @btnClick;
      Parent:= WizardForm.SelectComponentsPage;
    end;

  btn2:= TButton.Create(WizardForm);
  with btn2 do
    begin
      SetBounds(340,210,75,25);
      Caption:= 'Снять выбор';
      OnClick:= @btnClick;
      Parent:= WizardForm.SelectComponentsPage;
    end;
end;



Цитата:

Цитата МИШАНЧИК
подскажите пожалуйста, можно ли как-то сделать в этом(Вашем) скрипте »

Это не мой, я только чего-то в нём исправлял, уже точно не помню что конкретно...

Цитата:

Цитата Bond01
Показывает на Click OK to stop the service, or Cancel to abort installation.= »

закоментируйте (; ) в скрипте (секция [CustomMessages]) те строчки, на которые ругается компилятор...

Bond01 12-09-2009 20:32 1217446

Закоментировал, следующие появились...

Serega 12-09-2009 21:07 1217474

Цитата:

Цитата Bond01
следующие появились... »

Правильно ругается, замените знак ',' на 'or'

Bond01 12-09-2009 21:26 1217492

Ладно спасибо, я недумал, что столько ошибок будет, небуду-же Вам каждую строчку показывать.

Serega 12-09-2009 22:16 1217528

Когда только начинал знакомиться с Inno Setup и переупаковывал для себя некоторые игрушки, то по умолчанию ставил путь установки в {pf}\Games\... (C:\Program Files\Games\...), а фактически ставил их в D:\Games\...
Так меня постоянно мучал вопрос, какую переменную задать, чтоб Inno понимал, что ставить надо на диск D.
Самый простой способ - это прописать в DefaultDirName=D:\Games\..., но это не универсально и вдруг на другом компьютере будет только один диск.
Одним словом решения я тогда не нашёл, но недавно увидел похожий вопрос на другом форуме и вспомнил интересовавшую меня проблему.
В результате, вот скрипт, который определяет логические диски на компьютере и предлагает установить на первый логический диск не являющийся системным (если их несколько, в противном случае будет предложен системный диск).
Скрипт
Код:

; скрипт, который определяет логические диски на компьютере и предлагает установить на первый
; логический диск не являющийся системным (если их несколько, в противном случае будет предложен
; системный диск).
; Автор: Serega, http://forum.oszone.net/member.php?userid=88670

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={code:NoSD}\Games\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
function GetLogicalDrives: DWORD; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(lpRootPathName: PChar): Cardinal; external 'GetDriveTypeA@kernel32.dll stdcall';

const
  DRIVE_FIXED = 3;

function NoSD(s: string): string;
var
  x, bit, i: Integer;
  tp: Cardinal;
  sd: string;
begin
  sd:= ExpandConstant('{sd}');
  Result:= sd;
  // Вызываем функцию WinAPI
  // Функция возвращает битовую маску установленных логических дисков.
  // Бит 0 определяет наличие диска А:, бит 1 - диска B и т.д.
  x:= GetLogicalDrives;
  if x <> 0 then
  // цикл по полученным битам переменной X
  for i:= 1 to 64 do
    begin
      // Накладываем битовую маску для выделения бита с поряковым номером 0
      bit:= x and 1;
      // нашли логический диск...
      if bit = 1 then
        begin
          // определяем тип логического диска
          tp:= GetDriveType(PChar(Chr(64 + i) + ':'));
          if tp = DRIVE_FIXED then
          // если диск не является системным
          if Chr(64 + i) <> Copy(sd, 1, 1) then
            begin
              Result:= Chr(64 + i) + ':';
              Break;
            end;
        end;
      // побитовый сдвиг вправо
      x:= x shr 1;
    end;
end;


A1EXXX 12-09-2009 23:05 1217563

Serega, интересно, мне пригодится!!!!

Ты, случайно, не знаешь, в чём может быть проблема... При распаковке FreeArc, когда, например, DefaultDirName={pf}\Название компании\Название игры\ такой, а я хочу установить в D:\Games\Название игры\ и распаковка сначала начинается во временный файл $$arcpackedfile$$.tmp возле setup.exe (а если exe'шник уже в образе, выбивает ошибку приложения)!!! Может есть какой-то нюанс, который может такое вызвать??? Проверил скрипт FeeArc'а отдельно - всё ОК, а когда все свои скрипты сливаю в один, получается такая фигня! Даже не знаю от чего отталкиваться, парадокс, блин!

Serega 12-09-2009 23:36 1217582

Цитата:

Цитата A1EXXX
Может есть какой-то нюанс, который может такое вызвать??? »

Обязательно должен быть.
Цитата:

Цитата A1EXXX
а когда все свои скрипты сливаю в один, получается такая фигня! »

Попробуйте добавлять по одному скрипту, т.е. чтоб выяснить проблемный и уже потом в нём смотреть где не так...
Я бы первым делом запустил поиск во всех скриптах, на наличие слова $$arcpackedfile$$.tmp, т.к. это не стандартная фраза и скорей всего прописана в одном из них, а уже потом изучил из-за чего такое получается.

МИШАНЧИК 13-09-2009 04:04 1217661

Serega,
Цитата:

Цитата Serega
Это не мой, я только чего-то в нём исправлял »

Прошу прощения, если чем-то задел.
Но всё-таки можно ли в нём сделать текст белым цветом и отображение картинок на всех страницах инсталятора?

Serega 13-09-2009 13:05 1217799

Цитата:

Цитата МИШАНЧИК
сделать текст белым цветом »

Если в стандартном инсталляторе, т.е. не создавая новые контролы, то
Код:

  WizardForm.Font.Color:= clWhite;
  WizardForm.PageNameLabel.Font.Color:= clWhite;
  WizardForm.WelcomeLabel1.Font.Color:= clWhite;

если же создаёте контролы, то у каждого текстового есть в свойствах значение Font.Color, соответственно задаёте значение clWhite
Цитата:

Цитата МИШАНЧИК
отображение картинок на всех страницах инсталятора »

Поищите в предыдущей теме, что-то похожее уже было.

A1EXXX 13-09-2009 14:32 1217867

Новая версия скриптов для распаковки архивов FreeArc: FreeArc4InnoSetup3_3.zip

Версия 3.3 ext от Victor_Dobrov, 13-09-2009
- arc.ini ищется в c:\
- купирована ошибка индикатора прогресса при использовании внешних распаковщиков
- пофиксена потеря количества извлечённых/распакованных файлов

Версия 3.3 от Bulat Ziganshin, 13-09-2009
- ускорение распаковки на 10%
- FreeArcExtract() поддерживает опцию '-wPATH' для задания каталога для временных файлов
- при прерывании распаковки стирает временные файлы
- исправлена ошибка в unarc.dll - вылетала при распаковке с использованием временных файлов

кто уже скачал, перекачайте, т.к. Bulat Ziganshin немного исправил скрипты (скорость распакови была увеличена, но при этом были небольшие паузы в процессе распаковки)

Serega 13-09-2009 17:45 1218002

Наверное каждый при сборке инсталлятора сталкивался с тем, что не хватает стандартных констант в Inno Setup.
Допустим нужно установить какой-нибудь файл, в папку "Мои рисунки", а константы такой нет...
Ниже приведённый скрипт облегчит определение стандартных папок Windows:
Пример
Код:

; Данный скрипт позволяет получить путь к стандартным папкам Windows

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
const
  MAX_PATH = 260;
  // ниже приведён список id папок, путь которой хотим получить...
  // Виртуальный каталог, представляющий Рабочий стол. (Корень в проводнике)
  CSIDL_DESKTOP                = $0000;
  // Виртуальный каталог для Internet Explorer.
  CSIDL_INTERNET                = $0001;
  // Меню Пуск -> Программы
  CSIDL_PROGRAMS                = $0002;
  // Виртуальный каталог, содержащий иконки пунктов панели управления
  CSIDL_CONTROLS                = $0003;
  // Виртуальный каталог, содержащий установленные принтеры
  CSIDL_PRINTERS                = $0004;
  // Виртуальный каталог, представляющий папку "Мои документы"
  CSIDL_PERSONAL                = $0005;
  // До Vista ссылался на какталог "Мои документы" на жёстком диске
  // Избранное. (обычно C:\Documents and Settings\username\Favorites)
  CSIDL_FAVORITES              = $0006;
  // Пуск -> Программы -> Автозагрузка
  CSIDL_STARTUP                = $0007;
  // Недавние документы (обычно C:\Documents and Settings\username\My Recent Documents
  CSIDL_RECENT                  = $0008;
  // Папка, содержащая ярлыки меню "Отправить" (Sent to...) (обычно C:\Documents and Settings\username\SendTo)
  CSIDL_SENDTO                  = $0009;
  // Виртуальный каталог, содержащий файлы в корзине текущего пользователя
  CSIDL_BITBUCKET              = $000a;
  // Элементы меню Пуск текущего пользователя (обычно C:\Documents and Settings\username\Start Menu)
  CSIDL_STARTMENU              = $000b;
  // Рабочий стол текущего пользователя (обычно C:\Documents and Settings\username\Desktop)
  CSIDL_DESKTOPDIRECTORY        = $0010;
  // Виртуальный каталог, представляющий папку "Мой компьютер"
  CSIDL_DRIVES                  = $0011;
  // Виртуальный каталог, представляющий "Сетевое окружение"
  CSIDL_NETWORK                = $0012;
  // Папка "My Nethood Places" (обычно C:\Documents and Settings\username\NetHood)
  // В неё ссылки на избранные расшаренные ресурсы
  CSIDL_NETHOOD                = $0013;
  // Папка, содержащая установленные шрифты. (обычно C:\Windows\Fonts)
  CSIDL_FONTS                  = $0014;
  // Шаблоны документов. (Обычно Settings\username\Templates)
  CSIDL_TEMPLATES              = $0015;
  // Элементы меню Пуск для всех пользователей. (обычно C:\Documents and Settings\All Users\Start Menu)
  // Константы, начинающиеся на CSIDL_COMMON_ существуют только в NT версиях
  CSIDL_COMMON_STARTMENU        = $0016;
  // Меню Пуск -> программы для всех пользователей (обычно C:\Documents and Settings\All Users\Start Menu\Programs)
  CSIDL_COMMON_PROGRAMS        = $0017;
  // Меню Пуск -> Программы -> Автозагрузка для всех пользователей (обычно C:\Documents and Settings\All Users\Start Menu\Programs\Startup)
  CSIDL_COMMON_STARTUP          = $0018;
  // Элементы Рабочего стола для всех пользователей (обычно C:\Documents and Settings\All Users\Desktop)
  CSIDL_COMMON_DESKTOPDIRECTORY = $0019;
  // Папка, в которой рограммы должны хранить свои данные(C:\Documents and Settings\username\Application Data)
  CSIDL_APPDATA                = $001a;
  // Установленные принтеры. (обычно C:\Documents and Settings\username\PrintHood)
  CSIDL_PRINTHOOD              = $001b;
  // user's nonlocalized Startup program group. Устарело.
  CSIDL_ALTSTARTUP              = $001d;        // DBCS
  // Устарело
  CSIDL_COMMON_ALTSTARTUP      = $001e;        // DBCS
  // Ссылки "Избранное" для всех пользователей
  CSIDL_COMMON_FAVORITES        = $001f;
  // Временные Internet файлы (обычно C:\Documents and Settings\username\Local Settings\Temporary Internet Files)
  CSIDL_INTERNET_CACHE          = $0020;
  // Папка для хранения Cookies (обычно C:\Documents and Settings\username\Cookies)
  CSIDL_COOKIES                = $0021;
  // Хранит ссылки интернет истории IE
  CSIDL_HISTORY                = $0022;
  // Административные инструменты текущего пользователя (например консоль MMC). Win2000+
  CSIDL_ADMINTOOLS              = $30;
  // Папка для файлов, подготовленных к записи на CD/DVD
  // (Обычно C:\Documents and Settings\username\Local Settings\Application Data\Microsoft\CD Burning)
  CSIDL_CDBURN_AREA            = $3b;
  // Папка, содержащая инструменты администрирования
  CSIDL_COMMON_ADMINTOOLS      = $2f;
  // Папака AppData для всех пользователей. (обычно C:\Documents and Settings\All Users\Application Data)
  CSIDL_COMMON_APPDATA          = $23;
  // Папка "Общие документы" (обычно C:\Documents and Settings\All Users\Documents)
  CSIDL_COMMON_DOCUMENTS        = $2e;
  // Папка шаблонов документов для всех пользователей (Обычно C:\Documents and Settings\All Users\Templates)
  CSIDL_COMMON_TEMPLATES        = $2d;
  // Папка "Моя музыка" для всех пользователей. (обычно C:\Documents and Settings\All Users\Documents\My Music)
  CSIDL_COMMON_MUSIC            = $35;
  // Папка "Мои рисунки" для всех пользователей. (обычно C:\Documents and Settings\All Users\Documents\My Pictures)
  CSIDL_COMMON_PICTURES        = $36;
  // Папка "Моё видео" для всех пользователей (C:\Documents and Settings\All Users\Documents\My Videos)
  CSIDL_COMMON_VIDEO            = $37;
  // Виртуальная папка, представляет список компьютеров в вашей рабочей группе
  CSIDL_COMPUTERSNEARME        = $3d;
  // Виртуальная папка, представляет список сетевых подключений
  CSIDL_CONNECTIONS            = $31;
  // AppData для приложений, которые не переносятся на другой компьютер (обычно C:\Documents and Settings\username\Local Settings\Application Data)
  CSIDL_LOCAL_APPDATA          = $1c;
  // Виртуальный каталог, представляющий папку "Мои документы"
  CSIDL_MYDOCUMENTS            = $0c;
  // Папка "Моя музыка"
  CSIDL_MYMUSIC                = $0d;
  // Папка "Мои рисунки"
  CSIDL_MYPICTURES              = $27;
  // Папка "Моё видео"
  CSIDL_MYVIDEO                = $0e;
  // Папка пользователя (обычно C:\Documents and Settings\username)
  CSIDL_PROFILE                = $28;
  // Папка Program Files (обычно C:\Program Files)
  CSIDL_PROGRAM_FILES          = $26;
  CSIDL_PROGRAM_FILESX86        = $2a;
  // Папка Program Files\Common (обычно C:\Program Files\Common)
  CSIDL_PROGRAM_FILES_COMMON    = $2b;
  CSIDL_PROGRAM_FILES_COMMONX86 = $2c;
  // Папка для ресерсов. Vista и выше (обычно C:\Windows\Resources)
  CSIDL_RESOURCES              = $38;
  CSIDL_RESOURCES_LOCALIZED    = $39;
  // Папака System (обычно C:\Windows\System32 или C:\Windows\System)
  CSIDL_SYSTEM                  = $25;
  CSIDL_SYSTEMX86              = $29;
  // Папка Windows. Она же %windir% или %SYSTEMROOT% (обычно C:\Windows)
  CSIDL_WINDOWS                = $24;

function SHGetSpecialFolderPath(hwndOwner: HWND; lpszPath: PChar; nFolder: Integer; fCreate: BOOL): BOOL;
  external 'SHGetSpecialFolderPathA@shell32.dll stdcall';

function GetSpecialPath(CSIDL: Word): string;
var
  s:  string;
begin
  SetLength(s, MAX_PATH);
  if not SHGetSpecialFolderPath(0, PChar(s), CSIDL, True) then s := '';
  Result:= PChar(s);
end;

procedure InitializeWizard;
begin
  // определим расположение папки "Мои рисунки"
  MsgBox(GetSpecialPath(CSIDL_MYPICTURES), mbInformation, MB_OK);
end;


msatmb 13-09-2009 21:10 1218155

Цитата:

Цитата BlackSelf
A1EXXX, код на работоспособность не проверялся, но должно быть примерно так: »

Делаю как ты написал
читать дальше »

procedure CurStepChanged(CurStep: TSetupStep);
var
res: Integer;
begin
if CurStep = ssInstall then begin
StartInstall:= GetTickCount {время начала извлечения файлов}
WndHookID:= SetWindowsHookEx(WH_CALLWNDPROC, WrapCWPSTRUCTProc(@OnWndHook, 3), 0, GetCurrentThreadID); {установка SendMessage хука}
TimerID:= SetTimer(0, 0, 500 {полсекунды}, WrapTimerProc(@MyTimerProc, 4)); {установка таймера}
if not {#isFalse(SetupSetting("Uninstallable"))} then Status.count:= -1; // не считать файл unins000.exe
end;
if CurStep = ssPostInstall then
begin
StartInstall:= GetTickCount {время начала распаковки}
UnPackError:= UnPack('{#Archives}')
if UnPackError <> 0 then begin // Error occured, uninstall it then
if not {#isFalse(SetupSetting("Uninstallable"))} then // деинсталляция разрешёна
Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n); // откат установки из-за ошибки unarc.dll
WizardForm.caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
SetTaskBarTitle(SetupMessage(msgErrorTitle))
end else
SetTaskBarTitle(SetupMessage(msgSetupAppTitle));
ProcessLabel.show
Exec(ExpandConstant('{app}\run.bat'), '', '', SW_SHOW, ewWaitUntilTerminated, res);
DeleteFile(ExpandConstant('{app}\run.bat'));
end;
end;

по завершению работы инсталлятора получаю ошибку
читать дальше »

2009-09-13 11:54:29.562 CurStepChanged raised an exception.
2009-09-13 11:54:29.562 Exception message:
2009-09-13 11:54:29.562 Message box (OK):
Runtime Error (at 157:2795):

Access violation at address 0049F883 in module 'setup.tmp'. Read of address 00000000.
2009-09-13 12:05:20.296 User chose OK.
2009-09-13 12:05:20.296 Need to restart Windows? No
2009-09-13 12:05:20.375 Exception message:
2009-09-13 12:05:20.375 Message box (OK):
Out Of Range.
2009-09-13 12:05:21.265 User chose OK.
2009-09-13 12:05:22.296 Deinitializing Setup.
2009-09-13 12:05:22.328 Log closed.

В чем может быть проблема?

Цитата:

Цитата A1EXXX
- FreeArcExtract() поддерживает опцию '-wPATH' для задания каталога для временных файлов »

И как это прописать? :)

Berline 14-09-2009 09:41 1218406

Цитата:

Цитата Serega
Вопрос может уже звучал: как добавить на страницу выбора компонентов »
Пример »

СПС большое, за одним исключением - учитывали вы это ил инет - идеально работает если компоненты не имеют вид дерева(т.е. вложенных компонентов), в такои случае, они игнорируются - не выделяются, и если руками выбрать - не снимаются...

DemonAk 14-09-2009 17:59 1218871

[Files]
#ifdef precomp
Source: {#precomp}; DestDir: {sys}; Flags: deleteafterinstall
Source: {#GetEnv("ProgramFiles")}\FreeArc\bin\arc.ini; DestDir: C:\; Flags: deleteafterinstall
#endif

Как сделать что бы как только запустил исталятор, файлы которые указаны в files копировались в назначенный каталог.
Эта процедура копирует их в темп, а надо sys и C:\:

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('precomp04.exe');
ExtractTemporaryFile('packjpg_dll.dll');
ExtractTemporaryFile('arc.ini');
end;

pa60t9ra 14-09-2009 18:21 1218880

Я по поводу выбора компонентов.
Вот тот самый код:

[code]

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Types]
Name: full; Description: Полная установка
Name: custom; Description: Выборочная установка; Flags: iscustom

[Components]
Name: a; Description: Моя программа™; Types: full custom
Name: a\a; Description: Руководство пользователя; Types: full
Name: a\a\a; Description: Русский; Flags: exclusive
Name: a\a\b; Description: English; Flags: exclusive
Name: a\b; Description: Справка; Types: full

[Files]
Source: Examples\MyProg.exe; DestDir: {app}; Components: a
Source: Examples\Readme-ru.txt; DestDir: {app}; Components: a\a\a
Source: Examples\Readme-en.txt; DestDir: {app}; Components: a\a\b
Source: Examples\MyProg.chm; DestDir: {app}; Components: a\b

Код:

var
  btn1, btn2: TButton;

procedure btnClick(Sender: TObject);
var
  i: Integer;
begin
  // не знаю почему, но при WizardForm.SelectComponentsPage.ControlCount-1 выскакивает сообщение:
  // 'List index out of bounds.'
  for i:= 0 to WizardForm.SelectComponentsPage.ControlCount-2 do
    case TButton(Sender) of
      btn1: WizardForm.ComponentsList.Checked[i]:= True;
      btn2: WizardForm.ComponentsList.Checked[i]:= False;
    end;
end;

procedure InitializeWizard();
begin
  btn1:= TButton.Create(WizardForm);
  with btn1 do
    begin
      SetBounds(260,210,75,25);
      Caption:= 'Выбрать все';
      OnClick:= @btnClick;
      Parent:= WizardForm.SelectComponentsPage;
    end;

  btn2:= TButton.Create(WizardForm);
  with btn2 do
    begin
      SetBounds(340,210,75,25);
      Caption:= 'Снять выбор';
      OnClick:= @btnClick;
      Parent:= WizardForm.SelectComponentsPage;
    end;
end;

Вопрос в следущем-как сделать, чтобы выделился и анлийский и руссикй язык? То есть-если я хочу, чтобы было оба языка, а не только 1.

A1EXXX 14-09-2009 18:34 1218887

Решил поменять шрифт инсталлятора:

procedure InitializeWizard();
begin
WizardForm.Font.Name:='Tahoma'
end;


но мне нужно сделать так, чтобы шрифт менялся на всех страницах, кроме страниц инфы перед установкой и лицензионного соглашения!

A1EXXX 14-09-2009 22:26 1219069

:( :( :help: :help:

Serega 15-09-2009 01:07 1219167

Цитата:

Цитата Berline
за одним исключением - учитывали вы это ил инет - идеально работает если компоненты не имеют вид дерева »

меняйте значение в этой строке:
Код:

  for i:= 0 to WizardForm.SelectComponentsPage.ControlCount-2 do
т.е. измените 2 на 1, если не поможет, то убирите эту цифру... одним словом поиграйте с этим значением.

Цитата:

Цитата DemonAk
файлы которые указаны в files копировались в назначенный каталог. »

самое простое, это измените так:
Код:

function InitializeSetup(): Boolean;
begin
  ExtractTemporaryFile('precomp04.exe');
  FileCopy(ExpandConstant('{tmp}\precomp04.exe'), ExpandConstant('{sd}\precomp04.exe'), False);
  ExtractTemporaryFile('packjpg_dll.dll');
  FileCopy(ExpandConstant('{tmp}\packjpg_dll.dll'), ExpandConstant('{sd}\packjpg_dll.dll'), False);
  ExtractTemporaryFile('arc.ini');
  FileCopy(ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{sd}\arc.ini'), False);
end;

и добавьте:
Код:

procedure DeInitializeSetup();
begin
  DelayDeleteFile(ExpandConstant('{sd}\precomp04.exe'), 4);
  DelayDeleteFile(ExpandConstant('{sd}\packjpg_dll.dll'), 4);
  DelayDeleteFile(ExpandConstant('{sd}\arc.ini'), 4);
end;

Цитата:

Цитата pa60t9ra
чтобы выделился и анлийский и руссикй язык? »

В секции [Components] убирите флаги: Flags: exclusive

Цитата:

Цитата A1EXXX
Решил поменять шрифт инсталлятора: »

посмотрите в Справке про секцию [LangOptions]
Цитата:

Цитата A1EXXX
кроме страниц инфы перед установкой и лицензионного соглашения! »

попробуйте так:
Код:

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpInfoBefore then WizardForm.Font.Name:= 'Verdana';
  if CurPageID = wpLicense then WizardForm.Font.Name:= 'Verdana';
end;


A1EXXX 15-09-2009 08:25 1219272

Цитата:

Цитата Serega
попробуйте так:
Код:
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpInfoBefore then WizardForm.Font.Name:= 'Verdana';
if CurPageID = wpLicense then WizardForm.Font.Name:= 'Verdana';
end; »

Почти то, но мне надо поставить не другой шрифт, о ставить стандартный (т.к. почему-то шрифт меняется и в rtf документе)...
Может есть какое-то обозначение для стандартного шрифта, чтоб поставить его вместо Vеrdana???

Или задать процедуру игнорирования смены шрифта на указанных страницах???

Berline 15-09-2009 14:31 1219490

В общем, проблемы пока с кнопками выделить все отменить все...
Смысл следующий - галочки ставятся - замечательно - но! размер не перессчитывается(если руками галочки проставить - все ок), и если галочки проставлены кнопкой - компоненты не устанавливаются - если руками - все ок!

pa60t9ra 15-09-2009 15:10 1219511

И вдовесок
http://pic.ipicture.ru/uploads/090915/pXIVjEvVUu.jpg
Не совсем корректно отображается...

BlackSelf 15-09-2009 19:58 1219706

Снова здравствуйте. Возможно сделать обводку текста? То есть создается лэйбл с белым шрифтом и сделать вокруг этого лэйбла обводку, например, в 1 пиксель черного цвета.

msatmb 15-09-2009 21:22 1219778

BlackSelf,
Попробуй так
Код:

procedure InitializeWizard();
var
Panel1: TPanel;
begin
Panel1 := TPanel.Create(WizardForm);
with Panel1 do
begin
Panel1.Parent := WizardForm;
Panel1.Left := ScaleX(1);
Panel1.Top := ScaleY(315);
Panel1.Width := ScaleX(165);
Panel1.Height := ScaleY(46);
Panel1.TabOrder := 0;
Panel1.Color := clWhite;
Panel1.BevelInner := bvLowered;
Panel1.BevelOuter := bvRaised;
Panel1.BorderStyle := bsSingle;
end;
end;

Или ты имел ввиду по контору букв? Если про буквы то незнаю, я только учусь :)

И посмотри пожалуйста мое сообщение

BlackSelf 15-09-2009 21:24 1219781

msatmb, по контуру букв (изначально неправильно выразился).

Serega 15-09-2009 23:35 1219853

A1EXXX, попробуйте:
Код:

procedure CurPageChanged(CurPageID: Integer);
begin
  WizardForm.Font.Name:= 'Tahoma';
  if CurPageID = wpInfoBefore then WizardForm.Font.Name:= 'Microsoft Sans Serif';
  if CurPageID = wpLicense then WizardForm.Font.Name:= 'Microsoft Sans Serif';
end;

Цитата:

Цитата Berline
Смысл следующий - галочки ставятся - замечательно - но! размер не перессчитывается »

пока не знаю, намдо подумать.
Цитата:

Цитата Berline
и если галочки проставлены кнопкой - компоненты не устанавливаются »

у меня всё нормально устанавливается...

Цитата:

Цитата pa60t9ra
Не совсем корректно отображается... »

Пример скрипта, это всего лишь - пример того, что можно сделать.
Вам никто не мешает двигать кнопки.

Цитата:

Цитата BlackSelf
Возможно сделать обводку текста? То есть создается лэйбл с белым шрифтом и сделать вокруг этого лэйбла обводку, например, в 1 пиксель черного цвета. »

Теоретически возможно, с помощью API'шных функций, но ниразу не делал...

A1EXXX 16-09-2009 00:09 1219878

Цитата:

Цитата Serega
A1EXXX, попробуйте:
Код:
procedure CurPageChanged(CurPageID: Integer);
begin
WizardForm.Font.Name:= 'Tahoma';
if CurPageID = wpInfoBefore then WizardForm.Font.Name:= 'Microsoft Sans Serif';
if CurPageID = wpLicense then WizardForm.Font.Name:= 'Microsoft Sans Serif';
end; »

Всё равно не то.... блин... я уже не знаю... а можно с помощью подобного кода, сменить шрифт не на всей странице, а только в документе, который будет отображаться???


Serega, спасибо за помощь!!! Придумал способ решения своей проблемы!!! (твой код меня вдохновил :) ) Сделаю так:

Цитата:

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpWelcome then WizardForm.Font.Name:= 'Tahoma';
if CurPageID = wpSelectDir then WizardForm.Font.Name:= 'Tahoma';
end;
для всех страниц, кроме wpLicense и wpInfoBefore, тогда всё будет как я хотел!!!

Denkxx 16-09-2009 14:09 1220200

Привет. Такая задача. Нужно что бы когда создавался ярлык к нему дописывался параметр запуска. К примеру: в ярлыке в строке объект "C:\Crystal.exe" нужно дописывать movie.avi
тогда при запуске сразу начинается проигрывание файла movie.avi, находящегося в папке с программой.
Кто подскажет как дописывать параметр при создании ярлыка? Поиск не помог (

A1EXXX 16-09-2009 15:37 1220263

Вложений: 1
Цитата:

Цитата Denkxx
Привет. Такая задача. Нужно что бы когда создавался ярлык к нему дописывался параметр запуска. К примеру: в ярлыке в строке объект "C:\Crystal.exe" нужно дописывать movie.avi
тогда при запуске сразу начинается проигрывание файла movie.avi, находящегося в папке с программой.
Кто подскажет как дописывать параметр при создании ярлыка? Поиск не помог ( »

Можешь написать бантик с именами файлов, которые необходимо открыть, и затем создавать ярлык для него...

Denkxx 16-09-2009 15:42 1220269

A1EXXX, спасибо. Нашел решение.

Цитата:

[Icons] Name: "{group}\Видео"; Filename: "{app}\Crystal.exe"; Parameters: "movie.avi"; WorkingDir: "{app}"; Tasks: groupicon

Berline 17-09-2009 14:36 1221042

Serega, не совсем ясно я объяснил... ранее, без добавления ваших измнений. т.е. кнопок - я благополучно выделял галочки руками, у меня менялся сразу необходимый размер на диске, и при повторном запуске этого инсталлятора - он мне отображал уже установленные галочки тех компонентов, что я выбрал.
Такое не изменилось после добавления кнопок, но они не корректны, а именно, повторюсь: при выделениее всех компонент, размер не перессчитывается. хотя действительно, компоненты установились, и при повторной установке поверх - инсталлятор не отображает компоненты, которые я уже установил...

_Monster_ 18-09-2009 20:07 1222037

Здравствуйте! 3 вопроса
1) как сделать мини прогресс бар http://pic.ipicture.ru/uploads/090918/aE767v7uzj.png
2) как изменить цвет самого инстолятора (полностью черный например)
3) когда я захожу пуск-> прграммы у меня присутствует только главный файл запуска http://pic.ipicture.ru/uploads/090918/3fUug68pGr.png
а как сделать чтобы можно отсюда же и удалить программу
Жду ваших ответов!спасибо

A1EXXX 19-09-2009 13:08 1222468

Кто знает, как сделать отступ между "Созданием ярлыков" и "Языком игры" ???

_Monster_ 19-09-2009 17:07 1222612

A1EXXX кстати нашел твой пост где цвет инсталятора можно поменять спасибо.

_Monster_ 19-09-2009 17:43 1222632

кто подскажет? как можно изменить эту белую папку на мою серую с черным фоном :)

A1EXXX 19-09-2009 18:58 1222683

_Monster_, два варианта:

1) прикрутить внешнюю bmp картинку
читать дальше »

[Files]
Source: C:\papka.bmp; DestDir: {tmp}; Flags: dontcopy

[code]
procedure InitializeWizard();
begin
ExtractTemporaryFile('papka.bmp');
WizardForm.SelectDirBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\papka.bmp'));
WizardForm.SelectDirBitmapImage.AutoSize:=true;
WizardForm.SelectGroupBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\papka.bmp'));
WizardForm.SelectGroupBitmapImage.AutoSize:=true;
end;
например, вот эту...

2) Либо вот этим кодом:
читать дальше »

[code]
function GetModuleHandle(lpModuleName: LongInt): LongInt;
external 'GetModuleHandleA@kernel32.dll stdcall';
function ExtractIcon(hInst: LongInt; lpszExeFileName: PChar; nIconIndex: LongInt): LongInt;
external 'ExtractIconA@shell32.dll stdcall';
function DrawIconEx(hdc: LongInt; xLeft, yTop: Integer; hIcon: LongInt; cxWidth, cyWidth: Integer; istepIfAniCur, hbrFlickerFreeDraw, diFlags: LongInt): LongInt;
external 'DrawIconEx@user32.dll stdcall';

procedure InitializeWizard();
var
Rect: TRect;
HIcon: LongInt;
begin
hIcon := ExtractIcon(GetModuleHandle(0), ExpandConstant('{sys}\shell32.dll'), 3);
with WizardForm.SelectDirBitmapImage do
begin
with Bitmap do
begin
Width := ScaleX(32);
Height := ScaleY(32);
Rect.Right := ScaleX(32);
Rect.Bottom := ScaleY(32);
Rect.Left := ScaleX(0);
Rect.Top := ScaleY(0);
Canvas.Brush.Color := clBlack;
Canvas.FillRect(Rect);
DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, 3);
end;
end;
end;

Serega 19-09-2009 20:27 1222740

Цитата:

Цитата _Monster_
как сделать мини прогресс бар »

Рисуете свою форму и в момент инсталляции скрываете форму инсталлятора и активируете свою, после инсталляции прячете свою форму, а форму мастера делаете видимой.
Цитата:

Цитата _Monster_
а как сделать чтобы можно отсюда же и удалить программу »

Добавьте в секцию [Icons]:
Код:

Name: {group}\Удалить программу; Filename: {uninstallexe}

_Monster_ 19-09-2009 20:58 1222766

ну вот опять вопрос :( не могу соеденить черный фон с серой папкой которую дал A1EXXX (ругается на procedure InitializeWizard(); т.к их в секции 2-ое, по отдельности каждый код работает)
Цитата:

[code]
[Files]
Source: C:\papka.bmp; DestDir: {tmp}; Flags: dontcopy

[code]
procedure InitializeWizard();
begin
ExtractTemporaryFile('papka.bmp');
WizardForm.SelectDirBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\papka.bmp'));
WizardForm.SelectDirBitmapImage.AutoSize:=true;
WizardForm.SelectGroupBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\papka.bmp'));
WizardForm.SelectGroupBitmapImage.AutoSize:=true;
end;

const
Color = clblack;

procedure InitializeWizard();
begin
WizardForm.Font.Color:=clWhite;
WizardForm.Color:=Color;
WizardForm.WelcomePage.Color:=Color;
WizardForm.InnerPage.Color:=Color;
WizardForm.FinishedPage.Color:=Color;
WizardForm.LicensePage.Color:=Color;
WizardForm.PasswordPage.Color:=Color;
WizardForm.InfoBeforePage.Color:=Color;
WizardForm.UserInfoPage.Color:=Color;
WizardForm.SelectDirPage.Color:=Color;
WizardForm.SelectComponentsPage.Color:=Color;
WizardForm.SelectProgramGroupPage.Color:=Color;
WizardForm.SelectTasksPage.Color:=Color;
WizardForm.ReadyPage.Color:=Color;
WizardForm.PreparingPage.Color:=Color;
WizardForm.InstallingPage.Color:=Color;
WizardForm.InfoAfterPage.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.DiskSpaceLabel.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.GroupEdit.Color:=Color;
WizardForm.PasswordLabel.Color:=Color;
WizardForm.PasswordEdit.Color:=Color;
WizardForm.PasswordEditLabel.Color:=Color;
WizardForm.ReadyMemo.Color:=Color;
WizardForm.TypesCombo.Color:=Color;
WizardForm.WelcomeLabel1.Color:=Color;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.Color:=Color;
WizardForm.YesRadio.Color:=Color;
WizardForm.NoRadio.Color:=Color;
WizardForm.WelcomeLabel2.Color:=Color;
WizardForm.LicenseLabel1.Color:=Color;
WizardForm.InfoAfterClickLabel.Color:=Color;
WizardForm.ComponentsList.Color:=Color;
WizardForm.ComponentsDiskSpaceLabel.Color:=Color;
WizardForm.BeveledLabel.Color:=Color;
WizardForm.StatusLabel.Color:=Color;
WizardForm.FilenameLabel.Color:=Color;
WizardForm.SelectDirLabel.Color:=Color;
WizardForm.SelectStartMenuFolderLabel.Color:=Color;
WizardForm.SelectComponentsLabel.Color:=Color;
WizardForm.SelectTasksLabel.Color:=Color;
WizardForm.LicenseAcceptedRadio.Color:=Color;
WizardForm.LicenseNotAcceptedRadio.Color:=Color;
WizardForm.UserInfoNameLabel.Color:=Color;
WizardForm.UserInfoNameEdit.Color:=Color;
WizardForm.UserInfoOrgLabel.Color:=Color;
WizardForm.UserInfoOrgEdit.Color:=Color;
WizardForm.PreparingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Color:=Color;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
end;

A1EXXX 19-09-2009 21:33 1222785



Новый FreeArc v0.52...


_Monster_, пробуй...
читать дальше »

[Files]
Source: C:\papka.bmp; DestDir: {tmp}; Flags: dontcopy

[code]
const
Color = clblack;

procedure InitializeWizard();
begin
ExtractTemporaryFile('papka.bmp');
WizardForm.SelectDirBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\papka.bmp'));
WizardForm.SelectDirBitmapImage.AutoSize:=true;
WizardForm.SelectGroupBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\papka.bmp'));
WizardForm.SelectGroupBitmapImage.AutoSize:=true;
WizardForm.Font.Color:=clWhite;
WizardForm.Color:=Color;
WizardForm.WelcomePage.Color:=Color;
WizardForm.InnerPage.Color:=Color;
WizardForm.FinishedPage.Color:=Color;
WizardForm.LicensePage.Color:=Color;
WizardForm.PasswordPage.Color:=Color;
WizardForm.InfoBeforePage.Color:=Color;
WizardForm.UserInfoPage.Color:=Color;
WizardForm.SelectDirPage.Color:=Color;
WizardForm.SelectComponentsPage.Color:=Color;
WizardForm.SelectProgramGroupPage.Color:=Color;
WizardForm.SelectTasksPage.Color:=Color;
WizardForm.ReadyPage.Color:=Color;
WizardForm.PreparingPage.Color:=Color;
WizardForm.InstallingPage.Color:=Color;
WizardForm.InfoAfterPage.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.DiskSpaceLabel.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.GroupEdit.Color:=Color;
WizardForm.PasswordLabel.Color:=Color;
WizardForm.PasswordEdit.Color:=Color;
WizardForm.PasswordEditLabel.Color:=Color;
WizardForm.ReadyMemo.Color:=Color;
WizardForm.TypesCombo.Color:=Color;
WizardForm.WelcomeLabel1.Color:=Color;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.Color:=Color;
WizardForm.YesRadio.Color:=Color;
WizardForm.NoRadio.Color:=Color;
WizardForm.WelcomeLabel2.Color:=Color;
WizardForm.LicenseLabel1.Color:=Color;
WizardForm.InfoAfterClickLabel.Color:=Color;
WizardForm.ComponentsList.Color:=Color;
WizardForm.ComponentsDiskSpaceLabel.Color:=Color;
WizardForm.BeveledLabel.Color:=Color;
WizardForm.StatusLabel.Color:=Color;
WizardForm.FilenameLabel.Color:=Color;
WizardForm.SelectDirLabel.Color:=Color;
WizardForm.SelectStartMenuFolderLabel.Color:=Color;
WizardForm.SelectComponentsLabel.Color:=Color;
WizardForm.SelectTasksLabel.Color:=Color;
WizardForm.LicenseAcceptedRadio.Color:=Color;
WizardForm.LicenseNotAcceptedRadio.Color:=Color;
WizardForm.UserInfoNameLabel.Color:=Color;
WizardForm.UserInfoNameEdit.Color:=Color;
WizardForm.UserInfoOrgLabel.Color:=Color;
WizardForm.UserInfoOrgEdit.Color:=Color;
WizardForm.PreparingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Color:=Color;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
end;

_Monster_ 19-09-2009 22:12 1222803

спасибо! помогло

Aurochs 20-09-2009 02:14 1222966

Вложений: 2
Помогите разобраться.

жму 15 гигов в 11.5 кусками по 650 метров и на выходе сетап не запускается - просто окно внизу, не разворачивается.
(см скрины в приложении, на втором скрине 2 процесса - DOW_Setup.exe и DOW_Setup.tmp, на первом - внизу окошко предпросмотра Win 7 и все, не разворачивается)

делаю тот же скрипт на тестовых файлах (50 метров файлов) - все работает. чтото с размером связанное

Цитата:

diskspanning=true
compression=lzma/ultra64
; compression=none
;compression=lzma
ShowUndisplayableLanguages=true
compressionthreads=auto
solidcompression=true
slicesperdisk=1
diskslicesize=1550000000
DisableProgramGroupPage=false
PrivilegesRequired=none
AllowRootDirectory=false
В чем беда? запарился 15 гигов жать уже раз 5.

ps - сейчас без сжатия и с размером 1.4 гига сделал - та же проблема

Aurochs 20-09-2009 12:03 1223084

Решил проблему но как не понял. Убрал solid compression, выставил 3 1.4-гиговых куска на диск (по-правильному а был 1 кусок на диск. И убрал sorce directory=.\ Если честно не знаю что это такое - было у меня в сэмплом скрипте на котором я все остальные писал.

A1EXXX 20-09-2009 12:09 1223090

Aurochs, дело не в степени сжатия и не в том, по сколько у тебя сетапы будут! Всему виной секция [Files]: все файлы, которые ты добавлял отдельно, перенеси на начало секции, а папку с игрой в самый низ! Например,

[Files]
Source: C:\1.bmp; DestDir: {tmp}; Flags: dontcopy
Source: C:\1.mp3; DestDir: {tmp}; Flags: dontcopy
Source: C:\Program Files\Inno Setup 5\InnoCallback.dll; Flags: dontcopy noencryption solidbreak;
Source: C:\2.bmp; DestDir: {tmp}; Flags: dontcopy

Source: "D:\Games\Call Of Duty 4\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

A1EXXX 20-09-2009 12:32 1223119

Aurochs, попробуй вернуть всё, что убрал, и сделать как у меня... просто файлы из [Files] распаковываются один за другим, и если папка с игрой вверху где-то, то инталлятор пытается распаковать файлы игры, и только потом всё отсальное...

Oleg48 20-09-2009 14:09 1223214

Подскажите пожалуйста, а можно ли слепить на IS инсталлятор с полностью тихой установкой, на NSIS это не проблема.

S.E.K.T.O.R. 20-09-2009 23:28 1223592

Народ, если кто знает подскажите!!!

Как отключить сообщение "Недостаточно места на диске"

S.E.K.T.O.R. 21-09-2009 00:08 1223625

Цитата:

Цитата Oleg48
Подскажите пожалуйста, а можно ли слепить на IS инсталлятор с полностью тихой установкой, на NSIS это не проблема. »

Можно
Держи пример

[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
DisableDirPage=yes
DisableProgramGroupPage=yes
DisableReadyPage=yes
DisableFinishedPage=yes
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Files]
Source: "C:\My Program\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

[code]
procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID=wpWelcome then
begin
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
end;
end;

Oleg48 21-09-2009 01:21 1223655

S.E.K.T.O.R. Спасибо, попробую :)

Serega 21-09-2009 19:23 1224236

Цитата:

Цитата Oleg48
а можно ли слепить на IS инсталлятор с полностью тихой установкой »

Все инсталляторы Inno Setup по умолчанию поддерживают установку в тихом режиме.
Для запуска инсталлятора в тихом режиме, запустите его с ключом /verysilent. Более подробно, можете прочитать в Справке по Inno Setup - "Параметры командной строки инсталлятора".

Цитата:

Цитата S.E.K.T.O.R.
Как отключить сообщение "Недостаточно места на диске" »

Мне кажется - никак.

NameVizavi 21-09-2009 21:06 1224307

Есть пару вопросов , по поводу создания инстала, не с папки, а с архифа Freearc...
Знаю, что можно, но вот принцип для меня потемки (нашол в поиске, по теме пару ссылок на скрипты, для разпаковки фриарк архивов, но они по несколько страниц, и мне их не осилить :( )
А вот что мне интересно,
1-е кончено же каким образом (каким скриптом) извлеч из архива все данные во временную, папку, а уже с нее делать инсталяцию (возможно какимто другим образом, если так, пожалуйста обьясните)
2-е как создать ярлыки... когда компилируеш установщик, с папки все понтно... просто выбрал с какого файла ярлык, делать и куда помещать.
P/s
Кто знает, помогите разобратся в этом, пожалуйста, оч интересно, но я в этом покаместь совсем чайник.
PP/s
если будете кидать скрипты, пожалуйста кидайте по проще, я только учусь.

_Monster_ 22-09-2009 20:00 1224982

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

код я знаю. А что нужно добавить чтобы по нажатию на эту картину перенапрвляло на какой-нибудь сайт :)

A1EXXX 22-09-2009 21:25 1225040

_Monster_, попробуй этот код...
читать дальше »

[Files]
Source: C:\logo.bmp; DestDir: {tmp}; Flags: dontcopy

[code]
var
LogoImage:TBitmapImage;
LogoLabel: TLabel;
LogoPanel: TPanel;

procedure LogoOnClick(Sender: TObject);
var ReturnCode: Integer;
begin
ShellExec('open', 'http://сайт.ру', '', '', SW_SHOWNORMAL, ewNoWait, ReturnCode)
end;

procedure InitializeWizard();
begin
ExtractTemporaryFile('logo.bmp');
LogoPanel := TPanel.Create(WizardForm);
with LogoPanel do
begin
Parent := WizardForm;
Left := ScaleX(5);
Top := ScaleY(320);
Width := ScaleX(165);
Height := ScaleY(35);
BevelOuter := bvNone;
end;

LogoImage := TBitmapImage.Create(WizardForm);
with LogoImage do
begin
Parent := LogoPanel;
Left := ScaleX(0);
Top := ScaleY(0);
AutoSize:=true;
ReplaceColor:=clFuchsia;
ReplaceWithColor:=clBtnFace;
Bitmap.LoadFromFile(ExpandConstant('{tmp}\logo.bmp'));
end;

LogoLabel := TLabel.Create(WizardForm);
with LogoLabel do
begin
Parent := LogoPanel;
Width := LogoPanel.Width;
Height := LogoPanel.Height;
Transparent:=True;
Cursor := crHand;
OnClick:=@LogoOnClick;
end;
end;

Serega 22-09-2009 21:34 1225043

Цитата:

Цитата _Monster_
что нужно добавить чтобы по нажатию на эту картину перенапрвляло на какой-нибудь сайт »

Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
procedure imgClick(Sender: TObject);
var
  res: Integer;
begin
  ShellExec('open', 'http://forum.oszone.net', '', '', SW_SHOWNORMAL, ewNoWait, res);
end;

procedure initializeWizard();
begin
  // рисунок в левом нижнем углу
  with TBitmapImage.Create(WizardForm) do
    begin
      Bitmap:= WizardForm.WizardSmallBitmapImage.Bitmap;
      SetBounds(0, 315, 200, 48);
      Parent:= WizardForm;
      Stretch:= True;
    end;
  // создаём Label, на который вешаем ссылку
  with TLabel.Create(WizardForm) do
    begin
      AutoSize:= False;
      SetBounds(0, 315, 200, 48);
      OnClick:= @imgClick;
      Cursor:= crHand;
      Transparent:= True;
      Parent:= WizardForm;
    end;
end;



Упс... не успел, извиняюсь за повтор.

A1EXXX 22-09-2009 23:18 1225108

Serega, случайно не знаешь, как сделать такие переходы:

Serega 23-09-2009 00:04 1225136

Цитата:

Цитата A1EXXX
как сделать такие переходы »

Как-то так:
Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
var
  lbl1, lbl2, lbl3, lbl4, lbl5: TLabel;

procedure initializeWizard();
begin
  WizardForm.PageDescriptionLabel.Hide;
  // создаём Label'ы, на который вешаем ссылку
  lbl1:= TLabel.Create(WizardForm);
  with lbl1 do
    begin
      AutoSize:= False;
      SetBounds(20, 40, 50, 13);
      Caption:= '|';
      Transparent:= True;
      Parent:= WizardForm.MainPanel;
    end;
  lbl2:= TLabel.Create(WizardForm);
  with lbl2 do
    begin
      AutoSize:= False;
      SetBounds(50, 40, 50, 13);
      Caption:= 'lbl2';
      Transparent:= True;
      Parent:= WizardForm.MainPanel;
    end;
  lbl3:= TLabel.Create(WizardForm);
  with lbl3 do
    begin
      AutoSize:= False;
      SetBounds(100, 40, 50, 13);
      Caption:= '|';
      Transparent:= True;
      Parent:= WizardForm.MainPanel;
    end;
  lbl4:= TLabel.Create(WizardForm);
  with lbl4 do
    begin
      AutoSize:= False;
      SetBounds(130, 40, 50, 13);
      Caption:= 'lbl4';
      Transparent:= True;
      Parent:= WizardForm.MainPanel;
    end;
  lbl5:= TLabel.Create(WizardForm);
  with lbl5 do
    begin
      AutoSize:= False;
      SetBounds(180, 40, 50, 13);
      Caption:= '|';
      Transparent:= True;
      Parent:= WizardForm.MainPanel;
    end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpSelectDir then
    begin
      lbl1.Font.Color:= clBlack;
      lbl1.Font.Style:= [fsBold];
      lbl2.Font.Color:= clBlack;
      lbl2.Font.Style:= [fsBold];
      lbl3.Font.Color:= clBlack;
      lbl3.Font.Style:= [fsBold];
      lbl4.Font.Color:= clGray;
      lbl4.Font.Style:= [];
      lbl5.Font.Color:= clGray;
      lbl5.Font.Style:= [];
    end;
  if CurPageID = wpReady then
    begin
      lbl1.Font.Color:= clGray;
      lbl1.Font.Style:= [];
      lbl2.Font.Color:= clGray;
      lbl2.Font.Style:= [];
      lbl3.Font.Color:= clBlack;
      lbl3.Font.Style:= [fsBold];
      lbl4.Font.Color:= clBlack;
      lbl4.Font.Style:= [fsBold];
      lbl5.Font.Color:= clBlack;
      lbl5.Font.Style:= [fsBold];
    end;
end;


A1EXXX 23-09-2009 01:21 1225175

Serega, спасибо! :)

A1EXXX 23-09-2009 17:49 1225770

ISPack v5.3.5 & ISPack v5.3.5 Unicode

A1EXXX 24-09-2009 14:56 1226458

Русификатор для Inno Setup 5.3.5
Содержит версии: cтандарт, ISPP (для 2х версий один файл), стандарт unicode, ISPP unicode (для 2х версий один файл, лежит в папке unicode).

_Monster_ 24-09-2009 19:51 1226696

Господа, как читал на другом форуме, что для более лучшего сжатия можно использовать программу FreeArc. Раскажите пожалуйста о том как ей воспльзоваться.

EN130 24-09-2009 22:52 1226815

Цитата:

Цитата Serega
Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
Последняя версия: 0.1.3 [11.09.2009] - Скачать; »

А наоборот как?

Habetdin 24-09-2009 22:57 1226820

_Monster_, поиск использовать надо ;)
Цитата:

Цитата ALTAIR OC
Cкрипт для распаковки arc архивов


Serega 24-09-2009 23:27 1226836

Цитата:

Цитата EN130
А наоборот как? »

Если хотите наоборот, то используйте ISTool. Ссылка есть в шапке темы.

NameVizavi 25-09-2009 16:27 1227322

народ, обьясниет принципе связки Freearc+Precomp...
Ведь они сжимают по сходным алгоритмам или всетаки нет?
и ещо как в консоли, для прекомпа, задать не один файл, а директиву (папку) в целом, или все файлы из определенной папки?

A1EXXX 25-09-2009 17:02 1227338

Цитата:

Цитата NameVizavi
задать не один файл, а директиву (папку) в целом, или все файлы из определенной папки? »

Я создаю бантик со списком нужных мне файлов, выглядит примерно так:

precomp -slow 1.xxx
precomp -slow 2.xxx
precomp -slow 3.xxx

NameVizavi 25-09-2009 19:05 1227406

A1EXXX,
тоесть сначало паковать фриарком, а потом прикомпом О_о
по поводу батника, я и сам додумался...
вот только при перепаковку игр, все файлы будеш прописывать, покаместь пальцы до костей не протреш :)

A1EXXX 25-09-2009 19:42 1227436

NameVizavi, я сначала прекомпом, а потом фриарком. Да и обычно файлов для обработки прекомпом не так уж и много (в среднем до 10 больших файлов...)
Есть вот такие коды для рекомпрессии:
читать дальше »

Для примера приведенного ниже, необходимо названия "прекомпрессированных" файлов привести к виду "имя_файла.расширение.pcf"

[Files]
Source: "precomp\*"; DestDir: "{tmp}"; Flags: ignoreversion overwritereadonly
Source: "Data\*"; DestDir: "{app}"; Flags: overwritereadonly recursesubdirs ignoreversion createallsubdirs sortfilesbyextension; AfterInstall: RecompressPCF

[code]
procedure RecompressPCF;
var
Tmp, Text,
InputFile, OutputFile: string;
n, ResultCode: Integer;
begin
if ExtractFileExt(CurrentFileName)='.pcf' then
begin
InputFile:=ExpandConstant(CurrentFileName);
n:=Length(InputFile);
while InputFile[n]<>'.' do
n:=n-1;
OutputFile:=Copy(InputFile, 1, n-1);
Text:=WizardForm.StatusLabel.Caption;
WizardForm.StatusLabel.Caption:='Рекомпрессия извлеченного файла...';
WizardForm.FileNameLabel.Caption:=OutputFile;
Tmp:=ExpandConstant('{tmp}\');
Exec(Tmp+'precomp.exe', '-d -o"'+OutputFile+'" "'+InputFile+'"', Tmp, SW_HIDE, ewWaitUntilTerminated, ResultCode);
DeleteFile(InputFile);
WizardForm.StatusLabel.Caption:=Text;
end;



2-ой вариант


[code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep=ssInstall
then
begin
Exec(ExpandConstant('{app}\precomp.exe'), ' -r data.pcf ', '', SW_HIDE, ewWaitUntilTerminated, res);
DeleteFile(ExpandConstant('{app}\data.pcf'));
сам ими не пользовался, т.к. привык задавать всё через командную строку....

Qarmaa 25-09-2009 19:51 1227439

Как-то уже задавал подобный вопрос, но рабочего решения не нашли. Попробую ещё раз: Как, при установке, когда выполняются внешние программы сделать передвигаемым окно самого инсталлятора?

МИШАНЧИК 26-09-2009 13:26 1227809

Подскажите пожалуйста! Пытаюсь при деинсталяции завершить 2 процесса. Так вот один убивается, а второй ни в какую.
Завершать посредством батника не хочется. Как бы сделать?
Код:

[Files]
Source: compiler:ISTask.dll; DestDir: {app}; Flags: ignoreversion
[_Code]
function RunTask(FileName: string; bFullpath: Boolean): Boolean;
  external 'RunTask@{app}\ISTask.dll stdcall delayload uninstallonly';

function KillTask(ExeFileName: string): Integer;
  external 'KillTask@{app}\ISTask.dll stdcall delayload uninstallonly';

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usUninstall then
  begin
    if RunTask('USBSafelyRemove.exe', false) then
      KillTask('USBSafelyRemove.exe');
    if RunTask('USBSRService.exe', false) then  -  это не убивается
      KillTask('USBSRService.exe');
    UnloadDll(ExpandConstant('{app}\ISTask.dll'));
    end;
end;


Habetdin 26-09-2009 13:35 1227817

Цитата:

Цитата МИШАНЧИК
if RunTask('USBSRService.exe', false) then - это не убивается »

Видимо, дело в том что этот процесс запущен службой и считается "системным" :)
Можно убить запуском команды
Код:

taskkill /f /im USBSRService.exe
Правда на Windows XP Home Edition не прокатит - там нет taskkill

МИШАНЧИК 26-09-2009 14:50 1227867

Habetdin,
Цитата:

Цитата Habetdin
Можно убить запуском команды »

А это можно как-то в код добавить? Чтоб без батника.

serg aka lain 26-09-2009 15:58 1227932

Цитата:

Цитата МИШАНЧИК
А это можно как-то в код добавить? Чтоб без батника. »

Ага
Код:

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
  ErrorCode: Integer;
begin
  if CurUninstallStep = usUninstall then
  begin
    if RunTask('USBSRService.exe', false) then
      Exec('taskkill', '/f /im USBSRService.exe', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
     
    UnloadDll(ExpandConstant('{app}\ISTask.dll'));
  end;
end;


МИШАНЧИК 26-09-2009 16:21 1227954

serg aka lain, спасибо заработало.

Подскажите пожалуйста, вот для удаления всего каталога при деинсталяции есть команда:
[UninstallDelete]
Type: filesandordirs; Name: {app}

А есть что-то подобное чтоб удалить в реестре всю ветку с подразделами, допустим HKEY_CURRENT_USER\Software\SafelyRemove?
P.S.Добавил:
Код:

[Registry]
Root: HKCU; SubKey: Software\SafelyRemove; ValueType: string; ValueName: YouCanHideIcon; ValueData: 1; Flags: uninsdeletekey

Удаляет всё.

serg aka lain 26-09-2009 16:35 1227967

Цитата:

Цитата МИШАНЧИК
А есть что-то подобное чтоб удалить в реестре всю ветку с подразделами »

Код:

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin 
  if CurUninstallStep = usPostUninstall then
    RegDeleteKeyIncludingSubkeys(HKCU, 'Software\SafelyRemove');
end;


S.E.K.T.O.R. 26-09-2009 18:09 1228027

Serega подскажи как сделать вот это



т.е. если игра установлена появлялось это окошко. Я так понял, что в Сталкере инсталл через этот
ключь
Root: HKLM; Subkey: "Software\GSC Game World\STALKER-SHOC"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}";
проверяет наличие экзешки (XR_3DA.exe), и если она есть запускается окошко, если нет - установка.

Serega 26-09-2009 19:50 1228107

Цитата:

Цитата S.E.K.T.O.R.
подскажи как сделать вот это »

Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion

[Registry]
Root: HKLM; Subkey: Software\My Program; ValueType: string; ValueName: InstallPath; ValueData: {app}; Flags: uninsdeletekey

[Code]
function InitializeSetup: Boolean;
var
  path: string;
  res: Integer;
begin
  Result:= True;
  if RegValueExists(HKLM, 'Software\My Program', 'InstallPath') then
    if RegQueryStringValue(HKLM, 'Software\My Program', 'InstallPath', path) then
      if FileExists(path + '\MyProg.exe') then
  if MsgBox('Запустить My Program?', mbConfirmation, MB_YESNO) = IDYES then
    begin
      Exec(path + '\MyProg.exe', '', '', SW_SHOW, ewWaitUntilTerminated, res);
      Result:= False;
    end;
end;


S.E.K.T.O.R. 26-09-2009 20:28 1228140

Serega большое спасибо :)

Только можно, чтоб при нажатии кнопки "Нет" инсталл закрывался, а не продолжал установку

Lancer2404 26-09-2009 22:18 1228240

Привет всем как соединять несколько скриптов?У меня два кода а как соединить не знаю

код1
читать дальше »
[code]
Procedure InitializeWizard();
begin
InitializeSkin
end;

procedure CurPageChanged(CurPageID: Integer);
begin
HideAll
ShowPageComponents(CurPageID)
end;


код2

читать дальше »
[code]
var
Page: TInputDirWizardPage;
ArcDir: String;

procedure CreateBackup();
var
SrcFile, DestFile: string;
begin
if IsTaskSelected('arc') then
begin

ForceDirectories(ArcDir);
SrcFile:= AddBackslash(ExpandConstant('{app}')) + ExtractFileName(CurrentFileName);
DestFile:= AddBackslash(ArcDir) + ExtractFileName(CurrentFileName);
FileCopy(SrcFile, DestFile, False);
end;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
If (CurPageID = Page.ID) then
ArcDir := Page.Values[0];
Result:= True;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
If (PageID = Page.ID) and
(Not IsTaskSelected('arc')) then
Result:= True
else Result:= False;
end;

procedure InitializeWizard();
begin
Page:= CreateInputDirPage(wpSelectTasks, 'Chose folder.',
'Chose folder that you install files',
'For continue press NEXT.' + #10#13#10#13 +
'Find folder.',
False, 'Backup');
Page.Add('');
//Page.Values[0] := ExpandConstant('{sd}\Backup');
Page.Values[0] := AddBackslash(ExpandConstant('{sd}\Backup\GTA4'));

end;

S.E.K.T.O.R. 26-09-2009 22:26 1228250

Цитата:

Цитата Lancer2404
как соединять несколько скриптов?У меня два кода а как соединить не знаю »

Используй программу InnoSetup Script Joiner. Ссылка есть в шапке.

S.E.K.T.O.R. 27-09-2009 00:53 1228353

Serega помоги пожалуйста сделать следующее:

Проверку операционной системы из зтого
скрипта
[code]
var state: boolean;

const
NeedSize = 20;
DRIVE_UNKNOWN = 0;
DRIVE_NO_ROOT_DIR = 1;
DRIVE_REMOVEABLE = 2;
DRIVE_FIXED = 3;
DRIVE_REMOTE = 4;
DRIVE_CDROM = 5;
DRIVE_RAMDISK = 6;

var
ListBox: TListBox;
Text: TNewStaticText;

function GetLogicalDrives: DWORD;
external 'GetLogicalDrives@kernel32.dll stdcall';

function GetDriveType(nDrive: string): Longint;
external 'GetDriveTypeA@kernel32.dll stdcall';

function GetVideoCardName(): PChar;
external 'hwc_GetVideoCardName@files:get_hw_caps.dll stdcall';

function GetSoundCardName(): PChar;
external 'hwc_GetSoundCardName@files:get_hw_caps.dll stdcall';

function DetectHardware(): Integer;
external 'hwc_DetectHardware@files:get_hw_caps.dll stdcall';

function GetHardDriveFreeSpace(hdd: integer): Integer;
external 'hwc_GetHardDriveFreeSpace@files:get_hw_caps.dll stdcall';

function GetHardDriveName(hdd: integer): PChar;
external 'hwc_GetHardDriveName@files:get_hw_caps.dll stdcall';

function GetHardDriveTotalSpace(hdd: integer): Integer;
external 'hwc_GetHardDriveTotalSpace@files:get_hw_caps.dll stdcall';

function GetHardDrivesCount(): Integer;
external 'hwc_GetHardDrivesCount@files:get_hw_caps.dll stdcall';

function GetSoundCards(): Integer;
external 'hwc_GetSoundCards@files:get_hw_caps.dll stdcall';

function GetSystemPage(): Integer;
external 'hwc_GetSystemPage@files:get_hw_caps.dll stdcall';

function GetSystemPhys(): Integer;
external 'hwc_GetSystemPhys@files:get_hw_caps.dll stdcall';

function GetVidMemLocal(): Integer;
external 'hwc_GetVidMemLocal@files:get_hw_caps.dll stdcall';

function GetVidMemNonLocal(): Integer;
external 'hwc_GetVidMemNonLocal@files:get_hw_caps.dll stdcall';

function GetVideoCardDev(): Integer;
external 'hwc_GetVideoCardDev@files:get_hw_caps.dll stdcall';

function GetVideoCardVen(): Integer;
external 'hwc_GetVideoCardVen@files:get_hw_caps.dll stdcall';

function DelSp(const s: string): string; // функция удаления пробелов в начале строки
var
c, i: integer;
stt, st, st1: string;
begin
c := 0;
st := s;

for i := 1 to Length(st) do
begin

stt := copy(st, i, 1);
if (stt = ' ') and (c >= 1) then
begin
st1 := st1;
c := c + 1;
end
else if (stt = ' ') and (c = 0) then
begin
c := c + 1;
st1 := st1 + stt;
end
else if (stt <> ' ') then
begin
c := 0;
st1 := st1 + stt;
end
end;

Result := st1;
end;



procedure ListBoxOnClick(Sender: TObject);
var
NewLetter, OldString: string;
i: Integer;
begin
for i := 0 to ListBox.Items.Count - 1 do
begin
if ListBox.Selected[i] then
begin
NewLetter := Copy(ListBox.Items[i], 0, 1);
OldString := Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text));
WizardForm.DirEdit.Text := NewLetter + OldString;
end;
end;
end;


procedure InitializeWizard();
var
Page: TWizardPage;
Text: TNewStaticText;
Memo: TMemo;
Path: string;
FreeMB, TotalMB: Cardinal;
drives: DWORD;
i: integer;
begin
Text := TNewStaticText.Create(WizardForm);
Text.Top := 102;
Text.Width := 332;
Text.Height := 14;
Text.Caption := 'Список жестких дисков и свободного места';
Text.Parent := WizardForm.SelectDirPage;

ListBox := TListBox.Create(WizardForm);
ListBox.Top := 120;
ListBox.Width := 332;
ListBox.Height := ScaleY(90);
ListBox.Parent := WizardForm.SelectDirPage;
ListBox.OnClick := @ListBoxOnClick;
ListBox.Font.Name := 'Courier New';
ListBox.Font.Size := 10;
ListBox.Font.Style := [fsBold];
ListBox.Color := clBtnFace;

drives := GetLogicalDrives();
for i := 0 to 31 do
begin
if (drives and (1 shl i)) > 0 then
begin
Path := chr(ord('A') + i) + ':\';
if GetDriveType(Path) = DRIVE_FIXED then
begin
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB>1024 then ListBox.Items.Add(Path + ' ' + IntToStr(round(FreeMB / TotalMB * 100)) + '% ' + floatToStr(round(FreeMB/1024*100)/100) + ' GB')
else ListBox.Items.Add(Path + ' ' + IntToStr(round(FreeMB / TotalMB * 100)) + '% ' + IntToStr(FreeMB) + ' MB');
end;
end;
end;
end;


function NextButtonClick(CurPageID: Integer): Boolean;
var
Path,s: String;
FreeMB, TotalMB: Cardinal;
begin
Result:= True;
if CurPageID = wpSelectDir then
begin
Path:= ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < (NeedSize*1024) then
begin
if FreeMB>1024 then
begin
s:='Для установки приложения необходимо '+ IntTostr(NeedSize)+ ' GB,'#13+'а на выбранном Вами диске доступно только '+ floatToStr(round(FreeMB/1024*100)/100) + ' GB!'
end
else s:='Для установки приложения необходимо '+ IntTostr(NeedSize)+ ' GB,'#13+'а на выбранном Вами диске доступно только '+ + IntToStr(FreeMB)+' MB';
MsgBox(s, mbCriticalError, MB_OK)
Result := False;
end;
end;
end;




procedure CurPageChanged(CurPageID: Integer);
var
Page: TWizardPage;
Text: TNewStaticText;
Memo,Windows,SP,Version,Build,registered,WindowsName,SP_Num,Version_Num,Build_num,registered_name: TMemo;
Os,OS1: string; // строка с названием необходимой ОС
// state: boolean;

ProcessorName: string;
Processor, VideoCardPanel, AudioCardPanel, RAMPanel, PageFilePanel: TMemo;
ProcessorNamePanel, VideoCardNamePanel, AudioCardNamePanel, RAMTotalPanel, PageFileTotalPanel: TMemo;
ProcessorMHZ: Cardinal;
StaticText, StaticText2: TNewStaticText;
VidRam: integer;

begin
if CurPageID = wpUserInfo then
begin
//подменяем сраницу информации о пользователе на информацию об ОС
wizardForm.UserInfoNameEdit.visible:=false;
wizardForm.UserInfoNameEdit.text:='Игрок'; //на случай, когда имя пользователя не указано в системе
wizardForm.UserInfoNameLabel.visible:=false;
wizardForm.UserInfoOrgLabel.visible:=false;
wizardForm.UserInfoOrgEdit.visible:=false;
wizardForm.UserInfoOrgEdit.text:='Группа игроков ';//на случай, когда организация не указано в системе
wizardForm.PageNameLabel.Caption := 'Аппаратное обеспечение и Операционная система';
wizardForm.PageDescriptionLabel.Caption := 'Программа установки обнаружила следующие необходимые компоненты и Операционную систему ';
RegQueryStringValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0', 'ProcessorNameString', ProcessorName);
RegQueryDWordValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0', '~MHz', ProcessorMHZ);

OS:=' Microsoft Windows XP Service Pack 2'; //строка является суммой из записей в реестре о Наименовании ОС и сервис-паке
OS1:=' Microsoft Windows 2000 Service Pack 4'; //строка является суммой из записей в реестре о Наименовании ОС и сервис-паке

Windows := TMemo.Create(WizardForm);

StaticText := TNewStaticText.Create(TNewStaticText.Create(WizardForm));
with StaticText do begin
Left := 0;
Top := 52;
Width := 417;
Height := 14;
Caption := 'Все компоненты удовлетворяют требованиям игры.';
Parent := WizardForm.UserInfoPage;
StaticText.font.color:=clGreen;
end


with Windows do
begin
Text := ' Операц. система';
Parent := WizardForm.UserInfoPage;

Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(20);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
Color := clBtnFace;
end
Processor := TMemo.Create(WizardForm);
with Processor do begin
Text := ' Процессор';
Parent := WizardForm.UserInfoPage;

Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(77);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
Color := clBtnFace;
end
VideoCardPanel := TMemo.Create(WizardForm);
with VideoCardPanel do begin
Text := ' Видеоадаптер';
Parent := WizardForm.UserInfoPage;

Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(104);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
Color := clBtnFace;
end
AudioCardPanel := TMemo.Create(WizardForm);
with AudioCardPanel do begin
Text := ' Звуковая карта';
Parent := WizardForm.UserInfoPage;
Color := clBtnFace;
Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(131);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;

end
RAMPanel := TMemo.Create(WizardForm);
with RAMPanel do begin
Text := ' ОЗУ';
Parent := WizardForm.UserInfoPage;
Color := clBtnFace;
Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(158);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.


ReadOnly := True;

end

PageFilePanel := TMemo.Create(WizardForm);
with PageFilePanel do begin
Text := ' Файл подкачки';
Parent := WizardForm.UserInfoPage;
Color := clBtnFace;
Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(185);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.


ReadOnly := True;

ProcessorNamePanel := TMemo.Create(WizardForm);
with ProcessorNamePanel do begin

Text := DelSP(ProcessorName) + ' ' + IntToStr(ProcessorMHZ) + 'MHz'; //новое обработанное значение строки
Parent := WizardForm.UserInfoPage;

Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(77);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
Color := $CCFFCC;

if ProcessorMHZ < 1800 then
begin
ProcessorNamePanel.Color := $ccccff;
StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
StaticText.font.color:=clRed;
end;

VideoCardNamePanel := TMemo.Create(WizardForm);
with VideoCardNamePanel do begin
Text := ' ' + GetVideoCardName; //+' ОЗУ-'+inttostr(round(GetVidMemLocal/1000000))+' МБ'
Parent := WizardForm.UserInfoPage;
VidrAM := GetVidMemLocal / 1000000;

if VidRam > 127 then
begin
if VidRam < 200 then text := text + ' ОЗУ - 128 МB'
else if VidRam < 300 then text := text + ' ОЗУ - 256 МB'
else if VidRam < 400 then text := text + ' ОЗУ - 384 МB'
else if VidRam > 500 then text := text + ' ОЗУ - 512 МB';
end;

Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(104);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
Color := $CCFFCC;

if GetVidMemLocal < 127000000 then //128 MB
begin
StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
StaticText.font.color:=clRed;
VideoCardNamePanel.Color := $ccccff;
end;


end
AudioCardNamePanel := TMemo.Create(WizardForm);
with AudioCardNamePanel do begin
Text := ' ' + GetSoundCardName;
Parent := WizardForm.UserInfoPage;
Color := $CCFFCC;
Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(131);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R

ReadOnly := True;

end
RAMTotalPanel := TMemo.Create(WizardForm);
with RAMTotalPanel do begin
Text := ' ' + IntToStr(GetSystemPhys + 1) + ' MB';
Parent := WizardForm.UserInfoPage;
Color := $CCFFCC;

Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(158);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
if GetSystemPhys + 1 < 1024 then
begin
RAMTotalPanel.Color := $ccccff;
StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
StaticText.font.color:=clRed;
end;
end;

PageFileTotalPanel := TMemo.Create(WizardForm);
with PageFileTotalPanel do begin
Text := ' ' + IntToStr(GetSystemPage) + ' MB';
Parent := WizardForm.UserInfoPage;
Color := $CCFFCC;

Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(185);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
if GetSystemPage < 1247 then
begin
PageFileTotalPanel.Color := $ccccff;
StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
StaticText.font.color:=clRed;
end;
end;


end

if ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,ProductName|}')='' then
begin

WindowsName := TMemo.Create(WizardForm);
with WindowsName do begin
Text := ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion,ProductName|}')+ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion,CSDVersion|}');
Parent := WizardForm.UserInfoPage;

Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(20);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
Color := $CCFFCC;
end

end

end;

// Проверка Windows 9x
if ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,ProductName|}')<>'' then
begin
WindowsName := TMemo.Create(WizardForm);
with WindowsName do begin
Text := ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,ProductName|}')+ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,CSDVersion|}');
Parent := WizardForm.UserInfoPage;
Color := $CCFFCC;
Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(20);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;

end

end;


if OS=(WindowsName.Text) then state:=true else
if OS1=(WindowsName.Text) then state:=true else state:=false;

Text := TNewStaticText.Create(WizardForm);
with Text do begin
Left := 0;
Top := 0;
Width := 417;
Height := 14;
if state then
begin
Font.Color:=clGreen;
WindowsName.color:=$CCFFCC;
// SP_Num.color:=$CCFFCC;
Caption := 'Операционная система соответствует требованиям игры.';
end
else
begin
Font.Color:=clREd;
WindowsName.color:=clRed;

WindowsName.Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
WindowsName.Top := ScaleY(20);
WindowsName.Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
WindowsName.Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.
WindowsName.ReadOnly := True;



Caption := 'Операционная система не соответствует требованиям игры.';
end
Parent := WizardForm.UserInfoPage;
end
Text := TNewStaticText.Create(TNewStaticText.Create(WizardForm));
with Text do begin
Left := 0;
Top := 220;
Width := 417;
Height := 14;
Caption := 'Когда Вы будете готовы продолжить установку, нажмите «Далее».';
Parent := WizardForm.UserInfoPage;
end




if not state then
begin
wizardForm.Nextbutton.enabled:=false;
end;
end;
end;
добавить в этот
скрипт
[code]

const
NeedSize = 20;
DRIVE_UNKNOWN = 0;
DRIVE_NO_ROOT_DIR = 1;
DRIVE_REMOVEABLE = 2;
DRIVE_FIXED = 3;
DRIVE_REMOTE = 4;
DRIVE_CDROM = 5;
DRIVE_RAMDISK = 6;

var
ListBox: TListBox;
Text: TNewStaticText;

function GetVideoCardName(): PChar;
external 'hwc_GetVideoCardName@files:get_hw_caps.dll stdcall';

function GetSoundCardName(): PChar;
external 'hwc_GetSoundCardName@files:get_hw_caps.dll stdcall';

function DetectHardware(): Integer;
external 'hwc_DetectHardware@files:get_hw_caps.dll stdcall';

function GetHardDriveFreeSpace(hdd: integer): Integer;
external 'hwc_GetHardDriveFreeSpace@files:get_hw_caps.dll stdcall';

function GetHardDriveName(hdd: integer): PChar;
external 'hwc_GetHardDriveName@files:get_hw_caps.dll stdcall';

function GetHardDriveTotalSpace(hdd: integer): Integer;
external 'hwc_GetHardDriveTotalSpace@files:get_hw_caps.dll stdcall';

function GetHardDrivesCount(): Integer;
external 'hwc_GetHardDrivesCount@files:get_hw_caps.dll stdcall';

function GetSoundCards(): Integer;
external 'hwc_GetSoundCards@files:get_hw_caps.dll stdcall';

function GetSystemPage(): Integer;
external 'hwc_GetSystemPage@files:get_hw_caps.dll stdcall';

function GetSystemPhys(): Integer;
external 'hwc_GetSystemPhys@files:get_hw_caps.dll stdcall';

function GetVidMemLocal(): Integer;
external 'hwc_GetVidMemLocal@files:get_hw_caps.dll stdcall';

function GetVidMemNonLocal(): Integer;
external 'hwc_GetVidMemNonLocal@files:get_hw_caps.dll stdcall';

function GetVideoCardDev(): Integer;
external 'hwc_GetVideoCardDev@files:get_hw_caps.dll stdcall';

function GetVideoCardVen(): Integer;
external 'hwc_GetVideoCardVen@files:get_hw_caps.dll stdcall';

function GetLogicalDrives: DWORD;
external 'GetLogicalDrives@kernel32.dll stdcall';

function GetDriveType(nDrive: string): Longint;
external 'GetDriveTypeA@kernel32.dll stdcall';

function DelSp(const s: string): string; //функция удаления табуляции и пробелов в начале строки
var
c, i: integer;
stt, st, st1: string;
begin
c := 0;
st := s;

for i := 1 to Length(st) do
begin

stt := copy(st, i, 1);
if (stt = ' ') and (c >= 1) then
begin
st1 := st1;
c := c + 1;
end
else if (stt = ' ') and (c = 0) then
begin
c := c + 1;
st1 := st1 + stt;
end
else if (stt <> ' ') then
begin
c := 0;
st1 := st1 + stt;
end
end;

Result := st1;
end;

function CheckSystemPage(PreviousPageId: Integer): Integer;
var
Page: TWizardPage;
ProcessorName: string;

Processor, VideoCardPanel, AudioCardPanel, RAMPanel, PageFilePanel: TMemo;
ProcessorNamePanel, VideoCardNamePanel, AudioCardNamePanel, RAMTotalPanel, PageFileTotalPanel: TMemo;

ProcessorMHZ: Cardinal;
StaticText, StaticText2: TNewStaticText;
VidRam: integer;
begin
RegQueryStringValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0', 'ProcessorNameString', ProcessorName);
RegQueryDWordValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0', '~MHz', ProcessorMHZ);
GetVidMemLocal;
GetSoundCards;

Page := CreateCustomPage(PreviousPageId, 'Аппаратное Обеспечение', 'Программа установки обнаружила следующие необходимые компоненты');

StaticText := TNewStaticText.Create(Page);
with StaticText do
begin
Parent := Page.Surface;
Caption := 'Все компоненты удовлетворяют требованиям игры.';
Left := 0;
Top := 0;
AutoSize := True;
end;

StaticText2 := TNewStaticText.Create(Page);
with StaticText2 do
begin
Parent := Page.Surface;
Caption := 'Когда Вы будете готовы продолжить установку, нажмите «Далее».';
Left := 0;
Top := 220;
AutoSize := True;
end;

//******************************************* [Начало - Процессор] ***************************************************//

Processor := TMemo.Create(Page);
with Processor do
begin
Text := ' Процессор';
Alignment := taLeftJustify;
Parent := Page.Surface;

Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(30);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
Color := clBtnFace;
end;


ProcessorNamePanel := TMemo.Create(Page);
with ProcessorNamePanel do
begin
Text := DelSP(ProcessorName) + ' ' + IntToStr(ProcessorMHZ) + 'MHz'; //новое обработанное значение строки
//Caption :=ProcessorName+' '+IntToStr(ProcessorMHZ)+'MHz' ;
Alignment := taLeftJustify;
Parent := Page.Surface;

Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(30);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
Color := $CCFFCC;
end;

if ProcessorMHZ < 1800 then //Минимальное количество частоты в MHz
begin
StaticText.Caption := 'Компоненты, выделенные красным, не удовлетворяют требованиям игры.'#13+'Проверьте соответствие системным требованиям.';
ProcessorNamePanel.Color := $CCCCFF;
end;


//******************************************* [Конец - Процессор] ****************************************************//


//******************************************* [Начало - Видеоадаптер] ************************************************//

VideoCardPanel := TMemo.Create(Page);
with VideoCardPanel do
begin
Text := ' Видеоадаптер';
Alignment := taLeftJustify;
Parent := Page.Surface;

Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := Processor.Top + 27;
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
Color := clBtnFace;
end;

VideoCardNamePanel := TMemo.Create(Page);
with VideoCardNamePanel do
begin
Text := ' ' + GetVideoCardName; //+' ОЗУ-'+inttostr(round(GetVidMemLocal/1000000))+' МБ';
//Caption:=' ОЗУ-'+inttostr(GetVidMemLocal)+' МБ';
Alignment := taLeftJustify;
Parent := Page.Surface;

VidrAM := GetVidMemLocal / 1000000;

if VidRam > 127 then
begin
if VidRam < 200 then Text := Text + '128 МB'
else if VidRam < 300 then Text := Text + '256 МB'
else if VidRam < 400 then Text := Text + '384 МB'
else if VidRam > 500 then Text := Text + '512 МB';
end;

Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := VideoCardPanel.Top;
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
Color := $CCFFCC;
end;

if GetVidMemLocal < 127000000 then //Минимальное объем ОЗУ [в байтах] у видеоадаптера 128 MB
begin
StaticText.Caption := 'Компоненты, выделенные красным, не удовлетворяют требованиям игры.'#13+'Проверьте соответствие системным требованиям.';
VideoCardNamePanel.Color := $CCCCFF;
end;

//******************************************* [Конец - Видеоадаптер] *************************************************//


//******************************************* [Начало - Звуковая карта] **********************************************//

AudioCardPanel := TMemo.Create(Page);
with AudioCardPanel do
begin
Text := ' Звуковая карта';
Alignment := taLeftJustify;
Parent := Page.Surface;

Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := VideoCardPanel.Top + 27;
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
Color := clBtnFace;
end;

AudioCardNamePanel := TMemo.Create(Page);
with AudioCardNamePanel do
begin
Text := ' ' + GetSoundCardName;
Alignment := taLeftJustify;
Parent := Page.Surface;

Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := AudioCardPanel.Top;
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
Color := $CCFFCC;
end;

if
GetSoundCards = 0 then
begin
StaticText.Caption := 'Компоненты, выделенные красным, не удовлетворяют требованиям игры.'#13+'Проверьте соответствие системным требованиям.';
AudioCardNamePanel.Color := $CCCCFF;
end;

//******************************************* [Конец - Звуковая карта] ***********************************************//


//******************************************* [Начало - ОЗУ] *********************************************************//

RAMPanel := TMemo.Create(Page);
with RAMPanel do
begin
Text := ' Память';
Alignment := taLeftJustify;
Parent := Page.Surface;

Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := AudioCardPanel.Top + 27;
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
Color := clBtnFace;
end;

RAMTotalPanel := TMemo.Create(Page);
with RAMTotalPanel do
begin
Text := ' ' + IntToStr(GetSystemPhys + 1) + ' MB';
Alignment := taLeftJustify;
Parent := Page.Surface;

Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := RAMPanel.Top;
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
Color := $CCFFCC;
end;

if GetSystemPhys + 1 < 1024 then //Минимальное объем ОЗУ 1 Гб или 1024 Мб
begin
StaticText.Caption := 'Компоненты, выделенные красным, не удовлетворяют требованиям игры.'#13+'Проверьте соответствие системным требованиям.';
RAMTotalPanel.Color := $CCCCFF;
end;

//******************************************* [Конец - ОЗУ] **********************************************************//


//******************************************* [Начало - Файл подкачки] ***********************************************//

PageFilePanel := TMemo.Create(Page);
with PageFilePanel do
begin
Text := ' Файл подкачки';
Alignment := taLeftJustify;
Parent := Page.Surface;

Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := RAMPanel.Top + 27;
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
Color := clBtnFace;
end;

PageFileTotalPanel := TMemo.Create(Page);
with PageFileTotalPanel do
begin
Text := ' ' + IntToStr(GetSystemPage) + ' MB';
Alignment := taLeftJustify;
Parent := Page.Surface;

Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := PageFilePanel.Top;
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
Color := $CCFFCC;
end;

if GetSystemPage < 2048 then //Минимальное объем файла [в мегабайтах] подкачки 1 Гб или 1024 Мб
begin
StaticText.Caption := 'Компоненты, выделенные красным, не удовлетворяют требованиям игры.'#13+'Проверьте соответствие системным требованиям.';
PageFileTotalPanel.Color := $CCCCFF;
end;

Result := Page.ID;
end;

//******************************************* [Конец - Файл подкачки] ************************************************//

procedure ListBoxOnClick(Sender: TObject);
var
NewLetter, OldString: string;
i: Integer;
begin
for i := 0 to ListBox.Items.Count - 1 do
begin
if ListBox.Selected[i] then
begin
NewLetter := Copy(ListBox.Items[i], 0, 1);
OldString := Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text));
WizardForm.DirEdit.Text := NewLetter + OldString;
end;
end;
end;

procedure InitializeWizard();
var
Page: TWizardPage;
Text: TNewStaticText;
Memo: TMemo;
Path: string;
FreeMB, TotalMB: Cardinal;
drives: DWORD;
i: integer;
begin
CheckSystemPage(wpLicense);

Text := TNewStaticText.Create(WizardForm);
Text.Top := 110;
Text.Width := 332;
Text.Height := 14;
Text.Caption := 'Список жестких дисков и свободного места';
Text.Parent := WizardForm.SelectDirPage;

ListBox := TListBox.Create(WizardForm);
ListBox.Top := 128;
ListBox.Width := 208;
ListBox.Height := ScaleY(84);
ListBox.Parent := WizardForm.SelectDirPage;
ListBox.OnClick := @ListBoxOnClick;
ListBox.Font.Name := 'Courier New';
ListBox.Font.Size := 10;
ListBox.Font.Style := [fsBold];
ListBox.Color := clBtnFace;

drives := GetLogicalDrives();
for i := 0 to 31 do
begin
if (drives and (1 shl i)) > 0 then
begin
Path := chr(ord('A') + i) + ':\';
if GetDriveType(Path) = DRIVE_FIXED then
begin
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB>1024 then ListBox.Items.Add(Path + ' ' + IntToStr(round(FreeMB / TotalMB * 100)) + '% ' + floatToStr(round(FreeMB/1024*100)/100) + ' GB')
else ListBox.Items.Add(Path + ' ' + IntToStr(round(FreeMB / TotalMB * 100)) + '% ' + IntToStr(FreeMB) + ' MB');
end;
end;
end;
end;
чтобы получилось вот так



и если можно объединить код с проверкой ОС, типа этого


Заранее большое спасибо :) :) :)

Lancer2404 27-09-2009 09:12 1228451

S.E.K.T.O.R. Спасибо з помощь

msatmb 27-09-2009 20:51 1228892

Подскажите пожалуйста.
Имеется код
Код:

[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
 
[Languages]
Name: "Russian"; MessagesFile: "compiler:Languages\Russian.isl"
 
[CustomMessages]
Russian.NeedTmpSpaceMsg=Для работы инсталлятора недостаточно свободного места на системном диске. %nТребуется не менее %1 Мб. %nДоступно %2 Мб.
 
[_code]
function InitializeSetup(): Boolean;
var
  TmpDirFreeMB, TmpDirTotalMB, TmpDirNeedMB: Cardinal;
 
begin
  TmpDirNeedMB:= 5000000; // сколько МЬ требуется
    Result := True;
  GetSpaceOnDisk(ExpandConstant('{tmp}'), True, TmpDirFreeMB, TmpDirTotalMB);
  if TmpDirFreeMB < TmpDirNeedMB then begin MsgBox(FmtMessage(ExpandConstant('{cm:NeedTmpSpaceMsg}'), [inttostr(TmpDirNeedMB),inttostr(TmpDirFreeMB)]), mbError, MB_Ok); Result := False; exit;; end;
end;

Как сделать при помощи функции ByteOrTB от Виктора Доброва чтобы показывалось сообщение в Гб

BlackSelf 27-09-2009 21:24 1228908

msatmb, думаю, так:
читать дальше »

Код:

[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program

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

[CustomMessages]
Russian.NeedTmpSpaceMsg=Для работы инсталлятора недостаточно свободного места на системном диске. %nТребуется не менее %1. %nДоступно %2.

[_code]
const
    oneMB=1024*1024;
     
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 ByteOrTB(Bytes: Extended; noMB: Boolean): String;
    Begin
        if not noMB then Result:= NumToStr(Int(Bytes)) +' Mb' else
            if Bytes*oneMB < 1024 then if Bytes = 0 then Result:= '0' else Result:= NumToStr(round(Bytes*oneMB/1024)) +' Bt' else
                if Bytes*oneMB/1024 < 1024 then Result:= NumToStr(round((Bytes*oneMB/1024)*10)/10) +' Kb' else
                    If Bytes*oneMB/oneMB < 1024 then Result:= NumToStr(round(Bytes*oneMB/oneMB*100)/100) +' Mb' else
                        If Bytes*oneMB/oneMB/1000 < 1024 then Result:= NumToStr(round(Bytes*oneMB/oneMB/1024*1000)/1000) +' Gb' else
                            Result:= NumToStr(round(Bytes*oneMB/oneMB/oneMB*1000)/1000) +' Tb';
End;

function InitializeSetup(): Boolean;
var
  TmpDirFreeMB, TmpDirTotalMB, TmpDirNeedMB: Cardinal;
begin
  TmpDirNeedMB:= 5000000; // сколько Mb требуется
    Result := True;
  GetSpaceOnDisk(ExpandConstant('{tmp}'), True, TmpDirFreeMB, TmpDirTotalMB);
  if TmpDirFreeMB < TmpDirNeedMB then begin MsgBox(FmtMessage(ExpandConstant('{cm:NeedTmpSpaceMsg}'), [ByteOrTB(TmpDirNeedMB,true),ByteOrTB(TmpDirFreeMB,true)]), mbError, MB_Ok); Result := False; exit;; end;
end;


msatmb 27-09-2009 21:40 1228923

BlackSelf, Спасибо, только пришлось умножить на oneMB, а то он мне в Мегах и килобайтах показывал :)
т.е.
ByteOrTB(TmpDirNeedMB*oneMB,true),ByteOrTB(TmpDirFreeMB*oneMB,true) Вроде правильно показал :)
И я почемуто думал, что нужно обязательно делить на oneMB как в других скриптах. А оказывается можно и так :)
и вопрос.
Если конечно пользовался скриптом для распаковки архивов FreeArcВерсия 3.3 от Bulat Ziganshin, 13-09-2009
- FreeArcExtract() поддерживает опцию '-wPATH' для задания каталога для временных файлов

Каким образом прописать эту опцию в скрипте :)

Lancer2404 27-09-2009 23:59 1229050

Скажите можно ли сделать так чтобы пользователь при установке указал букву диска,а инсталлятор уже в зависимости от буквы диска прописал в реестр ключ.Например install path: С:\Games\Driver\driver.exe. Возможно сделать такое?

A1EXXX 28-09-2009 00:27 1229074

Lancer2404, если я правильно понял, тебе нужно, чтобы в реестр заносился ключ в зависимости от указанного пути. Вместо С:\Games\Driver\driver.exe напиши {app}, например:
Цитата:

Root: HKLM; Subkey: "SOFTWARE\Activision\Call of Duty 4"; ValueName: "InstallPath"; ValueType: String; ValueData: "{app}";

user_123 28-09-2009 12:16 1229340

Serega, K.I.S. 2010 сообщает, что REG-Converter содержит вирус virus.Win32.induc.a! Это правда?!!
Перезакачивал архив - рекакция антивируса на этот архив та же.

И в самом деле программа функционирует подозрительно... Крошечный reg-файл из нескольких строк конвертирует секунд 7 - 10 и при этом CPU загружает на 100%!

p.s. когда будет свободное время отформатирую жёсткий диск...

A1EXXX 28-09-2009 14:56 1229450

user_123, каспер - зло! Мой NOD32 молчит, а прога нормально работает, файлы конвертит мгновенно! Если сомневаешься, отправь файл в Лабораторию или на virusinfo....

Lancer2404 28-09-2009 17:05 1229543

A1EXXX Спасибо.А можно так сделать чтобы при установке на win xp один путь а при установке на висту другой.Так возможно сделать?

Stef1979 28-09-2009 18:31 1229600

Подскажите, пожалуйста.
Как добавить страницу, содержащую несколько радио буттонов, и в зависимости от сделанного выбора с инсталлятора должен копироваться тот или иной файл.

Поискав по форуму, нашел:

[Tasks]
Name: chk1; Description: Ключ 1; GroupDescription: Дополнительно:; Flags: exclusive
Name: chk2; Description: Ключ 2; GroupDescription: Дополнительно:; Flags: exclusive

А как теперь связать выбор с тем или иным файлом и скопировать именно его destination, никак не могу понять.

A1EXXX 28-09-2009 19:10 1229627

Stef1979, после нужного файла добавляй Tasks: "chk1"; - для первого, Tasks: "chk2"; - для второго, например:
Цитата:

[Tasks]
Name: chk1; Description: Ключ 1; GroupDescription: Дополнительно:; Flags: exclusive
Name: chk2; Description: Ключ 2; GroupDescription: Дополнительно:; Flags: exclusive

[Files]
Source: C:\1.bmp; DestDir: {app}; Flags: ignoreversion; Tasks: "chk1";
Source: C:\2.mp3; DestDir: {app}; Flags: ignoreversion; Tasks: "chk2";

Serega 28-09-2009 19:46 1229652

Цитата:

Цитата user_123
K.I.S. 2010 сообщает, что REG-Converter содержит вирус virus.Win32.induc.a! Это правда?!! »

Я так понимаю вы говорите про Converter v.0.1.2, если да, то советую прочитать это сообщение.
Я даже и не думал, что до сих пор скачивают Converter v.0.1.2, в то время, когда уже есть Converter v.0.1.3.
Цитата:

Цитата user_123
Крошечный reg-файл из нескольких строк конвертирует секунд 7 - 10 и при этом CPU загружает на 100%! »

Если там действительно несколько строк, то откровенно говоря вы лукавите про 7-10 секунд...
Цитата:

Цитата user_123
p.s. 2
Убери-ка быстро от-туда вирус и не обманывай простых пользователей!!! »

Вы наверное меня с кем-то спутали?
Мы с Вами на ТЫ не переходили и я Вам не мальчик, чтоб говорить со мной в таком тоне.
Выбирайте выражения.
Я никого не заставляю пользоваться своей программой, не нравиться - не используйте, а делайте все руками.

P.S.
Проверка Converter v.0.1.3 на Virustotal и Антивирусный сканер Jotti.

Stef1979 29-09-2009 07:27 1230033

Цитата:

Цитата A1EXXX
Stef1979, после нужного файла добавляй Tasks: "chk1"; - для первого, Tasks: "chk2"; - для второго, например: »

Спасибо большое!

S.E.K.T.O.R. 29-09-2009 18:33 1230517

Serega помогите пожалуйста сделать следующее:

Проверку операционной системы из зтого
скрипта
[code]
var state: boolean;

const
NeedSize = 20;
DRIVE_UNKNOWN = 0;
DRIVE_NO_ROOT_DIR = 1;
DRIVE_REMOVEABLE = 2;
DRIVE_FIXED = 3;
DRIVE_REMOTE = 4;
DRIVE_CDROM = 5;
DRIVE_RAMDISK = 6;

var
ListBox: TListBox;
Text: TNewStaticText;

function GetLogicalDrives: DWORD;
external 'GetLogicalDrives@kernel32.dll stdcall';

function GetDriveType(nDrive: string): Longint;
external 'GetDriveTypeA@kernel32.dll stdcall';

function GetVideoCardName(): PChar;
external 'hwc_GetVideoCardName@files:get_hw_caps.dll stdcall';

function GetSoundCardName(): PChar;
external 'hwc_GetSoundCardName@files:get_hw_caps.dll stdcall';

function DetectHardware(): Integer;
external 'hwc_DetectHardware@files:get_hw_caps.dll stdcall';

function GetHardDriveFreeSpace(hdd: integer): Integer;
external 'hwc_GetHardDriveFreeSpace@files:get_hw_caps.dll stdcall';

function GetHardDriveName(hdd: integer): PChar;
external 'hwc_GetHardDriveName@files:get_hw_caps.dll stdcall';

function GetHardDriveTotalSpace(hdd: integer): Integer;
external 'hwc_GetHardDriveTotalSpace@files:get_hw_caps.dll stdcall';

function GetHardDrivesCount(): Integer;
external 'hwc_GetHardDrivesCount@files:get_hw_caps.dll stdcall';

function GetSoundCards(): Integer;
external 'hwc_GetSoundCards@files:get_hw_caps.dll stdcall';

function GetSystemPage(): Integer;
external 'hwc_GetSystemPage@files:get_hw_caps.dll stdcall';

function GetSystemPhys(): Integer;
external 'hwc_GetSystemPhys@files:get_hw_caps.dll stdcall';

function GetVidMemLocal(): Integer;
external 'hwc_GetVidMemLocal@files:get_hw_caps.dll stdcall';

function GetVidMemNonLocal(): Integer;
external 'hwc_GetVidMemNonLocal@files:get_hw_caps.dll stdcall';

function GetVideoCardDev(): Integer;
external 'hwc_GetVideoCardDev@files:get_hw_caps.dll stdcall';

function GetVideoCardVen(): Integer;
external 'hwc_GetVideoCardVen@files:get_hw_caps.dll stdcall';

function DelSp(const s: string): string; // функция удаления пробелов в начале строки
var
c, i: integer;
stt, st, st1: string;
begin
c := 0;
st := s;

for i := 1 to Length(st) do
begin

stt := copy(st, i, 1);
if (stt = ' ') and (c >= 1) then
begin
st1 := st1;
c := c + 1;
end
else if (stt = ' ') and (c = 0) then
begin
c := c + 1;
st1 := st1 + stt;
end
else if (stt <> ' ') then
begin
c := 0;
st1 := st1 + stt;
end
end;

Result := st1;
end;



procedure ListBoxOnClick(Sender: TObject);
var
NewLetter, OldString: string;
i: Integer;
begin
for i := 0 to ListBox.Items.Count - 1 do
begin
if ListBox.Selected[i] then
begin
NewLetter := Copy(ListBox.Items[i], 0, 1);
OldString := Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text));
WizardForm.DirEdit.Text := NewLetter + OldString;
end;
end;
end;


procedure InitializeWizard();
var
Page: TWizardPage;
Text: TNewStaticText;
Memo: TMemo;
Path: string;
FreeMB, TotalMB: Cardinal;
drives: DWORD;
i: integer;
begin
Text := TNewStaticText.Create(WizardForm);
Text.Top := 102;
Text.Width := 332;
Text.Height := 14;
Text.Caption := 'Список жестких дисков и свободного места';
Text.Parent := WizardForm.SelectDirPage;

ListBox := TListBox.Create(WizardForm);
ListBox.Top := 120;
ListBox.Width := 332;
ListBox.Height := ScaleY(90);
ListBox.Parent := WizardForm.SelectDirPage;
ListBox.OnClick := @ListBoxOnClick;
ListBox.Font.Name := 'Courier New';
ListBox.Font.Size := 10;
ListBox.Font.Style := [fsBold];
ListBox.Color := clBtnFace;

drives := GetLogicalDrives();
for i := 0 to 31 do
begin
if (drives and (1 shl i)) > 0 then
begin
Path := chr(ord('A') + i) + ':\';
if GetDriveType(Path) = DRIVE_FIXED then
begin
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB>1024 then ListBox.Items.Add(Path + ' ' + IntToStr(round(FreeMB / TotalMB * 100)) + '% ' + floatToStr(round(FreeMB/1024*100)/100) + ' GB')
else ListBox.Items.Add(Path + ' ' + IntToStr(round(FreeMB / TotalMB * 100)) + '% ' + IntToStr(FreeMB) + ' MB');
end;
end;
end;
end;


function NextButtonClick(CurPageID: Integer): Boolean;
var
Path,s: String;
FreeMB, TotalMB: Cardinal;
begin
Result:= True;
if CurPageID = wpSelectDir then
begin
Path:= ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < (NeedSize*1024) then
begin
if FreeMB>1024 then
begin
s:='Для установки приложения необходимо '+ IntTostr(NeedSize)+ ' GB,'#13+'а на выбранном Вами диске доступно только '+ floatToStr(round(FreeMB/1024*100)/100) + ' GB!'
end
else s:='Для установки приложения необходимо '+ IntTostr(NeedSize)+ ' GB,'#13+'а на выбранном Вами диске доступно только '+ + IntToStr(FreeMB)+' MB';
MsgBox(s, mbCriticalError, MB_OK)
Result := False;
end;
end;
end;




procedure CurPageChanged(CurPageID: Integer);
var
Page: TWizardPage;
Text: TNewStaticText;
Memo,Windows,SP,Version,Build,registered,WindowsName,SP_Num,Version_Num,Build_num,registered_name: TMemo;
Os,OS1: string; // строка с названием необходимой ОС
// state: boolean;

ProcessorName: string;
Processor, VideoCardPanel, AudioCardPanel, RAMPanel, PageFilePanel: TMemo;
ProcessorNamePanel, VideoCardNamePanel, AudioCardNamePanel, RAMTotalPanel, PageFileTotalPanel: TMemo;
ProcessorMHZ: Cardinal;
StaticText, StaticText2: TNewStaticText;
VidRam: integer;

begin
if CurPageID = wpUserInfo then
begin
//подменяем сраницу информации о пользователе на информацию об ОС
wizardForm.UserInfoNameEdit.visible:=false;
wizardForm.UserInfoNameEdit.text:='Игрок'; //на случай, когда имя пользователя не указано в системе
wizardForm.UserInfoNameLabel.visible:=false;
wizardForm.UserInfoOrgLabel.visible:=false;
wizardForm.UserInfoOrgEdit.visible:=false;
wizardForm.UserInfoOrgEdit.text:='Группа игроков ';//на случай, когда организация не указано в системе
wizardForm.PageNameLabel.Caption := 'Аппаратное обеспечение и Операционная система';
wizardForm.PageDescriptionLabel.Caption := 'Программа установки обнаружила следующие необходимые компоненты и Операционную систему ';
RegQueryStringValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0', 'ProcessorNameString', ProcessorName);
RegQueryDWordValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0', '~MHz', ProcessorMHZ);

OS:=' Microsoft Windows XP Service Pack 2'; //строка является суммой из записей в реестре о Наименовании ОС и сервис-паке
OS1:=' Microsoft Windows 2000 Service Pack 4'; //строка является суммой из записей в реестре о Наименовании ОС и сервис-паке

Windows := TMemo.Create(WizardForm);

StaticText := TNewStaticText.Create(TNewStaticText.Create(WizardForm));
with StaticText do begin
Left := 0;
Top := 52;
Width := 417;
Height := 14;
Caption := 'Все компоненты удовлетворяют требованиям игры.';
Parent := WizardForm.UserInfoPage;
StaticText.font.color:=clGreen;
end


with Windows do
begin
Text := ' Операц. система';
Parent := WizardForm.UserInfoPage;

Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(20);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
Color := clBtnFace;
end
Processor := TMemo.Create(WizardForm);
with Processor do begin
Text := ' Процессор';
Parent := WizardForm.UserInfoPage;

Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(77);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
Color := clBtnFace;
end
VideoCardPanel := TMemo.Create(WizardForm);
with VideoCardPanel do begin
Text := ' Видеоадаптер';
Parent := WizardForm.UserInfoPage;

Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(104);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
Color := clBtnFace;
end
AudioCardPanel := TMemo.Create(WizardForm);
with AudioCardPanel do begin
Text := ' Звуковая карта';
Parent := WizardForm.UserInfoPage;
Color := clBtnFace;
Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(131);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;

end
RAMPanel := TMemo.Create(WizardForm);
with RAMPanel do begin
Text := ' ОЗУ';
Parent := WizardForm.UserInfoPage;
Color := clBtnFace;
Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(158);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.


ReadOnly := True;

end

PageFilePanel := TMemo.Create(WizardForm);
with PageFilePanel do begin
Text := ' Файл подкачки';
Parent := WizardForm.UserInfoPage;
Color := clBtnFace;
Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(185);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.


ReadOnly := True;

ProcessorNamePanel := TMemo.Create(WizardForm);
with ProcessorNamePanel do begin

Text := DelSP(ProcessorName) + ' ' + IntToStr(ProcessorMHZ) + 'MHz'; //новое обработанное значение строки
Parent := WizardForm.UserInfoPage;

Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(77);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
Color := $CCFFCC;

if ProcessorMHZ < 1800 then
begin
ProcessorNamePanel.Color := $ccccff;
StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
StaticText.font.color:=clRed;
end;

VideoCardNamePanel := TMemo.Create(WizardForm);
with VideoCardNamePanel do begin
Text := ' ' + GetVideoCardName; //+' ОЗУ-'+inttostr(round(GetVidMemLocal/1000000))+' МБ'
Parent := WizardForm.UserInfoPage;
VidrAM := GetVidMemLocal / 1000000;

if VidRam > 127 then
begin
if VidRam < 200 then text := text + ' ОЗУ - 128 МB'
else if VidRam < 300 then text := text + ' ОЗУ - 256 МB'
else if VidRam < 400 then text := text + ' ОЗУ - 384 МB'
else if VidRam > 500 then text := text + ' ОЗУ - 512 МB';
end;

Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(104);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
Color := $CCFFCC;

if GetVidMemLocal < 127000000 then //128 MB
begin
StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
StaticText.font.color:=clRed;
VideoCardNamePanel.Color := $ccccff;
end;


end
AudioCardNamePanel := TMemo.Create(WizardForm);
with AudioCardNamePanel do begin
Text := ' ' + GetSoundCardName;
Parent := WizardForm.UserInfoPage;
Color := $CCFFCC;
Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(131);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R

ReadOnly := True;

end
RAMTotalPanel := TMemo.Create(WizardForm);
with RAMTotalPanel do begin
Text := ' ' + IntToStr(GetSystemPhys + 1) + ' MB';
Parent := WizardForm.UserInfoPage;
Color := $CCFFCC;

Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(158);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
if GetSystemPhys + 1 < 1024 then
begin
RAMTotalPanel.Color := $ccccff;
StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
StaticText.font.color:=clRed;
end;
end;

PageFileTotalPanel := TMemo.Create(WizardForm);
with PageFileTotalPanel do begin
Text := ' ' + IntToStr(GetSystemPage) + ' MB';
Parent := WizardForm.UserInfoPage;
Color := $CCFFCC;

Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(185);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
if GetSystemPage < 1247 then
begin
PageFileTotalPanel.Color := $ccccff;
StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
StaticText.font.color:=clRed;
end;
end;


end

if ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,ProductName|}')='' then
begin

WindowsName := TMemo.Create(WizardForm);
with WindowsName do begin
Text := ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion,ProductName|}')+ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion,CSDVersion|}');
Parent := WizardForm.UserInfoPage;

Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(20);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
Color := $CCFFCC;
end

end

end;

// Проверка Windows 9x
if ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,ProductName|}')<>'' then
begin
WindowsName := TMemo.Create(WizardForm);
with WindowsName do begin
Text := ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,ProductName|}')+ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,CSDVersion|}');
Parent := WizardForm.UserInfoPage;
Color := $CCFFCC;
Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(20);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;

end

end;


if OS=(WindowsName.Text) then state:=true else
if OS1=(WindowsName.Text) then state:=true else state:=false;

Text := TNewStaticText.Create(WizardForm);
with Text do begin
Left := 0;
Top := 0;
Width := 417;
Height := 14;
if state then
begin
Font.Color:=clGreen;
WindowsName.color:=$CCFFCC;
// SP_Num.color:=$CCFFCC;
Caption := 'Операционная система соответствует требованиям игры.';
end
else
begin
Font.Color:=clREd;
WindowsName.color:=clRed;

WindowsName.Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
WindowsName.Top := ScaleY(20);
WindowsName.Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
WindowsName.Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.
WindowsName.ReadOnly := True;



Caption := 'Операционная система не соответствует требованиям игры.';
end
Parent := WizardForm.UserInfoPage;
end
Text := TNewStaticText.Create(TNewStaticText.Create(WizardForm));
with Text do begin
Left := 0;
Top := 220;
Width := 417;
Height := 14;
Caption := 'Когда Вы будете готовы продолжить установку, нажмите «Далее».';
Parent := WizardForm.UserInfoPage;
end




if not state then
begin
wizardForm.Nextbutton.enabled:=false;
end;
end;
end;
добавить в этот
скрипт
[code]

const
NeedSize = 20;
DRIVE_UNKNOWN = 0;
DRIVE_NO_ROOT_DIR = 1;
DRIVE_REMOVEABLE = 2;
DRIVE_FIXED = 3;
DRIVE_REMOTE = 4;
DRIVE_CDROM = 5;
DRIVE_RAMDISK = 6;

var
ListBox: TListBox;
Text: TNewStaticText;

function GetVideoCardName(): PChar;
external 'hwc_GetVideoCardName@files:get_hw_caps.dll stdcall';

function GetSoundCardName(): PChar;
external 'hwc_GetSoundCardName@files:get_hw_caps.dll stdcall';

function DetectHardware(): Integer;
external 'hwc_DetectHardware@files:get_hw_caps.dll stdcall';

function GetHardDriveFreeSpace(hdd: integer): Integer;
external 'hwc_GetHardDriveFreeSpace@files:get_hw_caps.dll stdcall';

function GetHardDriveName(hdd: integer): PChar;
external 'hwc_GetHardDriveName@files:get_hw_caps.dll stdcall';

function GetHardDriveTotalSpace(hdd: integer): Integer;
external 'hwc_GetHardDriveTotalSpace@files:get_hw_caps.dll stdcall';

function GetHardDrivesCount(): Integer;
external 'hwc_GetHardDrivesCount@files:get_hw_caps.dll stdcall';

function GetSoundCards(): Integer;
external 'hwc_GetSoundCards@files:get_hw_caps.dll stdcall';

function GetSystemPage(): Integer;
external 'hwc_GetSystemPage@files:get_hw_caps.dll stdcall';

function GetSystemPhys(): Integer;
external 'hwc_GetSystemPhys@files:get_hw_caps.dll stdcall';

function GetVidMemLocal(): Integer;
external 'hwc_GetVidMemLocal@files:get_hw_caps.dll stdcall';

function GetVidMemNonLocal(): Integer;
external 'hwc_GetVidMemNonLocal@files:get_hw_caps.dll stdcall';

function GetVideoCardDev(): Integer;
external 'hwc_GetVideoCardDev@files:get_hw_caps.dll stdcall';

function GetVideoCardVen(): Integer;
external 'hwc_GetVideoCardVen@files:get_hw_caps.dll stdcall';

function GetLogicalDrives: DWORD;
external 'GetLogicalDrives@kernel32.dll stdcall';

function GetDriveType(nDrive: string): Longint;
external 'GetDriveTypeA@kernel32.dll stdcall';

function DelSp(const s: string): string; //функция удаления табуляции и пробелов в начале строки
var
c, i: integer;
stt, st, st1: string;
begin
c := 0;
st := s;

for i := 1 to Length(st) do
begin

stt := copy(st, i, 1);
if (stt = ' ') and (c >= 1) then
begin
st1 := st1;
c := c + 1;
end
else if (stt = ' ') and (c = 0) then
begin
c := c + 1;
st1 := st1 + stt;
end
else if (stt <> ' ') then
begin
c := 0;
st1 := st1 + stt;
end
end;

Result := st1;
end;

function CheckSystemPage(PreviousPageId: Integer): Integer;
var
Page: TWizardPage;
ProcessorName: string;

Processor, VideoCardPanel, AudioCardPanel, RAMPanel, PageFilePanel, WindowsPanel: TMemo;
ProcessorNamePanel, VideoCardNamePanel, AudioCardNamePanel, RAMTotalPanel, PageFileTotalPanel, WindowsNamePanel: TMemo;

ProcessorMHZ: Cardinal;
StaticText, StaticText2: TNewStaticText;
VidRam: integer;
begin
RegQueryStringValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0', 'ProcessorNameString', ProcessorName);
RegQueryDWordValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0', '~MHz', ProcessorMHZ);
GetVidMemLocal;
GetSoundCards;

Page := CreateCustomPage(PreviousPageId, 'Аппаратное Обеспечение', 'Программа установки обнаружила следующие необходимые компоненты');

StaticText := TNewStaticText.Create(Page);
with StaticText do
begin
Parent := Page.Surface;
Caption := 'Все компоненты удовлетворяют требованиям игры.';
Left := 0;
Top := 0;
AutoSize := True;
end;

StaticText2 := TNewStaticText.Create(Page);
with StaticText2 do
begin
Parent := Page.Surface;
Caption := 'Когда Вы будете готовы продолжить установку, нажмите «Далее».';
Left := 0;
Top := 220;
AutoSize := True;
end;

//******************************************* [Начало - Операционная система] ***************************************************//

WindowsPanel := TMemo.Create(Page);
with WindowsPanel do
begin
Text := ' Операц. система';
Parent := Page.Surface;

Left := ScaleX(0);
Top := ScaleY(165);
Width := ScaleX(106);
Height := ScaleY(22);

ReadOnly := True;
Color := clBtnFace;
end;

WindowsNamePanel := TMemo.Create(Page);
with WindowsNamePanel do
begin

if ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,ProductName|}')='' then
begin

WindowsNamePanel := TMemo.Create(Page);
with WindowsNamePanel do
begin
Text := ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion,ProductName|}')+ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion,CSDVersion|}');
Parent := Page.Surface;

Left := ScaleX(110);
Top := ScaleY(165);
Width := ScaleX(304);
Height := ScaleY(22);

ReadOnly := True;
Color := $CCFFCC;
end
end
end;

//******************************************* [Конец - Операционная система] ***************************************************//


//******************************************* [Начало - Процессор] ***************************************************//

Processor := TMemo.Create(Page);
with Processor do
begin
Text := ' Процессор';
Alignment := taLeftJustify;
Parent := Page.Surface;

Left := ScaleX(0);
Top := ScaleY(30);
Width := ScaleX(106);
Height := ScaleY(22);

ReadOnly := True;
Color := clBtnFace;
end;


ProcessorNamePanel := TMemo.Create(Page);
with ProcessorNamePanel do
begin
Text := DelSP(ProcessorName) + ' ' + IntToStr(ProcessorMHZ) + 'MHz'; //новое обработанное значение строки
//Caption :=ProcessorName+' '+IntToStr(ProcessorMHZ)+'MHz' ;
Alignment := taLeftJustify;
Parent := Page.Surface;

Left := ScaleX(110);
Top := ScaleY(30);
Width := ScaleX(304);
Height := ScaleY(22);

ReadOnly := True;
Color := $CCFFCC;
end;

if ProcessorMHZ < 1800 then //Минимальное количество частоты в MHz
begin
StaticText.Caption := 'Компоненты, выделенные красным, не удовлетворяют требованиям игры.'#13+'Проверьте соответствие системным требованиям.';
ProcessorNamePanel.Color := $CCCCFF;
end;


//******************************************* [Конец - Процессор] ****************************************************//


//******************************************* [Начало - Видеоадаптер] ************************************************//

VideoCardPanel := TMemo.Create(Page);
with VideoCardPanel do
begin
Text := ' Видеоадаптер';
Alignment := taLeftJustify;
Parent := Page.Surface;

Left := ScaleX(0);
Top := Processor.Top + 27;
Width := ScaleX(106);
Height := ScaleY(22);

ReadOnly := True;
Color := clBtnFace;
end;

VideoCardNamePanel := TMemo.Create(Page);
with VideoCardNamePanel do
begin
Text := ' ' + GetVideoCardName; //+' ОЗУ-'+inttostr(round(GetVidMemLocal/1000000))+' МБ';
//Caption:=' ОЗУ-'+inttostr(GetVidMemLocal)+' МБ';
Alignment := taLeftJustify;
Parent := Page.Surface;

VidrAM := GetVidMemLocal / 1000000;

if VidRam > 127 then
begin
if VidRam < 200 then Text := Text + '128 МB'
else if VidRam < 300 then Text := Text + '256 МB'
else if VidRam < 400 then Text := Text + '384 МB'
else if VidRam > 500 then Text := Text + '512 МB';
end;

Left := ScaleX(110);
Top := VideoCardPanel.Top;
Width := ScaleX(304);
Height := ScaleY(22);

ReadOnly := True;
Color := $CCFFCC;
end;

if GetVidMemLocal < 127000000 then //Минимальное объем ОЗУ [в байтах] у видеоадаптера 128 MB
begin
StaticText.Caption := 'Компоненты, выделенные красным, не удовлетворяют требованиям игры.'#13+'Проверьте соответствие системным требованиям.';
VideoCardNamePanel.Color := $CCCCFF;
end;

//******************************************* [Конец - Видеоадаптер] *************************************************//


//******************************************* [Начало - Звуковая карта] **********************************************//

AudioCardPanel := TMemo.Create(Page);
with AudioCardPanel do
begin
Text := ' Звуковая карта';
Alignment := taLeftJustify;
Parent := Page.Surface;

Left := ScaleX(0);
Top := VideoCardPanel.Top + 27;
Width := ScaleX(106);
Height := ScaleY(22);

ReadOnly := True;
Color := clBtnFace;
end;

AudioCardNamePanel := TMemo.Create(Page);
with AudioCardNamePanel do
begin
Text := ' ' + GetSoundCardName;
Alignment := taLeftJustify;
Parent := Page.Surface;

Left := ScaleX(110);
Top := AudioCardPanel.Top;
Width := ScaleX(304);
Height := ScaleY(22);

ReadOnly := True;
Color := $CCFFCC;
end;

if
GetSoundCards = 0 then
begin
StaticText.Caption := 'Компоненты, выделенные красным, не удовлетворяют требованиям игры.'#13+'Проверьте соответствие системным требованиям.';
AudioCardNamePanel.Color := $CCCCFF;
end;

//******************************************* [Конец - Звуковая карта] ***********************************************//


//******************************************* [Начало - ОЗУ] *********************************************************//

RAMPanel := TMemo.Create(Page);
with RAMPanel do
begin
Text := ' Память';
Alignment := taLeftJustify;
Parent := Page.Surface;

Left := ScaleX(0);
Top := AudioCardPanel.Top + 27;
Width := ScaleX(106);
Height := ScaleY(22);

ReadOnly := True;
Color := clBtnFace;
end;

RAMTotalPanel := TMemo.Create(Page);
with RAMTotalPanel do
begin
Text := ' ' + IntToStr(GetSystemPhys + 1) + ' MB';
Alignment := taLeftJustify;
Parent := Page.Surface;

Left := ScaleX(110);
Top := RAMPanel.Top;
Width := ScaleX(304);
Height := ScaleY(22);

ReadOnly := True;
Color := $CCFFCC;
end;

if GetSystemPhys + 1 < 1024 then //Минимальное объем ОЗУ 1 Гб или 1024 Мб
begin
StaticText.Caption := 'Компоненты, выделенные красным, не удовлетворяют требованиям игры.'#13+'Проверьте соответствие системным требованиям.';
RAMTotalPanel.Color := $CCCCFF;
end;

//******************************************* [Конец - ОЗУ] **********************************************************//


//******************************************* [Начало - Файл подкачки] ***********************************************//

PageFilePanel := TMemo.Create(Page);
with PageFilePanel do
begin
Text := ' Файл подкачки';
Alignment := taLeftJustify;
Parent := Page.Surface;

Left := ScaleX(0);
Top := RAMPanel.Top + 27;
Width := ScaleX(106);
Height := ScaleY(22);

ReadOnly := True;
Color := clBtnFace;
end;

PageFileTotalPanel := TMemo.Create(Page);
with PageFileTotalPanel do
begin
Text := ' ' + IntToStr(GetSystemPage) + ' MB';
Alignment := taLeftJustify;
Parent := Page.Surface;

Left := ScaleX(110);
Top := PageFilePanel.Top;
Width := ScaleX(304);
Height := ScaleY(22);

ReadOnly := True;
Color := $CCFFCC;
end;

if GetSystemPage < 2048 then //Минимальное объем файла [в мегабайтах] подкачки 1 Гб или 1024 Мб
begin
StaticText.Caption := 'Компоненты, выделенные красным, не удовлетворяют требованиям игры.'#13+'Проверьте соответствие системным требованиям.';
PageFileTotalPanel.Color := $CCCCFF;
end;

Result := Page.ID;
end;

//******************************************* [Конец - Файл подкачки] ************************************************//

procedure ListBoxOnClick(Sender: TObject);
var
NewLetter, OldString: string;
i: Integer;
begin
for i := 0 to ListBox.Items.Count - 1 do
begin
if ListBox.Selected[i] then
begin
NewLetter := Copy(ListBox.Items[i], 0, 1);
OldString := Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text));
WizardForm.DirEdit.Text := NewLetter + OldString;
end;
end;
end;

procedure InitializeWizard();
var
Page: TWizardPage;
Text: TNewStaticText;
Memo: TMemo;
Path: string;
FreeMB, TotalMB: Cardinal;
drives: DWORD;
i: integer;
begin
CheckSystemPage(wpLicense);

Text := TNewStaticText.Create(WizardForm);
Text.Top := 110;
Text.Width := 332;
Text.Height := 14;
Text.Caption := 'Список жестких дисков и свободного места';
Text.Parent := WizardForm.SelectDirPage;

ListBox := TListBox.Create(WizardForm);
ListBox.Top := 128;
ListBox.Width := 208;
ListBox.Height := ScaleY(84);
ListBox.Parent := WizardForm.SelectDirPage;
ListBox.OnClick := @ListBoxOnClick;
ListBox.Font.Name := 'Courier New';
ListBox.Font.Size := 10;
ListBox.Font.Style := [fsBold];
ListBox.Color := clBtnFace;

drives := GetLogicalDrives();
for i := 0 to 31 do
begin
if (drives and (1 shl i)) > 0 then
begin
Path := chr(ord('A') + i) + ':\';
if GetDriveType(Path) = DRIVE_FIXED then
begin
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB>1024 then ListBox.Items.Add(Path + ' ' + IntToStr(round(FreeMB / TotalMB * 100)) + '% ' + floatToStr(round(FreeMB/1024*100)/100) + ' GB')
else ListBox.Items.Add(Path + ' ' + IntToStr(round(FreeMB / TotalMB * 100)) + '% ' + IntToStr(FreeMB) + ' MB');
end;
end;
end;
end;
Панельки я сделал, проверку реестра добавил, а вот остальное чет не получается. Очень надеюсь на Вашу помощь!

Заранее большое спасибо :) :) :)

Serega 30-09-2009 00:29 1230777

Цитата:

Цитата S.E.K.T.O.R.
а вот остальное чет не получается. »

Что конкретно не получается? Просто get_hw_caps.dll у меня нет и поэтому проверить не могу, как должно выглядеть.

P.S.
Пример проверки системы, без get_hw_caps.dll
Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
type
 PDisplay_Device = record
  cb: DWord;
  DeviceName: array [0..31] of char;
  DeviceString: array [0..127] of char;
  StateFlags: DWord;
  DeviceID, DeviceKey: array [0..127] of char;
 end;

 TMixerCaps = record
  vPid, vDriverVersion: DWord;
  sName: array [0..31] of char;
  Support, cDestinations: DWord;
 end;

// Проверка версии Windows
#if Pos("4.", GetFileVersion(AddBackslash(GetEnv("windir")) + "Explorer.exe")) == 1
        {Win9x}
  TMemoryStatusEx = record
    dwLength, dwMemoryLoad: DWord;
    LoTotalPhys, LoAvailPhys, LoTotalPageFile, LoAvailPageFile,
    LoTotalVirtual, LoAvailVirtual, LoAvailExtendedVirtual, HiTotalPhys,
    HiAvailPhys, HiTotalPageFile, HiAvailPageFile, HiTotalVirtual, HiAvailVirtual,
    HiAvailExtendedVirtual: Integer;
  end;
  function GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx): Boolean;
  external 'GlobalMemoryStatus@kernel32.dll stdcall';
#else
        {WinNT}
  TMemoryStatusEx = record
    dwLength, dwMemoryLoad: DWord;
    LoTotalPhys, HiTotalPhys, LoAvailPhys, HiAvailPhys,
    LoTotalPageFile, HiTotalPageFile, LoAvailPageFile, HiAvailPageFile,
    LoTotalVirtual, HiTotalVirtual, LoAvailVirtual, HiAvailVirtual, LoAvailExtendedVirtual,
    HiAvailExtendedVirtual: Integer;
  end;
  function GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx): Boolean;
  external 'GlobalMemoryStatusEx@kernel32.dll stdcall';
#endif

const
  DISPLAY_DEVICE_PRIMARY_DEVICE = 4;
  oneMB = 1024*1024;
  NeedMHz = 1800;
  NeedVideoRAM = 128;
  NeedSoundCard = 'Creative X-Fi';
  NeedMB = 512;
  NeedPageFile = 1024;

var
  InfoPage: TWizardPage;
  TopText, BottomText: TNewStaticText;
  ChangeText: Boolean;
  SystemPanel, ProcessorPanel, VideoPanel,
  AudioPanel, RAMPanel, PageFilePanel: TMemo;
  SystemVersionPanel, ProcessorMHzPanel, VideoRAMPanel,
  AudioNamePanel, RAMTotalPanel, PageFileTotalPanel: TMemo;
  lpCaps: TMixerCaps;
  Version: TWindowsVersion;
  MemoryEx: TMemoryStatusEx;
  n, errCode: Integer;
  Keys: TArrayOfString;
  DeviceValue: Cardinal;
  lpDisplayDevice: PDisplay_Device;

function GetSystemMetrics(nIndex: Integer): Integer;
 external 'GetSystemMetrics@user32.dll stdcall';

function GetDeviceCaps(hDC, nIndex: Integer): Integer;
 external 'GetDeviceCaps@GDI32 stdcall';

function CreateDC(lpDriverName, lpDeviceName, lpOutput: String; lpInitData: Integer): Integer;
 external 'CreateDCA@GDI32 stdcall';

function EnumDisplayDevices(lpDevice, iDevNum: DWord; var lpDisplayDevice: PDisplay_Device; dwFlags: DWord): Boolean;
 external 'EnumDisplayDevicesA@user32.dll stdcall';

function mixerGetDevCaps(uDeviceID: LongInt; var lpCaps: TMixerCaps; uSize: LongInt): LongInt;
 external 'mixerGetDevCapsA@winmm.dll stdcall';

function mixerGetNumDevs: Integer;
 external 'mixerGetNumDevs@winmm.dll stdcall';

// Дополнить число до кратного Multiple
function ToMultiple(Bytes, Multiple: Integer): Integer;
begin
  if Abs(Bytes/Multiple) > Bytes/Multiple then
    Result := (Bytes/Multiple + 1)*Multiple
  else
    Result := Bytes
end;

// Перевод числа в значение Бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)
function ByteOrTB(Bytes: Extended; noMB: Boolean): String;
begin
 if not noMB then
    Result := FloatToStr(Int(Bytes)) + ' Мб'
 else
                if Bytes < 1024 then
      Result := FloatToStr(Int(Bytes)) + ' Бт'
    else
                        if Bytes/1024 < 1024 then
          Result := FloatToStr(round((Bytes/1024)*10)/10) + ' Кб'
      else
                                        if Bytes/oneMB < 1024 then
            Result := FloatToStr(round(Bytes/oneMB*100)/100) + ' Мб'
          else
            if Bytes/oneMB/1000 < 1024 then
                Result := FloatToStr(round(Bytes/oneMB/1024*1000)/1000) + ' Гб'
            else
                                                          Result := FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) + ' Тб'
 StringChange(Result, ',', '.')
end;

// Удаление начальных, конечных и повторных пробелов
function DelSp(String: String): String;
begin
 while (Pos('  ', String) > 0) do Delete(String, Pos('  ', String), 1)
 Result := Trim(String)
end;

function Size64(Hi, Lo: Integer): Extended;
begin
 Result := Lo
 if Lo < 0 then
    Result := Result + $7FFFFFFF + $7FFFFFFF + 2
 for Hi := Hi-1 downto 0 do Result := Result + $7FFFFFFF + $7FFFFFFF + 2
end;

function CheckCPU(NeedMHz: Integer): Boolean;
var
  String: String;
begin
        String := 'Hardware\Description\System\CentralProcessor'; RegGetSubkeyNames(HKLM, String, Keys)        // Количество ядер
        for n := 0 to GetArrayLength(Keys)-1 do
      RegQueryStringValue(HKLM, String + '\' + Keys[n], 'ProcessorNameString', Keys[n])
        if not RegQueryDWordValue(HKLM, String + '\0', '~MHz', DeviceValue) or (DeviceValue < NeedMHz) then
        Exit
  else
    Result := True
end;

function CheckMemorySize(NeedRAM: Integer): Boolean;
begin
        MemoryEx.dwLength := SizeOf(MemoryEx)
        if not GlobalMemoryStatusEx(MemoryEx) then
        MsgBox('Ошибка функции:' + #13 + 'GlobalMemoryStatusEx', mbError, mb_Ok)
  else
          if (ToMultiple(trunc(Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys)/oneMB), 16) < NeedRAM) then
        Exit
    else
        Result := True
end;

procedure CreateCheckForm();
begin

  TopText := TNewStaticText.Create(InfoPage)
  with TopText do
  begin
    Parent := InfoPage.Surface
    Left := 0
    AutoSize := True
  end

  BottomText := TNewStaticText.Create(InfoPage)
  with BottomText do
  begin
    Parent := InfoPage.Surface
    Caption := 'Когда Вы будете готовы продолжить установку, нажмите «Далее».'
    Font.Color := clBlack
    Left := 0
    Top := 200
    AutoSize := True
  end

  SystemPanel := TMemo.Create(InfoPage)
  with SystemPanel do
  begin
    Text := 'Система'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := ScaleY(33)
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := $EEEEEE
  end

  SystemVersionPanel := TMemo.Create(InfoPage)
  with SystemVersionPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := SystemPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  ProcessorPanel := TMemo.Create(InfoPage)
  with ProcessorPanel do
  begin
    Text := 'Процессор'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := SystemPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := $EEEEEE
  end

  ProcessorMHzPanel := TMemo.Create(InfoPage)
  with ProcessorMHzPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := ProcessorPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  VideoPanel := TMemo.Create(InfoPage)
  with VideoPanel do
  begin
    Text := 'Видеоадаптер'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := ProcessorPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := $EEEEEE
  end

  VideoRAMPanel := TMemo.Create(InfoPage)
  with VideoRAMPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := VideoPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  AudioPanel := TMemo.Create(InfoPage)
  with AudioPanel do
  begin
    Text := 'Звуковая карта'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := VideoPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := $EEEEEE
  end

  AudioNamePanel := TMemo.Create(InfoPage)
  with AudioNamePanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := AudioPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  RAMPanel := TMemo.Create(InfoPage)
  with RAMPanel do
  begin
    Text := 'Объём памяти'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := AudioPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := $EEEEEE
  end

  RAMTotalPanel := TMemo.Create(InfoPage)
  with RAMTotalPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := RAMPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  PageFilePanel := TMemo.Create(InfoPage)
  with PageFilePanel do
  begin
    Text := 'Файл подкачки'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := RAMPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := $EEEEEE
  end;

  PageFileTotalPanel := TMemo.Create(InfoPage)
  with PageFileTotalPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := PageFilePanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

end;

procedure UpdateInfo();
var
  DeviceName, DeviceKey: String;
begin
  ChangeText := False

  GetWindowsVersionEx(Version)

  // Операционная система:
  SystemVersionPanel.Color := $CCFFCC

  DeviceKey := 'Software\Microsoft\Windows NT\CurrentVersion'
  if not UsingWinNT then StringChange(DeviceKey, 'Windows NT', 'Windows')
        RegQueryStringValue(HKLM, DeviceKey, 'ProductName', DeviceName)
  if RegQueryStringValue(HKLM, DeviceKey, 'CSDVersion', DeviceKey) then
    DeviceName := DeviceName + ' ' + DeviceKey
        StringChange(DeviceName, 'Microsoft ', '')
  SystemVersionPanel.Text := ' ' + DeviceName + ' сборка ' + IntToStr(Version.Major) + '.' + IntToStr(Version.Minor) +
                            '.' + IntToStr(Version.Build)

  if (Pos('2000 Service Pack 4', SystemVersionPanel.Text) = 0) and  // Windows 2000 SP4
    (Pos('XP Service Pack 2', SystemVersionPanel.Text) = 0) and  // Windows XP SP2
    (Pos('XP Service Pack 3', SystemVersionPanel.Text) = 0) and  // Windows XP SP3
    (Pos('Vista', SystemVersionPanel.Text) = 0) then  // Windows Vista (c любым SP или без него)
    begin
      SystemVersionPanel.Color := $CCCCFF
      ChangeText := True
    end

  // Процессор:
  ProcessorMHzPanel.Color := $CCFFCC

  if not CheckCPU(NeedMHz) then
    begin
      ProcessorMHzPanel.Color := $CCCCFF
      ChangeText := True
    end

  ProcessorMHzPanel.Text := ' ' + DelSp(Keys[0]) + ' @' + IntToStr(DeviceValue) + ' MHz'
  if GetArrayLength(Keys) > 1 then
    ProcessorPanel.Text := 'Процессоры' // + ' (' + IntToStr(GetArrayLength(Keys)) + ')'

  // Видеокарта:
  VideoRAMPanel.Color := $CCFFCC

  lpDisplayDevice.cb := SizeOf(lpDisplayDevice)
  DeviceKey := ''
        n := 0
  while not (EnumDisplayDevices(0, n, lpDisplayDevice, 0) and
            (lpDisplayDevice.StateFlags and DISPLAY_DEVICE_PRIMARY_DEVICE > 0)) and (n < 127) do n := n + 1
        for n := 0 to 127 do DeviceKey := DeviceKey + lpDisplayDevice.DeviceKey[n]
  Delete(DeviceKey, Pos(Chr(0), DeviceKey), 127)  // Ключ драйвера получаем из API
        StringChange(DeviceKey, '\Registry\Machine\', '')
  errCode := 1
  DeviceValue := 0
  if RegQueryBinaryValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', DeviceName) then
                for n := 1 to Length(DeviceName) do
      begin
        DeviceValue := DeviceValue + Ord(DeviceName[n])*errCode
        errCode := errCode*$100
      end
  else
    if RegQueryDWordValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', DeviceValue) then
    else
        RegQueryDWordValue(HKLM, DeviceKey + '\Info', 'VideoMemory', DeviceValue)
        DeviceName := ''
  for n := 0 to 127 do DeviceName := DeviceName + lpDisplayDevice.DeviceString[n]
  Delete(DeviceName, Pos(Chr(0), DeviceName), 127)

  if DeviceName <> '' then
    if DeviceValue > 0 then
      VideoRAMPanel.Text := ' ' + DelSp(DeviceName) + ', '+ ByteOrTB(DeviceValue/oneMB, False)
    else
      VideoRAMPanel.Text := ' ' + DelSp(DeviceName) + ' (Standard), '+ ByteOrTB(DeviceValue/oneMB, False)
  else
    begin
      VideoRAMPanel.Text := ' Драйвер устройства не обнаружен'
      VideoRAMPanel.Color := $CCCCFF
      ChangeText := True
    end
  if (DeviceValue/oneMB < NeedVideoRAM) then
    begin
      VideoRAMPanel.Color := $CCCCFF
      ChangeText := True
    end
  VideoRAMPanel.Text := VideoRAMPanel.Text + ', ' + IntToStr(GetSystemMetrics(0)) + 'x' +
                        IntToStr(GetSystemMetrics(1)) + ' (' + IntToStr(GetDeviceCaps(CreateDC('DISPLAY','','',0),14) *
                        GetDeviceCaps(CreateDC('DISPLAY','','',0),12)) + ' bit)'

  // Звуковая карта:
  AudioNamePanel.Color := $CCFFCC

  // for errCode := 0 to 1 do  // Вывод основного звукового устройства
  for errCode := 0 to mixerGetNumDevs do
    begin
                  mixerGetDevCaps(errCode-1, lpCaps, SizeOf(lpCaps))
      DeviceName := ' '
                  for n := 0 to 31 do DeviceName := DeviceName + lpCaps.sName[n]
      Delete(DeviceName, Pos(Chr(0), DeviceName), 31)
      Delete(DeviceName, Pos(' [', DeviceName), 31)
      StringChange(DeviceName, 'SB ', 'Creative ')
      Delete(DeviceName, Pos(' Audio', DeviceName), 31)
                  SetArrayLength(Keys, errCode)
      if errCode > 0 then Keys[errCode-1] := DeviceName
    end

        if GetArrayLength(Keys) > 1 then
    begin
    AudioPanel.Text := 'Звуковые карты'
    // AudioPanel.Text := 'Звуковые карты (' + IntToStr(GetArrayLength(Keys)) +')'
    AudioNamePanel.Text := ''
    for n := 1 to GetArrayLength(Keys) do
        AudioNamePanel.Text := AudioNamePanel.Text + Keys[n-1]  // + '(' + IntToStr(n) + ')'
    end
  else
    if GetArrayLength(Keys) = 0 then
    begin
      AudioNamePanel.Text := ' Драйвер устройства не обнаружен'
      AudioNamePanel.Color := $CCCCFF
      ChangeText := True
    end
      else
      AudioNamePanel.Text := Keys[0]
  if Pos(NeedSoundCard, AudioNamePanel.Text) = 0 then
    AudioNamePanel.Text := AudioNamePanel.Text + ' (рекомендуется ' + NeedSoundCard + ')'

  // Объём памяти:
    RAMTotalPanel.Color := $CCFFCC
  if not CheckMemorySize(NeedMB) then
    begin
      RAMTotalPanel.Color := $CCCCFF
      ChangeText := True
    end
  RAMTotalPanel.Text := ' ' + ByteOrTB(ToMultiple(trunc(Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys)/oneMB), 16), False) + ' всего, ' +
                              ByteOrTB(ToMultiple(trunc(Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys)/oneMB), 16) -
                                                        Size64(MemoryEx.HiAvailPhys, MemoryEx.LoAvailPhys)/oneMB, False) + ' используется, ' +
                              ByteOrTB(Size64(MemoryEx.HiAvailPhys, MemoryEx.LoAvailPhys)/oneMB, False) + ' свободно'

  // Виртуальная память:
  PageFileTotalPanel.Color := $CCFFCC
  PageFileTotalPanel.Text := ' ' + ByteOrTB(Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile)/oneMB, False) + ' всего, ' +
                                  ByteOrTB((Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile) -
                                            Size64(MemoryEx.HiAvailPageFile, MemoryEx.LoAvailPageFile))/oneMB, False) + ' занято системным кэшем'
  if Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile)/oneMB < NeedPageFile then
    begin
      PageFileTotalPanel.Color := $CCCCFF
      ChangeText := True
    end

  if ChangeText = True then
    begin
      TopText.Top := 0
      TopText.Caption := 'Не все компоненты удовлетворяют минимальным требованиям.' #13
                        'Пожалуйста, проверьте позиции, выделенные красным цветом.'
      TopText.Font.Color := clRed
      WizardForm.NextButton.Enabled := False
    end
  else
    begin
      TopText.Caption := 'Все компоненты соответствуют минимальным требованиям.'
      TopText.Font.Color := clGreen
      TopText.Top := 8
      WizardForm.NextButton.Enabled := True
    end

end;

procedure InitializeWizard();
begin
  InfoPage := CreateCustomPage(wpLicense, 'Аппаратное и программное обеспечение',
                                          'Программа установки обнаружила следующие наобходимые компоненты.')
  CreateCheckForm()  // Создание объектов TMemo, в которых будет выводится информация о системе
  UpdateInfo()  // Обновление информации о системе
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = InfoPage.ID then UpdateInfo()  // Обновление информации о системе
end;


S.E.K.T.O.R. 30-09-2009 03:35 1230871

Вложений: 1
Ну во-первых, Serega, спасибо, что откликнулись!

Может я неправильно изложил суть проблемы, так вот: у меня есть скрипт проверки сист.требований, но без проверки ОС

Для этого я нашел скрипт с проверкой ОС и хочю добавить нужные строки в свой скрипт (т.е. строки для проверки ОС), чтобы в итоге получить вот это

Панели я создал (WindowsPanel, WindowsNamePanel), а вот добавить к ним все остальное нужное для проверки ОС не получается. Просьба: помогите добавить проверку ОС из
скрипта 1
Код:

var  state: boolean;

const
  NeedSize = 20;
  DRIVE_UNKNOWN = 0;
  DRIVE_NO_ROOT_DIR = 1;
  DRIVE_REMOVEABLE = 2;
  DRIVE_FIXED = 3;
  DRIVE_REMOTE = 4;
  DRIVE_CDROM = 5;
  DRIVE_RAMDISK = 6;

var
  ListBox: TListBox;
  Text: TNewStaticText;

function GetLogicalDrives: DWORD;
  external 'GetLogicalDrives@kernel32.dll stdcall';

function GetDriveType(nDrive: string): Longint;
  external 'GetDriveTypeA@kernel32.dll stdcall';

function GetVideoCardName(): PChar;
  external 'hwc_GetVideoCardName@files:get_hw_caps.dll stdcall';

function GetSoundCardName(): PChar;
  external 'hwc_GetSoundCardName@files:get_hw_caps.dll stdcall';

function DetectHardware(): Integer;
  external 'hwc_DetectHardware@files:get_hw_caps.dll stdcall';

function GetHardDriveFreeSpace(hdd: integer): Integer;
  external 'hwc_GetHardDriveFreeSpace@files:get_hw_caps.dll stdcall';

function GetHardDriveName(hdd: integer): PChar;
  external 'hwc_GetHardDriveName@files:get_hw_caps.dll stdcall';

function GetHardDriveTotalSpace(hdd: integer): Integer;
  external 'hwc_GetHardDriveTotalSpace@files:get_hw_caps.dll stdcall';

function GetHardDrivesCount(): Integer;
  external 'hwc_GetHardDrivesCount@files:get_hw_caps.dll stdcall';

function GetSoundCards(): Integer;
  external 'hwc_GetSoundCards@files:get_hw_caps.dll stdcall';

function GetSystemPage(): Integer;
  external 'hwc_GetSystemPage@files:get_hw_caps.dll stdcall';

function GetSystemPhys(): Integer;
  external 'hwc_GetSystemPhys@files:get_hw_caps.dll stdcall';

function GetVidMemLocal(): Integer;
  external 'hwc_GetVidMemLocal@files:get_hw_caps.dll stdcall';

function GetVidMemNonLocal(): Integer;
  external 'hwc_GetVidMemNonLocal@files:get_hw_caps.dll stdcall';

function GetVideoCardDev(): Integer;
  external 'hwc_GetVideoCardDev@files:get_hw_caps.dll stdcall';

function GetVideoCardVen(): Integer;
  external 'hwc_GetVideoCardVen@files:get_hw_caps.dll stdcall';

function DelSp(const s: string): string; // функция удаления пробелов в начале строки
var
  c, i: integer;
  stt, st, st1: string;
begin
  c := 0;
  st := s;

  for i := 1 to Length(st) do
  begin

    stt := copy(st, i, 1);
    if (stt = ' ') and (c >= 1) then
    begin
      st1 := st1;
      c := c + 1;
    end
    else if (stt = ' ') and (c = 0) then
    begin
      c := c + 1;
      st1 := st1 + stt;
    end
    else if (stt <> ' ') then
    begin
      c := 0;
      st1 := st1 + stt;
    end
  end;

  Result := st1;
end;

procedure CurPageChanged(CurPageID: Integer);
var
  Page: TWizardPage;
  Text: TNewStaticText;
  Memo,Windows,SP,Version,Build,registered,WindowsName,SP_Num,Version_Num,Build_num,registered_name: TMemo;
  Os,OS1: string; // строка с названием необходимой ОС
  // state: boolean;

  ProcessorName: string;
  Processor, VideoCardPanel, AudioCardPanel, RAMPanel, PageFilePanel: TMemo;
  ProcessorNamePanel, VideoCardNamePanel, AudioCardNamePanel, RAMTotalPanel, PageFileTotalPanel: TMemo;
  ProcessorMHZ: Cardinal;
  StaticText, StaticText2: TNewStaticText;
  VidRam: integer;

begin
 if CurPageID = wpUserInfo then
  begin
  //подменяем сраницу информации о пользователе на информацию об ОС
    wizardForm.UserInfoNameEdit.visible:=false;
    wizardForm.UserInfoNameEdit.text:='Игрок'; //на случай, когда имя пользователя не указано в системе
    wizardForm.UserInfoNameLabel.visible:=false;
    wizardForm.UserInfoOrgLabel.visible:=false;
    wizardForm.UserInfoOrgEdit.visible:=false;
    wizardForm.UserInfoOrgEdit.text:='Группа игроков ';//на случай, когда организация не указано в системе
    wizardForm.PageNameLabel.Caption := 'Аппаратное обеспечение и Операционная система';
    wizardForm.PageDescriptionLabel.Caption := 'Программа установки обнаружила следующие необходимые компоненты и Операционную систему ';
    RegQueryStringValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0', 'ProcessorNameString', ProcessorName);
    RegQueryDWordValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0', '~MHz', ProcessorMHZ);

  OS:=' Microsoft Windows XP Service Pack 2'; //строка является суммой из записей в реестре о Наименовании ОС и сервис-паке
  OS1:=' Microsoft Windows 2000 Service Pack 4'; //строка является суммой из записей в реестре о Наименовании ОС и сервис-паке

  Windows := TMemo.Create(WizardForm);

  StaticText := TNewStaticText.Create(TNewStaticText.Create(WizardForm));
  with StaticText do begin
    Left := 0;
    Top := 52;
    Width := 417;
    Height := 14;
    Caption := 'Все компоненты удовлетворяют требованиям игры.';
    Parent := WizardForm.UserInfoPage;
    StaticText.font.color:=clGreen;
  end


  with Windows do
  begin
    Text := ' Операц. система';
    Parent := WizardForm.UserInfoPage;

    Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(20);
    Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

    ReadOnly := True;
    Color := clBtnFace;
  end
    Processor := TMemo.Create(WizardForm);
  with Processor do begin
    Text := ' Процессор';
    Parent := WizardForm.UserInfoPage;

    Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(77);
    Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

    ReadOnly := True;
    Color := clBtnFace;
  end
    VideoCardPanel := TMemo.Create(WizardForm);
  with VideoCardPanel do begin
    Text := ' Видеоадаптер';
    Parent := WizardForm.UserInfoPage;

    Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(104);
    Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

    ReadOnly := True;
    Color := clBtnFace;
  end
    AudioCardPanel := TMemo.Create(WizardForm);
  with AudioCardPanel do begin
    Text := ' Звуковая карта';
    Parent := WizardForm.UserInfoPage;
    Color := clBtnFace;
    Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(131);
    Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

    ReadOnly := True;

  end
    RAMPanel := TMemo.Create(WizardForm);
  with RAMPanel do begin
    Text := ' ОЗУ';
    Parent := WizardForm.UserInfoPage;
    Color := clBtnFace;
    Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(158);
    Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.


    ReadOnly := True;

  end

  PageFilePanel := TMemo.Create(WizardForm);
  with PageFilePanel do begin
    Text := ' Файл подкачки';
    Parent := WizardForm.UserInfoPage;
    Color := clBtnFace;
    Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(185);
    Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.


    ReadOnly := True;

    ProcessorNamePanel := TMemo.Create(WizardForm);
  with ProcessorNamePanel do begin

    Text := DelSP(ProcessorName) + '  ' + IntToStr(ProcessorMHZ) + 'MHz'; //новое обработанное значение строки
    Parent := WizardForm.UserInfoPage;

    Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(77);
    Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

    ReadOnly := True;
    Color := $CCFFCC;

    if ProcessorMHZ < 1800 then
  begin
    ProcessorNamePanel.Color := $ccccff;
    StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
    StaticText.font.color:=clRed;
  end;

  VideoCardNamePanel := TMemo.Create(WizardForm);
  with VideoCardNamePanel do begin
    Text :=  ' ' + GetVideoCardName; //+'    ОЗУ-'+inttostr(round(GetVidMemLocal/1000000))+' МБ'
    Parent := WizardForm.UserInfoPage;
    VidrAM := GetVidMemLocal / 1000000;

    if VidRam > 127 then
    begin
      if VidRam < 200 then text := text + ' ОЗУ - 128 МB'
      else if VidRam < 300 then text := text + ' ОЗУ - 256 МB'
      else if VidRam < 400 then text := text + ' ОЗУ - 384 МB'
      else if VidRam > 500 then text := text + ' ОЗУ - 512 МB';
    end;

    Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(104);
    Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

    ReadOnly := True;
    Color := $CCFFCC;

    if GetVidMemLocal < 127000000 then //128 MB
  begin
    StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
    StaticText.font.color:=clRed;
    VideoCardNamePanel.Color := $ccccff;
  end;


  end
    AudioCardNamePanel := TMemo.Create(WizardForm);
  with AudioCardNamePanel do begin
    Text := ' ' + GetSoundCardName;
    Parent := WizardForm.UserInfoPage;
    Color := $CCFFCC;
    Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(131);
    Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R

    ReadOnly := True;

  end
    RAMTotalPanel := TMemo.Create(WizardForm);
  with RAMTotalPanel do begin
    Text :=  ' ' + IntToStr(GetSystemPhys + 1) + ' MB';
    Parent := WizardForm.UserInfoPage;
    Color := $CCFFCC;

    Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(158);
    Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

    ReadOnly := True;
    if GetSystemPhys + 1 < 1024 then
  begin
    RAMTotalPanel.Color := $ccccff;
    StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
    StaticText.font.color:=clRed;
  end;
  end;

  PageFileTotalPanel := TMemo.Create(WizardForm);
  with PageFileTotalPanel do begin
    Text :=  ' ' + IntToStr(GetSystemPage) + ' MB';
    Parent := WizardForm.UserInfoPage;
    Color := $CCFFCC;

    Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(185);
    Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

    ReadOnly := True;
    if GetSystemPage < 1247 then
  begin
    PageFileTotalPanel.Color := $ccccff;
    StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
    StaticText.font.color:=clRed;
  end;
  end;


  end

  if ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,ProductName|}')='' then
  begin

    WindowsName := TMemo.Create(WizardForm);
    with WindowsName do begin
    Text := ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion,ProductName|}')+ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion,CSDVersion|}');
    Parent := WizardForm.UserInfoPage;

    Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(20);
    Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

    ReadOnly := True;
    Color := $CCFFCC;
  end

  end

 end;

 // Проверка Windows 9x
  if ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,ProductName|}')<>'' then
  begin
  WindowsName := TMemo.Create(WizardForm);
  with WindowsName do begin
    Text := ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,ProductName|}')+ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,CSDVersion|}');
    Parent := WizardForm.UserInfoPage;
    Color := $CCFFCC;
    Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(20);
    Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

    ReadOnly := True;

  end

  end;


  if OS=(WindowsName.Text) then state:=true else
  if OS1=(WindowsName.Text) then state:=true else state:=false;

  Text := TNewStaticText.Create(WizardForm);
    with Text do begin
    Left := 0;
    Top := 0;
    Width := 417;
    Height := 14;
    if state then
    begin
      Font.Color:=clGreen;
      WindowsName.color:=$CCFFCC;
    // SP_Num.color:=$CCFFCC;
      Caption := 'Операционная система соответствует требованиям игры.';
    end
    else
    begin
      Font.Color:=clREd;
      WindowsName.color:=clRed;

      WindowsName.Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
      WindowsName.Top := ScaleY(20);
      WindowsName.Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
      WindowsName.Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.
      WindowsName.ReadOnly := True;



      Caption := 'Операционная система не соответствует требованиям игры.';
    end
    Parent := WizardForm.UserInfoPage;
  end
    Text := TNewStaticText.Create(TNewStaticText.Create(WizardForm));
  with Text do begin
    Left := 0;
    Top := 220;
    Width := 417;
    Height := 14;
    Caption := 'Когда Вы будете готовы продолжить установку, нажмите «Далее».';
    Parent := WizardForm.UserInfoPage;
  end




  if not state then
    begin
      wizardForm.Nextbutton.enabled:=false;
    end;
 end;
end;

в
скрипт 2
Код:

const
  NeedSize = 20;
  DRIVE_UNKNOWN = 0;
  DRIVE_NO_ROOT_DIR = 1;
  DRIVE_REMOVEABLE = 2;
  DRIVE_FIXED = 3;
  DRIVE_REMOTE = 4;
  DRIVE_CDROM = 5;
  DRIVE_RAMDISK = 6;

var
  ListBox: TListBox;
  Text: TNewStaticText;

function GetVideoCardName(): PChar;
  external 'hwc_GetVideoCardName@files:get_hw_caps.dll stdcall';

function GetSoundCardName(): PChar;
  external 'hwc_GetSoundCardName@files:get_hw_caps.dll stdcall';

function DetectHardware(): Integer;
  external 'hwc_DetectHardware@files:get_hw_caps.dll stdcall';

function GetHardDriveFreeSpace(hdd: integer): Integer;
  external 'hwc_GetHardDriveFreeSpace@files:get_hw_caps.dll stdcall';

function GetHardDriveName(hdd: integer): PChar;
  external 'hwc_GetHardDriveName@files:get_hw_caps.dll stdcall';

function GetHardDriveTotalSpace(hdd: integer): Integer;
  external 'hwc_GetHardDriveTotalSpace@files:get_hw_caps.dll stdcall';

function GetHardDrivesCount(): Integer;
  external 'hwc_GetHardDrivesCount@files:get_hw_caps.dll stdcall';

function GetSoundCards(): Integer;
  external 'hwc_GetSoundCards@files:get_hw_caps.dll stdcall';

function GetSystemPage(): Integer;
  external 'hwc_GetSystemPage@files:get_hw_caps.dll stdcall';

function GetSystemPhys(): Integer;
  external 'hwc_GetSystemPhys@files:get_hw_caps.dll stdcall';

function GetVidMemLocal(): Integer;
  external 'hwc_GetVidMemLocal@files:get_hw_caps.dll stdcall';

function GetVidMemNonLocal(): Integer;
  external 'hwc_GetVidMemNonLocal@files:get_hw_caps.dll stdcall';

function GetVideoCardDev(): Integer;
  external 'hwc_GetVideoCardDev@files:get_hw_caps.dll stdcall';

function GetVideoCardVen(): Integer;
  external 'hwc_GetVideoCardVen@files:get_hw_caps.dll stdcall';

function GetLogicalDrives: DWORD;
  external 'GetLogicalDrives@kernel32.dll stdcall';

function GetDriveType(nDrive: string): Longint;
  external 'GetDriveTypeA@kernel32.dll stdcall';

function DelSp(const s: string): string; //функция удаления табуляции и пробелов в начале строки
var
  c, i: integer;
  stt, st, st1: string;
begin
  c := 0;
  st := s;

  for i := 1 to Length(st) do
  begin

    stt := copy(st, i, 1);
    if (stt = ' ') and (c >= 1) then
    begin
      st1 := st1;
      c := c + 1;
    end
    else if (stt = ' ') and (c = 0) then
    begin
      c := c + 1;
      st1 := st1 + stt;
    end
    else if (stt <> ' ') then
    begin
      c := 0;
      st1 := st1 + stt;
    end
  end;

  Result := st1;
end;

function CheckSystemPage(PreviousPageId: Integer): Integer;
var
  Page: TWizardPage;
  ProcessorName: string;

  Processor, VideoCardPanel, AudioCardPanel, RAMPanel, PageFilePanel, WindowsPanel: TMemo;
  ProcessorNamePanel, VideoCardNamePanel, AudioCardNamePanel, RAMTotalPanel, PageFileTotalPanel, WindowsNamePanel: TMemo;

  ProcessorMHZ: Cardinal;
  StaticText, StaticText2: TNewStaticText;
  VidRam: integer;
begin
  RegQueryStringValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0', 'ProcessorNameString', ProcessorName);
  RegQueryDWordValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0', '~MHz', ProcessorMHZ);
  GetVidMemLocal;
  GetSoundCards;

  Page := CreateCustomPage(PreviousPageId, 'Аппаратное Обеспечение', 'Программа установки обнаружила следующие необходимые компоненты');

  StaticText := TNewStaticText.Create(Page);
  with StaticText do
  begin
    Parent := Page.Surface;
    Caption := 'Все компоненты удовлетворяют требованиям игры.';
    Left := 0;
    Top := 0;
    AutoSize := True;
  end;

  StaticText2 := TNewStaticText.Create(Page);
  with StaticText2 do
  begin
    Parent := Page.Surface;
    Caption := 'Когда Вы будете готовы продолжить установку, нажмите «Далее».';
    Left := 0;
    Top := 220;
    AutoSize := True;
  end;

//******************************************* [Начало - Операционная система] ***************************************************//

  WindowsPanel := TMemo.Create(Page);
  with WindowsPanel do
  begin
    Text := ' Операц. система';
    Parent := Page.Surface;

    Left := ScaleX(0);
    Top := ScaleY(165);
    Width := ScaleX(106);
    Height := ScaleY(22);

    ReadOnly := True;
    Color := clBtnFace;
  end;

  WindowsNamePanel := TMemo.Create(Page);
  with WindowsNamePanel do
  begin

  if ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,ProductName|}')='' then
  begin

  WindowsNamePanel := TMemo.Create(Page);
  with WindowsNamePanel do
  begin
    Text := ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion,ProductName|}')+ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion,CSDVersion|}');
    Parent := Page.Surface;

    Left := ScaleX(110);
    Top := ScaleY(165);
    Width := ScaleX(304);
    Height := ScaleY(22);

    ReadOnly := True;
    Color := $CCFFCC;
  end
  end
 end;
 //дальше не получается
 

//******************************************* [Конец - Операционная система] ***************************************************//


//******************************************* [Начало - Процессор] ***************************************************//

  Processor := TMemo.Create(Page);
  with Processor do
  begin
    Text := ' Процессор';
    Alignment := taLeftJustify;
    Parent := Page.Surface;

    Left := ScaleX(0);
    Top := ScaleY(30);
    Width := ScaleX(106);
    Height := ScaleY(22);

    ReadOnly := True;
    Color := clBtnFace;
  end;


  ProcessorNamePanel := TMemo.Create(Page);
  with ProcessorNamePanel do
  begin
    Text := DelSP(ProcessorName) + '  ' + IntToStr(ProcessorMHZ) + 'MHz'; //новое обработанное значение строки
//Caption :=ProcessorName+'  '+IntToStr(ProcessorMHZ)+'MHz' ;
    Alignment := taLeftJustify;
    Parent := Page.Surface;

    Left := ScaleX(110);
    Top := ScaleY(30);
    Width := ScaleX(304);
    Height := ScaleY(22);

    ReadOnly := True;
    Color := $CCFFCC;
  end;

  if ProcessorMHZ < 1800 then //Минимальное количество частоты в MHz
  begin
    StaticText.Caption := 'Компоненты, выделенные красным, не удовлетворяют требованиям игры.'#13+'Проверьте соответствие системным требованиям.';
    ProcessorNamePanel.Color := $CCCCFF;
  end;


//******************************************* [Конец - Процессор] ****************************************************//


//******************************************* [Начало - Видеоадаптер] ************************************************//

  VideoCardPanel := TMemo.Create(Page);
  with VideoCardPanel do
  begin
    Text := ' Видеоадаптер';
    Alignment := taLeftJustify;
    Parent := Page.Surface;

    Left := ScaleX(0);
    Top := Processor.Top + 27;
    Width := ScaleX(106);
    Height := ScaleY(22);

    ReadOnly := True;
    Color := clBtnFace;
  end;

  VideoCardNamePanel := TMemo.Create(Page);
  with VideoCardNamePanel do
  begin
    Text := ' ' + GetVideoCardName; //+'    ОЗУ-'+inttostr(round(GetVidMemLocal/1000000))+' МБ';
//Caption:='    ОЗУ-'+inttostr(GetVidMemLocal)+' МБ';
    Alignment := taLeftJustify;
    Parent := Page.Surface;

    VidrAM := GetVidMemLocal / 1000000;

    if VidRam > 127 then
    begin
      if VidRam < 200 then Text := Text + '128 МB'
      else if VidRam < 300 then Text := Text + '256 МB'
      else if VidRam < 400 then Text := Text + '384 МB'
      else if VidRam > 500 then Text := Text + '512 МB';
    end;

    Left := ScaleX(110);
    Top := VideoCardPanel.Top;
    Width := ScaleX(304);
    Height := ScaleY(22);

    ReadOnly := True;
    Color := $CCFFCC;
  end;

  if GetVidMemLocal < 127000000 then //Минимальное объем ОЗУ [в байтах] у видеоадаптера 128 MB
  begin
    StaticText.Caption := 'Компоненты, выделенные красным, не удовлетворяют требованиям игры.'#13+'Проверьте соответствие системным требованиям.';
    VideoCardNamePanel.Color := $CCCCFF;
  end;

//******************************************* [Конец - Видеоадаптер] *************************************************//


//******************************************* [Начало - Звуковая карта] **********************************************//

  AudioCardPanel := TMemo.Create(Page);
  with AudioCardPanel do
  begin
    Text := ' Звуковая карта';
    Alignment := taLeftJustify;
    Parent := Page.Surface;

    Left := ScaleX(0);
    Top := VideoCardPanel.Top + 27;
    Width := ScaleX(106);
    Height := ScaleY(22);

    ReadOnly := True;
    Color := clBtnFace;
  end;

  AudioCardNamePanel := TMemo.Create(Page);
  with AudioCardNamePanel do
  begin
    Text := ' ' + GetSoundCardName;
    Alignment := taLeftJustify;
    Parent := Page.Surface;

    Left := ScaleX(110);
    Top := AudioCardPanel.Top;
    Width := ScaleX(304);
    Height := ScaleY(22);

    ReadOnly := True;
    Color := $CCFFCC;
  end;

  if
    GetSoundCards = 0 then
  begin
    StaticText.Caption := 'Компоненты, выделенные красным, не удовлетворяют требованиям игры.'#13+'Проверьте соответствие системным требованиям.';
    AudioCardNamePanel.Color := $CCCCFF;
  end;

//******************************************* [Конец - Звуковая карта] ***********************************************//


//******************************************* [Начало - ОЗУ] *********************************************************//

  RAMPanel := TMemo.Create(Page);
  with RAMPanel do
  begin
    Text := ' Память';
    Alignment := taLeftJustify;
    Parent := Page.Surface;

    Left := ScaleX(0);
    Top := AudioCardPanel.Top + 27;
    Width := ScaleX(106);
    Height := ScaleY(22);

    ReadOnly := True;
    Color := clBtnFace;
  end;

  RAMTotalPanel := TMemo.Create(Page);
  with RAMTotalPanel do
  begin
    Text := ' ' + IntToStr(GetSystemPhys + 1) + ' MB';
    Alignment := taLeftJustify;
    Parent := Page.Surface;

    Left := ScaleX(110);
    Top := RAMPanel.Top;
    Width := ScaleX(304);
    Height := ScaleY(22);

    ReadOnly := True;
    Color := $CCFFCC;
  end;

  if GetSystemPhys + 1 < 1024 then //Минимальное объем ОЗУ 1 Гб или 1024 Мб
  begin
    StaticText.Caption := 'Компоненты, выделенные красным, не удовлетворяют требованиям игры.'#13+'Проверьте соответствие системным требованиям.';
    RAMTotalPanel.Color := $CCCCFF;
  end;

//******************************************* [Конец - ОЗУ] **********************************************************//


//******************************************* [Начало - Файл подкачки] ***********************************************//

  PageFilePanel := TMemo.Create(Page);
  with PageFilePanel do
  begin
    Text := ' Файл подкачки';
    Alignment := taLeftJustify;
    Parent := Page.Surface;

    Left := ScaleX(0);
    Top := RAMPanel.Top + 27;
    Width := ScaleX(106);
    Height := ScaleY(22);

    ReadOnly := True;
    Color := clBtnFace;
  end;

  PageFileTotalPanel := TMemo.Create(Page);
  with PageFileTotalPanel do
  begin
    Text := ' ' + IntToStr(GetSystemPage) + ' MB';
    Alignment := taLeftJustify;
    Parent := Page.Surface;

    Left := ScaleX(110);
    Top := PageFilePanel.Top;
    Width := ScaleX(304);
    Height := ScaleY(22);

    ReadOnly := True;
    Color := $CCFFCC;
  end;

  if GetSystemPage < 2048 then //Минимальное объем файла [в мегабайтах] подкачки 1 Гб или 1024 Мб
  begin
    StaticText.Caption := 'Компоненты, выделенные красным, не удовлетворяют требованиям игры.'#13+'Проверьте соответствие системным требованиям.';
    PageFileTotalPanel.Color := $CCCCFF;
  end;

  Result := Page.ID;
end;

//******************************************* [Конец - Файл подкачки] ************************************************//

procedure ListBoxOnClick(Sender: TObject);
var
  NewLetter, OldString: string;
  i: Integer;
begin
  for i := 0 to ListBox.Items.Count - 1 do
  begin
    if ListBox.Selected[i] then
    begin
      NewLetter := Copy(ListBox.Items[i], 0, 1);
      OldString := Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text));
      WizardForm.DirEdit.Text := NewLetter + OldString;
    end;
  end;
end;

procedure InitializeWizard();
var
  Page: TWizardPage;
  Text: TNewStaticText;
  Memo: TMemo;
  Path: string;
  FreeMB, TotalMB: Cardinal;
  drives: DWORD;
  i: integer;
begin
  CheckSystemPage(wpLicense);

  Text := TNewStaticText.Create(WizardForm);
  Text.Top := 110;
  Text.Width := 332;
  Text.Height := 14;
  Text.Caption := 'Список жестких дисков и свободного места';
  Text.Parent := WizardForm.SelectDirPage;

  ListBox := TListBox.Create(WizardForm);
  ListBox.Top := 128;
  ListBox.Width := 208;
  ListBox.Height := ScaleY(84);
  ListBox.Parent := WizardForm.SelectDirPage;
  ListBox.OnClick := @ListBoxOnClick;
  ListBox.Font.Name := 'Courier New';
  ListBox.Font.Size := 10;
  ListBox.Font.Style := [fsBold];
  ListBox.Color := clBtnFace;

  drives := GetLogicalDrives();
  for i := 0 to 31 do
  begin
    if (drives and (1 shl i)) > 0 then
    begin
      Path := chr(ord('A') + i) + ':\';
      if GetDriveType(Path) = DRIVE_FIXED then
      begin
        GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
        if FreeMB>1024 then ListBox.Items.Add(Path + '  ' + IntToStr(round(FreeMB / TotalMB * 100)) + '%  ' + floatToStr(round(FreeMB/1024*100)/100) + ' GB')
        else ListBox.Items.Add(Path + '  ' + IntToStr(round(FreeMB / TotalMB * 100)) + '%  ' + IntToStr(FreeMB) + ' MB');
      end;
    end;
  end;
end;



P.S.
Вы мне помогали со следующим
кодом
Код:

function InitializeSetup: Boolean;
var
  path: string;
  res: Integer;
begin
  Result:= True;
  if RegValueExists(HKLM, 'Software\My Program', 'InstallPath') then
    if RegQueryStringValue(HKLM, 'Software\My Program', 'InstallPath', path) then
      if FileExists(path + '\MyProg.exe') then
  if MsgBox('Запустить My Program?', mbConfirmation, MB_YESNO) = IDYES then
    begin
      Exec(path + '\MyProg.exe', '', '', SW_SHOW, ewWaitUntilTerminated, res);
      Result:= False;
    end;
end;

можно, чтобы при нажатии кнопки "Нет" инсталлятор закрывался, а не начинал установку

S.E.K.T.O.R. 30-09-2009 03:41 1230872

Цитата:

Цитата Serega
Пример проверки системы, без get_hw_caps.dll »

спасибо за пример, но этот вариант у меня есть (Ultimate Test). Мне кажется, что мой вариант намного удобней в использовании.

Serega 01-10-2009 00:50 1231595

Цитата:

Цитата S.E.K.T.O.R.
Панели я создал (WindowsPanel, WindowsNamePanel), а вот добавить к ним все остальное нужное для проверки ОС не получается »

Я не совсем понял, вы просите добавить проверку ОС, но в первом и во втором скрипте она есть.

1:


2:


Цитата:

Цитата S.E.K.T.O.R.
Вы мне помогали со следующим »

пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion

[Registry]
Root: HKLM; Subkey: Software\My Program; ValueType: string; ValueName: InstallPath; ValueData: {app}; Flags: uninsdeletekey

[Code]
function InitializeSetup: Boolean;
var
  path: string;
  res: Integer;
begin
  Result:= True;
  if RegValueExists(HKLM, 'Software\My Program', 'InstallPath') then
    if RegQueryStringValue(HKLM, 'Software\My Program', 'InstallPath', path) then
      if FileExists(path + '\MyProg.exe') then
  if MsgBox('Запустить My Program?', mbConfirmation, MB_YESNO) = IDYES then
    begin
      Exec(path + '\MyProg.exe', '', '', SW_SHOW, ewWaitUntilTerminated, res);
      Result:= False;
    end
  else Result:= False;
end;


S.E.K.T.O.R. 01-10-2009 01:27 1231631

Цитата:

Цитата Serega
Я не совсем понял, вы просите добавить проверку ОС, но в первом и во втором скрипте она есть. »

Serega Вы снова меня не правильно поняли (Вы наверное сам код не посмотрели). В 1-ом скрипте проверка действительно есть, а во 2-ом лишь кусок (посмотрите внимательно код) т.е. надо добавить из первого еще вот
это
Код:

procedure CurPageChanged(CurPageID: Integer);
var
  Page: TWizardPage;
  Text: TNewStaticText;
  Memo,Windows,SP,Version,Build,registered,WindowsName,SP_Num,Version_Num,Build_num,registered_name: TMemo;
  Os,OS1: string; // строка с названием необходимой ОС
  // state: boolean;

  OS:=' Microsoft Windows XP Service Pack 2'; //строка является суммой из записей в реестре о Наименовании ОС и сервис-паке
  OS1:=' Microsoft Windows 2000 Service Pack 4'; //строка является суммой из записей в реестре о Наименовании ОС и сервис-паке

 // Проверка Windows 9x
  if ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,ProductName|}')<>'' then
  begin
  WindowsName := TMemo.Create(WizardForm);
  with WindowsName do begin
    Text := ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,ProductName|}')+ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,CSDVersion|}');
    Parent := WizardForm.UserInfoPage;
    Color := $CCFFCC;
    Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
    Top := ScaleY(20);
    Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
    Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

    ReadOnly := True;

  end

  end;


  if OS=(WindowsName.Text) then state:=true else
  if OS1=(WindowsName.Text) then state:=true else state:=false;

  Text := TNewStaticText.Create(WizardForm);
    with Text do begin
    Left := 0;
    Top := 0;
    Width := 417;
    Height := 14;
    if state then
    begin
      Font.Color:=clGreen;
      WindowsName.color:=$CCFFCC;
    // SP_Num.color:=$CCFFCC;
      Caption := 'Операционная система соответствует требованиям игры.';
    end
    else
    begin
      Font.Color:=clREd;
      WindowsName.color:=clRed;

      WindowsName.Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
      WindowsName.Top := ScaleY(20);
      WindowsName.Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
      WindowsName.Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.
      WindowsName.ReadOnly := True;



      Caption := 'Операционная система не соответствует требованиям игры.';
    end



P.S. Вы говорили, что навернное нельзя отключить сообщение "Недостаточно места на диске". А может тогда можно его изменить, т.е. сделать таким
либо дать команду инсталлятору выводить вместо него
такое
Код:

function NextButtonClick(CurPageID: Integer): Boolean;
var
  Path,s: String;
  FreeMB, TotalMB: Cardinal;
begin
  Result:= True;
  if CurPageID = wpSelectDir then
    begin
      Path:= ExtractFileDrive(WizardForm.DirEdit.Text);
      GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
      if FreeMB < (NeedSize*1024) then
    begin
      if FreeMB>1024 then
      begin
      s:='Для установки приложения необходимо '+ IntTostr(NeedSize)+ ' GB,'#13+'а на выбранном Вами диске доступно только '+ floatToStr(round(FreeMB/1024*100)/100) + ' GB!'
      end
        else s:='Для установки приложения необходимо '+ IntTostr(NeedSize)+ ' GB,'#13+'а на выбранном Вами диске доступно только '+ + IntToStr(FreeMB)+' MB';
      MsgBox(s, mbCriticalError, MB_OK)
        Result := False;
    end;
    end;
end;


Ведь в инсталке Сталкера как-то сделали

A1EXXX 01-10-2009 15:27 1231970

Вышла новая версия ISTool 5.3.0.1 (29.09.2009)

Изменения:
Fixed unicode bug

Lancer2404 02-10-2009 20:48 1233018

как сделать чтобы при указании пути инсталлятор не приписывал дефолтную папку.
пример путь С:\Driver (выбираешь через обзор)
а он в конце приписывает (параметр defaultdirname) допустим Новая папка.Как сделать чтоб он вообще ничего не приписывал?Спасибо

serg aka lain 02-10-2009 22:24 1233078

Цитата:

Цитата Lancer2404
(параметр defaultdirname) допустим Новая папка.Как сделать чтоб он вообще ничего не приписывал? »

[Setup]
AppendDefaultDirName=False

Lancer2404 03-10-2009 11:52 1233339

спасибо.а можете дать список похожих команд.вдруг пригодятся?

Цитата:

[Setup] AppendDefaultDirName=False
ошибку выдает писал в секции [setup]

serg aka lain 03-10-2009 16:12 1233595

Цитата:

Цитата Lancer2404
ошибку выдает »

Если и так:
AppendDefaultDirName=no
выдаст ошибку, то ...

414895494 03-10-2009 16:13 1233597

Здраствуйте. Я тут новинький. Хочу научится делать красивые инсталяторы.
Можете добрые люди научить меня? Буду очень признателен.





Вот этому можете меня научить?

A1EXXX 03-10-2009 17:22 1233658

414895494, код для растягивания картинки страницы приветствия:
читать дальше »

[Files]
Source: C:\fon.bmp; DestDir: {tmp}; Flags: dontcopy

[code]
var
WelcomeLabel1, WelcomeLabel2: TLabel;
BmpFile: TBitmapImage;

procedure InitializeWizard();
begin
ExtractTemporaryFile('fon.bmp');

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\fon.bmp'));
BmpFile.SetBounds(0, 0, 497, 320);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.WelcomePage;

with WizardForm do
begin
WelcomeLabel1.Hide;
WelcomeLabel2.hide;
end;

WelcomeLabel1:= TLabel.Create(WizardForm);
with WelcomeLabel1 do
begin
WelcomeLabel1.Alignment:=taCenter;
Left:= ScaleX(176);
Top:= ScaleY(66);
Width:= ScaleX(301);
Height:= ScaleY(71);
AutoSize:= false;
Transparent:= true;
WordWrap:= true;
Font.Name:='Tahoma'
Font.Size:= 12;
Font.Color:=ClWhite
Parent:= WizardForm.WelcomePage;
Caption:= WizardForm.WelcomeLabel1.Caption;
end;

WelcomeLabel2:=TLabel.Create(WizardForm);
with WelcomeLabel2 do
begin
WelcomeLabel2.Alignment:=taCenter;
Top:= ScaleY(136);
Left:= ScaleX(176);
Width:= ScaleX(301);
Height:= ScaleY(300);
AutoSize:= false;
WordWrap:= true;
Font.Color:=ClWhite
Font.Name:='Segoe UI'
Transparent:= true;
Parent:= WizardForm.WelcomePage;
Caption:= WizardForm.WelcomeLabel2.Caption;
end;
end;

Картинка в левый нижний угол:
читать дальше »

[Files]
Source: C:\logo.bmp; DestDir: {tmp}; Flags: dontcopy

[code]
var
LogoImage:TBitmapImage;
LogoLabel: TLabel;
LogoPanel: TPanel;

procedure LogoOnClick(Sender: TObject);
var ReturnCode: Integer;
begin
ShellExec('open', 'http://сайт.ру', '', '', SW_SHOWNORMAL, ewNoWait, ReturnCode)
end;

procedure InitializeWizard();
begin
ExtractTemporaryFile('logo.bmp');
LogoPanel := TPanel.Create(WizardForm);
with LogoPanel do
begin
Parent := WizardForm;
Left := ScaleX(5);
Top := ScaleY(320);
Width := ScaleX(165);
Height := ScaleY(35);
BevelOuter := bvNone;
end;

LogoImage := TBitmapImage.Create(WizardForm);
with LogoImage do
begin
Parent := LogoPanel;
Left := ScaleX(0);
Top := ScaleY(0);
AutoSize:=true;
ReplaceColor:=clFuchsia;
ReplaceWithColor:=clBtnFace;
Bitmap.LoadFromFile(ExpandConstant('{tmp}\logo.bmp'));
end;

LogoLabel := TLabel.Create(WizardForm);
with LogoLabel do
begin
Parent := LogoPanel;
Width := LogoPanel.Width;
Height := LogoPanel.Height;
Transparent:=True;
Cursor := crHand;
OnClick:=@LogoOnClick;
end;
end;

Растянуть верхнюю картинку:
читать дальше »

[code]
procedure InitializeWizard();
begin
with WizardForm do begin
with MainPanel do
Height := Height - 1;
with WizardSmallBitmapImage do begin
Left := 0;
Top := 0;
Height := 58; //Размер рисунка
Width := 497; //
end;
with PageNameLabel do begin
Font.Name := 'Tahoma'
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
with PageDescriptionLabel do begin
Font.Name := 'Tahoma'
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
end;
end;

Для объединения скриптом рекомендую ISS Joiner (как начинающему)
P.S. Всё это не раз обсуждалось, юзай поиск ;)

414895494 03-10-2009 17:27 1233661

A1EXXX,
Спасибо большое.

user_123 03-10-2009 18:31 1233744

Подскажите, как сделать, чтобы выводился запрос на удаление подкаталога {app}\log (по умолчанию не должен удаляться)при деинсталляции приложения?

Код:

function <...>(): Boolean;
begin
  if MsgBox(''+ ExpandConstant('{cm:removelogs}') +'', mbInformation, mb_YesNo) = idYes then
    begin
      <...>
    end;
end;


Lancer2404 03-10-2009 19:44 1233807

Цитата:

Цитата serg aka lain
Если и так:
AppendDefaultDirName=no
выдаст ошибку, то ... »

не работает в чем дело?

все решил проблему.А не подскажете какой ключ в реестре отвечает за добавление ярлыков в папку игры на windows vista?

GrizzlyMK 03-10-2009 19:59 1233819

Подскажите
Можно картинку поместить не тольно на стронице приветствия.
А напротежение всей устоновки..
И как можно увеличеть окно инстала.
Зарание спасибо.

serg aka lain 03-10-2009 20:24 1233844

Цитата:

Цитата Lancer2404
А не подскажете какой ключ в реестре отвечает за добавление ярлыков в папку игры на windows vista? »

За это отвечает GameuxInstallHelper.dll

Lancer2404 03-10-2009 20:58 1233871

А поподробнее можно а то я новичек в этом деле

Lancer2404 03-10-2009 21:23 1233892

Спасибо.

serg aka lain 03-10-2009 21:25 1233894

Цитата:

Цитата Lancer2404
А поподробнее можно а то я новичек в этом деле »

Можно, нужна сама библиотека "GameuxInstallHelper.dll".

Сам скрипт (Пример для юникод версии Inno):
читать дальше »

Код:

[Setup]
AppName=Call of Juarez - Bound in Blood
AppVerName=Call of Juarez - Bound in Blood
DefaultDirName={pf}\Call of Juarez - Bound in Blood
OutputDir=userdocs:CoJ_Install.
 
[Files]
Source: "GameuxInstallHelper.dll"; DestDir: "{app}"; Flags: ignoreversion overwritereadonly;
Source: "CoJBiBGame_x86.exe"; DestDir: "{app}"; Flags: ignoreversion;
 
[code]
 
const
  PlayTask = 0;
 
type
  TGUID = record
  Data1: Cardinal;
  Data2,
  Data3: Word;
  Data4: array [0..7] 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 'AddToGameExplorerW@files:GameuxInstallHelper.dll stdcall setuponly';
function CreateTask(InstallType: Integer; var GUID: TGUID; TaskType: Integer; TaskNumber: Integer; TaskName: String; Binary: String; Parameters: String): Cardinal;
 external 'CreateTaskW@files:GameuxInstallHelper.dll stdcall setuponly';
function RetrieveGUIDForApplication(Binary: String; var GUID: TGUID): Cardinal;
 external 'RetrieveGUIDForApplicationW@{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';
 
var
  GUID: TGUID;
 
procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssInstall then
    GenerateGUID(GUID);
  if CurStep = ssPostInstall then
  begin
    AddToGameExplorer(ExpandConstant('{app}\CoJBiBGame_x86.exe'), ExpandConstant('{app}'), 3, GUID);
    CreateTask(3, GUID, PlayTask, 0, 'Play', ExpandConstant('{app}\CoJBiBGame_x86.exe'), '');
  end;
end;
 
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usUninstall then
  begin
    RetrieveGUIDForApplication(ExpandConstant('{app}\CoJBiBGame_x86.exe'), GUID);
    RemoveFromGameExplorer(GUID);
    RemoveTasks(GUID);
 
    UnloadDll(ExpandConstant('{app}\GameuxInstallHelper.dll'));
  end;
end;


Lancer2404 03-10-2009 21:34 1233903

А вот я растягиваю картинку на весь экран,а при выборе компонентов,как сделать чтобы белого фона сзади не было?

414895494 04-10-2009 10:15 1234095

Помогите мне пожалуйста. Объедините пожалуйста эти скрипты:

читать дальше »

[code]
const
Color = clblack;

procedure InitializeWizard();
begin
WizardForm.PageNameLabel.Font.Color:=clWhite;
WizardForm.Font.Color:=clWhite;
WizardForm.Color:=Color;
WizardForm.WelcomePage.Color:=Color;
WizardForm.InnerPage.Color:=Color;
WizardForm.FinishedPage.Color:=Color;
WizardForm.LicensePage.Color:=Color;
WizardForm.PasswordPage.Color:=Color;
WizardForm.InfoBeforePage.Color:=Color;
WizardForm.UserInfoPage.Color:=Color;
WizardForm.SelectDirPage.Color:=Color;
WizardForm.SelectComponentsPage.Color:=Color;
WizardForm.SelectProgramGroupPage.Color:=Color;
WizardForm.SelectTasksPage.Color:=Color;
WizardForm.ReadyPage.Color:=Color;
WizardForm.PreparingPage.Color:=Color;
WizardForm.InstallingPage.Color:=Color;
WizardForm.InfoAfterPage.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.DiskSpaceLabel.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.GroupEdit.Color:=Color;
WizardForm.PasswordLabel.Color:=Color;
WizardForm.PasswordEdit.Color:=Color;
WizardForm.PasswordEditLabel.Color:=Color;
WizardForm.ReadyMemo.Color:=Color;
WizardForm.TypesCombo.Color:=Color;
WizardForm.WelcomeLabel1.Color:=Color;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.Color:=Color;
WizardForm.YesRadio.Color:=Color;
WizardForm.NoRadio.Color:=Color;
WizardForm.WelcomeLabel2.Color:=Color;
WizardForm.LicenseLabel1.Color:=Color;
WizardForm.InfoAfterClickLabel.Color:=Color;
WizardForm.ComponentsList.Color:=Color;
WizardForm.ComponentsDiskSpaceLabel.Color:=Color;
WizardForm.BeveledLabel.Color:=Color;
WizardForm.StatusLabel.Color:=Color;
WizardForm.FilenameLabel.Color:=Color;
WizardForm.SelectDirLabel.Color:=Color;
WizardForm.SelectStartMenuFolderLabel.Color:=Color;
WizardForm.SelectComponentsLabel.Color:=Color;
WizardForm.SelectTasksLabel.Color:=Color;
WizardForm.LicenseAcceptedRadio.Color:=Color;
WizardForm.LicenseNotAcceptedRadio.Color:=Color;
WizardForm.UserInfoNameLabel.Color:=Color;
WizardForm.UserInfoNameEdit.Color:=Color;
WizardForm.UserInfoOrgLabel.Color:=Color;
WizardForm.UserInfoOrgEdit.Color:=Color;
WizardForm.PreparingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Color:=Color;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
end;


читать дальше »

[code]
var
ProgressBar1: TNewProgressBar;

procedure animateprogress;
begin ProgressBar1.Position := ProgressBar1.Position+1
end;

procedure InitializeWizard();
begin
WizardForm.FileNameLabel.Visible:=false;
WizardForm.StatusLabel.Top:=ScaleY(81);
WizardForm.StatusLabel.Width:=ScaleX(262);
WizardForm.ProgressGauge.Top:=ScaleY(100);
WizardForm.ProgressGauge.Left:=ScaleX(155);
WizardForm.ProgressGauge.Width:=ScaleX(262);

ProgressBar1 := TNewProgressBar.Create(wizardform);
with ProgressBar1 do
begin
Parent := wizardform.installingpage;
Left := ScaleX(0);
Top := ScaleY(100);
Width := ScaleX(150);
Height := ScaleY(21);
Max := 3; //задается как кол-во файлов в [_run]
end;
end;



читать дальше »

[Files]
Source: D:\Влад\Скрипты Inno Setup\3Tq4d6iRHl.bmp; DestDir: {tmp}; Flags: dontcopy

[code]
var
WelcomeLabel1, WelcomeLabel2: TLabel;
BmpFile: TBitmapImage;

procedure InitializeWizard4();
begin
ExtractTemporaryFile('3Tq4d6iRHl.bmp');

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\3Tq4d6iRHl.bmp'));
BmpFile.SetBounds(0, 0, 497, 320);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.WelcomePage;

with WizardForm do
begin
WelcomeLabel1.Hide;
WelcomeLabel2.hide;
end;

WelcomeLabel1:= TLabel.Create(WizardForm);
with WelcomeLabel1 do
begin
WelcomeLabel1.Alignment:=taCenter;
Left:= ScaleX(176);
Top:= ScaleY(66);
Width:= ScaleX(301);
Height:= ScaleY(71);
AutoSize:= false;
Transparent:= true;
WordWrap:= true;
Font.Name:='Tahoma'
Font.Size:= 12;
Font.Color:=ClWhite
Parent:= WizardForm.WelcomePage;
Caption:= WizardForm.WelcomeLabel1.Caption;
end;

WelcomeLabel2:=TLabel.Create(WizardForm);
with WelcomeLabel2 do
begin
WelcomeLabel2.Alignment:=taCenter;
Top:= ScaleY(136);
Left:= ScaleX(176);
Width:= ScaleX(301);
Height:= ScaleY(300);
AutoSize:= false;
WordWrap:= true;
Font.Color:=ClWhite
Font.Name:='Segoe UI'
Transparent:= true;
Parent:= WizardForm.WelcomePage;
Caption:= WizardForm.WelcomeLabel2.Caption;
end;
end;


читать дальше »

[Files]
Source: D:\Влад\Скрипты Inno Setup\d68840406b78.bmp; DestDir: {tmp}; Flags: dontcopy

[code]
var
LogoImage:TBitmapImage;
LogoLabel: TLabel;
LogoPanel: TPanel;

procedure LogoOnClick(Sender: TObject);
var ReturnCode: Integer;
begin
ShellExec('open', 'http://www.pirat.ca/forum/index.php', '', '', SW_SHOWNORMAL, ewNoWait, ReturnCode)
end;

procedure InitializeWizard3();
begin
ExtractTemporaryFile('d68840406b78.bmp');
LogoPanel := TPanel.Create(WizardForm);
with LogoPanel do
begin
Parent := WizardForm;
Left := ScaleX(5);
Top := ScaleY(320);
Width := ScaleX(165);
Height := ScaleY(35);
BevelOuter := bvNone;
end;

LogoImage := TBitmapImage.Create(WizardForm);
with LogoImage do
begin
Parent := LogoPanel;
Left := ScaleX(0);
Top := ScaleY(0);
AutoSize:=true;
ReplaceColor:=clFuchsia;
ReplaceWithColor:=clBtnFace;
Bitmap.LoadFromFile(ExpandConstant('{tmp}\d68840406b78.bmp'));
end;

LogoLabel := TLabel.Create(WizardForm);
with LogoLabel do
begin
Parent := LogoPanel;
Width := LogoPanel.Width;
Height := LogoPanel.Height;
Transparent:=True;
Cursor := crHand;
OnClick:=@LogoOnClick;
end;
end


читать дальше »

[code]
procedure InitializeWizard();
begin
with WizardForm do begin
with MainPanel do
Height := Height - 1;
with WizardSmallBitmapImage do begin
Left := 0;
Top := 0;
Height := 58; //Размер рисунка
Width := 497; //
end;
with PageNameLabel do begin
Font.Name := 'Tahoma'
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
with PageDescriptionLabel do begin
Font.Name := 'Tahoma'
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
end;
end;


и вот этот

читать дальше »

[Setup]
ExtraDiskSpaceRequired=4517483645
DiskSpanning=true
DiskSliceSize=1457664000
AppName=S.T.A.L.K.E.R. - Зов Припяти
AppVerName=S.T.A.L.K.E.R. - Зов Припяти v1.6.00
AppPublisher=CSKA-4empion
AppPublisherURL=http://www.pirat.ca
AppSupportURL=http://www.pirat.ca
AppUpdatesURL=http://www.pirat.ca
DefaultDirName={pf}\S.T.A.L.K.E.R. - Зов Припяти
DefaultGroupName=S.T.A.L.K.E.R. - Зов Припяти
OutputDir=D:\Влад\Инсталяторы Inno Setup\STALKER
OutputBaseFilename=setup
SetupIconFile=D:\Влад\Игры\S.T.A.L.K.E.R. - Зов Припяти\stalker_cop.ico
Compression=lzma/ultra64
SolidCompression=true
RestartIfNeededByRun=false
AllowCancelDuringInstall=true
DisableDirPage=false
EnableDirDoesntExistWarning=false
DirExistsWarning=yes
DisableProgramGroupPage=false
DisableReadyMemo=false
DisableReadyPage=false
AlwaysShowComponentsList=false
Uninstallable=true
DisableStartupPrompt=false
ShowComponentSizes=false
SlicesPerDisk=1
ReserveBytes=0
InfoBeforeFile=
LicenseFile=
PrivilegesRequired=none
InternalCompressLevel=ultra64
WizardSmallImageFile=D:\Влад\Скрипты Inno Setup\ec03e09c995c.bmp

[Languages]
Name: russian; MessagesFile: compiler:Default.isl

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

[Files]
Source: D:\Влад\Игры\S.T.A.L.K.E.R. - Зов Припяти\Stalker-COP.exe; DestDir: {app}; Flags: ignoreversion
Source: D:\Влад\Игры\S.T.A.L.K.E.R. - Зов Припяти\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
; ОТМЕТЬТЕ: Не используйте "Флажки: Проигнорировать версию" на любых общедоступных системных файлах

[Icons]
Name: {group}\Удалить игру; Filename: {uninstallexe}; WorkingDir: {app}
Name: {group}\S.T.A.L.K.E.R. - Зов Припяти; Filename: {app}\Stalker-COP.exe
Name: {userdesktop}\S.T.A.L.K.E.R. - Зов Припяти; Filename: {app}\Stalker-COP.exe; WorkingDir: {app}\; IconFilename: {app}\Stalker-COP.exe

[Run]
Filename: {src}\pack; Parameters: -x -y -s2 -d.; WorkingDir: {app}\; StatusMsg: Идет распаковка файлов игры...; Flags: shellexec waituntilterminated; Afterinstall: animateprogress
Filename: {app}\Stalker-COP.exe; Description: {cm:LaunchProgram,S.T.A.L.K.E.R. - Зов Припяти}; Flags: nowait postinstall skipifsilent

[UninstallDelete]
Name: {app}\*.*; Type: filesandordirs

[Registry]
Root: HKLM; SubKey: SOFTWARE\GSC Game World\STALKER-COP; ValueType: string; ValueName: InstallCDKEY; ValueData:
Root: HKLM; SubKey: SOFTWARE\GSC Game World\STALKER-COP; ValueType: string; ValueName: InstallLang; ValueData: ru
Root: HKLM; SubKey: SOFTWARE\GSC Game World\STALKER-COP; ValueType: string; ValueName: InstallPath; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\GSC Game World\STALKER-COP; ValueType: string; ValueName: InstallSource; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\GSC Game World\STALKER-COP; ValueType: string; ValueName: InstallUserName; ValueData:
Root: HKLM; SubKey: SOFTWARE\GSC Game World\STALKER-COP; ValueType: string; ValueName: InstallVers; ValueData: 1.6.00
Root: HKLM; SubKey: SOFTWARE\GSC Game World\STALKER-COP; ValueType: dword; ValueName: InstallPatchID; ValueData: $00002eda

user_123 05-10-2009 00:30 1234609

Цитата:

Цитата user_123
Подскажите, как сделать, чтобы выводился запрос на удаление подкаталога {app}\log (по умолчанию не должен удаляться)при деинсталляции приложения?

Код:

function <...>(): Boolean;
begin
 if MsgBox(''+ ExpandConstant('{cm:removelogs}') +'', mbInformation, mb_YesNo) = idYes then
 begin
 <...>
 end;
end;

»

Отвечаю сам на свой вопрос.
Кое-что написал сам (по образцу (скачивал с вашего форума) некоторых скриптов):
Код:

procedure InitializeUninstallProgressForm();
begin
  if MsgBox(CustomMessage('MyCustomMessage'), mbConfirmation, MB_YESNO) = IDYES then
    DelTree(ExpandConstant('{app}\subdir'),True,True,True)
end;

Вроде бы работает... Но есть некоторые трудности... Перед тем как удалить программу, надо завершить её процесс... У меня не получается реализовать это в деинсталляторе через секцию code по Вашим образцам, istask.dll распаковывается в папку деинсталлятора... компилятор сообщает о синтаксических ошибках (я с образца всё верно переписал и оптимизировал под свою прогрмму)... В инсталляторе я сделал, работает нормально... Пробовал для деинсталлятора прописать по образцу инсталлятора - скомпилировалось без проблем, но при запуске деинсталятора появилась ошибка...

Закрытие программы я реализовал так:
Код:

[UninstallRun]
Filename: {sys}\taskkill.exe; Parameters: /f /im MyProg.exe /t; Flags: runhidden

Всё было бы замечательно, если бы это выполнялось ДО удаления {app}\subdir... Но после стандартного запроса об удалении программы.

Может, достаточно написать другую процедуру... подскажите, пожалуйста, какую...

GrizzlyMK 05-10-2009 17:42 1235049

Помогите сделать (Поиском пытался не чего не нашол или я просто нетак смотрел )
1. Как изменить размер окна инстолятора
2. Как селать чтобы фоновое изоброжение было на всех диологах

Serega 05-10-2009 19:40 1235115

Цитата:

Цитата 414895494
Объедините пожалуйста эти скрипты »

Попробуйте сначала использовать утилиту InnoSetup Script Joiner, ссылка в шапке темы.

Цитата:

Цитата user_123
по Вашим образцам, istask.dll распаковывается в папку деинсталлятора... компилятор сообщает о синтаксических ошибках »

Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Files]
; измените на своё место расположение dll'ки, у меня она расположена
; C:\Program Files\Inno Setup 5\Libraries\ISTask.dll
Source: compiler:Libraries\ISTask.dll; DestDir: {app}; Flags: ignoreversion
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion

[Run]
Filename: {app}\MyProg.exe; Description: Запустить программу My Program?; Flags: postinstall nowait skipifsilent

[Code]
// функции используемые при деинсталляции
// RunTask@{app}\ISTask.dll - название функции (в данном случае, если программа работает)
// и путь dll'ки где она расположена...
function RunTask(FileName: string; bFullpath: Boolean): Boolean;
  external 'RunTask@{app}\ISTask.dll stdcall delayload uninstallonly';
function KillTask(ExeFileName: string): Integer;
  external 'KillTask@{app}\ISTask.dll stdcall delayload uninstallonly';

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usUninstall then
  if RunTask('MyProg.exe', False) then
    begin
      // прячем форму
      UninstallProgressForm.Visible:= False;
      if MsgBox('Обнаружена запущенная программа My Program. Завершить?', mbConfirmation, MB_YESNO) = IDYES then
        begin
          KillTask('MyProg.exe');
          UnloadDll(ExpandConstant('{app}\ISTask.dll'));
          // показываем форму
          UninstallProgressForm.Visible:= True;
        end
      else
        begin
          MsgBox('Завершите работу программы My Program, затем снова запустите программу удаления.', mbInformation, MB_OK);
          UnloadDll(ExpandConstant('{app}\ISTask.dll'));
          Abort;
        end;
    end
  else
    begin
      UnloadDll(ExpandConstant('{app}\ISTask.dll'));
    end;
end;



Цитата:

Цитата GrizzlyMK
Как изменить размер окна инстолятора »

WizardForm.ClientHeight - высота;
WizardForm.ClientWidth - ширина.
Цитата:

Цитата GrizzlyMK
Как селать чтобы фоновое изоброжение было на всех диологах »

Посмотрите в архиве темы, этот вопрос уже поднимался.

Krekerpro 05-10-2009 21:04 1235188

Доброго времени суток,хотелось бы узнать,как реализовать вот это ???

Painkiller 06-10-2009 00:27 1235436

Цитата:

Цитата Krekerpro
Доброго времени суток,хотелось бы узнать,как реализовать вот это »

Возможно я ошибаюсь , но скорее всего Inno Setup Form Designer-ом

ZooM1k 06-10-2009 01:51 1235478

Вложений: 1
А как сделать так что бы вываливалось окно перед самой распаковкой файлов и просило ввести логин и пароль а эти данные заносились в реестр памоготи пожалуйста оч оч надо реолизовать

GrizzlyMK 06-10-2009 08:57 1235555

Цитата:

Цитата Serega
Посмотрите в архиве темы, этот вопрос уже поднимался. »

Просмотрел весь архив.
Кто-то уже задавал этот вопрос но не получил ответа.
Либо я я плохо всё просмотрел.

414895494 07-10-2009 12:31 1236696

А подскажите как можно сделать так:



Пожалуйста скажите как.

Raf-9600 08-10-2009 10:11 1237476

Цитата:

Цитата Serega
Сделал, не совсем как вы хотели, т.е. сделал отдельную страницу с выбором Steam или NoSteam.
Пример
[Setup]
AppID={{9C9D1016-916D-40D5-B034-A0071759F1B7}
AppName=Half-Life 2
AppVerName=My Half-Life 2
DefaultDirName={pf}\Half-Life 2
DefaultGroupName=Half-Life 2
OutputDir=.
UninstallFilesDir={app}\UninstallDir

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

[CustomMessages]
INST_MODE=Режим установки
INST_MODE_CPT=Пожалуйста, выберите в каком режиме будет устанавливаться программа
INST_EXPR=Steam
INST_EXPR_STR=Установка программы с параметрами Steam.
INST_CUST=NoSteam
INST_CUST_STR=Установка программы с параметрами NoSteam.
NEXT=Нажмите «Далее», чтобы продолжить.

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion

[Icons]
Name: {group}\My Program; Filename: {app}\MyProg.exe; WorkingDir: {app}; Check: MyFuncIcons

[code]
function GetModuleHandle(lpModuleName: LongInt): LongInt;
external 'GetModuleHandleA@kernel32.dll stdcall';

function ExtractIcon(hInst: LongInt; lpszExeFileName: PChar; nIconIndex: LongInt): LongInt;
external 'ExtractIconA@shell32.dll stdcall';

function DrawIconEx(hdc: LongInt; xLeft, yTop: Integer; hIcon: LongInt; cxWidth, cyWidth: Integer; istepIfAniCur, hbrFlickerFreeDraw, diFlags: LongInt): LongInt;
external 'DrawIconEx@user32.dll stdcall';

var
SupportPage: TWizardPage;
Steam, NoSteam: TNewRadiobutton;

function MyFuncIcons: Boolean;
begin
if Steam.Checked = True then
Result:= False
else Result:= True;
end;

procedure InitializeWizard();
var
Str1, Str2, Str3: TNewStaticText;
Rect: TRect;
hIcon: LongInt;
begin
SupportPage:= CreateCustomPage(wpWelcome, ExpandConstant('{cm:INST_MODE}'), ExpandConstant('{cm:INST_MODE_CPT}'));

Steam:= TNewRadiobutton.Create(SupportPage);
with Steam do
begin
SetBounds(ScaleX(20), ScaleY(40), ScaleX(200), ScaleY(16));
Font.Style:= [fsBold];
Caption:= ExpandConstant('{cm:INST_EXPR}');
Checked:= True;
Parent:= SupportPage.Surface;
end;

hIcon:= ExtractIcon(GetModuleHandle(0), ExpandConstant('{sys}\shell32.dll'), 118);
with TBitmapImage.Create(SupportPage) do
begin
SetBounds(ScaleX(36), Steam.Top + ScaleY(20), ScaleX(32), ScaleY(32));
with Bitmap do
begin
Width:= ScaleX(32);
Height:= ScaleY(32);
Rect.Right:= ScaleX(32);
Rect.Bottom:= ScaleY(32);
Rect.Left:= ScaleX(0);
Rect.Top:= ScaleY(0);
Canvas.Brush.Color:= clBtnFace;
Canvas.FillRect(Rect);
DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, 3);
end;
Parent:= SupportPage.Surface;
end;

Str1:= TNewStaticText.Create(SupportPage);
with Str1 do
begin
SetBounds(ScaleX(78), Steam.Top + ScaleY(20), ScaleX(349), ScaleY(32));
Autosize:= False;
WordWrap:= True;
Caption:= ExpandConstant('{cm:INST_EXPR_STR}');
Parent:= SupportPage.Surface;
end;

NoSteam:= TNewRadiobutton.Create(SupportPage);
with NoSteam do
begin
SetBounds(ScaleX(20), Str1.Top + ScaleY(52), ScaleX(200), ScaleY(16));
Font.Style:= [fsBold];
Caption:= ExpandConstant('{cm:INST_CUST}');
Parent:= SupportPage.Surface;
end;

hIcon:= ExtractIcon(GetModuleHandle(0), ExpandConstant('{sys}\shell32.dll'), 119);
with TBitmapImage.Create(SupportPage) do
begin
SetBounds(ScaleX(36), NoSteam.Top + ScaleY(20), ScaleX(32), ScaleY(32));
with Bitmap do
begin
Width:= ScaleX(32);
Height:= ScaleY(32);
Rect.Right:= ScaleX(32);
Rect.Bottom:= ScaleY(32);
Rect.Left:= ScaleX(0);
Rect.Top:= ScaleY(0);
Canvas.Brush.Color:= clBtnFace;
Canvas.FillRect(Rect);
DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, 3);
end;
Parent:= SupportPage.Surface;
end;

Str2:= TNewStaticText.Create(SupportPage);
with Str2 do
begin
SetBounds(ScaleX(78), NoSteam.Top + ScaleY(20), ScaleX(349), ScaleY(50));
Autosize:= False;
WordWrap:= True;
Caption:= ExpandConstant('{cm:INST_CUST_STR}');
Parent:= SupportPage.Surface;
end;

Str3:= TNewStaticText.Create(SupportPage);
with Str3 do
begin
SetBounds(ScaleX(36), ScaleY(221), ScaleX(381), ScaleY(16));
Autosize:= False;
WordWrap:= True;
Caption:= ExpandConstant('{cm:NEXT}');
Parent:= SupportPage.Surface;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpSelectDir then
begin
if Steam.Checked = True then
WizardForm.DirEdit.Text:= ExpandConstant('{reg:HKLM\SOFTWARE\Valve\Steam,InstallPath|{pf}\ARPS}')
else WizardForm.DirEdit.Text:= ExpandConstant('{pf}\Half-Life 2');
end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if PageID = wpSelectProgramGroup then
begin
if Steam.Checked = True then
Result:= True;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
begin
if Steam.Checked = True then
begin
DelTree(ExpandConstant('{app}\UninstallDir'), True, True, True);
RegDeleteKeyIncludingSubkeys(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{9C9D1016-916D-40D5-B034-A0071759F1B7}_is1');
end;
end;
end;

function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo,
MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;
var
S: String;
begin
S := S + ExpandConstant('{cm:INST_MODE}') + NewLine;
if Steam.Checked = True then
S := S + Space + ExpandConstant('{cm:INST_EXPR}') + NewLine + NewLine
else
S := S + Space + ExpandConstant('{cm:INST_CUST}') + NewLine + NewLine;
S := S + MemoDirInfo + NewLine + Newline;
S := S + MemoGroupInfo + NewLine + Newline;
S := S + MemoTasksInfo + NewLine + NewLine;
Result := S;
end;

{
HINT: В режиме "Экспресс Режим" (Steam) может возникнуть ситуация, когда к примеру не хватает места
на жестком диске, а страница выбора папки установки в "Экспресс Режиме" будет пропущена,
в результате чего получится так, что установка сообщит о нехватке места уже в процессе
копирования файлов.
}
»

А вы немогли бы ещё сделать так, чтобы у вариантов установки "Steam" и "NoSteam", можно было указать разные наборы компонентов, и разные параметры [Tasks]?

Raf-9600 08-10-2009 11:36 1237532

Цитата:

Цитата serg aka lain
Можно, нужна сама библиотека "GameuxInstallHelper.dll".
Сам скрипт (Пример для юникод версии Inno): »

А как в нем указывать рейтинг (E, T, M, и т.д.) с комментариями нему, рекомендуемые/минимальные системные требования, и картинку которая там будет отображаться?


A1EXXX 08-10-2009 15:38 1237705

Inno Setup Compiler (build 091007) by ResTools

serg aka lain 08-10-2009 19:51 1237894

Цитата:

Цитата Raf-9600
А как в нем указывать рейтинг (E, T, M, и т.д.) с комментариями нему, рекомендуемые/минимальные системные требования, и картинку которая там будет отображаться? »

Зта информация уже встроена в GDF.dll, или в экзешник игры, включая рейтинг и картинку.
Конкретно в Crysis'е, эту информацию содержит VistaEssentials.dll, а GameuxInstallHelper.dll только регистрирует игру в Game Explorer, ну и ещё в ней есть пара функций, для регистрации в Медиацентре и ещё какая-то мелочь.

Krekerpro 09-10-2009 15:13 1238536

Хотелось бы узнать как сделать выделенную область прозрачной

Raf-9600 10-10-2009 10:54 1239157

Цитата:

Цитата Raf-9600
А вы немогли бы ещё сделать так, чтобы у вариантов установки "Steam" и "NoSteam", можно было указать разные наборы компонентов, и разные параметры [Tasks]? »

Если это сложно реализовать, то есть второй вариант, сделать чтоб после выбора типа установки "Steam" и "NoSteam", закрывался текущий инсталлятор, и запускался другой инсталлятор, HL2-Steam.exe, или HL2-NoSteam.exe (для типов Steam и NoSteam соответственно). Только при условии что когда их запускает "главный" инсталлятор, отсутствовала первая страница, а если их вручную запустить, то она была.

Serega 11-10-2009 09:06 1239866

Цитата:

Цитата Raf-9600
Если это сложно реализовать »

Всё это реализовать не сложно, просто котострафически не хватает времени...
Свободное время появляется только около 11 часов вечера. Делаю попытки, или как это лучше сказать, пытаюсь просмотреть все актуальные темы, но усталость берет вверх и натуральным образом просто отрубаюсь...

P.S.
Так, что не держите зла кому не ответил...

Tukash 12-10-2009 12:48 1240772

добрый день, подскажите как сделать вот так: http://img57.imageshack.us/i/sshot1w.jpg/ а то сколько не старась у меня буквы "лежат на фоне и рисунка не видно" надеюсь на помощь! заранее спасибо

grinda 12-10-2009 15:58 1240965

Скажите плиз каким скриптом можно поменять в инсталлере кнопки назад/далее/обзор ?

GrizzlyMK 12-10-2009 17:31 1241045

Вложений: 1
grinda,
Вот наложение изоброжение на кнопки.
А также саме кнопки вложил.
Код:

[Files]
Source: button.bmp; DestDir: {tmp}; Flags: dontcopy

*Code]
const
  ButtonWidth = 80;    //Указываем размер кнопок
  ButtonHeight = 23;

  bidBack = 0;
  bidNext = 1;
  bidCancel = 2;
  bidDirBrowse = 3;
  bidGroupBrowse = 4;

var
  ButtonPanel: array [0..4] of TPanel;
  ButtonImage: array [0..4] of TBitmapImage;
  ButtonLabel: array [0..4] of TLabel;

procedure ButtonLabelClick(Sender: TObject);
var
  Button: TButton;
begin
  ButtonImage[TLabel(Sender).Tag].Left:=0
  case TLabel(Sender).Tag of
    bidBack: Button:=WizardForm.BackButton
    bidNext: Button:=WizardForm.NextButton
    bidCancel: Button:=WizardForm.CancelButton
    bidDirBrowse: Button:=WizardForm.DirBrowseButton
    bidGroupBrowse: Button:=WizardForm.GroupBrowseButton
  else
    Exit
  end
  Button.OnClick(Button)
end;

procedure ButtonLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if ButtonLabel[TLabel(Sender).Tag].Enabled then
    ButtonImage[TLabel(Sender).Tag].Left:=-ButtonWidth
end;

procedure ButtonLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  ButtonImage[TLabel(Sender).Tag].Left:=0
end;

procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
  Image: TBitmapImage;
  Panel: TPanel;
  Labl: TLabel;

begin
  Panel:=TPanel.Create(WizardForm)
  Panel.Left:=AButton.Left
  Panel.Top:=AButton.Top
  Panel.Width:=AButton.Width
  Panel.Height:=AButton.Height
  Panel.Tag:=AButtonIndex
  Panel.Parent:=AButton.Parent
  ButtonPanel[AButtonIndex]:=Panel

  Image:=TBitmapImage.Create(WizardForm)    //Рисунок который ложится на кнопку
  Image.Width:=160                          //Обязательно прописать оригинальный размер рисунка
  Image.Height:=23
  Image.Enabled:=False
  Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\button.bmp'))
  Image.Parent:=Panel
  ButtonImage[AButtonIndex]:=Image

  with TLabel.Create(WizardForm) do begin
    Tag:=AButtonIndex
    Parent:=Panel
    Width:=Panel.Width
    Height:=Panel.Height
    Transparent:=True
    OnClick:=@ButtonLabelClick
    OnDblClick:=@ButtonLabelClick
    OnMouseDown:=@ButtonLabelMouseDown
    OnMouseUp:=@ButtonLabelMouseUp
  end

  Labl:=TLabel.Create(WizardForm)        //Текст кнопок
  Labl.Left:=23                          //Указываем положение текста
  Labl.Top:=5
  Labl.Autosize:=True
  Labl.Alignment:=taCenter
  Labl.Tag:=AButtonIndex
  Labl.Transparent:=True
  Labl.Font.Color:=clWhite              //Цвет текста
  Labl.Caption:=AButton.Caption
  Labl.OnClick:=@ButtonLabelClick
  Labl.OnDblClick:=@ButtonLabelClick
  Labl.OnMouseDown:=@ButtonLabelMouseDown
  Labl.OnMouseUp:=@ButtonLabelMouseUp
  Labl.Parent:=Panel
  ButtonLabel[AButtonIndex]:=Labl
end;

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
  ButtonLabel[AButtonIndex].Caption:=AButton.Caption
  ButtonPanel[AButtonIndex].Visible:=AButton.Visible
  ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
  ButtonLabel[bidNext].Enabled:=True
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
  ButtonLabel[bidNext].Enabled:=False
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  UpdateButton(WizardForm.BackButton,bidBack)
  UpdateButton(WizardForm.NextButton,bidNext)
  UpdateButton(WizardForm.CancelButton,bidCancel)
end;

procedure InitializeWizard();
begin
  WizardForm.BackButton.Width:=ButtonWidth
  WizardForm.BackButton.Height:=ButtonHeight

  WizardForm.NextButton.Width:=ButtonWidth
  WizardForm.NextButton.Height:=ButtonHeight
   
  WizardForm.CancelButton.Width:=ButtonWidth
  WizardForm.CancelButton.Height:=ButtonHeight
 
  WizardForm.DirBrowseButton.Left:=337
  WizardForm.DirBrowseButton.Width:=ButtonWidth
  WizardForm.DirBrowseButton.Height:=ButtonHeight
 
  WizardForm.GroupBrowseButton.Left:=337
  WizardForm.GroupBrowseButton.Width:=ButtonWidth
  WizardForm.GroupBrowseButton.Height:=ButtonHeight
 
  WizardForm.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick

  WizardForm.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick

  ExtractTemporaryFile('button.bmp')
  LoadButtonImage(WizardForm.BackButton,bidBack)
  LoadButtonImage(WizardForm.NextButton,bidNext)
  LoadButtonImage(WizardForm.CancelButton,bidCancel)
  LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
  LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;


Tukash 12-10-2009 19:38 1241144

люди помогите соединить 2 скрипта:
Код:

const
  HALIGN_CENTER = 0;
  HALIGN_LEFT = 1;
  HALIGN_RIGHT = 2;

  VALIGN_CENTER = 0;
  VALIGN_TOP = 1;
  VALIGN_BOTTOM = 2;

  FIT_NONE = 0;
  FIT_WIDTH = 1;
  FIT_HEIGHT = 2;
  FIT_BOTH = 3;

  CLR_INVALID = $FFFFFFFF;

function InitGifCtrl(): Boolean;
external 'initgifctrl@files:gifctrl.dll stdcall';

function UninitGifCtrl(): Boolean;
external 'uninitgifctrl@files:gifctrl.dll stdcall';

function NewGifbWnd(hWndParent: HWND; X, Y, nWidth, nHeight: Integer): HWND;
external 'newgifwnd@files:gifctrl.dll stdcall';

function GifWndLoadFromFile(hWndGif: HWND; HAlign, VAlign: Integer; BGColor: DWord; Fit: integer; GifFileName: PChar): Boolean;
external 'gifwndloadfromfile@files:gifctrl.dll stdcall';

var
  GIF: HWND;
  WelcomeLabel1,WelcomeLabel2: TLabel;
  WizardImage: TBitmapImage;

procedure DeinitializeSetup();
begin
// скрываем надписи
  WizardForm.WelcomeLabel1.Hide;
  WizardForm.WelcomeLabel2.Hide;
// загружаем на форму рисунок
  WizardForm.WizardBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\fon.bmp'));
// растягиваем рисунок по всей форме, если он у вас уже такой какой вы хотите, то удалите эту строку
  WizardForm.WizardBitmapImage.Align:=true;

// создаём надписи поверх рисунка
    WelcomeLabel1 := TLabel.Create(WizardForm);
    WelcomeLabel1.Left := 150;
    WelcomeLabel1.Top := 30;
    WelcomeLabel1.Width := 310;
    WelcomeLabel1.Height := 28;
    WelcomeLabel1.AutoSize := False;
    WelcomeLabel1.WordWrap := True;
    WelcomeLabel1.Font.Style := [fsBold];
    WelcomeLabel1.Font.Color := clBlack;
    WelcomeLabel1.Transparent := True;
    WelcomeLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
    WelcomeLabel1.Parent := WizardForm.WelcomePage;

  WelcomeLabel2:=TLabel.Create(WizardForm);
  WelcomeLabel2.Left := 150;
  WelcomeLabel2.Top := 70;
  WelcomeLabel2.Width := 310;
  WelcomeLabel2.Height := 200;
  WelcomeLabel2.AutoSize := False;
  WelcomeLabel2.WordWrap := True;
  WelcomeLabel2.Font.Color := clBlack;
  WelcomeLabel2.Transparent := True;
  WelcomeLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
  WelcomeLabel2.Parent := WizardForm.WelcomePage;
  UninitGifCtrl();
end;

procedure InitializeWizard();
begin
  ExtractTemporaryFile('fon.bmp')

    WizardForm.WelcomeLabel1.Hide;
    WizardForm.WelcomeLabel2.Hide;
    WizardForm.WizardBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\fon.bmp'));
    WizardForm.WizardBitmapImage.Align:=true;

  InitGifCtrl();
  GIF := NewGifbWnd(WizardForm.Handle, 10, 316, 140, 42);
  //GifWndLoadFromFile(GIF, HALIGN_CENTER, VALIGN_BOTTOM, CLR_INVALID, FIT_WIDTH, ExpandConstant('{tmp}\www_oszone_net.gif'));

    WelcomeLabel1 := TLabel.Create(WizardForm);
    WelcomeLabel1.Left := 150;
    WelcomeLabel1.Top := 30;
    WelcomeLabel1.Width := 310;
    WelcomeLabel1.Height := 28;
    WelcomeLabel1.AutoSize := False;
    WelcomeLabel1.WordWrap := True;
    WelcomeLabel1.Font.Style := [fsBold];
    WelcomeLabel1.Font.Color := clBlack;
    WelcomeLabel1.Transparent := True;
    WelcomeLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
    WelcomeLabel1.Parent := WizardForm.WelcomePage;

  WelcomeLabel2:=TLabel.Create(WizardForm);
  WelcomeLabel2.Left := 150;
  WelcomeLabel2.Top := 70;
  WelcomeLabel2.Width := 310;
  WelcomeLabel2.Height := 200;
  WelcomeLabel2.AutoSize := False;
  WelcomeLabel2.WordWrap := True;
  WelcomeLabel2.Font.Color := clBlack;
  WelcomeLabel2.Transparent := True;
  WelcomeLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
  WelcomeLabel2.Parent := WizardForm.WelcomePage;
end;

и
Код:

var
  WelcomeLabel1,WelcomeLabel2,FinishedHeadingLabel,
  FinishedLabel,PageNameLabel,PageDescriptionLabel:TLabel;

procedure InitializeWizard();
begin
  WizardForm.WelcomeLabel1.Hide;
  WizardForm.WelcomeLabel2.Hide;
  WizardForm.PageNameLabel.Hide;
  WizardForm.PageDescriptionLabel.Hide;
  WizardForm.FinishedHeadingLabel.Hide;
  WizardForm.FinishedLabel.Hide;

      WizardForm.WizardBitmapImage.Align:=true;
      WizardForm.WizardBitmapImage2.Align:=true;
      WizardForm.WizardSmallBitmapImage.Align:=true;

  WelcomeLabel1:=TLabel.Create(WizardForm);
  WelcomeLabel1.Left:=ScaleX(150);
  WelcomeLabel1.Top := ScaleY(15);
  WelcomeLabel1.Width := ScaleX(320);
  WelcomeLabel1.Height := ScaleY(75);
  WelcomeLabel1.AutoSize := False;
  WelcomeLabel1.WordWrap := True;
  WelcomeLabel1.Font.Color := clBlack;
// здесь можно поиграть шрифтом
//  WelcomeLabel1.Font.Style := [fsBold];
//  WelcomeLabel1.Font.Name:='MS Sans Serif';
  WelcomeLabel1.Font.Size := 14;
  WelcomeLabel1.Transparent := True;
  WelcomeLabel1.Parent := WizardForm.WelcomePage;

      WelcomeLabel2:=TLabel.Create(WizardForm);
      WelcomeLabel2.Left := ScaleX(150);
      WelcomeLabel2.Top := ScaleY(90);
      WelcomeLabel2.Width := ScaleX(320);
      WelcomeLabel2.Height := ScaleY(200);
      WelcomeLabel2.AutoSize := False;
      WelcomeLabel2.WordWrap := True;
      WelcomeLabel2.Font.Color := clBlack;
      WelcomeLabel2.Font.Size := 8;
      WelcomeLabel2.Transparent := True;
      WelcomeLabel2.Parent := WizardForm.WelcomePage;

  PageNameLabel := TLabel.Create(WizardForm);
  PageNameLabel.Left := ScaleX(25);
  PageNameLabel.Top := ScaleY(10);
  PageNameLabel.Width := ScaleX(300);
  PageNameLabel.Height := ScaleY(14);
  PageNameLabel.AutoSize := False;
  PageNameLabel.WordWrap := True;
  PageNameLabel.Font.Color := clBlack;
  PageNameLabel.Font.Style := [fsBold];
  PageNameLabel.Transparent := True;
  PageNameLabel.Parent := WizardForm.MainPanel;

      PageDescriptionLabel := TLabel.Create(WizardForm);
      PageDescriptionLabel.Left := ScaleX(40);
      PageDescriptionLabel.Top := ScaleY(25);
      PageDescriptionLabel.Width := ScaleX(475);
      PageDescriptionLabel.Height := ScaleY(30);
      PageDescriptionLabel.AutoSize := False;
      PageDescriptionLabel.WordWrap := True;
      PageDescriptionLabel.Font.Color := clBlack;
      PageDescriptionLabel.Transparent := True;
      PageDescriptionLabel.Parent := WizardForm.MainPanel;

  FinishedHeadingLabel:=TLabel.Create(WizardForm);
  FinishedHeadingLabel.Left := ScaleX(150);
  FinishedHeadingLabel.Top := ScaleY(15);
  FinishedHeadingLabel.Width := ScaleX(320);
  FinishedHeadingLabel.Height := ScaleY(75);
  FinishedHeadingLabel.AutoSize := False;
  FinishedHeadingLabel.WordWrap := True;
  FinishedHeadingLabel.Font.Color := clBlack;
// здесь тоже можно поиграть шрифтом
//  FinishedHeadingLabel.Font.Style := [fsBold];
//  FinishedHeadingLabel.Font.Name:='MS Sans Serif';
  FinishedHeadingLabel.Font.Size := 14;
  FinishedHeadingLabel.Transparent := True;
  FinishedHeadingLabel.Parent := WizardForm.FinishedPage;

      FinishedLabel:=TLabel.Create(WizardForm);
      FinishedLabel.Left := ScaleX(150);
      FinishedLabel.Top := ScaleY(90);
      FinishedLabel.Width := ScaleX(320);
      FinishedLabel.Height := ScaleY(200);
      FinishedLabel.AutoSize := False;
      FinishedLabel.WordWrap := True;
      FinishedLabel.Font.Color := clBlack;
      FinishedLabel.Font.Size := 8;
      FinishedLabel.Transparent := True;
      FinishedLabel.Parent := WizardForm.FinishedPage;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  WelcomeLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
  WelcomeLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
  PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
  PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;
  FinishedHeadingLabel.Caption := WizardForm.FinishedHeadingLabel.Caption;
  FinishedLabel.Caption := WizardForm.FinishedLabel.Caption;
end;

заранее спасибо

A1EXXX 12-10-2009 20:22 1241189

Tukash, пробуй...
Код:

const
  HALIGN_CENTER = 0;
  HALIGN_LEFT = 1;
  HALIGN_RIGHT = 2;

  VALIGN_CENTER = 0;
  VALIGN_TOP = 1;
  VALIGN_BOTTOM = 2;

  FIT_NONE = 0;
  FIT_WIDTH = 1;
  FIT_HEIGHT = 2;
  FIT_BOTH = 3;

  CLR_INVALID = $FFFFFFFF;

function InitGifCtrl(): Boolean;
external 'initgifctrl@files:gifctrl.dll stdcall';

function UninitGifCtrl(): Boolean;
external 'uninitgifctrl@files:gifctrl.dll stdcall';

function NewGifbWnd(hWndParent: HWND; X, Y, nWidth, nHeight: Integer): HWND;
external 'newgifwnd@files:gifctrl.dll stdcall';

function GifWndLoadFromFile(hWndGif: HWND; HAlign, VAlign: Integer; BGColor: DWord; Fit: integer; GifFileName: PChar): Boolean;
external 'gifwndloadfromfile@files:gifctrl.dll stdcall';

var
  GIF: HWND;
  WizardImage: TBitmapImage;
  WelcomeLabel1,WelcomeLabel2,FinishedHeadingLabel,
  FinishedLabel,PageNameLabel,PageDescriptionLabel: TLabel;

procedure DeinitializeSetup();
begin
// скрываем надписи
  WizardForm.WelcomeLabel1.Hide;
  WizardForm.WelcomeLabel2.Hide;
// загружаем на форму рисунок
  WizardForm.WizardBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\fon.bmp'));
// растягиваем рисунок по всей форме, если он у вас уже такой какой вы хотите, то удалите эту строку
  WizardForm.WizardBitmapImage.Align:=true;

// создаём надписи поверх рисунка
    WelcomeLabel1 := TLabel.Create(WizardForm);
    WelcomeLabel1.Left := 150;
    WelcomeLabel1.Top := 30;
    WelcomeLabel1.Width := 310;
    WelcomeLabel1.Height := 28;
    WelcomeLabel1.AutoSize := False;
    WelcomeLabel1.WordWrap := True;
    WelcomeLabel1.Font.Style := [fsBold];
    WelcomeLabel1.Font.Color := clBlack;
    WelcomeLabel1.Transparent := True;
    WelcomeLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
    WelcomeLabel1.Parent := WizardForm.WelcomePage;

  WelcomeLabel2:=TLabel.Create(WizardForm);
  WelcomeLabel2.Left := 150;
  WelcomeLabel2.Top := 70;
  WelcomeLabel2.Width := 310;
  WelcomeLabel2.Height := 200;
  WelcomeLabel2.AutoSize := False;
  WelcomeLabel2.WordWrap := True;
  WelcomeLabel2.Font.Color := clBlack;
  WelcomeLabel2.Transparent := True;
  WelcomeLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
  WelcomeLabel2.Parent := WizardForm.WelcomePage;
  UninitGifCtrl();
end;

procedure InitializeWizard();
begin
  ExtractTemporaryFile('fon.bmp')

    WizardForm.WelcomeLabel1.Hide;
    WizardForm.WelcomeLabel2.Hide;
    WizardForm.WizardBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\fon.bmp'));
    WizardForm.WizardBitmapImage.Align:=true;

  InitGifCtrl();
  GIF := NewGifbWnd(WizardForm.Handle, 10, 316, 140, 42);
  //GifWndLoadFromFile(GIF, HALIGN_CENTER, VALIGN_BOTTOM, CLR_INVALID, FIT_WIDTH, ExpandConstant('{tmp}\www_oszone_net.gif'));

    WelcomeLabel1 := TLabel.Create(WizardForm);
    WelcomeLabel1.Left := 150;
    WelcomeLabel1.Top := 30;
    WelcomeLabel1.Width := 310;
    WelcomeLabel1.Height := 28;
    WelcomeLabel1.AutoSize := False;
    WelcomeLabel1.WordWrap := True;
    WelcomeLabel1.Font.Style := [fsBold];
    WelcomeLabel1.Font.Color := clBlack;
    WelcomeLabel1.Transparent := True;
    WelcomeLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
    WelcomeLabel1.Parent := WizardForm.WelcomePage;

  WelcomeLabel2:=TLabel.Create(WizardForm);
  WelcomeLabel2.Left := 150;
  WelcomeLabel2.Top := 70;
  WelcomeLabel2.Width := 310;
  WelcomeLabel2.Height := 200;
  WelcomeLabel2.AutoSize := False;
  WelcomeLabel2.WordWrap := True;
  WelcomeLabel2.Font.Color := clBlack;
  WelcomeLabel2.Transparent := True;
  WelcomeLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
  WelcomeLabel2.Parent := WizardForm.WelcomePage;

  WizardForm.WelcomeLabel1.Hide;
  WizardForm.WelcomeLabel2.Hide;
  WizardForm.PageNameLabel.Hide;
  WizardForm.PageDescriptionLabel.Hide;
  WizardForm.FinishedHeadingLabel.Hide;
  WizardForm.FinishedLabel.Hide;

      WizardForm.WizardBitmapImage.Align:=true;
      WizardForm.WizardBitmapImage2.Align:=true;
      WizardForm.WizardSmallBitmapImage.Align:=true;

  WelcomeLabel1:=TLabel.Create(WizardForm);
  WelcomeLabel1.Left:=ScaleX(150);
  WelcomeLabel1.Top := ScaleY(15);
  WelcomeLabel1.Width := ScaleX(320);
  WelcomeLabel1.Height := ScaleY(75);
  WelcomeLabel1.AutoSize := False;
  WelcomeLabel1.WordWrap := True;
  WelcomeLabel1.Font.Color := clBlack;
// здесь можно поиграть шрифтом
//  WelcomeLabel1.Font.Style := [fsBold];
//  WelcomeLabel1.Font.Name:='MS Sans Serif';
  WelcomeLabel1.Font.Size := 14;
  WelcomeLabel1.Transparent := True;
  WelcomeLabel1.Parent := WizardForm.WelcomePage;

      WelcomeLabel2:=TLabel.Create(WizardForm);
      WelcomeLabel2.Left := ScaleX(150);
      WelcomeLabel2.Top := ScaleY(90);
      WelcomeLabel2.Width := ScaleX(320);
      WelcomeLabel2.Height := ScaleY(200);
      WelcomeLabel2.AutoSize := False;
      WelcomeLabel2.WordWrap := True;
      WelcomeLabel2.Font.Color := clBlack;
      WelcomeLabel2.Font.Size := 8;
      WelcomeLabel2.Transparent := True;
      WelcomeLabel2.Parent := WizardForm.WelcomePage;

  PageNameLabel := TLabel.Create(WizardForm);
  PageNameLabel.Left := ScaleX(25);
  PageNameLabel.Top := ScaleY(10);
  PageNameLabel.Width := ScaleX(300);
  PageNameLabel.Height := ScaleY(14);
  PageNameLabel.AutoSize := False;
  PageNameLabel.WordWrap := True;
  PageNameLabel.Font.Color := clBlack;
  PageNameLabel.Font.Style := [fsBold];
  PageNameLabel.Transparent := True;
  PageNameLabel.Parent := WizardForm.MainPanel;

      PageDescriptionLabel := TLabel.Create(WizardForm);
      PageDescriptionLabel.Left := ScaleX(40);
      PageDescriptionLabel.Top := ScaleY(25);
      PageDescriptionLabel.Width := ScaleX(475);
      PageDescriptionLabel.Height := ScaleY(30);
      PageDescriptionLabel.AutoSize := False;
      PageDescriptionLabel.WordWrap := True;
      PageDescriptionLabel.Font.Color := clBlack;
      PageDescriptionLabel.Transparent := True;
      PageDescriptionLabel.Parent := WizardForm.MainPanel;

  FinishedHeadingLabel:=TLabel.Create(WizardForm);
  FinishedHeadingLabel.Left := ScaleX(150);
  FinishedHeadingLabel.Top := ScaleY(15);
  FinishedHeadingLabel.Width := ScaleX(320);
  FinishedHeadingLabel.Height := ScaleY(75);
  FinishedHeadingLabel.AutoSize := False;
  FinishedHeadingLabel.WordWrap := True;
  FinishedHeadingLabel.Font.Color := clBlack;
// здесь тоже можно поиграть шрифтом
//  FinishedHeadingLabel.Font.Style := [fsBold];
//  FinishedHeadingLabel.Font.Name:='MS Sans Serif';
  FinishedHeadingLabel.Font.Size := 14;
  FinishedHeadingLabel.Transparent := True;
  FinishedHeadingLabel.Parent := WizardForm.FinishedPage;

      FinishedLabel:=TLabel.Create(WizardForm);
      FinishedLabel.Left := ScaleX(150);
      FinishedLabel.Top := ScaleY(90);
      FinishedLabel.Width := ScaleX(320);
      FinishedLabel.Height := ScaleY(200);
      FinishedLabel.AutoSize := False;
      FinishedLabel.WordWrap := True;
      FinishedLabel.Font.Color := clBlack;
      FinishedLabel.Font.Size := 8;
      FinishedLabel.Transparent := True;
      FinishedLabel.Parent := WizardForm.FinishedPage;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  WelcomeLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
  WelcomeLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
  PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
  PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;
  FinishedHeadingLabel.Caption := WizardForm.FinishedHeadingLabel.Caption;
  FinishedLabel.Caption := WizardForm.FinishedLabel.Caption;
end;


Tukash 12-10-2009 20:32 1241201

спасибо A1EXXX ака Shepards)))

A1EXXX 12-10-2009 20:49 1241219

Цитата:

Цитата Tukash
ака Shepards))) »

не пойму, причем здесь он???

Tukash 12-10-2009 20:57 1241225

Цитата:

Цитата A1EXXX
Цитата Tukash:
ака Shepards))) »
не пойму, причем здесь он??? »

извеняюь обознался)))просто твой ник всего одной буквой отличается от ника моего знакомого, а за помощь спасибо все работает, только закрывается окно установки долго...

A1EXXX 12-10-2009 21:08 1241229

Tukash, в смысле, когда жмёшь "Завершить" или исталлятор запускается долго??? (такое у многих частенько бывает...) :)

grinda 12-10-2009 21:08 1241231

Цитата:

Цитата GrizzlyMK
grinda,
Вот наложение изоброжение на кнопки.
А также саме кнопки вложил. »

вылезла такая ошибка, не знаете в чем проблема?

Tukash 12-10-2009 21:16 1241237

Цитата:

Цитата A1EXXX
Tukash, в смысле, когда жмёшь "Завершить" или исталлятор запускается долго??? (такое у многих частенько бывает...) »

запускается, иногда вообще не запускается)))

A1EXXX 12-10-2009 21:21 1241243

grinda, попробовал скрипт - работает, судя по скрину - ругается на отсутствие точки с запятой... Какую версию Inno используешь - ANSI или Unicode??? Подобное бывает с Unicode-версией...

grinda 12-10-2009 21:22 1241244

юникод, ща в анси попробую

A1EXXX 12-10-2009 21:25 1241248

Tukash, дай кусок скрипта, содержащий секцию [Files], думаю, это поправимо....

x-net 12-10-2009 21:29 1241256


Может кто нибудь выложить этот скрипт. Нигде не нашёл, заранее Спс

A1EXXX 12-10-2009 21:32 1241259

x-net,
читать дальше »

[Files]
Source: fon.bmp; DestDir: {tmp}; Flags: dontcopy

[code]
var
WelcomeLabel1, WelcomeLabel2: TLabel;
BmpFile: TBitmapImage;

procedure InitializeWizard();
begin
ExtractTemporaryFile('fon.bmp');

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\fon.bmp'));
BmpFile.SetBounds(0, 0, 497, 320);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.WelcomePage;

with WizardForm do
begin
WelcomeLabel1.Hide;
WelcomeLabel2.hide;
end;

WelcomeLabel1:= TLabel.Create(WizardForm);
with WelcomeLabel1 do
begin
WelcomeLabel1.Alignment:=taCenter;
Left:= ScaleX(176);
Top:= ScaleY(66);
Width:= ScaleX(301);
Height:= ScaleY(71);
AutoSize:= false;
Transparent:= true;
WordWrap:= true;
Font.Size:= 12;
Font.Color:=ClWhite
Parent:= WizardForm.WelcomePage;
Caption:= WizardForm.WelcomeLabel1.Caption;
end;

WelcomeLabel2:=TLabel.Create(WizardForm);
with WelcomeLabel2 do
begin
WelcomeLabel2.Alignment:=taCenter;
Top:= ScaleY(136);
Left:= ScaleX(176);
Width:= ScaleX(301);
Height:= ScaleY(300);
AutoSize:= false;
WordWrap:= true;
Font.Color:=ClWhite
Transparent:= true;
Parent:= WizardForm.WelcomePage;
Caption:= WizardForm.WelcomeLabel2.Caption;
end;
end;

x-net 12-10-2009 21:43 1241266

A1EXXX, можно полностью все страницы вот так? и ссылка как на рисунке
Кнопки чёрные, и ставить дополнительно компоненты

A1EXXX 12-10-2009 21:57 1241284

Вложений: 1
x-net, есть готовый скрипт, где всё это реализовано (кроме кнопок, кажись, они отдельно есть) на примере игры [Prototype] (автор Shegorat). Если есть желание - пробуй, разбирайся!
(скрипт прикрепил...) ;)

Tukash 12-10-2009 22:11 1241297

Код:

#define MyAppName "GTA Vice City"
#define MyAppVerName "GTA Vice City"
#define MyAppPublisher "1C"

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{7CCD30D0-3630-499F-B7B8-49D0FFF220A8}
AppName={#MyAppName}
AppVerName={#MyAppVerName}
AppPublisher={#MyAppPublisher}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
InfoBeforeFile=G:\readMe.txt
OutputDir=D:\22\GTA
OutputBaseFilename=setup
SetupIconFile=G:\Autorun.ico
Compression=lzma/ultra
SolidCompression=yes
SlicesPerDisk=1
DiskSliceSize=736000000
DiskClusterSize=4096
ReserveBytes=0
DiskSpanning=yes
WizardSmallImageFile=C:\WizardSmallImage.bmp

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

[Tasks]
Name: currentuser; Description: "Установить для всех пользователей"; Flags: unchecked
Name: desktopicon; Description: "Создать значок на рабочем столе"

[Run]
Filename: {src}\DirectX\DXSETUP.exe; WorkingDir: {src}\DirectX; StatusMsg: Установка DirectX®...;
FileName: "{src}\Redist\AdbeRdr.exe"; Description: "Установить Adobe Reader (Необходимо для Руководства пользователя)"; WorkingDir: "{src}\Redist"; Flags: postinstall shellexec skipifsilent runasoriginaluser

[Files]
Source: "D:\Games\GTA Vice City\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
Source: C:\fon.bmp; DestDir: {tmp}; Flags: dontcopy;
Source: C:\gifctrl.dll; Flags: dontcopy;

[Icons]
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{group}\Запустить игру"; FileName: "{app}\gta-vc.exe"; WorkingDir: "{app}"; IconFilename: "{app}\gta-vc.exe"
Name: "{group}\Сайт разработчиков игры"; FileName: "{app}\Rockstar.url"; WorkingDir: "{app}"
Name: "{group}\Сайт игры"; FileName: "{app}\gta-vc.url"; WorkingDir: "{app}"
Name: "{group}\Руководство по игре"; FileName: "{app}\GTA_VC_MAN_rus.pdf"; WorkingDir: "{app}"
Name: "{group}\Карта Vice City"; FileName: "{app}\GTA_VC_MAP_rus.pdf"; WorkingDir: "{app}"
Name: {userdesktop}\GTA Vice City; Filename: {app}\gta-vc.exe; WorkingDir: {app}\

[Registry]
Root: HKLM; Subkey: "SOFTWARE\Rockstar Games"; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: "SOFTWARE\Rockstar Games\GTA Vice City"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Rockstar Games\GTA Vice City\1.00.00001"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Rockstar Games\GTA Vice City\Installation"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Rockstar Games\GTA Vice City\Installation"; ValueType: string; ValueName: "ExePath"; ValueData: "{app}\gta-vc.exe"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Rockstar Games\GTA Vice City\Installation"; ValueType: string; ValueName: "Installed"; ValueData: "1"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Rockstar Games\GTA Vice City\Installation"; ValueType: string; ValueName: "UninstallPath"; ValueData: "{app}\unins000.exe"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Rockstar Games\GTA Vice City"; ValueType: string; ValueName: "InstallDir"; ValueData: "{app}"; Flags: uninsdeletekey

[CustomMessages]
rus.NameAndVersion=%1, версия %2
rus.AdditionalIcons=Дополнительные значки:
rus.CreateDesktopIcon=Создать значок на &Рабочем столе
rus.CreateQuickLaunchIcon=Создать значок в &Панели быстрого запуска
rus.ProgramOnTheWeb=Сайт %1 в Интернете
rus.UninstallProgram=Деинсталлировать %1
rus.LaunchProgram=Запустить %1
rus.AssocFileExtension=Св&язать %1 с файлами, имеющими расширение %2
rus.AssocingFileExtension=Связывание %1 с файлами %2...


       
Код:

       
const
   HALIGN_CENTER = 0;
   HALIGN_LEFT = 1;
   HALIGN_RIGHT = 2;

   VALIGN_CENTER = 0;
   VALIGN_TOP = 1;
   VALIGN_BOTTOM = 2;

   FIT_NONE = 0;
   FIT_WIDTH = 1;
   FIT_HEIGHT = 2;
   FIT_BOTH = 3;

   CLR_INVALID = $FFFFFFFF;

function InitGifCtrl(): Boolean;
external 'initgifctrl@files:gifctrl.dll stdcall';

function UninitGifCtrl(): Boolean;
external 'uninitgifctrl@files:gifctrl.dll stdcall';

function NewGifbWnd(hWndParent: HWND; X, Y, nWidth, nHeight: Integer): HWND;
external 'newgifwnd@files:gifctrl.dll stdcall';

function GifWndLoadFromFile(hWndGif: HWND; HAlign, VAlign: Integer; BGColor: DWord; Fit: integer; GifFileName: PChar): Boolean;
external 'gifwndloadfromfile@files:gifctrl.dll stdcall';

var
  GIF: HWND;
  WizardImage: TBitmapImage;
  WelcomeLabel1,WelcomeLabel2,FinishedHeadingLabel,
  FinishedLabel,PageNameLabel,PageDescriptionLabel: TLabel;

procedure DeinitializeSetup();
begin
// скрываем надписи
  WizardForm.WelcomeLabel1.Hide;
  WizardForm.WelcomeLabel2.Hide;
// загружаем на форму рисунок
  WizardForm.WizardBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\fon.bmp'));
// растягиваем рисунок по всей форме, если он у вас уже такой какой вы хотите, то удалите эту строку
  WizardForm.WizardBitmapImage.Align:=true;

// создаём надписи поверх рисунка
    WelcomeLabel1 := TLabel.Create(WizardForm);
    WelcomeLabel1.Left := 150;
    WelcomeLabel1.Top := 30;
    WelcomeLabel1.Width := 310;
    WelcomeLabel1.Height := 28;
    WelcomeLabel1.AutoSize := False;
    WelcomeLabel1.WordWrap := True;
    WelcomeLabel1.Font.Style := [fsBold];
    WelcomeLabel1.Font.Color := clBlack;
    WelcomeLabel1.Transparent := True;
    WelcomeLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
    WelcomeLabel1.Parent := WizardForm.WelcomePage;

  WelcomeLabel2:=TLabel.Create(WizardForm);
  WelcomeLabel2.Left := 150;
  WelcomeLabel2.Top := 70;
  WelcomeLabel2.Width := 310;
  WelcomeLabel2.Height := 200;
  WelcomeLabel2.AutoSize := False;
  WelcomeLabel2.WordWrap := True;
  WelcomeLabel2.Font.Color := clBlack;
  WelcomeLabel2.Transparent := True;
  WelcomeLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
  WelcomeLabel2.Parent := WizardForm.WelcomePage;
  UninitGifCtrl();
end;

procedure InitializeWizard();
begin
  ExtractTemporaryFile('fon.bmp')

    WizardForm.WelcomeLabel1.Hide;
    WizardForm.WelcomeLabel2.Hide;
    WizardForm.WizardBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\fon.bmp'));
    WizardForm.WizardBitmapImage.Align:=true;

  InitGifCtrl();
  GIF := NewGifbWnd(WizardForm.Handle, 10, 316, 140, 42);
  //GifWndLoadFromFile(GIF, HALIGN_CENTER, VALIGN_BOTTOM, CLR_INVALID, FIT_WIDTH, ExpandConstant('{tmp}\www_oszone_net.gif'));

    WelcomeLabel1 := TLabel.Create(WizardForm);
    WelcomeLabel1.Left := 150;
    WelcomeLabel1.Top := 30;
    WelcomeLabel1.Width := 310;
    WelcomeLabel1.Height := 28;
    WelcomeLabel1.AutoSize := False;
    WelcomeLabel1.WordWrap := True;
    WelcomeLabel1.Font.Style := [fsBold];
    WelcomeLabel1.Font.Color := clBlack;
    WelcomeLabel1.Transparent := True;
    WelcomeLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
    //WelcomeLabel1.Parent := WizardForm.WelcomePage;

  WelcomeLabel2:=TLabel.Create(WizardForm);
  WelcomeLabel2.Left := 150;
  WelcomeLabel2.Top := 70;
  WelcomeLabel2.Width := 310;
  WelcomeLabel2.Height := 200;
  WelcomeLabel2.AutoSize := False;
  WelcomeLabel2.WordWrap := True;
  WelcomeLabel2.Font.Color := clBlack;
  WelcomeLabel2.Transparent := True;
  WelcomeLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
  //WelcomeLabel2.Parent := WizardForm.WelcomePage;

  WizardForm.WelcomeLabel1.Hide;
  WizardForm.WelcomeLabel2.Hide;
  WizardForm.PageNameLabel.Hide;
  WizardForm.PageDescriptionLabel.Hide;
  WizardForm.FinishedHeadingLabel.Hide;
  //WizardForm.FinishedLabel.Hide;

      WizardForm.WizardBitmapImage.Align:=true;
      WizardForm.WizardBitmapImage2.Align:=true;
      WizardForm.WizardSmallBitmapImage.Align:=true;

  WelcomeLabel1:=TLabel.Create(WizardForm);
  WelcomeLabel1.Left:=ScaleX(150);
  WelcomeLabel1.Top := ScaleY(15);
  WelcomeLabel1.Width := ScaleX(320);
  WelcomeLabel1.Height := ScaleY(75);
  WelcomeLabel1.AutoSize := False;
  WelcomeLabel1.WordWrap := True;
  WelcomeLabel1.Font.Color := clBlack;
// здесь можно поиграть шрифтом
//  WelcomeLabel1.Font.Style := [fsBold];
//  WelcomeLabel1.Font.Name:='MS Sans Serif';
  WelcomeLabel1.Font.Size := 14;
  WelcomeLabel1.Transparent := True;
  //WelcomeLabel1.Parent := WizardForm.WelcomePage;

      WelcomeLabel2:=TLabel.Create(WizardForm);
      WelcomeLabel2.Left := ScaleX(150);
      WelcomeLabel2.Top := ScaleY(90);
      WelcomeLabel2.Width := ScaleX(320);
      WelcomeLabel2.Height := ScaleY(200);
      WelcomeLabel2.AutoSize := False;
      WelcomeLabel2.WordWrap := True;
      WelcomeLabel2.Font.Color := clBlack;
      WelcomeLabel2.Font.Size := 8;
      WelcomeLabel2.Transparent := True;
      //WelcomeLabel2.Parent := WizardForm.WelcomePage;

  PageNameLabel := TLabel.Create(WizardForm);
  PageNameLabel.Left := ScaleX(25);
  PageNameLabel.Top := ScaleY(10);
  PageNameLabel.Width := ScaleX(300);
  PageNameLabel.Height := ScaleY(14);
  PageNameLabel.AutoSize := False;
  PageNameLabel.WordWrap := True;
  PageNameLabel.Font.Color := clBlack;
  PageNameLabel.Font.Style := [fsBold];
  PageNameLabel.Transparent := True;
  //PageNameLabel.Parent := WizardForm.MainPanel;

      PageDescriptionLabel := TLabel.Create(WizardForm);
      PageDescriptionLabel.Left := ScaleX(40);
      PageDescriptionLabel.Top := ScaleY(25);
      PageDescriptionLabel.Width := ScaleX(475);
      PageDescriptionLabel.Height := ScaleY(30);
      PageDescriptionLabel.AutoSize := False;
      PageDescriptionLabel.WordWrap := True;
      PageDescriptionLabel.Font.Color := clBlack;
      PageDescriptionLabel.Transparent := True;
      //PageDescriptionLabel.Parent := WizardForm.MainPanel;

  FinishedHeadingLabel:=TLabel.Create(WizardForm);
  FinishedHeadingLabel.Left := ScaleX(150);
  FinishedHeadingLabel.Top := ScaleY(15);
  FinishedHeadingLabel.Width := ScaleX(320);
  FinishedHeadingLabel.Height := ScaleY(75);
  FinishedHeadingLabel.AutoSize := False;
  FinishedHeadingLabel.WordWrap := True;
  FinishedHeadingLabel.Font.Color := clBlack;
// здесь тоже можно поиграть шрифтом
//  FinishedHeadingLabel.Font.Style := [fsBold];
//  FinishedHeadingLabel.Font.Name:='MS Sans Serif';
  FinishedHeadingLabel.Font.Size := 14;
  FinishedHeadingLabel.Transparent := True;
  //FinishedHeadingLabel.Parent := WizardForm.FinishedPage;

      FinishedLabel:=TLabel.Create(WizardForm);
      FinishedLabel.Left := ScaleX(150);
      FinishedLabel.Top := ScaleY(90);
      FinishedLabel.Width := ScaleX(320);
      FinishedLabel.Height := ScaleY(200);
      FinishedLabel.AutoSize := False;
      FinishedLabel.WordWrap := True;
      FinishedLabel.Font.Color := clBlack;
      FinishedLabel.Font.Size := 8;
      FinishedLabel.Transparent := True;
      //FinishedLabel.Parent := WizardForm.FinishedPage;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  WelcomeLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
  WelcomeLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
  PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
  PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;
  FinishedHeadingLabel.Caption := WizardForm.FinishedHeadingLabel.Caption;
  FinishedLabel.Caption := WizardForm.FinishedLabel.Caption;
end;



A1EXXX весь выложил))) мало-ли))) если что особо не старайся уже начал по:
Код:

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "GTA Vice City"
#define MyAppVerName "GTA Vice City"
#define MyAppPublisher "1C"

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{7CCD30D0-3630-499F-B7B8-49D0FFF220A8}
AppName={#MyAppName}
AppVerName={#MyAppVerName}
AppPublisher={#MyAppPublisher}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
InfoBeforeFile=G:\readMe.txt
OutputDir=D:\22\GTA
OutputBaseFilename=setup
SetupIconFile=G:\Autorun.ico
Compression=lzma/ultra
SolidCompression=yes
SlicesPerDisk=1
DiskSliceSize=736000000
DiskClusterSize=4096
ReserveBytes=0
DiskSpanning=yes
WizardImageFile=C:\WizardImage.bmp
WizardSmallImageFile=C:\WizardSmallImage.bmp

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

[Tasks]
Name: currentuser; Description: "Установить для всех пользователей"; Flags: unchecked
Name: desktopicon; Description: "Создать значок на рабочем столе"

[Run]
Filename: {src}\DirectX\DXSETUP.exe; WorkingDir: {src}\DirectX; StatusMsg: Установка DirectX®...;
FileName: "{src}\Redist\AdbeRdr.exe"; Description: "Установить Adobe Reader (Необходимо для Руководства пользователя)"; WorkingDir: "{src}\Redist"; Flags: postinstall shellexec skipifsilent runasoriginaluser

[Files]
Source: "D:\Games\GTA Vice City\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{group}\Запустить игру"; FileName: "{app}\gta-vc.exe"; WorkingDir: "{app}"; IconFilename: "{app}\gta-vc.exe"
Name: "{group}\Сайт разработчиков игры"; FileName: "{app}\Rockstar.url"; WorkingDir: "{app}"
Name: "{group}\Сайт игры"; FileName: "{app}\gta-vc.url"; WorkingDir: "{app}"
Name: "{group}\Руководство по игре"; FileName: "{app}\GTA_VC_MAN_rus.pdf"; WorkingDir: "{app}"
Name: "{group}\Карта Vice City"; FileName: "{app}\GTA_VC_MAP_rus.pdf"; WorkingDir: "{app}"
Name: {userdesktop}\GTA Vice City; Filename: {app}\gta-vc.exe; WorkingDir: {app}\

[Registry]
Root: HKLM; Subkey: "SOFTWARE\Rockstar Games"; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: "SOFTWARE\Rockstar Games\GTA Vice City"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Rockstar Games\GTA Vice City\1.00.00001"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Rockstar Games\GTA Vice City\Installation"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Rockstar Games\GTA Vice City\Installation"; ValueType: string; ValueName: "ExePath"; ValueData: "{app}\gta-vc.exe"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Rockstar Games\GTA Vice City\Installation"; ValueType: string; ValueName: "Installed"; ValueData: "1"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Rockstar Games\GTA Vice City\Installation"; ValueType: string; ValueName: "UninstallPath"; ValueData: "{app}\unins000.exe"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Rockstar Games\GTA Vice City"; ValueType: string; ValueName: "InstallDir"; ValueData: "{app}"; Flags: uninsdeletekey

[CustomMessages]
rus.NameAndVersion=%1, версия %2
rus.AdditionalIcons=Дополнительные значки:
rus.CreateDesktopIcon=Создать значок на &Рабочем столе
rus.CreateQuickLaunchIcon=Создать значок в &Панели быстрого запуска
rus.ProgramOnTheWeb=Сайт %1 в Интернете
rus.UninstallProgram=Деинсталлировать %1
rus.LaunchProgram=Запустить %1
rus.AssocFileExtension=Св&язать %1 с файлами, имеющими расширение %2
rus.AssocingFileExtension=Связывание %1 с файлами %2...

делать)))

GrizzlyMK 12-10-2009 22:20 1241301

Помогите, дайте код на отоброжение картинок на всех страницах инстолятора.

A1EXXX 12-10-2009 22:27 1241307

Tukash, смотри в чём проблема (как должно быть):
Цитата:

[Files]
Source: C:\fon.bmp; DestDir: {tmp}; Flags: dontcopy;
Source: C:\gifctrl.dll; Flags: dontcopy;
Source: "D:\Games\GTA Vice City\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs;
Распаковка файлов в секции [Files] происходит по порядку, поэтому папку с игрой нужно кидать в конец секции!
Попробуй, и всё запашет как надо!

Tukash 12-10-2009 22:28 1241308

A1EXXX
спасибо незнал%)

x-net 13-10-2009 09:53 1241544

Скрипт [Prototype], я уже делал, мне не нравится огромное окно и ссылку вниз не могу вставить никак
И вот что получаю при создании установщика

A1EXXX 13-10-2009 17:14 1241904

x-net, возможно эта ошибка результат причуд Unicode-версии Inno (уже писал недавно), попробуй ANSI установить...

x-net 13-10-2009 17:32 1241926

A1EXXX Пробовал Ansi, не помогает

MrAWP 13-10-2009 23:18 1242229

Ребята помогите пожалуйста со скриптом:

Вобщем после установки хочу чтобы распаковывался внешний SFX-архив из папки в которой лежит инсталлятор.
Вот скрипт который я нашел:

Код:

Filename: "{src}\ARCHIVE.exe"; WorkingDir: "{src}"; Parameters: "-y -o""{app}\cstrike\"""; StatusMsg: "Идет установка..."; Flags: waituntilterminated ; Components: arc_yes;
но я не знаю как добавить проверку на наличие этого самого архива в папке с инсталлятором. То есть мне нужно чтобы перед распаковкой инсталлятор проверял, есть ли с ним в папке архив archieve.exe, если есть - то пусть распаковывает, а если нету - чтобы этот этап пропускался и вылетал MsgBox типа: "Файл archieve.exe не найден в папке с инсталлятором!"

Буду очень благодарен за помощь.

Habetdin 14-10-2009 00:35 1242267

MrAWP, нужно добавить флаг skipifdoesntexist - тогда шаг будет пропущен при отсутствии файла:
Код:

Filename: "{src}\ARCHIVE.exe"; WorkingDir: "{src}"; Parameters: "-y -o""{app}\cstrike\"""; StatusMsg: "Идет установка..."; Flags: waituntilterminated skipifdoesntexist; Components: arc_yes;

serg aka lain 14-10-2009 01:05 1242281

MrAWP,
или так
Код:

function InitializeSetup(): Boolean;
begin
  Result := True;
  if not FileExists(ExpandConstant('{src}\archieve.exe')) then
  begin
    SuppressibleMsgBox('Файл archieve.exe не найден в папке с инсталлятором!', mbCriticalError, MB_OK, MB_OK);
    Result := False;
  end;
end;

или так
Код:

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssInstall then
    if not FileExists(ExpandConstant('{src}\archieve.exe')) then
    begin
      SuppressibleMsgBox('Файл archieve.exe не найден в папке с инсталлятором!', mbCriticalError, MB_OK, MB_OK);
      Abort;
    end;
end;

даже можно и одновременно.

Serega 14-10-2009 01:08 1242285

Цитата:

Цитата GrizzlyMK
дайте код на отоброжение картинок на всех страницах инстолятора »

Откровенно говоря, я уже устал его писать...
Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Files]
Source: C:\Program Files\Inno Setup 5\Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion

[Run]
Filename: {app}\MyProg.exe; Description: Запустить программу My Program?; Flags: postinstall nowait skipifsilent

[Code]
var
  pnl: TPanel;

///////////////////////WelcomePage//////////////////////////////////////
procedure WelcomePage;
begin
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.WelcomeLabel1.AutoSize;
      SetBounds(WizardForm.WelcomeLabel1.Left,WizardForm.WelcomeLabel1.Top,
                WizardForm.WelcomeLabel1.Width,WizardForm.WelcomeLabel1.Height);
      WordWrap:= WizardForm.WelcomeLabel1.WordWrap;
      Caption:= WizardForm.WelcomeLabel1.Caption;
      with Font do
        begin
          Color:= WizardForm.WelcomeLabel1.Font.Color;
          Style:= WizardForm.WelcomeLabel1.Font.Style;
          Name:= WizardForm.WelcomeLabel1.Font.Name;
          Size:= WizardForm.WelcomeLabel1.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.WelcomeLabel2.AutoSize;
      SetBounds(WizardForm.WelcomeLabel2.Left,WizardForm.WelcomeLabel2.Top,
                WizardForm.WelcomeLabel2.Width,WizardForm.WelcomeLabel2.Height);
      WordWrap:= WizardForm.WelcomeLabel2.WordWrap;
      Caption:= WizardForm.WelcomeLabel2.Caption;
      with Font do
        begin
          Color:= WizardForm.WelcomeLabel2.Font.Color;
          Style:= WizardForm.WelcomeLabel2.Font.Style;
          Name:= WizardForm.WelcomeLabel2.Font.Name;
          Size:= WizardForm.WelcomeLabel2.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////SelectDirPage//////////////////////////////////////
procedure SelectDirPage;
begin
  with WizardForm do
    begin
      with DirEdit do
        begin
          Left:= 40;
          Top:= 137;
          Parent:= pnl;
        end;
      with DirBrowseButton do
        begin
          Left:= WizardForm.DirEdit.Left + WizardForm.DirEdit.Width + 10;
          Top:= WizardForm.DirEdit.Top - 1;
          Parent:= pnl;
        end;
      with SelectDirBitmapImage do
        begin
          Left:= WizardForm.DirEdit.Left;
          Top:= WizardForm.DirEdit.Top - 62;
          Stretch:= True;
          Parent:= pnl;
        end;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.SelectDirBrowseLabel.AutoSize;
      SetBounds(WizardForm.DirEdit.Left,WizardForm.DirEdit.Top - 30,
                WizardForm.SelectDirBrowseLabel.Width, WizardForm.SelectDirBrowseLabel.Height);
      WordWrap:= WizardForm.SelectDirBrowseLabel.WordWrap;
      Caption:= WizardForm.SelectDirBrowseLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.SelectDirBrowseLabel.Font.Color;
          Style:= WizardForm.SelectDirBrowseLabel.Font.Style;
          Name:= WizardForm.SelectDirBrowseLabel.Font.Name;
          Size:= WizardForm.SelectDirBrowseLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.SelectDirLabel.AutoSize;
      SetBounds(WizardForm.SelectDirBitmapImage.Left + 50,WizardForm.SelectDirBitmapImage.Top + 10,
                WizardForm.SelectDirLabel.Width,WizardForm.SelectDirLabel.Height);
      WordWrap:= WizardForm.SelectDirLabel.WordWrap;
      Caption:= WizardForm.SelectDirLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.SelectDirLabel.Font.Color;
          Style:= WizardForm.SelectDirLabel.Font.Style;
          Name:= WizardForm.SelectDirLabel.Font.Name;
          Size:= WizardForm.SelectDirLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.DiskSpaceLabel.AutoSize;
      SetBounds(WizardForm.DirEdit.Left,WizardForm.Bevel.Top - 25,
                WizardForm.DiskSpaceLabel.Width,WizardForm.DiskSpaceLabel.Height);
      WordWrap:= WizardForm.DiskSpaceLabel.WordWrap;
      Caption:= WizardForm.DiskSpaceLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.DiskSpaceLabel.Font.Color;
          Style:= WizardForm.DiskSpaceLabel.Font.Style;
          Name:= WizardForm.DiskSpaceLabel.Font.Name;
          Size:= WizardForm.DiskSpaceLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////ReadyPage//////////////////////////////////////
procedure ReadyPage;
var
  ready_str: string;
begin
  ready_str:= WizardForm.ReadyMemo.Text;
  with TLabel.Create(pnl) do
    begin
      SetBounds(45,115,WizardForm.ReadyMemo.Width, WizardForm.ReadyMemo.Height);
      Caption:= ready_str;
      with Font do
        begin
          Color:= WizardForm.ReadyLabel.Font.Color;
          Style:= WizardForm.ReadyLabel.Font.Style;
          Name:= WizardForm.ReadyLabel.Font.Name;
          Size:= WizardForm.ReadyLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TBevel.Create(WizardForm) do
    begin
      SetBounds(40,110, WizardForm.ReadyMemo.Width, WizardForm.ReadyMemo.Height);
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.ReadyLabel.AutoSize;
      SetBounds(40,70, WizardForm.ReadyLabel.Width, WizardForm.ReadyLabel.Height);
      WordWrap:= WizardForm.ReadyLabel.WordWrap;
      Caption:= WizardForm.ReadyLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.ReadyLabel.Font.Color;
          Style:= WizardForm.ReadyLabel.Font.Style;
          Name:= WizardForm.ReadyLabel.Font.Name;
          Size:= WizardForm.ReadyLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////InstallingPage//////////////////////////////////////
procedure InstallingPage;
begin
  with WizardForm.ProgressGauge do
    begin
      Left:= 40;
      Top:= 115;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.FilenameLabel.AutoSize;
      SetBounds(WizardForm.ProgressGauge.Left,WizardForm.ProgressGauge.Top-20,
                WizardForm.FilenameLabel.Width,WizardForm.FilenameLabel.Height);
      WordWrap:= WizardForm.FilenameLabel.WordWrap;
      Caption:= WizardForm.FilenameLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.FilenameLabel.Font.Color;
          Style:= WizardForm.FilenameLabel.Font.Style;
          Name:= WizardForm.FilenameLabel.Font.Name;
          Size:= WizardForm.FilenameLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.StatusLabel.AutoSize;
      SetBounds(WizardForm.StatusLabel.Left,WizardForm.StatusLabel.Top,
                WizardForm.StatusLabel.Width,WizardForm.StatusLabel.Height);
      WordWrap:= WizardForm.StatusLabel.WordWrap;
      Caption:= WizardForm.StatusLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.StatusLabel.Font.Color;
          Style:= WizardForm.StatusLabel.Font.Style;
          Name:= WizardForm.StatusLabel.Font.Name;
          Size:= WizardForm.StatusLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////FinishedPage//////////////////////////////////////
var
  CheckBox: array of TNewCheckBox;

procedure CheckBoxClick(Sender: TObject);
begin
  if TNewCheckBox(Sender).Checked then
    WizardForm.RunList.Checked[TNewCheckBox(Sender).Tag]:= True
  else WizardForm.RunList.Checked[TNewCheckBox(Sender).Tag]:= False;
end;

procedure LabelClick(Sender: TObject);
begin
  if CheckBox[TLabel(Sender).Tag].Checked then
    begin
      WizardForm.RunList.Checked[TLabel(Sender).Tag]:= False;
      CheckBox[TLabel(Sender).Tag].Checked:= False;
    end
  else
    begin
      WizardForm.RunList.Checked[TLabel(Sender).Tag]:= True;
      CheckBox[TLabel(Sender).Tag].Checked:= True;
    end;
end;

procedure HideRunList(Control: TWinControl);
var
  i, t: Integer;
  str: string;
begin
  if WizardForm.RunList.Items.Count > 0 then
    begin
      WizardForm.RunList.Hide;
      SetArrayLength(CheckBox, SizeOf(WizardForm.RunList.Items.Count));
      for i:= 0 to WizardForm.RunList.Items.Count-1 do
        begin
          CheckBox[i]:= TNewCheckBox.Create(Control);
          with CheckBox[i] do
            begin
              SetBounds(ScaleX(WizardForm.RunList.Left+2),ScaleY(WizardForm.RunList.Top+2+t),14,14);
              Tag:= i;
              Checked:= WizardForm.RunList.Checked[i];
              Caption:= WizardForm.RunList.Items.Strings[i];
              OnClick:= @CheckBoxClick;
              Color:= clWhite;
              Parent:= Control;
            end;
          str:= WizardForm.RunList.Items.Strings[i];
          with TLabel.Create(WizardForm) do
            begin
              SetBounds(ScaleX(WizardForm.RunList.Left+20),ScaleY(WizardForm.RunList.Top+2+t),
                        WizardForm.RunList.Width,14);
              Caption:= str;
              Tag:= i;
              OnClick:= @LabelClick;
              Transparent:= True;
              Parent:= Control;
            end;
          t:= t + 20;
        end;
    end;
end;

procedure FinishedPage;
begin
  HideRunList(pnl);
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.FinishedHeadingLabel.AutoSize;
      SetBounds(WizardForm.FinishedHeadingLabel.Left,WizardForm.FinishedHeadingLabel.Top,
                WizardForm.FinishedHeadingLabel.Width,WizardForm.FinishedHeadingLabel.Height);
      WordWrap:= WizardForm.FinishedHeadingLabel.WordWrap;
      Caption:= WizardForm.FinishedHeadingLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.FinishedHeadingLabel.Font.Color;
          Style:= WizardForm.FinishedHeadingLabel.Font.Style;
          Name:= WizardForm.FinishedHeadingLabel.Font.Name;
          Size:= WizardForm.FinishedHeadingLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.FinishedLabel.AutoSize;
      SetBounds(WizardForm.FinishedLabel.Left,WizardForm.FinishedLabel.Top,
                WizardForm.FinishedLabel.Width,WizardForm.FinishedLabel.Height);
      WordWrap:= WizardForm.FinishedLabel.WordWrap;
      Caption:= WizardForm.FinishedLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.FinishedLabel.Font.Color;
          Style:= WizardForm.FinishedLabel.Font.Style;
          Name:= WizardForm.FinishedLabel.Font.Name;
          Size:= WizardForm.FinishedLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

procedure CurPageChanged(CurPageID: Integer);
begin
  pnl:= TPanel.Create(WizardForm);
  with pnl do
    begin
      Align:= alClient;
      Parent:= WizardForm;
    end;
  with WizardForm do
    begin
      with WizardBitmapImage do
        begin
          Align:= alClient;
          Stretch:= True;
          Parent:= pnl;
        end;
      NextButton.Parent:= pnl;
      CancelButton.Parent:= pnl;
      BackButton.Parent:= pnl;
      Bevel.Parent:= pnl;
      pnl.Repaint;
    end;

  if (CurPageID > wpWelcome) and (CurPageID < wpFinished) then
    begin
      WizardForm.Bevel1.Parent:= pnl;
      with TLabel.Create(pnl) do
        begin
          AutoSize:= WizardForm.PageNameLabel.AutoSize;
          SetBounds(WizardForm.PageNameLabel.Left,WizardForm.PageNameLabel.Top,
                    WizardForm.PageNameLabel.Width,WizardForm.PageNameLabel.Height);
          Caption:= WizardForm.PageNameLabel.Caption;
          with Font do
            begin
              Color:= WizardForm.PageNameLabel.Font.Color;
              Style:= WizardForm.PageNameLabel.Font.Style;
              Name:= WizardForm.PageNameLabel.Font.Name;
              Size:= WizardForm.PageNameLabel.Font.Size;
            end;
          Transparent:= True;
          Parent:= pnl;
        end;
      with TLabel.Create(pnl) do
        begin
          AutoSize:= WizardForm.PageDescriptionLabel.AutoSize;
          SetBounds(WizardForm.PageDescriptionLabel.Left,WizardForm.PageDescriptionLabel.Top,
                    WizardForm.PageDescriptionLabel.Width,WizardForm.PageDescriptionLabel.Height);
          Caption:= WizardForm.PageDescriptionLabel.Caption;
          with Font do
            begin
              Color:= WizardForm.PageDescriptionLabel.Font.Color;
              Style:= WizardForm.PageDescriptionLabel.Font.Style;
              Name:= WizardForm.PageDescriptionLabel.Font.Name;
              Size:= WizardForm.PageDescriptionLabel.Font.Size;
            end;
          Transparent:= True;
          Parent:= pnl;
        end;
      pnl.Repaint;
    end;

  if CurPageID = wpWelcome then WelcomePage;
  if CurPageID = wpSelectDir then SelectDirPage;
  if CurPageID = wpReady then ReadyPage;
  if CurPageID = wpInstalling then InstallingPage;
  if CurPageID = wpFinished then FinishedPage;
end;



P.S.
Сделал для стандартных страниц (не все), остальные страницы если хотите, делайте по примеру.

volk1234 14-10-2009 01:10 1242288

Цитата:

Цитата Serega
Откровенно говоря, я уже устал его писать... »

Так смело добавляй в шапку раздел шаблоны :)

GrizzlyMK 14-10-2009 08:02 1242353

Serega,
Спосибо за скрипт...
Но вот ошибка.
Немогу понять изачево.

МИШАНЧИК 14-10-2009 08:23 1242356

Serega, по поводу
Цитата:

Цитата Serega
Откровенно говоря, я уже устал его писать...
Пример »

Пробую компилировать, выдаёт ошибку:
Line 266
Column 25
Unknown identifier "ItemCount"

В чём может быть проблемма(инно 5.3.5 от restools)?

Tukash 14-10-2009 14:16 1242596

GrizzlyMK
МИШАНЧИК

у меня тоже такая ошибка...

grinda 14-10-2009 15:11 1242649

Подскажите как в правом верхнем углу установить картинку любого размера

Tukash 14-10-2009 15:28 1242671

grinda
загони скрипт пож)))
хотябы на широкое окно инстала

A1EXXX 14-10-2009 16:24 1242720

GrizzlyMK, МИШАНЧИК, Tukash, у меня нормально компилится (Inno ANSI ResTools...)

Tukash 14-10-2009 16:33 1242729

A1EXXX
у меня inno setup ANSI 5.3.5. и не идет(((покажи свой скрипт мож что-то мы не так поняли...

A1EXXX 14-10-2009 16:46 1242744

Tukash,
читать дальше »

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion

[Run]
Filename: {app}\MyProg.exe; Description: Запустить программу My Program?; Flags: postinstall nowait skipifsilent

[code]
var
pnl: TPanel;

///////////////////////WelcomePage//////////////////////////////////////
procedure WelcomePage;
begin
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.WelcomeLabel1.AutoSize;
SetBounds(WizardForm.WelcomeLabel1.Left,WizardForm.WelcomeLabel1.Top,
WizardForm.WelcomeLabel1.Width,WizardForm.WelcomeLabel1.Height);
WordWrap:= WizardForm.WelcomeLabel1.WordWrap;
Caption:= WizardForm.WelcomeLabel1.Caption;
with Font do
begin
Color:= WizardForm.WelcomeLabel1.Font.Color;
Style:= WizardForm.WelcomeLabel1.Font.Style;
Name:= WizardForm.WelcomeLabel1.Font.Name;
Size:= WizardForm.WelcomeLabel1.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.WelcomeLabel2.AutoSize;
SetBounds(WizardForm.WelcomeLabel2.Left,WizardForm.WelcomeLabel2.Top,
WizardForm.WelcomeLabel2.Width,WizardForm.WelcomeLabel2.Height);
WordWrap:= WizardForm.WelcomeLabel2.WordWrap;
Caption:= WizardForm.WelcomeLabel2.Caption;
with Font do
begin
Color:= WizardForm.WelcomeLabel2.Font.Color;
Style:= WizardForm.WelcomeLabel2.Font.Style;
Name:= WizardForm.WelcomeLabel2.Font.Name;
Size:= WizardForm.WelcomeLabel2.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////SelectDirPage//////////////////////////////////////
procedure SelectDirPage;
begin
with WizardForm do
begin
with DirEdit do
begin
Left:= 40;
Top:= 137;
Parent:= pnl;
end;
with DirBrowseButton do
begin
Left:= WizardForm.DirEdit.Left + WizardForm.DirEdit.Width + 10;
Top:= WizardForm.DirEdit.Top - 1;
Parent:= pnl;
end;
with SelectDirBitmapImage do
begin
Left:= WizardForm.DirEdit.Left;
Top:= WizardForm.DirEdit.Top - 62;
Stretch:= True;
Parent:= pnl;
end;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.SelectDirBrowseLabel.AutoSize;
SetBounds(WizardForm.DirEdit.Left,WizardForm.DirEdit.Top - 30,
WizardForm.SelectDirBrowseLabel.Width, WizardForm.SelectDirBrowseLabel.Height);
WordWrap:= WizardForm.SelectDirBrowseLabel.WordWrap;
Caption:= WizardForm.SelectDirBrowseLabel.Caption;
with Font do
begin
Color:= WizardForm.SelectDirBrowseLabel.Font.Color;
Style:= WizardForm.SelectDirBrowseLabel.Font.Style;
Name:= WizardForm.SelectDirBrowseLabel.Font.Name;
Size:= WizardForm.SelectDirBrowseLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.SelectDirLabel.AutoSize;
SetBounds(WizardForm.SelectDirBitmapImage.Left + 50,WizardForm.SelectDirBitmapImage.Top + 10,
WizardForm.SelectDirLabel.Width,WizardForm.SelectDirLabel.Height);
WordWrap:= WizardForm.SelectDirLabel.WordWrap;
Caption:= WizardForm.SelectDirLabel.Caption;
with Font do
begin
Color:= WizardForm.SelectDirLabel.Font.Color;
Style:= WizardForm.SelectDirLabel.Font.Style;
Name:= WizardForm.SelectDirLabel.Font.Name;
Size:= WizardForm.SelectDirLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.DiskSpaceLabel.AutoSize;
SetBounds(WizardForm.DirEdit.Left,WizardForm.Bevel.Top - 25,
WizardForm.DiskSpaceLabel.Width,WizardForm.DiskSpaceLabel.Height);
WordWrap:= WizardForm.DiskSpaceLabel.WordWrap;
Caption:= WizardForm.DiskSpaceLabel.Caption;
with Font do
begin
Color:= WizardForm.DiskSpaceLabel.Font.Color;
Style:= WizardForm.DiskSpaceLabel.Font.Style;
Name:= WizardForm.DiskSpaceLabel.Font.Name;
Size:= WizardForm.DiskSpaceLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////ReadyPage//////////////////////////////////////
procedure ReadyPage;
var
ready_str: string;
begin
ready_str:= WizardForm.ReadyMemo.Text;
with TLabel.Create(pnl) do
begin
SetBounds(45,115,WizardForm.ReadyMemo.Width, WizardForm.ReadyMemo.Height);
Caption:= ready_str;
with Font do
begin
Color:= WizardForm.ReadyLabel.Font.Color;
Style:= WizardForm.ReadyLabel.Font.Style;
Name:= WizardForm.ReadyLabel.Font.Name;
Size:= WizardForm.ReadyLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TBevel.Create(WizardForm) do
begin
SetBounds(40,110, WizardForm.ReadyMemo.Width, WizardForm.ReadyMemo.Height);
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.ReadyLabel.AutoSize;
SetBounds(40,70, WizardForm.ReadyLabel.Width, WizardForm.ReadyLabel.Height);
WordWrap:= WizardForm.ReadyLabel.WordWrap;
Caption:= WizardForm.ReadyLabel.Caption;
with Font do
begin
Color:= WizardForm.ReadyLabel.Font.Color;
Style:= WizardForm.ReadyLabel.Font.Style;
Name:= WizardForm.ReadyLabel.Font.Name;
Size:= WizardForm.ReadyLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////InstallingPage//////////////////////////////////////
procedure InstallingPage;
begin
with WizardForm.ProgressGauge do
begin
Left:= 40;
Top:= 115;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.FilenameLabel.AutoSize;
SetBounds(WizardForm.ProgressGauge.Left,WizardForm.ProgressGauge.Top-20,
WizardForm.FilenameLabel.Width,WizardForm.FilenameLabel.Height);
WordWrap:= WizardForm.FilenameLabel.WordWrap;
Caption:= WizardForm.FilenameLabel.Caption;
with Font do
begin
Color:= WizardForm.FilenameLabel.Font.Color;
Style:= WizardForm.FilenameLabel.Font.Style;
Name:= WizardForm.FilenameLabel.Font.Name;
Size:= WizardForm.FilenameLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.StatusLabel.AutoSize;
SetBounds(WizardForm.StatusLabel.Left,WizardForm.StatusLabel.Top,
WizardForm.StatusLabel.Width,WizardForm.StatusLabel.Height);
WordWrap:= WizardForm.StatusLabel.WordWrap;
Caption:= WizardForm.StatusLabel.Caption;
with Font do
begin
Color:= WizardForm.StatusLabel.Font.Color;
Style:= WizardForm.StatusLabel.Font.Style;
Name:= WizardForm.StatusLabel.Font.Name;
Size:= WizardForm.StatusLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////FinishedPage//////////////////////////////////////
var
CheckBox: array of TNewCheckBox;

procedure CheckBoxClick(Sender: TObject);
begin
if TNewCheckBox(Sender).Checked then
WizardForm.RunList.Checked[TNewCheckBox(Sender).Tag]:= True
else WizardForm.RunList.Checked[TNewCheckBox(Sender).Tag]:= False;
end;

procedure LabelClick(Sender: TObject);
begin
if CheckBox[TLabel(Sender).Tag].Checked then
begin
WizardForm.RunList.Checked[TLabel(Sender).Tag]:= False;
CheckBox[TLabel(Sender).Tag].Checked:= False;
end
else
begin
WizardForm.RunList.Checked[TLabel(Sender).Tag]:= True;
CheckBox[TLabel(Sender).Tag].Checked:= True;
end;
end;

procedure HideRunList(Control: TWinControl);
var
i, t: Integer;
str: string;
begin
if WizardForm.RunList.ItemCount > 0 then
begin
WizardForm.RunList.Hide;
SetArrayLength(CheckBox, SizeOf(WizardForm.RunList.ItemCount));
for i:= 0 to WizardForm.RunList.ItemCount-1 do
begin
CheckBox[i]:= TNewCheckBox.Create(Control);
with CheckBox[i] do
begin
SetBounds(ScaleX(WizardForm.RunList.Left+2),ScaleY(WizardForm.RunList.Top+2+t),14,14);
Tag:= i;
Checked:= WizardForm.RunList.Checked[i];
Caption:= WizardForm.RunList.Items.Strings[i];
Brush.Style:= bsClear;
OnClick:= @CheckBoxClick;
Color:= clWhite;
Parent:= Control;
end;
str:= WizardForm.RunList.Items.Strings[i];
with TLabel.Create(WizardForm) do
begin
SetBounds(ScaleX(WizardForm.RunList.Left+20),ScaleY(WizardForm.RunList.Top+2+t),
WizardForm.RunList.Width,14);
Caption:= str;
Tag:= i;
OnClick:= @LabelClick;
Transparent:= True;
Parent:= Control;
end;
t:= t + 20;
end;
end;
end;

procedure FinishedPage;
begin
HideRunList(pnl);
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.FinishedHeadingLabel.AutoSize;
SetBounds(WizardForm.FinishedHeadingLabel.Left,WizardForm.FinishedHeadingLabel.Top,
WizardForm.FinishedHeadingLabel.Width,WizardForm.FinishedHeadingLabel.Height);
WordWrap:= WizardForm.FinishedHeadingLabel.WordWrap;
Caption:= WizardForm.FinishedHeadingLabel.Caption;
with Font do
begin
Color:= WizardForm.FinishedHeadingLabel.Font.Color;
Style:= WizardForm.FinishedHeadingLabel.Font.Style;
Name:= WizardForm.FinishedHeadingLabel.Font.Name;
Size:= WizardForm.FinishedHeadingLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.FinishedLabel.AutoSize;
SetBounds(WizardForm.FinishedLabel.Left,WizardForm.FinishedLabel.Top,
WizardForm.FinishedLabel.Width,WizardForm.FinishedLabel.Height);
WordWrap:= WizardForm.FinishedLabel.WordWrap;
Caption:= WizardForm.FinishedLabel.Caption;
with Font do
begin
Color:= WizardForm.FinishedLabel.Font.Color;
Style:= WizardForm.FinishedLabel.Font.Style;
Name:= WizardForm.FinishedLabel.Font.Name;
Size:= WizardForm.FinishedLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

procedure CurPageChanged(CurPageID: Integer);
begin
pnl:= TPanel.Create(WizardForm);
with pnl do
begin
Align:= alClient;
Parent:= WizardForm;
end;
with WizardForm do
begin
with WizardBitmapImage do
begin
Align:= alClient;
Stretch:= True;
Parent:= pnl;
end;
NextButton.Parent:= pnl;
CancelButton.Parent:= pnl;
BackButton.Parent:= pnl;
Bevel.Parent:= pnl;
pnl.Repaint;
end;

if (CurPageID > wpWelcome) and (CurPageID < wpFinished) then
begin
WizardForm.Bevel1.Parent:= pnl;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.PageNameLabel.AutoSize;
SetBounds(WizardForm.PageNameLabel.Left,WizardForm.PageNameLabel.Top,
WizardForm.PageNameLabel.Width,WizardForm.PageNameLabel.Height);
Caption:= WizardForm.PageNameLabel.Caption;
with Font do
begin
Color:= WizardForm.PageNameLabel.Font.Color;
Style:= WizardForm.PageNameLabel.Font.Style;
Name:= WizardForm.PageNameLabel.Font.Name;
Size:= WizardForm.PageNameLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.PageDescriptionLabel.AutoSize;
SetBounds(WizardForm.PageDescriptionLabel.Left,WizardForm.PageDescriptionLabel.Top,
WizardForm.PageDescriptionLabel.Width,WizardForm.PageDescriptionLabel.Height);
Caption:= WizardForm.PageDescriptionLabel.Caption;
with Font do
begin
Color:= WizardForm.PageDescriptionLabel.Font.Color;
Style:= WizardForm.PageDescriptionLabel.Font.Style;
Name:= WizardForm.PageDescriptionLabel.Font.Name;
Size:= WizardForm.PageDescriptionLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;

if CurPageID = wpWelcome then WelcomePage;
if CurPageID = wpSelectDir then SelectDirPage;
if CurPageID = wpReady then ReadyPage;
if CurPageID = wpInstalling then InstallingPage;
if CurPageID = wpFinished then FinishedPage;
end;
он точно такой же, разница лишь в присутствии других секций....

Serega, а можете сделать, чтобы картинка растягивалась и на SelectComponents, SelectProgramGroup, SelectTasks, Preparing??? (если это не будет портить вид окна интсалла....)

Serega 14-10-2009 16:56 1242754

Цитата:

Цитата GrizzlyMK
Но вот ошибка. »

Цитата:

Цитата МИШАНЧИК
Пробую компилировать, выдаёт ошибку »

Извиняюсь, сразу не проверил на стандартной версии.
Исправил в своём предыдущем сообщении. Просто нужно было заменить WizardForm.RunList.ItemCount на WizardForm.RunList.Items.Count, а также убрать Brush.Style:= bsClear; остальное всё одинаково...

Цитата:

Цитата МИШАНЧИК
инно 5.3.5 от restools »

У меня есть все версии, но по умолчанию стоит InnoCompiler091007 + Inno_ISCmplr_Setup от Restools

Цитата:

Цитата A1EXXX
а можете сделать, чтобы картинка растягивалась и на SelectComponents, SelectProgramGroup, SelectTasks, Preparing??? (если это не будет портить вид окна интсалла....) »

Честно говоря, я на этот пример убил четыре вечера...
Скажу сразу, со страницей SelectComponents, могут возникнуть трудности с прорисовкой.
SelectProgramGroup и SelectProgramGroup - в принципе, все также как и SelectDirPage, т.е. по аналогии.
SelectTasks - здесь придётся как и на FinishedPage, автоматом создавать лейблы и чебоксы.
Preparing - я про неё только слышал, но ни разу не видел в глаза... Если у вас есть простенький пример, с показом этой страницы, то покажите пожалуйста скрипт, очень интересно.

A1EXXX 14-10-2009 17:24 1242804

Цитата:

Цитата Serega
Preparing... »

Это я перепутал со страницей "Всё готово к установке" :blush2:
Спасибо за подсказку, разберусь! :)

x-net 14-10-2009 17:35 1242817

A1EXXX дай ссылку на твой inno который пользуешься

A1EXXX 14-10-2009 17:46 1242831

x-net, Inno Setup 5.35 + Compiler от ResTools + поверх (чтоб на русском было) Русская версия ISC от ResTools

Serega 14-10-2009 18:55 1242935

Цитата:

Цитата A1EXXX
+ поверх (чтоб на русском было) »

Но тогда Inno станет 5.2.3, в место 5.3.5

Serega 14-10-2009 19:38 1243004

Здравствуйте, где-то видел вопрос, но уже не могу найти где... Одним словом он меня заинтирестовал.
Суть вопроса: "Как сделать прозрачным часть окна инсталлятора, где расположены кнопки, но чтоб кнопки были видны."
Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
const
  GWL_EXSTYLE  = -20;
  WS_EX_LAYERED = $00080000;
  LWA_COLORKEY  = $00000001;

// задаёт прозрачность окна
function SetLayeredWindowAttributes(hwnd: hWnd; crKey: TColor; bAlpha: byte; dwFlags: DWORD): Boolean;
  external 'SetLayeredWindowAttributes@user32.dll stdcall';
// считывает инфоpмацию об окне или о значениях дополнительного байта окна
function GetWindowLong(Wnd: HWnd; Index: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall';
// заменяет для окна атpибут стpуктуpы класса окна новым значением
function SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint;
  external 'SetWindowLongA@user32.dll stdcall';

procedure InitializeWizard();
begin
  with TPanel.Create(WizardForm) do
    begin                   
      SetBounds(0, WizardForm.Bevel.Top, WizardForm.Width, WizardForm.Height-WizardForm.Bevel.Top);
      Color:= clGreen;
      Parent:= WizardForm;
    end;
  with TPanel.Create(WizardForm) do
    begin
      SetBounds(WizardForm.NextButton.Left, WizardForm.NextButton.Top,
                WizardForm.NextButton.Width, WizardForm.NextButton.Height);
      WizardForm.NextButton.Parent:= TPanel.Create(WizardForm);
      // теоретически, второе должно переназначать первое, но почему-то работает только так:
      WizardForm.NextButton.Parent:= WizardForm;
      Free; // здесь тоже непонятно, по идее панель должна сразу разрушаться, но...
    end;
  with TPanel.Create(WizardForm) do
    begin
      SetBounds(WizardForm.CancelButton.Left, WizardForm.CancelButton.Top,
                WizardForm.CancelButton.Width, WizardForm.CancelButton.Height);
      WizardForm.CancelButton.Parent:= TPanel.Create(WizardForm);
      WizardForm.CancelButton.Parent:= WizardForm;
      Free;
    end;
  SetWindowLong(WizardForm.Handle, GWL_EXSTYLE, GetWindowLong(WizardForm.Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
  SetLayeredWindowAttributes(WizardForm.Handle, clGreen, 0, LWA_COLORKEY);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID > wpWelcome then
  with TPanel.Create(WizardForm) do
    begin
      SetBounds(WizardForm.BackButton.Left, WizardForm.BackButton.Top,
                WizardForm.BackButton.Width, WizardForm.BackButton.Height);
      WizardForm.BackButton.Parent:= TPanel.Create(WizardForm);
      WizardForm.BackButton.Parent:= WizardForm;
      Free;
    end;
end;


MrAWP 14-10-2009 19:51 1243022

serg aka lain, спасибо, работает. Но есть проблема - у меня распаковка архива начинается только если выбранный компонент arc_yes, но инсталлятор, даже если компонент отключен, все равно запрашивает этот файл :( Нельзя ли как то связать компонент с проверкой?

Wiper 14-10-2009 20:33 1243068

Serega спасибо за Converter Reg,отличная прога :good:

serg aka lain 14-10-2009 20:58 1243108

Цитата:

Цитата Serega
"Как сделать прозрачным часть окна инсталлятора, где расположены кнопки, но чтоб кнопки были видны." »

Ооо, WinApi. Вы случаем не знаете, как сделать средствами WinApi кнопки плоскими, ну как в классической теме,
знаю что вид кнопок зависит от текущего оформления винды, но всёж хотелось.

A1EXXX 14-10-2009 20:59 1243111

Serega, в последней версии компилятора от RT у меня Мастер скриптов не работал... в любом случае, из всех перепробованных связок, эта самая безотказная :)

serg aka lain 14-10-2009 21:04 1243119

Цитата:

Цитата MrAWP
Нельзя ли как то связать компонент с проверкой? »

Код:

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssInstall then
    if IsComponentSelected('имя_компонента') then
      if not FileExists(ExpandConstant('{src}\archieve.exe')) then
      begin
        SuppressibleMsgBox('Файл archieve.exe не найден в папке с инсталлятором!', mbCriticalError, MB_OK, MB_OK);
        Abort;
      end;
end;


MrAWP 14-10-2009 21:34 1243158

serg aka lain спасибо) уже до самого дошло)

GrizzlyMK 14-10-2009 21:54 1243176

Подскажите как испаравить.

A1EXXX 14-10-2009 21:57 1243180

Меня заинтересовал репак от ЕagleSH, вот скрины: 1 2 3 4 5
Может ли кто-нибудь такое смастерить??? P.S. У него видео растянуто по инсталлу & распаковка FreeArc :)

Накопилось несколько вопросов, помогайте кто чем может ;)
1) Как сделать, чтобы когда игру уже установлена, при запуске инсталла выскакивало такое вот окошко?
2) Подскажите связку Precomp + FreeArc, если нужно прекомпить много мелких файлов. Можно сначала файлы паконуть 7-zip'ом без сжатия, потом Precomp & FreeArc. Может есть связка попроще? А если нет, то можно сделать так, чтоб после распаковки *.arc-архивов (при использовании скрипта Bulat'а v3.3) начиналась рекомпрессия, и лишь потом распаковка 7z. И можно сделать так, чтоб последние две стадии были с прогресс-барами??
3) Ещё есть такой баг: использую скрипт для лого в углу, но начиная со страницы выбора папки установки кликабельность ссылки пропадает!!! Какая процедура (из какого-то другого скрипта) может такое делать??
читать дальше »

[Files]
Source: C:\logo.bmp; DestDir: {tmp}; Flags: dontcopy

[code]
var
LogoImage:TBitmapImage;
LogoLabel: TLabel;
LogoPanel: TPanel;

procedure LogoOnClick(Sender: TObject);
var ReturnCode: Integer;
begin
ShellExec('open', 'http://сайт.ру', '', '', SW_SHOWNORMAL, ewNoWait, ReturnCode)
end;

procedure InitializeWizard();
begin
ExtractTemporaryFile('logo.bmp');
LogoPanel := TPanel.Create(WizardForm);
with LogoPanel do
begin
Parent := WizardForm;
Left := ScaleX(5);
Top := ScaleY(320);
Width := ScaleX(165);
Height := ScaleY(35);
BevelOuter := bvNone;
end;

LogoImage := TBitmapImage.Create(WizardForm);
with LogoImage do
begin
Parent := LogoPanel;
Left := ScaleX(0);
Top := ScaleY(0);
AutoSize:=true;
ReplaceColor:=clFuchsia;
ReplaceWithColor:=clBtnFace;
Bitmap.LoadFromFile(ExpandConstant('{tmp}\logo.bmp'));
end;

LogoLabel := TLabel.Create(WizardForm);
with LogoLabel do
begin
Parent := LogoPanel;
Width := LogoPanel.Width;
Height := LogoPanel.Height;
Transparent:=True;
Cursor := crHand;
OnClick:=@LogoOnClick;
end;
end;

BlackSelf 14-10-2009 22:21 1243203

A1EXXX, на данный момент в условиях инно такое сделать нельзя (если очень хочется, переходи на ммб). Так как при размещении видео перекрываются все элементы, кроме edit'ов и различных button'ов с чек-боксами.
1).
читать дальше »
Код:

[_code]
function InitializeSetup(): Boolean;
var
ResultCode:Integer;
ResultReg:string;
begin
if RegValueExists(HKEY_LOCAL_MACHINE, 'Software\2K Sports\NBA 2K10','InstallDir') then
begin
RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\2K Sports\NBA 2K10','InstallDir', ResultReg)
if MsgBox('Запустить NBA 2K10?',mbconfirmation, mb_YesNo) = IDYES then
Exec(ResultReg+'\nba2k10.exe', '', '', SW_SHOW,ewNoWait, ResultCode)
end;
end;


2). Декомпрессию и распаковку архива сделать можно, но отобразить на прогресс-баре пока не удастся.
3). Показывай весь скрипт, тогда можно будет что-то сказать, а гадать, "какая процедура (из какого-то другого скрипта) может такое делать", мы можем долго.

Serega 14-10-2009 22:32 1243222

Цитата:

Цитата Wiper
спасибо за Converter »

Пользуйтесь на здоровье :wink:

Цитата:

Цитата serg aka lain
Вы случаем не знаете, как сделать средствами WinApi кнопки плоскими, ну как в классической теме »

Не сталкивался с таким, подумаю на досуге...

Цитата:

Цитата A1EXXX
в последней версии компилятора от RT у меня Мастер скриптов не работал... »

Есть такое дело, но я не использую мастера.
Просто на скорую руку, сделал для себя прогу и повесил кнопку в Total Commander. Нужна болванка скрипта, я нажимаю на кнопку и болванка готова...

Цитата:

Цитата A1EXXX
Какая процедура (из какого-то другого скрипта) может такое делать?? »

Любая, которая создаёт, что-то поверх или переназначает LogoLabel. Присмотритесь к процедурам CurPageChanged, NextButtonClick, CurStepChanged.

A1EXXX 14-10-2009 22:40 1243232

Вложений: 1
Цитата:

Цитата BlackSelf
в условиях инно такое сделать нельзя »

Т.е. инсталлятор, который на скринах, сделан не в Inno??
Цитата:

Цитата BlackSelf
Декомпрессию и распаковку архива сделать можно »

Можно это как-то упростить (не так, как я описал выше)??

Готовый скрипт не храню (каждый раз пишу заново), состряпал по-быстрому [прикрепил]...

BlackSelf 14-10-2009 22:55 1243249

Цитата:

Цитата A1EXXX
Т.е. инсталлятор, который на скринах, сделан не в Inno?? »

Нет. Это ммб. В инно сделан setup_.exe
Цитата:

Цитата A1EXXX
Можно это как-то упростить (не так, как я описал выше)?? »

Запаковать по одному файлу через for /r %%a in (*.*) do precomp04.exe -slow "%%a"
Ну и распаковать также, только с параметром -r и по маске *.pcf
По крайней мере, 7zip не надо будет использовать.

A1EXXX 14-10-2009 23:11 1243257

BlackSelf, можешь на примере любого файла расписать упаковку и распаковку (и как это всё в скрипте прописать), а то даже не знаю, туда ли параметры написал :(
Где при этом должен быть файл precomp04.exe? И "по одному файлу" - это как?? Если это для нескольких больших, то понятно, а если много мелких, то чёт не очень...

Serega 14-10-2009 23:22 1243266

Цитата:

Цитата GrizzlyMK
Подскажите как испаравить. »

читать дальше »
Код:

; Автор kombat 77 http://forum.ru-board.com/profile.cgi?action=show&member=kombat 77
[Setup]
AppName=Test
AppVerName=Test v 1.0
DefaultDirName={pf}\Test
OutputDir=userdocs:Test.
Uninstallable=False

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

[Icons]
Name: "{userdesktop}\notepad"; Filename: "{win}\notepad.exe";

[Files]
Source: FileName1; Flags: dontcopy
Source: FileName2; Flags: dontcopy

[Code]
function GetModuleHandle(lpModuleName: LongInt): LongInt;
 external 'GetModuleHandleA@kernel32.dll stdcall';

function ExtractIcon(hInst: LongInt; lpszExeFileName: PChar; nIconIndex: LongInt): LongInt;
 external 'ExtractIconA@shell32.dll stdcall';

function DrawIconEx(hdc: LongInt; xLeft, yTop: Integer; hIcon: LongInt; cxWidth, cyWidth: Integer; istepIfAniCur, hbrFlickerFreeDraw, diFlags: LongInt): LongInt;
 external 'DrawIconEx@user32.dll stdcall';

procedure InitializeWizard();
var
  Rect: TRect;
  HIcon: LongInt;
begin
  ExtractTemporaryFile('FileName1');
  HIcon := ExtractIcon(GetModuleHandle(0), ExpandConstant('{tmp}\FileName1'), 0);
  WizardForm.SelectDirBitmapImage.Hide;
  with TBitmapImage.Create(WizardForm) do
  begin
    SetBounds(WizardForm.SelectDirBitmapImage.Left, WizardForm.SelectDirBitmapImage.Top, ScaleX(32), ScaleY(32));
    with Bitmap do
    begin
      Width := ScaleX(32);
      Height := ScaleY(32);
      Rect.Right := ScaleX(32);
      Rect.Bottom := ScaleY(32);
      Rect.Left := ScaleX(0);
      Rect.Top := ScaleY(0);
      Canvas.Brush.Color := WizardForm.Color;
      Canvas.FillRect(Rect);
      DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, 3);
    end;
    Parent := WizardForm.SelectDirPage;
  end;

  ExtractTemporaryFile('FileName2');
  HIcon := ExtractIcon(GetModuleHandle(0), ExpandConstant('{tmp}\FileName2'), 0);
  WizardForm.SelectGroupBitmapImage.Hide;
  with TBitmapImage.Create(WizardForm) do
  begin
    SetBounds(WizardForm.SelectGroupBitmapImage.Left, WizardForm.SelectGroupBitmapImage.Top, ScaleX(32), ScaleY(32));
    with Bitmap do
    begin
      Width := ScaleX(32);
      Height := ScaleY(32);
      Rect.Right := ScaleX(32);
      Rect.Bottom := ScaleY(32);
      Rect.Left := ScaleX(0);
      Rect.Top := ScaleY(0);
      Canvas.Brush.Color := WizardForm.Color;
      Canvas.FillRect(Rect);
      DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, 3);
    end;
    Parent := WizardForm.SelectProgramGroupPage;
  end;
end;



Цитата:

Цитата BlackSelf
Нет. Это ммб. В инно сделан setup_.exe »

мне кажется, это на Inno, а видео - это помоему сделано с помощью isFlash.dll от ExpeditoR'a.
Хотя я могу и ошибаться.

BlackSelf 14-10-2009 23:27 1243269

A1EXXX, кинул в лс.
Serega, у меня есть исходники от игла. Сделано всё на ммб. С помощью isFlash, к огромному сожалению, такое сделать невозможно(

A1EXXX 14-10-2009 23:47 1243280

BlackSelf, а можно на исходники взглянуть? Интересно, как там всё устроено :)
(ответ получен...)

МИШАНЧИК 15-10-2009 01:59 1243343

Serega,
Цитата:

Цитата Serega
У меня есть все версии, но по умолчанию стоит InnoCompiler091007 + Inno_ISCmplr_Setup от Restools »

А вот из
Цитата:

Цитата Serega
Inno_ISCmplr_Setup»

что нужно использовать?

x-net 15-10-2009 06:46 1243390


1.Как туда вставить ссылку с картинкой и черточкой под кнопками?
2.Как поменять кнопки на свои?
3.Можно ли поменять шрифт в заголовке на свой в системе?

Serega 15-10-2009 17:41 1243855

Цитата:

Цитата МИШАНЧИК
что нужно использовать? »

Я использую все файлы из InnoSetup_ANSI\FullVCL\*

MrAWP 15-10-2009 22:10 1244109

Кто знает - возможно ли на странице компонентов прикрутить комментарий к каждому компоненту? Желательно чтобы он отображался под полем компонентов (над кнопками далее и отмена). Спасибо.

Serega 16-10-2009 00:34 1244218

Цитата:

Цитата serg aka lain
как сделать средствами WinApi кнопки плоскими »

Сделал не на WinApi, а с помощью панелей, но обычный Inno не понимает OnMouseDown и OnMouseUp...
Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
var
  Backbtn, Nextbtn, Cancelbtn: TPanel;

procedure MouseDown(Sender: TObject; TButton: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  TPanel(Sender).BorderStyle:= bsSingle;
end;

procedure MouseUp(Sender: TObject; TButton: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  TPanel(Sender).BorderStyle:= bsNone;
end;

procedure Click(Sender: TObject);
begin
  case TPanel(Sender) of
    Backbtn: WizardForm.BackButton.OnClick(WizardForm.BackButton);
    Nextbtn: WizardForm.NextButton.OnClick(WizardForm.NextButton);
    Cancelbtn: WizardForm.CancelButton.OnClick(WizardForm.CancelButton);
  end;
end;

procedure CancelbtnClick(Sender: TObject);
begin
  WizardForm.CancelButton.OnClick(WizardForm.CancelButton);
end;

procedure InitializeWizard;
begin
  Backbtn:= TPanel.Create(WizardForm.BackButton);
  with Backbtn do
    begin
      SetBounds(WizardForm.BackButton.Left, WizardForm.BackButton.Top,
                WizardForm.BackButton.Width, WizardForm.BackButton.Height);
      BorderStyle:= bsNone;
      BevelOuter:= bvRaised;
      OnClick:= @Click;
      OnMouseDown:= @MouseDown;
      OnMouseUp:= @MouseUp;
      Parent:= WizardForm;
    end;
  Nextbtn:= TPanel.Create(WizardForm.NextButton);
  with Nextbtn do
    begin
      SetBounds(WizardForm.NextButton.Left, WizardForm.NextButton.Top,
                WizardForm.NextButton.Width, WizardForm.NextButton.Height);
      BorderStyle:= bsNone;
      BevelOuter:= bvRaised;
      OnClick:= @Click;
      OnMouseDown:= @MouseDown;
      OnMouseUp:= @MouseUp;
      Parent:= WizardForm;
    end;
  Cancelbtn:= TPanel.Create(WizardForm.NextButton);
  with Cancelbtn do
    begin
      SetBounds(WizardForm.CancelButton.Left, WizardForm.CancelButton.Top,
                WizardForm.CancelButton.Width, WizardForm.CancelButton.Height);
      BorderStyle:= bsNone;
      OnClick:= @Click;
      OnMouseDown:= @MouseDown;
      OnMouseUp:= @MouseUp;
      Parent:= WizardForm;
    end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  Backbtn.Caption:= WizardForm.BackButton.Caption;
  Backbtn.Visible:= WizardForm.BackButton.Visible;
  Nextbtn.Caption:= WizardForm.NextButton.Caption;
  Nextbtn.Visible:= WizardForm.NextButton.Visible;
  Cancelbtn.Caption:= WizardForm.CancelButton.Caption;
  Cancelbtn.Visible:= WizardForm.CancelButton.Visible;
end;


A1EXXX 16-10-2009 20:25 1244862

Как сделать, чтобы аддон к игре устанавливался строго в папку оригинала без возможности изменения пути установки, и чтоб если оригинала нет (в реестре; подхватывало путь из него), выскакивало такое окошко???

BlackSelf 16-10-2009 20:57 1244895

A1EXXX,
читать дальше »
Код:

[Setup]
AppName=NBA 2K10
AppVerName=NBA 2K10
DefaultDirName={reg:HKLM\Software\2K Sports\NBA 2K10,InstallDir}
OutputDir=.

[_code]
function InitializeSetup(): Boolean;
var
ResultCode:Integer;
begin
if RegValueExists(HKEY_LOCAL_MACHINE, 'Software\2K Sports\NBA 2K10','InstallDir')
then
  Result := True
else
MsgBox('Игра NBA 2K10 не найдена.',mbInformation, mb_Ok)
end;

Procedure InitializeWizard();
begin
WizardForm.DirEdit.Enabled:=False;
WizardForm.DirBrowseButton.Enabled:=False;
end;


A1EXXX 16-10-2009 21:23 1244916

BlackSelf, Thank you, man! ;) :oszone:

A1EXXX 16-10-2009 21:44 1244931

Вложений: 1

Немного поправил скрипт от ResTools для добавления анимации (копирования) на страницу процесса инсталляции;
необходимое прикрепил, визуально - смотрим скрин ;)
Исходники можно взять здесь

serg aka lain 16-10-2009 22:15 1244954

Цитата:

Цитата Serega
Сделал не на WinApi, а с помощью панелей, но обычный Inno не понимает OnMouseDown и OnMouseUp... »

Да я тоже так пытался, только на панели ещё и лейблы натягивал, но у моего и у Вашего варианта есть один и тот-же недостаток, если нажать кнопку, а затем сдвинуть мышей в сторону, она (кнопка) назад уже не отжимается (до следующего нажатия), как это побороть не соображу. Ну вот и думал как-то через API можно.

з.ы. Если интересно вышлю свой пример в личку.

Crysis23 17-10-2009 11:34 1245208

Вложений: 2
Привет Всем!Можете сказать скрипт от этой установки :)

Bambaso 17-10-2009 21:38 1245639

Подскажите пожалуйста возможно ли в innosetup изменить диалоговые сообщения в процессе установки приложения. ( Далее, назад завершить и всё такое )?

serg aka lain 17-10-2009 22:08 1245657

Цитата:

Цитата Bambaso
Подскажите пожалуйста возможно ли в innosetup изменить диалоговые сообщения в процессе установки приложения. ( Далее, назад завершить и всё такое )? »

Конечно, возможно.

SinCore 18-10-2009 11:43 1245939

Подскажите пожалуйста,есть запакованные файлы в архив 7z хотелось бы прикрутить установщик что бы распаковывал это архив в ту директорию которую выбераешь в установщике.

Serega 18-10-2009 14:44 1246074

Цитата:

Цитата serg aka lain
но у моего и у Вашего варианта есть один и тот-же недостаток, если нажать кнопку, а затем сдвинуть мышей в сторону, она (кнопка) назад уже не отжимается (до следующего нажатия), как это побороть не соображу »

Я тоже не мог сразу сообразить, но вот в итоге, что вышло :) :
Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
var
  Backbtn, Nextbtn, Cancelbtn: TPanel;

procedure MouseDown(Sender: TObject; TButton: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  TPanel(Sender).BorderStyle:= bsSingle;
end;

procedure MouseUp(Sender: TObject; TButton: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  TPanel(Sender).BorderStyle:= bsNone;
end;

procedure MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  case TWinControl(Sender) of
    WizardForm:
      begin
        Backbtn.BorderStyle:= bsNone;
        Nextbtn.BorderStyle:= bsNone;
        Cancelbtn.BorderStyle:= bsNone;
      end;
  end;
end;

procedure Click(Sender: TObject);
begin
  case TPanel(Sender) of
    Backbtn: WizardForm.BackButton.OnClick(WizardForm.BackButton);
    Nextbtn: WizardForm.NextButton.OnClick(WizardForm.NextButton);
    Cancelbtn:
      begin
        Cancelbtn.BorderStyle:= bsNone;
        WizardForm.CancelButton.OnClick(WizardForm.CancelButton);
      end;
  end;
end;

procedure InitializeWizard;
begin
  WizardForm.OnMouseMove:= @MouseMove;
  Backbtn:= TPanel.Create(WizardForm.BackButton);
  with Backbtn do
    begin
      SetBounds(WizardForm.BackButton.Left, WizardForm.BackButton.Top,
                WizardForm.BackButton.Width, WizardForm.BackButton.Height);
      BorderStyle:= bsNone;
      OnClick:= @Click;
      OnMouseDown:= @MouseDown;
      OnMouseUp:= @MouseUp;
      Parent:= WizardForm;
    end;
  Nextbtn:= TPanel.Create(WizardForm.NextButton);
  with Nextbtn do
    begin
      SetBounds(WizardForm.NextButton.Left, WizardForm.NextButton.Top,
                WizardForm.NextButton.Width, WizardForm.NextButton.Height);
      BorderStyle:= bsNone;
      OnClick:= @Click;
      OnMouseDown:= @MouseDown;
      OnMouseUp:= @MouseUp;
      Parent:= WizardForm;
    end;
  Cancelbtn:= TPanel.Create(WizardForm.NextButton);
  with Cancelbtn do
    begin
      SetBounds(WizardForm.CancelButton.Left, WizardForm.CancelButton.Top,
                WizardForm.CancelButton.Width, WizardForm.CancelButton.Height);
      BorderStyle:= bsNone;
      OnClick:= @Click;
      OnMouseDown:= @MouseDown;
      OnMouseUp:= @MouseUp;
      Parent:= WizardForm;
    end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  Backbtn.Caption:= WizardForm.BackButton.Caption;
  Backbtn.Visible:= WizardForm.BackButton.Visible;
  Nextbtn.Caption:= WizardForm.NextButton.Caption;
  Nextbtn.Visible:= WizardForm.NextButton.Visible;
  Cancelbtn.Caption:= WizardForm.CancelButton.Caption;
  Cancelbtn.Visible:= WizardForm.CancelButton.Visible;
end;



Цитата:

Цитата Bambaso
изменить диалоговые сообщения в процессе установки приложения »

Сформулируйте более точнее, что вы хотите сделать.

Цитата:

Цитата SinCore
запакованные файлы в архив 7z хотелось бы прикрутить установщик что бы распаковывал »

В шапке есть Inno Setup Scripting 5.1 - руководство по расширенным возможностям Inno Setup от Kindly, там есть примеры для работы с 7z.

serg aka lain 18-10-2009 19:54 1246330

Serega, благодарю за желание помочь.
Я тоже нашёл неплохой вариант, адаптировал под свои нужды всем известный код, с текстурными кнопками.
Получилось вроде-бы не плохо.
И самое для меня главное, он должен работать в любой версии Inno

предлагаю взглянуть

Код:


; Inno Setup Compiler 5.3.5 (ansi & unicode)
; = Emulation of switching-off of style XP =
; http://forum.oszone.net/  <serg aka lain>

[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
LicenseFile=compiler:License.txt
OutputDir=userdocs:My Program.

[code]

const
  RGN_DIFF = 4;
  RADIUS = 1;
  bidBack = 0;
  bidNext = 1;
  bidCancel = 2;
  bidDirBrowse = 3;
  bidGroupBrowse = 4;

function CreateRoundRectRgn(p1, p2, p3, p4, p5, p6: Integer): THandle;
 external 'CreateRoundRectRgn@gdi32 stdcall';
function CombineRgn(p1, p2, p3: THandle; p4: Integer): Integer;
 external 'CombineRgn@gdi32 stdcall';
function SetWindowRgn(hWnd: HWND; hRgn: THandle; bRedraw: Boolean): Integer;
 external 'SetWindowRgn@user32 stdcall';

var
  FormRegion, InnerRegion: tHandle;
  Panel: TPanel;
  ButtonPanel: array [0..4] of TPanel;
  ButtonLabel: array [0..4] of TLabel;

procedure ShapeForm(aForm : TForm; edgeSize : integer);
begin
  FormRegion := CreateRoundRectRgn(0, 0, aForm.width, aForm.height, edgeSize, edgeSize);
  CombineRgn(FormRegion, FormRegion, InnerRegion, RGN_DIFF);
  SetWindowRgn(aForm.Handle, FormRegion, True);
end;

procedure ButtonLabelClick(Sender: TObject);
var
  Button: TButton;
begin
  case TLabel(Sender).Tag of
    bidBack: Button := WizardForm.BackButton;
    bidNext: Button := WizardForm.NextButton;
    bidCancel: Button := WizardForm.CancelButton;
    bidDirBrowse: Button := WizardForm.DirBrowseButton;
    bidGroupBrowse: Button := WizardForm.GroupBrowseButton;
  else
    Exit
  end
  Button.OnClick(Button);
end;

procedure ButtonLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  ButtonPanel[TLabel(Sender).Tag].BorderStyle := bsSingle;
end;

procedure ButtonLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  ButtonPanel[TLabel(Sender).Tag].BorderStyle := bsSizeable;
end;

procedure LabelMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  ButtonPanel[TLabel(Sender).Tag].BorderStyle := bsSizeable;
end;

procedure LoadButton(AButton: TButton; AButtonIndex: integer);
var
  Labl: TLabel;
begin
  Panel := TPanel.Create(WizardForm);
  Panel.Left := AButton.Left;
  Panel.Top := AButton.Top;
  Panel.Width := AButton.Width;
  Panel.Height := AButton.Height;
  Panel.Tag := AButtonIndex;
  Panel.BorderStyle := bsSizeable;
  Panel.Parent := AButton.Parent;
  ButtonPanel[AButtonIndex] := Panel;

  with TLabel.Create(WizardForm) do
  begin
    Width := Panel.Width;
    Height := Panel.Height;
    AutoSize := False;
    Tag := AButtonIndex;
    OnClick := @ButtonLabelClick;
    OnDblClick := @ButtonLabelClick;
    OnMouseDown := @ButtonLabelMouseDown;
    OnMouseUp := @ButtonLabelMouseUp;
    OnMouseMove := @LabelMouseMove;
    TransParent := True;
    Parent := Panel;
  end;

  Labl := TLabel.Create(WizardForm);
  Labl.Width := Panel.Width - ScaleX(10);
  Labl.Height := Panel.Height - ScaleY(10);
  Labl.Alignment := taCenter;
  Labl.Autosize := False;
  Labl.Font.Color := clBlack;
  Labl.Caption := AButton.Caption;
  Labl.OnClick := @ButtonLabelClick;
  Labl.OnDblClick := @ButtonLabelClick;
  Labl.OnMouseDown := @ButtonLabelMouseDown;
  Labl.OnMouseUp := @ButtonLabelMouseUp;
  Labl.Cursor := crHand;
  Labl.Tag := AButtonIndex;
  Labl.Transparent := True;
  ButtonLabel[AButtonIndex] := Labl;
  Labl.Parent := Panel;
end;

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
  ButtonLabel[AButtonIndex].Caption := AButton.Caption;
  ButtonPanel[AButtonIndex].Visible := AButton.Visible;
  ButtonLabel[AButtonIndex].Enabled := Abutton.Enabled;
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
  ButtonLabel[bidNext].Enabled := True;
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
  ButtonLabel[bidNext].Enabled := False;
end;

procedure InitializeWizard();
begin
  ShapeForm(WizardForm, RADIUS);

  WizardForm.LicenseAcceptedRadio.OnClick := @LicenceAcceptedRadioOnClick;
  WizardForm.LicenseNotAcceptedRadio.OnClick := @LicenceNotAcceptedRadioOnClick;

  LoadButton(WizardForm.BackButton,bidBack);
  LoadButton(WizardForm.NextButton,bidNext);
  LoadButton(WizardForm.CancelButton,bidCancel);
  LoadButton(WizardForm.DirBrowseButton,bidDirBrowse);
  LoadButton(WizardForm.GroupBrowseButton,bidGroupBrowse);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  UpdateButton(WizardForm.BackButton,bidBack);
  UpdateButton(WizardForm.NextButton,bidNext);
  UpdateButton(WizardForm.CancelButton,bidCancel);

  ButtonLabel[bidBack].Left := ButtonPanel[bidBack].Width div 2 - ButtonLabel[bidBack].Width div 2;
  ButtonLabel[bidBack].Top := ButtonPanel[bidBack].Height div 2 - ButtonLabel[bidBack].Height div 2;
  ButtonLabel[bidNext].Left := ButtonPanel[bidNext].Width div 2 - ButtonLabel[bidNext].Width div 2;
  ButtonLabel[bidNext].Top := ButtonPanel[bidNext].Height div 2 - ButtonLabel[bidNext].Height div 2;
  ButtonLabel[bidCancel].Left := ButtonPanel[bidCancel].Width div 2 - ButtonLabel[bidCancel].Width div 2;
  ButtonLabel[bidCancel].Top := ButtonPanel[bidCancel].Height div 2 - ButtonLabel[bidCancel].Height div 2;
  ButtonLabel[bidDirBrowse].Left := ButtonPanel[bidDirBrowse].Width div 2 - ButtonLabel[bidDirBrowse].Width div 2;
  ButtonLabel[bidDirBrowse].Top := ButtonPanel[bidDirBrowse].Height div 2 - ButtonLabel[bidDirBrowse].Height div 2;
  ButtonLabel[bidGroupBrowse].Left := ButtonPanel[bidGroupBrowse].Width div 2 - ButtonLabel[bidGroupBrowse].Width div 2;
  ButtonLabel[bidGroupBrowse].Top := ButtonPanel[bidGroupBrowse].Height div 2 - ButtonLabel[bidGroupBrowse].Height div 2;
end;


Serega 18-10-2009 20:38 1246371

Цитата:

Цитата serg aka lain
И самое для меня главное, он должен работать в любой версии Inno »

Согласен, интересный подход ;)

Odebay 19-10-2009 05:29 1246602

Подскажите пожалуйста,как как разделить архив на тома во FreeArc по 700mb

Krekerpro 19-10-2009 13:54 1246916

День добрый,хотелось бы узнать,как сделать прозрачный фон на картинке в левом нижнем углу http://clip2net.com/clip/m0/1255946027-clip-124kb.jpg.
Используется этот скрипт-http://forum.oszone.net/post-1241284-239.html

A1EXXX 19-10-2009 15:23 1246990

Odebay, вопросу по FreeArc'у задавай в соответствующей теме... :off:
Krekerpro, можно задать прозрачность для bmp, для этого нужно сделать заливку фона розовым, с параметрами -
красный: 255, зелёный: 0, синий: 255; вот скрин из Paint'а

Krekerpro 19-10-2009 15:37 1247001

A1EXXX,
Не,bmp не подходит,надо для .gif

Berline 19-10-2009 15:39 1247005

Вложений: 1
Так сказать подниму на обсуждение общественности давнюю проблему:
Благодаря Serega, было реализовано и поправлено все, что я просил и не знал, но 1н вопрос, так и остался не решенным даже им.
Может кто-то подскажет, может кто-то знает.
В аттаче скрипт, в котором не корректно отрабатываются след вещи
вот ссыль на описание
Цитата:

без добавления ваших измнений. т.е. кнопок - я благополучно выделял галочки руками, у меня менялся сразу необходимый размер на диске, и при повторном запуске этого инсталлятора - он мне отображал уже установленные галочки тех компонентов, что я выбрал. Такое не изменилось после добавления кнопок, но они не корректны, а именно, повторюсь: при выделениее всех компонент, размер не перессчитывается. хотя действительно, компоненты установились, и при повторной установке поверх - инсталлятор не отображает компоненты, которые я уже установил...

A1EXXX 19-10-2009 15:50 1247015

Krekerpro, ну тогда Google тебе в помощь :buba:

Krekerpro 19-10-2009 19:09 1247168

A1EXXX,
Ты меня видать не правильно понял,на картинке фраза-фон прозрачный,но в инсталяторе откуда-то появляется серый стандартный фон(как в стандартном инсталяторе)

Odebay 20-10-2009 18:59 1248109

Как сделать TasksPage,на основе скрипта Prototype? :sorry:

Bambaso 23-10-2009 07:27 1250027

Здравствуйте. Подскажите пожалуйста как найти выход из этой ситуации. Я написал скрипт который что-то вроде патча, но вот в чём дело. В той программе которую я немного изменил есть текстовый файл m3u и мне нужно чтобы в нём добавилась дополнительная информация, этого сделать я не могу, но смог его просто заменить. Проблема в том что после удаления патча он сносит и этот файл а этого делать не нужно. Как сделать так чтобы он не удалялся или добавленая в него информация так же изчезала. Если кто может помоч за ранее спасибо.

Brocman 23-10-2009 14:10 1250333

Подскажите пожалуйста - как реализовать добавление данных в реестр, в зависимости от битности системы.

Допустим в x64 добавлялись одни ветки, в x86 другие.

ChiLiOne 23-10-2009 18:48 1250602

Цитата:

Цитата Brocman
Подскажите пожалуйста - как реализовать добавление данных в реестр, в зависимости от битности системы.
Допустим в x64 добавлялись одни ветки, в x86 другие. »

Присоединяюсь к вопросу только мне без разницы скольки битная система, самое главное чтобы в реестр добавлялось при установке

Serega 23-10-2009 19:27 1250624

Цитата:

Цитата Bambaso
есть текстовый файл m3u и мне нужно чтобы в нём добавилась дополнительная информация, этого сделать я не могу »

Почитайте Справку, там есть описание для строковых функций.
Цитата:

Цитата Bambaso
но смог его просто заменить. Проблема в том что после удаления патча он сносит и этот файл а этого делать не нужно. »

Просто нужно переименовать оригинальный файл, допустим добавить расширение *.bak, а при деинсталляции восстановить его обратно.

Цитата:

Цитата Brocman
Допустим в x64 добавлялись одни ветки, в x86 другие »

В каталоге Inno Setup, есть папка Examples, там есть скрипт 64BitTwoArch.iss, в нем показан пример, при одной архитектуре копируется один файл при другой, соответственно другой файл. То же самое и с реестром:
Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Registry]
Root: HKCU; Subkey: Software\My Program; Flags: uninsdeletekeyifempty
Root: HKCU; Subkey: Software\My Program\x64; Check: Is64BitInstallMode; Flags: uninsdeletekey
Root: HKCU; Subkey: Software\My Program\x32; Check: not Is64BitInstallMode; Flags: uninsdeletekey


DemonAk 23-10-2009 20:39 1250686

Как добавить в этот код еще парочку mp3, чтобы они проигрывались по порядку:
читать дальше »
const
BASS_ACTIVE_STOPPED = 0;
BASS_ACTIVE_PLAYING = 1;
BASS_ACTIVE_STALLED = 2;
BASS_ACTIVE_PAUSED = 3;
BASS_SAMPLE_LOOP = 4;

var
mp3Handle: HWND;
mp3Name: String;
cb:TCheckBox;

function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean;
external 'BASS_Init@files:BASS.dll stdcall delayload';

function BASS_StreamCreateFile(mem: BOOL; f: PAnsiChar; offset: DWORD; length: DWORD; flags: DWORD): DWORD;
external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';

function BASS_Start(): Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';

function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';

function BASS_ChannelIsActive(handle: DWORD): Integer;
external 'BASS_ChannelIsActive@files:BASS.dll stdcall delayload';

function BASS_ChannelPause(handle: DWORD): Boolean;
external 'BASS_ChannelPause@files:BASS.dll stdcall delayload';

function BASS_Stop(): Boolean;
external 'BASS_Stop@files:BASS.dll stdcall delayload';

function BASS_Pause(): Boolean;
external 'BASS_Pause@files:BASS.dll stdcall delayload';

function BASS_Free(): Boolean;
external 'BASS_Free@files:BASS.dll stdcall delayload';

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('Music.mp3');
mp3Name := ExpandConstant('{tmp}\Music.mp3');
BASS_Init(-1, 44100, 0, 0, 0);
mp3Handle := BASS_StreamCreateFile(FALSE, PAnsiChar(mp3Name), 0, 0, BASS_SAMPLE_LOOP);
BASS_Start();
BASS_ChannelPlay(mp3Handle, False);
Result := True;
end;

procedure cbmusic(Sender: TObject);
begin
if cb.checked = true then
begin
case BASS_ChannelIsActive(mp3Handle) of
BASS_ACTIVE_PAUSED:
begin
BASS_ChannelPlay(mp3Handle, False);
end;
BASS_ACTIVE_STOPPED:
begin
BASS_Init(-1, 44100, 0, 0, 0);
mp3Handle := BASS_StreamCreateFile(FALSE, PAnsiChar(mp3Name), 0, 0, BASS_SAMPLE_LOOP);
BASS_Start();
BASS_ChannelPlay(mp3Handle, False);
end;
end;
end;
if cb.checked = false then
BASS_ChannelPause(mp3Handle);
end;

procedure InitializeWizard();
begin
cb:=TCheckBox.Create(WizardForm);
cb.Parent:=WizardForm;
cb.Width:=ScaleX(220);
cb.Left:=ScaleY(10);
cb.Top:=ScaleY(330);
cb.CAPTION:='Проигрывание музыки';
cb.ONCLICK:=@cbmusic;
cb.checked:=true
end;

procedure DeinitializeSetup();
begin
BASS_Stop();
BASS_Free();
end;

Bambaso 24-10-2009 12:49 1251140

Здравствуйте. Весь день ломаю голову, но ничего толкового не вышло.
Как сделать бэкап оригинальному файлу получилось, но при удалении программы он всёравно удаляет и этот бэкап,
и при этом просто не хочет его востанавливать.
Пробовал другой вариант, но и при этом выходит так что файл остаётся но не оригинальный а подменённый.
Вот примеры и если знаете как исправить подскажите пожалуйста.
Пример 1
Source: {pf}\a\b\c\play.m3u; DestDir: {pf}\a\b\c; DestName:play.m3u.bak; Flags: ignoreversion external skipifsourcedoesntexist
Делает бэкап, но после удаления программы его не востанавливает а удаляет.
Пример 2
Source: {pf}\a\b\c\play.m3u; DestDir: {pf}\a\b\c; DestName:play.m3u.bak; Flags: ignoreversion external skipifsourcedoesntexist
Source: C:\play.m3u; DestDir: {pf}\a\b\c; Flags: uninsneveruninstall
Делает тоже самое, но вместо оригинального play.m3u остаётся подменённый.
Мне нужно чтобы при инсталле создавался бэкап оригиналу затем был подменён, а после деинсталла убивал подменённый и востанавливал оригинал.
Спасибо за ранее.

Zloy Pryanik 24-10-2009 12:52 1251144

А подскажите пожалуста как сменить положение кнопок "назад,вперед и отмена

comsun 25-10-2009 02:21 1251686

Помогите пож. отправить файл в папку назначения C:\D&S\User.
Пробовал {user} выдаёт ошибку при компилляции, {username} - компилится,вроде всё нормально,но при установке файла по этому адресу нет.

DemonAk 25-10-2009 02:26 1251690

Цитата:

Цитата comsun
Помогите пож. отправить файл в папку назначения C:\D&S\User.
Пробовал {user} выдаёт ошибку при компилляции, {username} - компилится,вроде всё нормально,но при установке файла по этому адресу нет. »

{%userprofile}

serg aka lain 25-10-2009 04:06 1251708

Цитата:

Цитата Zloy Pryanik
А подскажите пожалуста как сменить положение кнопок "назад,вперед и отмена »

можно так

Код:


[Setup]
AppName=My Program
AppVerName=My Program
CreateAppDir=False
Uninstallable=False
OutputDir=userdocs:My Program.

[code]

procedure InitializeWizard();
begin
  with WizardForm do
  begin
    BackButton.Left := ScaleX(1);
    BackButton.Width := ClientWidth div 3;
    NextButton.Left := BackButton.Left + BackButton.Width;
    NextButton.Width := BackButton.Width;
    CancelButton.Left := NextButton.Left + NextButton.Width;
    CancelButton.Width := BackButton.Width;
  end;
end;


или так

Код:


[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
OutputDir=userdocs:My Program.

[Files]
; Test copy
Source: "{sys}\*.dll"; DestDir: "{tmp}"; Flags: external;

[code]

procedure InitializeWizard();
begin
  with WizardForm do
  begin
    BackButton.Top := BackButton.Top - ScaleY(12);
    BackButton.Height := BackButton.Height + ScaleY(21);
    NextButton.Top := NextButton.Top - ScaleY(12);
    NextButton.Height := NextButton.Height + ScaleY(21);
    CancelButton.Top := CancelButton.Top - ScaleY(12);
    CancelButton.Height := CancelButton.Height + ScaleY(21);
  end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpWelcome then
  with WizardForm do
  begin
    NextButton.Left := ScaleX(1);
    NextButton.Width := ClientWidth div 2;
    CancelButton.Left := NextButton.Left + NextButton.Width;
    CancelButton.Width := NextButton.Width;
  end;

  if (CurPageID > wpWelcome) and (CurPageID < wpInstalling) then
  with WizardForm do
  begin
    BackButton.Left := ScaleX(1);
    BackButton.Width := ClientWidth div 3;
    NextButton.Left := BackButton.Left + BackButton.Width;
    NextButton.Width := BackButton.Width;
    CancelButton.Left := NextButton.Left + NextButton.Width;
    CancelButton.Width := BackButton.Width;
  end;

  if CurPageID = wpInstalling then
  with WizardForm do
  begin
    CancelButton.Left := ClientWidth div 3 * 2;
    CancelButton.Width := ClientWidth div 3;
  end;

  if CurPageID = wpFinished then
  with WizardForm do
  begin
    NextButton.Left := ClientWidth div 3 * 2 - NextButton.Width;
    NextButton.Width := ClientWidth div 3;
  end;
end;


Serega 25-10-2009 12:10 1251837

Цитата:

Цитата Bambaso
Как сделать бэкап оригинальному файлу »

Программа
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion


Патч
Код:

[Setup]
AppName=My Program patch
AppVerName=My Program v 1.5 patch
DefaultDirName={pf}\My Program
DirExistsWarning=no
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Beforeinstall: Backup; Flags: ignoreversion

[Code]
procedure Backup;
begin
  // переименовываем оригинальный файл
  RenameFile(ExpandConstant('{app}\MyProg.exe'), ExpandConstant('{app}\MyProg.bak'));
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usPostUninstall then
  // восстанавливаем оригинальный файл
  RenameFile(ExpandConstant('{app}\MyProg.bak'), ExpandConstant('{app}\MyProg.exe'));
end;


т.е. в примере 'Патч', показал как переименовывать оригинальный файл и при деинсталляции восстановить его обратно.

comsun 25-10-2009 12:56 1251876

Цитата:

Цитата DemonAk
Цитата comsun:
Помогите пож. отправить файл в папку назначения C:\D&S\User.
Пробовал {user} выдаёт ошибку при компилляции, {username} - компилится,вроде всё нормально,но при установке файла по этому адресу нет.
»
{%userprofile} »

DemonAk, Спасибо!!!! То что надо!

comsun 25-10-2009 22:32 1252356

затруднения с шифрованием(
применил тему от ISSkin и шифрование от InnoSetup Scripting v.5.1
соединил InnoSetuo Script Joiner, получилось так -
читать дальше »


Цитата:

; --- Source: ISSkinSetup.iss ------------------------------------------------------------
; -- Example1.iss --
; Demonstrates copying 3 files and creating an icon.

; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES!


[Files]
; Add the ISSkin DLL used for skinning Inno Setup installations.
Source: {app}\ISSkin.dll; DestDir: {app}; Flags: dontcopy

; Add the Visual Style resource contains resources used for skinning,
; you can also use Microsoft Visual Styles (*.msstyles) resources.
Source: {tmp}\Office2007.cjstyles; DestDir: {tmp}; Flags: dontcopy

; The following code block is used to load the ISS, pass in
; an empty string ('') as the second parameter to LoadSkin to use
; the Blue color scheme, this is the default color scheme for
; Office2007.cjstyles.
[code]
// Importing LoadSkin API from ISSkin.DLL
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';

// Importing UnloadSkin API from ISSkin.DLL
procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';

// Importing ShowWindow Windows API from User32.DLL
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';

function InitializeSetup1(): Boolean;
begin
ExtractTemporaryFile('Office2007.cjstyles');
LoadSkin(ExpandConstant('{tmp}\Office2007.cjstyles'), '');
Result := True;
end;

procedure DeinitializeSetup1();
begin
// Hide Window before unloading skin so user does not get
// a glimse of an unskinned window before it is closed.
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
UnloadSkin();
end;

[Setup]


; --- Source: Шифр_1_Код.iss ------------------------------------------------------------


[Setup]
Encryption=Yes
;MD5 сумма, подсчитанная ниже
Password=449f2546d2a51b20442c5025c43f126f

[code]
procedure InitializeWizard2();
var
MD5: String;
begin
//Подсчитываем сумму слагаемых в MD5 калькуляторе, на примере сумма MD5 "````" равна 449f2546d2a51b20442c5025c43f126f
MD5 := GetMD5OfString(''+'`'+'``'+'`')
WizardForm.PasswordEdit.Visible:= False;
//Вставляем то, что складываем
WizardForm.PasswordEdit.Text:= MD5;
end;

//Как обычно нажимаем страницу с пассом
procedure CurPageChanged2(CurPageID: Integer);
begin
if CurPageID = wpPassword then
WizardForm.NextButton.OnClick(WizardForm.NextButton);
end;

[Setup]


; --- Dispatching code ------------------------------------------------------------

[code]

function InitializeSetup(): Boolean;
begin
Result := InitializeSetup1(); if not Result then exit;
end;

procedure DeinitializeSetup();
begin
DeinitializeSetup1();
end;

procedure InitializeWizard();
begin
InitializeWizard2();
end;

procedure CurPageChanged(CurPageID: Integer);
begin
CurPageChanged2(CurPageID);
end;



Компиллируется нормально,при попытке запустить установку,Windows пишет, ошибка

По отдельности работают - или скин или шифрование.
вместе нет,помогите разобраться,плз

Habetdin 25-10-2009 22:43 1252365

comsun,
Цитата:

Цитата comsun
соединил InnoSetuo Script Joiner, получилось так »

А "разделенные" можете опубликовать? :)

comsun 25-10-2009 22:59 1252384

Цитата:

Цитата Habetdin
А "разделенные" можете опубликовать? »

конечно)

до соединения Joiner'oм отдельноработающие части вот

скин -
читать дальше »
Цитата:

; -- Example1.iss --
; Demonstrates copying 3 files and creating an icon.

; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES!


[Files]
; Add the ISSkin DLL used for skinning Inno Setup installations.
Source:{app}\ISSkin.dll; DestDir: {app}; Flags: dontcopy

; Add the Visual Style resource contains resources used for skinning,
; you can also use Microsoft Visual Styles (*.msstyles) resources.
Source: Styles\Office2007.cjstyles; DestDir: {tmp}; Flags: dontcopy


; The following code block is used to load the ISS, pass in
; NormalAqua.ini as the second parameter to LoadSkin to use
; the Aqua color scheme instead of the default Blue color
; scheme.
[code]
// Importing LoadSkin API from ISSkin.DLL
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';

// Importing UnloadSkin API from ISSkin.DLL
procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';

// Importing ShowWindow Windows API from User32.DLL
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('Office2007.cjstyles');
LoadSkin(ExpandConstant('{tmp}\Office2007.cjstyles'), 'NormalAqua.ini');
Result := True;
end;

procedure DeinitializeSetup();
begin
// Hide Window before unloading skin so user does not get
// a glimse of an unskinned window before it is closed.
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
UnloadSkin();
end;

и
шифр -
читать дальше »
Цитата:


[Setup]
Encryption=yes
Password=Cnn0

[code]
var
str: string;
MyArray: array of Char;

function InitializeSetup(): Boolean;
begin
MyArray := ['A','B','C','D','E','F','G','H','I','J','K','L','M',
'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
'a','b','c','d','e','f','g','h','i','j','k','l','m',
'n','o','p','q','r','s','t','u','v','w','x','y','z',
'1','2','3','4','5','6','7','8','9','0',
'!','@','#','$','%','^','&','*','(',')'];
Result:= True;
end;

function CheckPassword(Password: String): Boolean;
begin
WizardForm.PasswordEdit.Text:= 'The password is protected!';
WizardForm.PasswordPage.Free;
Result:= True;
end;

procedure InitializeWizard();
begin
WizardForm.PasswordEdit.Visible:= False;
WizardForm.PasswordEdit.Text:= 'The password is very protected!';
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
str:= GetDateTimeString('ss', #0, #0);
Result:= True;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpPassword then
begin
WizardForm.PasswordEdit.Text:= MyArray[2]+MyArray[39]+MyArray[39] +
IntToStr(StrToInt(str) - StrToInt(GetDateTimeString('ss', #0, #0)));
WizardForm.NextButton.OnClick(WizardForm.NextButton);
end;
end;


это тот код,который вставлял в самом конце скрипта самой программы.

Habetdin 25-10-2009 23:06 1252390

comsun, проверьте, может быть и правильно :biggrin:
читать дальше »
Код:

[Setup]
Encryption=yes
Password=Cnn0

[Files]
; Add the ISSkin DLL used for skinning Inno Setup installations.
Source: {app}\ISSkin.dll; DestDir: {app}; Flags: dontcopy

; Add the Visual Style resource contains resources used for skinning,
; you can also use Microsoft Visual Styles (*.msstyles) resources.
Source: Styles\Office2007.cjstyles; DestDir: {tmp}; Flags: dontcopy

[code]
// Importing LoadSkin API from ISSkin.DLL
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';

// Importing UnloadSkin API from ISSkin.DLL
procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';

// Importing ShowWindow Windows API from User32.DLL
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('Office2007.cjstyles');
LoadSkin(ExpandConstant('{tmp}\Office2007.cjstyles'), 'NormalAqua.ini');
Result := True;
end;

procedure DeinitializeSetup();
begin
// Hide Window before unloading skin so user does not get
// a glimse of an unskinned window before it is closed.
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
UnloadSkin();
end;
var
str: string;
MyArray: array of Char;

function InitializeSetup(): Boolean;
begin
MyArray := ['A','B','C','D','E','F','G','H','I','J','K','L','M',
'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
'a','b','c','d','e','f','g','h','i','j','k','l','m',
'n','o','p','q','r','s','t','u','v','w','x','y','z',
'1','2','3','4','5','6','7','8','9','0',
'!','@','#','$','%','^','&','*','(',')'];
Result:= True;
end;

function CheckPassword(Password: String): Boolean;
begin
WizardForm.PasswordEdit.Text:= 'The password is protected!';
WizardForm.PasswordPage.Free;
Result:= True;
end;

procedure InitializeWizard();
begin
WizardForm.PasswordEdit.Visible:= False;
WizardForm.PasswordEdit.Text:= 'The password is very protected!';
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
str:= GetDateTimeString('ss', #0, #0);
Result:= True;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpPassword then
begin
WizardForm.PasswordEdit.Text:= MyArray[2]+MyArray[39]+MyArray[39] +
IntToStr(StrToInt(str) - StrToInt(GetDateTimeString('ss', #0, #0)));
WizardForm.NextButton.OnClick(WizardForm.NextButton);
end;
end;


comsun 25-10-2009 23:13 1252395

Habetdin, СПАСИБО!!!

Цитата:

Цитата Habetdin
comsun, проверьте, может быть и правильно
читать дальше » »

один секунд)
минут через 10
будет известно - программа большая)

не идёт
ошибка та же((((((

Habetdin 25-10-2009 23:47 1252419

Цитата:

Цитата comsun
ошибка та же(((((( »

Весь скрипт можно увидеть? :)
P.S.: прикрепил примеры скриптов с шифрованием, у меня 2й вариант без ошибок работает, остальные так же, как у вас ошибку выдают

comsun 26-10-2009 01:15 1252455

Habetdin, Спасибо за помощь!
Цитата:

Цитата Habetdin
P.S.: прикрепил примеры скриптов с шифрованием, у меня 2й вариант без ошибок работает, остальные так же, как у вас ошибку выдают »

проверил ваш [2].iss - ошибка та же(((((((((
Цитата:

Цитата Habetdin
Весь скрипт можно увидеть? »

не проблема,но дело не в нём - раздельно друг от друга коды работают,а вместе - не хотят.

завтра (или уже сегодня)) проверю остальные

EN130 26-10-2009 14:05 1252805

chm справка в шапке глючная :( , замените плыз на нормальную :)

Serega 26-10-2009 15:26 1252876

EN130, подробней объясните, что не так?

Цитата:

Цитата comsun
ошибка та же(((((( »

Надо так:
Код:

[Files]
; Add the ISSkin DLL used for skinning Inno Setup installations.
Source: {app}\ISSkin.dll; DestDir: {app}; Flags: dontcopy noencryption


comsun 26-10-2009 20:32 1253169

Serega, СПА-СИ-БО!!!!!!!!!

Цитата:

Цитата Serega
Цитата comsun:
ошибка та же(((((( »
Надо так:
Код:
[Files]
; Add the ISSkin DLL used for skinning Inno Setup installations.
Source: {app}\ISSkin.dll; DestDir: {app}; Flags: dontcopy noencryption »

Йессс!!!!!
Работает!


Serega,ещё раз Спасибо!!!
Ваши ответы всегда точны и верны!!!

EN130 26-10-2009 22:07 1253242

Serega, http://s41.radikal.ru/i092/0910/4a/d0cb82a15b90.jpg И весь документ такой. Тоесть все страницы пустые, а меню вродебы работает.

Bambaso 27-10-2009 09:32 1253474

Здравствуйте форумчане.
Хорошо что есть такие места как это и что обстановка дружеская.
Выражаю большое спасибо мастер-пилоту "Серёга" за помощ.
По поводу создания справки:
читать дальше »

Microsoft HTML Help Workshop 4.74.8702.0 + rus - вещица очень полезная и всегда пригодится:


Microsoft HTML Help является стандартной справочной системой для платформы Windows. Авторы могут использовать HTML Help для создания справочных файлов в
своих программах или для создания содержимого веб-сайта. Разработчики могут использовать программный интерфейс приложения (API) HTML Help для программирования
приложения или подключения контексно-зависимой справочной системы. В качестве информационной системы технология HTML Help пригодна для широкого диапазона
приложений, включая большие руководства, интерактивные книги и электронные газеты, которые также удобны, как и справочные системы программного обеспечения.

Возможности HTML Help имеют некоторые преимущества перед стандартным гипертекстом - это способность снабжения справочной системы комбинированной таблицей
содержания и перечнем указателей, а также использование ключевых слов для дополнительной гиперссылочной производительности. Компилятор HTML Help, являющийся
частью HTML Help Workshop, делает возможным сжатие гипертекста, графики и других файлов в сравнительно небольшой компилированный справочный файл (.chm),
который может затем распространяться с программным обеспечением или загружаться из сети.

HTML Help состоит из неавтономной программы просмотра справки (Help Viewer), связанных с ней справочных компонентов и авторских систем по разработке справки
от корпорации Microsoft. Программа просмотра справки использует лежащие в ее основе компоненты Microsoft Internet Explorer для отображения справочного
содержимого. Программа просмотра поддерживает гипертекст, ActiveX, Java, языки скриптов (JScript и Microsoft Visual Basic Scripting Edition), а также сетевые
форматы изображений (файлы .jpeg, .gif и .png). Авторская система по разработке справки HTML Help Workshop предоставляет легкую в использовании систему
для создания и управления справочными проектами и относящимися к ним файлами.

Операционная система: Windows 2000/XP/Vista/Server 2003
Язык интерфейса: Английский плюс русификация
Лицензия: бесплатно
инструкция по работе с программой прилагается.


Скачать

A1EXXX 27-10-2009 12:44 1253628

Bambaso, :off:

Serega 27-10-2009 21:16 1254148

Цитата:

Цитата EN130
все страницы пустые, а меню »

Ещё раз скачал Справку, всё нормально отображается. Попробуйте перекачать, возможно вы скачали с ошибкой.

EN130 27-10-2009 22:19 1254223

Serega, После обновления винды, все заработало. Как думаеш, что могло быть не так?

Serega 27-10-2009 22:35 1254243

Цитата:

Цитата EN130
После обновления винды, все заработало. »

Я думаю, что возможно какой-то глюк системы и просто надо было перезагрузиться...

3Nitro 28-10-2009 10:34 1254525

Здравствуйте,
Помогите сделать такую вещь, или скажите реально ли это вообще.

Можно ли сделать слайдшоу в окне Мастера (когда идет установка) и применить к нему этот эффект
http://restools.hanzify.org/attachme...8413124011.gif
http://restools.hanzify.org/article.asp?id=80 (прямая ссылка )?
Ну или хотя-бы статическую картинку вместо слайдшоу но с данной библиотекой/плагином.

Долго уже просидел, ничего не выходит( Очень прошу помочь

И еще, как сделать чтобы при выборе компонентов один из 2 флажков всегда оставался включенным? (на примере - есть 2 флажка, можно включить либо 2 вместе либо по-одиночке, но оба выключить нельзя. При выключении последнего включается другой )

Заранее огромное спасибо)

lmiol 30-10-2009 05:42 1256219

здарвствуйте - все поиски зашли в тупик проблему решить не выходит, подскажите может кто знает

Код:

Name: "{userdesktop}\Quake Live"; Filename: {pf}\QuakeLiveFirefoxPrism\Firefox\firefox.exe; Parameters:  -app application.ini -override "{userappdata}\WebApps\quake.live@prism.app\override.ini" -webapp quake.live@prism.app; WorkingDir: {pf}\QuakeLiveFirefoxPrism\Profiles\Clear\extensions\refractor@developer.mozilla.org\prism; Tasks: desktopicon; IconFilename: "{userappdata}\id Software\quakelive\home\baseq3\quakelive.dll"; IconIndex: 0; Components: browser
где красным - там стоят кавычки и не комплится инстал, а в ярлыке они стоять должны иначе будет эррор

подскажите как сделать так чтобы кавычки в ярлыке в этом месте прописывались...

Habetdin 30-10-2009 10:46 1256396

lmiol, а так?
Код:

Name: "{userdesktop}\Quake Live"; Filename: {pf}\QuakeLiveFirefoxPrism\Firefox\firefox.exe; Parameters:  -app application.ini -override ""{userappdata}\WebApps\quake.live@prism.app\override.ini"" -webapp quake.live@prism.app; WorkingDir: {pf}\QuakeLiveFirefoxPrism\Profiles\Clear\extensions\refractor@developer.mozilla.org\prism; Tasks: desktopicon; IconFilename: "{userappdata}\id Software\quakelive\home\baseq3\quakelive.dll"; IconIndex: 0; Components: browser

lmiol 30-10-2009 11:18 1256436

таже ошибка!!!

Habetdin 30-10-2009 11:23 1256445

lmiol, а вот так?
Код:

Name: "{userdesktop}\Quake Live"; Filename: {pf}\QuakeLiveFirefoxPrism\Firefox\firefox.exe; Parameters:  "-app application.ini -override ""{userappdata}\WebApps\quake.live@prism.app\override.ini"" -webapp quake.live@prism.app"; WorkingDir: {pf}\QuakeLiveFirefoxPrism\Profiles\Clear\extensions\refractor@developer.mozilla.org\prism; Tasks: desktopicon; IconFilename: "{userappdata}\id Software\quakelive\home\baseq3\quakelive.dll"; IconIndex: 0; Components: browser

Wiper 30-10-2009 15:14 1256677

Господа,если кто то делал RePack Call of Duty 4: Modern Warfare-хочу сделать без мульта(вырезать мульт полностью)подскажите какие файлы нужно удалить,а то запарился уже.Заранее спасибо.

grinda 30-10-2009 16:57 1256779

Скажите плиз как тут в верхнем правом углу картинку вставить http://i060.radikal.ru/0910/b1/651cfc1020df.jpg

lmiol 30-10-2009 19:19 1256894

Habetdin Нет не работает!!!

A1EXXX 30-10-2009 21:47 1256987

grinda, оно?
читать дальше »

[Setup]
WizardSmallImageFile=C:\UpperImage.bmp

[code]
var
PageNameLabel1: TLabel;

procedure InitializeWizard();
begin
PageNameLabel1 := TLabel.Create(WizardForm);
with PageNameLabel1 do
begin
Left := ScaleX(13);
Top := ScaleY(9);
Width := ScaleX(300);
Height := ScaleY(14);
AutoSize := False;
WordWrap := True;
Font.Name := 'Tahoma'
Font.Style := [fsBold];
ShowAccelChar := False;
Transparent := True;
Parent := WizardForm.MainPanel;
end;

with WizardForm do
begin
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
with MainPanel do
begin
with WizardSmallBitmapImage do
begin
Left := ScaleX(0);
Top := ScaleY(0);
Width := Mainpanel.Width;
Height := MainPanel.Height;
end;
end;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
PageNameLabel1.Caption := WizardForm.PageNameLabel.Caption;
end;

Serega 31-10-2009 01:03 1257102

Цитата:

Цитата lmiol
Нет не работает!!! »

Что не работает? Всё должно нормально компилироваться.
Внимательно читаем Справку, раздел 'Параметры в секциях'.

lmiol 31-10-2009 02:44 1257128

да точно... сорри второй вариант работает

Serega 31-10-2009 02:51 1257130

Цитата:

Цитата lmiol
а вот так тоже нельзя »

Должно быть так:
Код:

"-app application.ini -override ""{userappdata}\WebApps\quake.live@prism.app\override.ini"" -webapp quake.live@prism.app"

A1EXXX 31-10-2009 13:15 1257353

Serega, помните, я как-то писал, что начиная со страницы выбора папки установки у меня пропадает кликабельность картинки в левом нижнем углу?
читать дальше »
PHP код:

[Files]
SourceC:logo.bmpDestDir: {tmp}; Flagsdontcopy

[code]
var
LogoImage:TBitmapImage;
LogoLabelTLabel;
LogoPanelTPanel;

procedure LogoOnClick(SenderTObject);
var 
ReturnCodeInteger;
begin
ShellExec
('open''http://сайт.ру'''''SW_SHOWNORMALewNoWaitReturnCode)
end;

procedure InitializeWizard();
begin
ExtractTemporaryFile
('logo.bmp');
LogoPanel := TPanel.Create(WizardForm);
with LogoPanel do
begin
Parent 
:= WizardForm;
Left := ScaleX(5);
Top := ScaleY(320);
Width := ScaleX(165);
Height := ScaleY(35);
BevelOuter := bvNone;
end;

LogoImage := TBitmapImage.Create(WizardForm);
with LogoImage do
begin
Parent 
:= LogoPanel;
Left := ScaleX(0);
Top := ScaleY(0);
AutoSize:=true;
ReplaceColor:=clFuchsia;
ReplaceWithColor:=clBtnFace;
Bitmap.LoadFromFile(ExpandConstant('{tmp}\logo.bmp'));
end;

LogoLabel := TLabel.Create(WizardForm);
with LogoLabel do
begin
Parent 
:= LogoPanel;
Width := LogoPanel.Width;
Height := LogoPanel.Height;
Transparent:=True;
Cursor := crHand;
OnClick:=@LogoOnClick;
end;
end


Так вот я нашёл тот зловещий код, который это делал...
читать дальше »
PHP код:

[code]
procedure CurPageChanged(CurPageIDInteger);
begin
  
if CurPageID wpSelectDir then WizardForm.Font.Name:= 'Tahoma';
  if 
CurPageID wpSelectProgramGroup then WizardForm.Font.Name:= 'Tahoma';
  if 
CurPageID wpSelectTasks then WizardForm.Font.Name:= 'Tahoma';
  if 
CurPageID wpReady then WizardForm.Font.Name:= 'Tahoma';
  if 
CurPageID wpInstalling then WizardForm.Font.Name:= 'Tahoma';
  if 
CurPageID wpFinished then WizardForm.Font.Name:= 'Tahoma';
end


Я таким образом менял шрифт на всех страницах, кроме Welcome, InfoBefore & InfoAfter страниц (т.к. если делать замену шрифта по всему инсталлу, он меняется и в прикрученных RTF-документах)
Почему, собственно, этот скрипт такое творит, и главное - как это можно исправить??? И хотелось бы узнать, можно ли этот код записать как-то иначе через InitializeWizard???

Serega 01-11-2009 17:00 1258390

Цитата:

Цитата A1EXXX
можно ли этот код записать как-то иначе через InitializeWizard??? »

Процедура InitializeWizard, задаёт всё глобально, т.е. применимо ко всему инсталлятору. Попробуйте менять шрифт таким образом:
Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
var
  NewFont, OldFont: string;
 
procedure InitializeWizard();
begin
  NewFont:= 'Tahoma';
  OldFont:= WizardForm.Font.Name;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if (CurPageID = wpWelcome) or (CurPageID = wpInfoBefore) or (CurPageID = wpInfoAfter) then
    WizardForm.Font.Name:= OldFont
  else WizardForm.Font.Name:= NewFont;
end;


A1EXXX 01-11-2009 17:42 1258443

Serega, спасибо, кажись ОНО! :up

Tukash 01-11-2009 21:22 1258665

добрый вечер люди добрые хочу сделать вот так: надюесь автор не обидеться на меня но уш очень зацепило))) давно хотел такой!
а именно: такой размер окна инсталлятора, черный фон... заранее спасибо
и еще помогите, хочу усовершенствовать этот скрипт но особо я в этом не варю))) , может у кого-то есть готовый? хочу именно: широкое окно, красивый шрифт, и что-бы шла распаковка фри арк архивов!

Код:

var
  pnl: TPanel;

///////////////////////WelcomePage//////////////////////////////////////
procedure WelcomePage;
begin
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.WelcomeLabel1.AutoSize;
      SetBounds(WizardForm.WelcomeLabel1.Left,WizardForm.WelcomeLabel1.Top,
                WizardForm.WelcomeLabel1.Width,WizardForm.WelcomeLabel1.Height);
      WordWrap:= WizardForm.WelcomeLabel1.WordWrap;
      Caption:= WizardForm.WelcomeLabel1.Caption;
      with Font do
        begin
          Color:= WizardForm.WelcomeLabel1.Font.Color;
          Style:= WizardForm.WelcomeLabel1.Font.Style;
          Name:= WizardForm.WelcomeLabel1.Font.Name;
          Size:= WizardForm.WelcomeLabel1.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.WelcomeLabel2.AutoSize;
      SetBounds(WizardForm.WelcomeLabel2.Left,WizardForm.WelcomeLabel2.Top,
                WizardForm.WelcomeLabel2.Width,WizardForm.WelcomeLabel2.Height);
      WordWrap:= WizardForm.WelcomeLabel2.WordWrap;
      Caption:= WizardForm.WelcomeLabel2.Caption;
      with Font do
        begin
          Color:= WizardForm.WelcomeLabel2.Font.Color;
          Style:= WizardForm.WelcomeLabel2.Font.Style;
          Name:= WizardForm.WelcomeLabel2.Font.Name;
          Size:= WizardForm.WelcomeLabel2.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////SelectDirPage//////////////////////////////////////
procedure SelectDirPage;
begin
  with WizardForm do
    begin
      with DirEdit do
        begin
          Left:= 40;
          Top:= 137;
          Parent:= pnl;
        end;
      with DirBrowseButton do
        begin
          Left:= WizardForm.DirEdit.Left + WizardForm.DirEdit.Width + 10;
          Top:= WizardForm.DirEdit.Top - 1;
          Parent:= pnl;
        end;
      with SelectDirBitmapImage do
        begin
          Left:= WizardForm.DirEdit.Left;
          Top:= WizardForm.DirEdit.Top - 62;
          Stretch:= True;
          Parent:= pnl;
        end;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.SelectDirBrowseLabel.AutoSize;
      SetBounds(WizardForm.DirEdit.Left,WizardForm.DirEdit.Top - 30,
                WizardForm.SelectDirBrowseLabel.Width, WizardForm.SelectDirBrowseLabel.Height);
      WordWrap:= WizardForm.SelectDirBrowseLabel.WordWrap;
      Caption:= WizardForm.SelectDirBrowseLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.SelectDirBrowseLabel.Font.Color;
          Style:= WizardForm.SelectDirBrowseLabel.Font.Style;
          Name:= WizardForm.SelectDirBrowseLabel.Font.Name;
          Size:= WizardForm.SelectDirBrowseLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.SelectDirLabel.AutoSize;
      SetBounds(WizardForm.SelectDirBitmapImage.Left + 50,WizardForm.SelectDirBitmapImage.Top + 10,
                WizardForm.SelectDirLabel.Width,WizardForm.SelectDirLabel.Height);
      WordWrap:= WizardForm.SelectDirLabel.WordWrap;
      Caption:= WizardForm.SelectDirLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.SelectDirLabel.Font.Color;
          Style:= WizardForm.SelectDirLabel.Font.Style;
          Name:= WizardForm.SelectDirLabel.Font.Name;
          Size:= WizardForm.SelectDirLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.DiskSpaceLabel.AutoSize;
      SetBounds(WizardForm.DirEdit.Left,WizardForm.Bevel.Top - 25,
                WizardForm.DiskSpaceLabel.Width,WizardForm.DiskSpaceLabel.Height);
      WordWrap:= WizardForm.DiskSpaceLabel.WordWrap;
      Caption:= WizardForm.DiskSpaceLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.DiskSpaceLabel.Font.Color;
          Style:= WizardForm.DiskSpaceLabel.Font.Style;
          Name:= WizardForm.DiskSpaceLabel.Font.Name;
          Size:= WizardForm.DiskSpaceLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////ReadyPage//////////////////////////////////////
procedure ReadyPage;
var
  ready_str: string;
begin
  ready_str:= WizardForm.ReadyMemo.Text;
  with TLabel.Create(pnl) do
    begin
      SetBounds(45,115,WizardForm.ReadyMemo.Width, WizardForm.ReadyMemo.Height);
      Caption:= ready_str;
      with Font do
        begin
          Color:= WizardForm.ReadyLabel.Font.Color;
          Style:= WizardForm.ReadyLabel.Font.Style;
          Name:= WizardForm.ReadyLabel.Font.Name;
          Size:= WizardForm.ReadyLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TBevel.Create(WizardForm) do
    begin
      SetBounds(40,110, WizardForm.ReadyMemo.Width, WizardForm.ReadyMemo.Height);
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.ReadyLabel.AutoSize;
      SetBounds(40,70, WizardForm.ReadyLabel.Width, WizardForm.ReadyLabel.Height);
      WordWrap:= WizardForm.ReadyLabel.WordWrap;
      Caption:= WizardForm.ReadyLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.ReadyLabel.Font.Color;
          Style:= WizardForm.ReadyLabel.Font.Style;
          Name:= WizardForm.ReadyLabel.Font.Name;
          Size:= WizardForm.ReadyLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////InstallingPage//////////////////////////////////////
procedure InstallingPage;
begin
  with WizardForm.ProgressGauge do
    begin
      Left:= 40;
      Top:= 115;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.FilenameLabel.AutoSize;
      SetBounds(WizardForm.ProgressGauge.Left,WizardForm.ProgressGauge.Top-20,
                WizardForm.FilenameLabel.Width,WizardForm.FilenameLabel.Height);
      WordWrap:= WizardForm.FilenameLabel.WordWrap;
      Caption:= WizardForm.FilenameLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.FilenameLabel.Font.Color;
          Style:= WizardForm.FilenameLabel.Font.Style;
          Name:= WizardForm.FilenameLabel.Font.Name;
          Size:= WizardForm.FilenameLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.StatusLabel.AutoSize;
      SetBounds(WizardForm.StatusLabel.Left,WizardForm.StatusLabel.Top,
                WizardForm.StatusLabel.Width,WizardForm.StatusLabel.Height);
      WordWrap:= WizardForm.StatusLabel.WordWrap;
      Caption:= WizardForm.StatusLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.StatusLabel.Font.Color;
          Style:= WizardForm.StatusLabel.Font.Style;
          Name:= WizardForm.StatusLabel.Font.Name;
          Size:= WizardForm.StatusLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////FinishedPage//////////////////////////////////////
var
  CheckBox: array of TNewCheckBox;

procedure CheckBoxClick(Sender: TObject);
begin
  if TNewCheckBox(Sender).Checked then
    WizardForm.RunList.Checked[TNewCheckBox(Sender).Tag]:= True
  else WizardForm.RunList.Checked[TNewCheckBox(Sender).Tag]:= False;
end;

procedure LabelClick(Sender: TObject);
begin
  if CheckBox[TLabel(Sender).Tag].Checked then
    begin
      WizardForm.RunList.Checked[TLabel(Sender).Tag]:= False;
      CheckBox[TLabel(Sender).Tag].Checked:= False;
    end
  else
    begin
      WizardForm.RunList.Checked[TLabel(Sender).Tag]:= True;
      CheckBox[TLabel(Sender).Tag].Checked:= True;
    end;
end;

procedure HideRunList(Control: TWinControl);
var
  i, t: Integer;
  str: string;
begin
  if WizardForm.RunList.Items.Count > 0 then
    begin
      WizardForm.RunList.Hide;
      SetArrayLength(CheckBox, SizeOf(WizardForm.RunList.Items.Count));
      for i:= 0 to WizardForm.RunList.Items.Count-1 do
        begin
          CheckBox[i]:= TNewCheckBox.Create(Control);
          with CheckBox[i] do
            begin
              SetBounds(ScaleX(WizardForm.RunList.Left+2),ScaleY(WizardForm.RunList.Top+2+t),14,14);
              Tag:= i;
              Checked:= WizardForm.RunList.Checked[i];
              Caption:= WizardForm.RunList.Items.Strings[i];
              OnClick:= @CheckBoxClick;
              Color:= clWhite;
              Parent:= Control;
            end;
          str:= WizardForm.RunList.Items.Strings[i];
          with TLabel.Create(WizardForm) do
            begin
              SetBounds(ScaleX(WizardForm.RunList.Left+20),ScaleY(WizardForm.RunList.Top+2+t),
                        WizardForm.RunList.Width,14);
              Caption:= str;
              Tag:= i;
              OnClick:= @LabelClick;
              Transparent:= True;
              Parent:= Control;
            end;
          t:= t + 20;
        end;
    end;
end;

procedure FinishedPage;
begin
  HideRunList(pnl);
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.FinishedHeadingLabel.AutoSize;
      SetBounds(WizardForm.FinishedHeadingLabel.Left,WizardForm.FinishedHeadingLabel.Top,
                WizardForm.FinishedHeadingLabel.Width,WizardForm.FinishedHeadingLabel.Height);
      WordWrap:= WizardForm.FinishedHeadingLabel.WordWrap;
      Caption:= WizardForm.FinishedHeadingLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.FinishedHeadingLabel.Font.Color;
          Style:= WizardForm.FinishedHeadingLabel.Font.Style;
          Name:= WizardForm.FinishedHeadingLabel.Font.Name;
          Size:= WizardForm.FinishedHeadingLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.FinishedLabel.AutoSize;
      SetBounds(WizardForm.FinishedLabel.Left,WizardForm.FinishedLabel.Top,
                WizardForm.FinishedLabel.Width,WizardForm.FinishedLabel.Height);
      WordWrap:= WizardForm.FinishedLabel.WordWrap;
      Caption:= WizardForm.FinishedLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.FinishedLabel.Font.Color;
          Style:= WizardForm.FinishedLabel.Font.Style;
          Name:= WizardForm.FinishedLabel.Font.Name;
          Size:= WizardForm.FinishedLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

procedure CurPageChanged(CurPageID: Integer);
begin
  pnl:= TPanel.Create(WizardForm);
  with pnl do
    begin
      Align:= alClient;
      Parent:= WizardForm;
    end;
  with WizardForm do
    begin
      with WizardBitmapImage do
        begin
          Align:= alClient;
          Stretch:= True;
          Parent:= pnl;
        end;
      NextButton.Parent:= pnl;
      CancelButton.Parent:= pnl;
      BackButton.Parent:= pnl;
      Bevel.Parent:= pnl;
      pnl.Repaint;
    end;

  if (CurPageID > wpWelcome) and (CurPageID < wpFinished) then
    begin
      WizardForm.Bevel1.Parent:= pnl;
      with TLabel.Create(pnl) do
        begin
          AutoSize:= WizardForm.PageNameLabel.AutoSize;
          SetBounds(WizardForm.PageNameLabel.Left,WizardForm.PageNameLabel.Top,
                    WizardForm.PageNameLabel.Width,WizardForm.PageNameLabel.Height);
          Caption:= WizardForm.PageNameLabel.Caption;
          with Font do
            begin
              Color:= WizardForm.PageNameLabel.Font.Color;
              Style:= WizardForm.PageNameLabel.Font.Style;
              Name:= WizardForm.PageNameLabel.Font.Name;
              Size:= WizardForm.PageNameLabel.Font.Size;
            end;
          Transparent:= True;
          Parent:= pnl;
        end;
      with TLabel.Create(pnl) do
        begin
          AutoSize:= WizardForm.PageDescriptionLabel.AutoSize;
          SetBounds(WizardForm.PageDescriptionLabel.Left,WizardForm.PageDescriptionLabel.Top,
                    WizardForm.PageDescriptionLabel.Width,WizardForm.PageDescriptionLabel.Height);
          Caption:= WizardForm.PageDescriptionLabel.Caption;
          with Font do
            begin
              Color:= WizardForm.PageDescriptionLabel.Font.Color;
              Style:= WizardForm.PageDescriptionLabel.Font.Style;
              Name:= WizardForm.PageDescriptionLabel.Font.Name;
              Size:= WizardForm.PageDescriptionLabel.Font.Size;
            end;
          Transparent:= True;
          Parent:= pnl;
        end;
      pnl.Repaint;
    end;

  if CurPageID = wpWelcome then WelcomePage;
  if CurPageID = wpSelectDir then SelectDirPage;
  if CurPageID = wpReady then ReadyPage;
  if CurPageID = wpInstalling then InstallingPage;
  if CurPageID = wpFinished then FinishedPage;
end;


A1EXXX 02-11-2009 01:08 1258858

Цитата:

Цитата Serega
Попробуйте менять шрифт таким образом »

Соединил оба скрипта (картинка + шрифт) - эффект тот же, что и с моим... :(

postalok 02-11-2009 13:05 1259191

Всем привет! Помогите в создании интсаллятора!
Делаю инсталл с выбором компонентов

Source: "D:\Install\clean\hl.exe"; DestDir: "{app}";
Source: "D:\Install\clean\*"; DestDir: "{app}"; Components: cs
Source: "D:\Install\rus\*"; DestDir: "{app}"; Components: rus
Source: "D:\Install\new model\*"; DestDir: "{app}"; Components: steamodels

Но у меня не видит подпапки в заданых путях ? Как сделать ?
И как можно добавлять информацию в реестр с помощью интсалла ?

A1EXXX 02-11-2009 13:14 1259199

postalok, допиши в каждую строку с папками такие флаги: Flags: ignoreversion recursesubdirs createallsubdirs
В реестр через секцию [Registry], например
читать дальше »

[Registry]
Root: HKLM; Subkey: "SOFTWARE\Activision"; ValueType: String; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: "SOFTWARE\Activision\Call of Duty 4"; ValueType: String; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Activision\Call of Duty 4"; ValueName: "InstallPath"; ValueType: String; ValueData: "{app}";
Root: HKLM; Subkey: "SOFTWARE\Activision\Call of Duty 4"; ValueName: "InstallDrive"; ValueType: String; ValueData: "{src}";

evgenik123456 02-11-2009 15:29 1259328

Help проблема вот в чём! мне надо внести инфу в рееестр например строковый параметр MainDir имеет значение "f:\\Program Files (x86)\\Intense Language Office\\" а если я программу буду ставить в другой путь как сделать чтобы значение менялось в зависимости от того куда устанавливалась прога
:o


Например:
устанавливаю в C:\Program Files\Intense Language Office следовательно в строковый параметр должен иметь значение C:\\Program Files\\Intense Language Office\\ тоесть "f:\\Program Files (x86)\\Intense Language Office\\"
будет уже неправильно и прога незапустится :cry:

Habetdin 02-11-2009 15:57 1259358

evgenik123456, вносите в реестр переменную {app}, пример:
Код:

[Registry]
Root: HKLM; Subkey: Software\MyProgram; ValueName: MainDir; ValueType: string; ValueData: {app}; Flags: uninsdeletekey


Serega 02-11-2009 19:03 1259575

Цитата:

Цитата A1EXXX
эффект тот же, что и с моим... »

Происходит это из-за того, что при смене шрифтов происходит изменение ширины Label'a,
Добавьте в свойства Label'a - AutoSize:= False;

ffa 02-11-2009 19:55 1259610

всем привет. можно ли сделать что бы распаковка архивов в FreeArc_Example-Ext происходила перед распаковкой основных файлов инстоллятора?

mariolast 03-11-2009 00:48 1259920

Есть ли пример скрипта, как можно из текстового файла, найдя некоторую строку, удалить ее?

Serega 03-11-2009 01:25 1259940

Цитата:

Цитата mariolast
Есть ли пример скрипта, как можно из текстового файла, найдя некоторую строку, удалить ее? »

Я как-то писал пример, где в текстовом файле ищется строка и в зависимости от выбора дополнительной задачи, дописывается значение в строке.
Скрипт
Код:

; Cкрипт создан 27.04.2009 15:00:00

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
ShowLanguageDialog=auto
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[CustomMessages]
Text=Базы

[Tasks]
Name: English; Description: английская; GroupDescription: {cm:Text}; Flags: exclusive
Name: French; Description: французская; GroupDescription: {cm:Text}; Flags: exclusive unchecked
Name: German; Description: германская; GroupDescription: {cm:Text}; Flags: exclusive unchecked


[Files]
Source: config.cfg; DestDir: {app}; Flags: ignoreversion; AfterInstall: ReplaceLine;

[Code]
function TasksSelected: string;
begin
  if IsTaskSelected('English') then Result:= '51' else
  if IsTaskSelected('French') then Result:= '52' else Result:= '53';
end;

procedure ReplaceLine;
var
  S: TArrayOfString;
  F: string;
  i: Integer;
begin
  F := ExpandConstant('{app}\config.cfg');
  if not FileExists(F) then Exit;
  LoadStringsFromFile(F, S);
  for i:= 0 to GetArrayLength(S) - 1 do
    begin
      if Pos('Param =', S[i]) > 0 then
      S[i]:= 'Param =' + TasksSelected;  // при английском таске - 51, при французском - 52, и т.д.
    end;
  SaveStringsToFile(F, S, False);
end;


config.cfg
Код:

-$A8
-$B-
-$C+
-$D+
-$E-
-$F-
-$G+
-$H+
-$I+
-$J-
-$K-
-$L+
-$M-
-$N+
-$O+
-$P+
-$Q-
-$R-
-$S-
-$T-
-$U-
-$V+
-$W-
-$X+
-$YD
-$Z1
-Param =
-cg
-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
-H+
-W+
-M
-$M16384,1048576
-K$00400000
-LE"c:\program files\borland\delphi7\Projects\Bpl"
-LN"c:\program files\borland\delphi7\Projects\Bpl"
-w-UNSAFE_TYPE
-w-UNSAFE_CODE
-w-UNSAFE_CAST


Tukash 03-11-2009 17:25 1260547

добрый вечер, это секция Code хочу сделать что-бы был шрифт(вернуть его на ВСЕ страницы) и возможность его менять, надеюсь на вашу помощь заранее спасибо!
Код:

var
  pnl: TPanel;

///////////////////////WelcomePage//////////////////////////////////////
procedure WelcomePage;
begin
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.WelcomeLabel1.AutoSize;
      SetBounds(WizardForm.WelcomeLabel1.Left,WizardForm.WelcomeLabel1.Top,
                WizardForm.WelcomeLabel1.Width,WizardForm.WelcomeLabel1.Height);
      WordWrap:= WizardForm.WelcomeLabel1.WordWrap;
      Caption:= WizardForm.WelcomeLabel1.Caption;
      with Font do
        begin
          Color:= WizardForm.WelcomeLabel1.Font.Color;
          Style:= WizardForm.WelcomeLabel1.Font.Style;
          Name:= WizardForm.WelcomeLabel1.Font.Name;
          Size:= WizardForm.WelcomeLabel1.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.WelcomeLabel2.AutoSize;
      SetBounds(WizardForm.WelcomeLabel2.Left,WizardForm.WelcomeLabel2.Top,
                WizardForm.WelcomeLabel2.Width,WizardForm.WelcomeLabel2.Height);
      WordWrap:= WizardForm.WelcomeLabel2.WordWrap;
      Caption:= WizardForm.WelcomeLabel2.Caption;
      with Font do
        begin
          Color:= WizardForm.WelcomeLabel2.Font.Color;
          Style:= WizardForm.WelcomeLabel2.Font.Style;
          Name:= WizardForm.WelcomeLabel2.Font.Name;
          Size:= WizardForm.WelcomeLabel2.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////SelectDirPage//////////////////////////////////////
procedure SelectDirPage;
begin
  with WizardForm do
    begin
      with DirEdit do
        begin
          Left:= 40;
          Top:= 137;
          Parent:= pnl;
        end;
      with DirBrowseButton do
        begin
          Left:= WizardForm.DirEdit.Left + WizardForm.DirEdit.Width + 10;
          Top:= WizardForm.DirEdit.Top - 1;
          Parent:= pnl;
        end;
      with SelectDirBitmapImage do
        begin
          Left:= WizardForm.DirEdit.Left;
          Top:= WizardForm.DirEdit.Top - 62;
          Stretch:= True;
          Parent:= pnl;
        end;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.SelectDirBrowseLabel.AutoSize;
      SetBounds(WizardForm.DirEdit.Left,WizardForm.DirEdit.Top - 30,
                WizardForm.SelectDirBrowseLabel.Width, WizardForm.SelectDirBrowseLabel.Height);
      WordWrap:= WizardForm.SelectDirBrowseLabel.WordWrap;
      Caption:= WizardForm.SelectDirBrowseLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.SelectDirBrowseLabel.Font.Color;
          Style:= WizardForm.SelectDirBrowseLabel.Font.Style;
          Name:= WizardForm.SelectDirBrowseLabel.Font.Name;
          Size:= WizardForm.SelectDirBrowseLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.SelectDirLabel.AutoSize;
      SetBounds(WizardForm.SelectDirBitmapImage.Left + 50,WizardForm.SelectDirBitmapImage.Top + 10,
                WizardForm.SelectDirLabel.Width,WizardForm.SelectDirLabel.Height);
      WordWrap:= WizardForm.SelectDirLabel.WordWrap;
      Caption:= WizardForm.SelectDirLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.SelectDirLabel.Font.Color;
          Style:= WizardForm.SelectDirLabel.Font.Style;
          Name:= WizardForm.SelectDirLabel.Font.Name;
          Size:= WizardForm.SelectDirLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.DiskSpaceLabel.AutoSize;
      SetBounds(WizardForm.DirEdit.Left,WizardForm.Bevel.Top - 25,
                WizardForm.DiskSpaceLabel.Width,WizardForm.DiskSpaceLabel.Height);
      WordWrap:= WizardForm.DiskSpaceLabel.WordWrap;
      Caption:= WizardForm.DiskSpaceLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.DiskSpaceLabel.Font.Color;
          Style:= WizardForm.DiskSpaceLabel.Font.Style;
          Name:= WizardForm.DiskSpaceLabel.Font.Name;
          Size:= WizardForm.DiskSpaceLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////ReadyPage//////////////////////////////////////
procedure ReadyPage;
var
  ready_str: string;
begin
  ready_str:= WizardForm.ReadyMemo.Text;
  with TLabel.Create(pnl) do
    begin
      SetBounds(45,115,WizardForm.ReadyMemo.Width, WizardForm.ReadyMemo.Height);
      Caption:= ready_str;
      with Font do
        begin
          Color:= WizardForm.ReadyLabel.Font.Color;
          Style:= WizardForm.ReadyLabel.Font.Style;
          Name:= WizardForm.ReadyLabel.Font.Name;
          Size:= WizardForm.ReadyLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TBevel.Create(WizardForm) do
    begin
      SetBounds(40,110, WizardForm.ReadyMemo.Width, WizardForm.ReadyMemo.Height);
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.ReadyLabel.AutoSize;
      SetBounds(40,70, WizardForm.ReadyLabel.Width, WizardForm.ReadyLabel.Height);
      WordWrap:= WizardForm.ReadyLabel.WordWrap;
      Caption:= WizardForm.ReadyLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.ReadyLabel.Font.Color;
          Style:= WizardForm.ReadyLabel.Font.Style;
          Name:= WizardForm.ReadyLabel.Font.Name;
          Size:= WizardForm.ReadyLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////InstallingPage//////////////////////////////////////
procedure InstallingPage;
begin
  with WizardForm.ProgressGauge do
    begin
      Left:= 40;
      Top:= 115;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.FilenameLabel.AutoSize;
      SetBounds(WizardForm.ProgressGauge.Left,WizardForm.ProgressGauge.Top-20,
                WizardForm.FilenameLabel.Width,WizardForm.FilenameLabel.Height);
      WordWrap:= WizardForm.FilenameLabel.WordWrap;
      Caption:= WizardForm.FilenameLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.FilenameLabel.Font.Color;
          Style:= WizardForm.FilenameLabel.Font.Style;
          Name:= WizardForm.FilenameLabel.Font.Name;
          Size:= WizardForm.FilenameLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.StatusLabel.AutoSize;
      SetBounds(WizardForm.StatusLabel.Left,WizardForm.StatusLabel.Top,
                WizardForm.StatusLabel.Width,WizardForm.StatusLabel.Height);
      WordWrap:= WizardForm.StatusLabel.WordWrap;
      Caption:= WizardForm.StatusLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.StatusLabel.Font.Color;
          Style:= WizardForm.StatusLabel.Font.Style;
          Name:= WizardForm.StatusLabel.Font.Name;
          Size:= WizardForm.StatusLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////FinishedPage//////////////////////////////////////
var
  CheckBox: array of TNewCheckBox;

procedure CheckBoxClick(Sender: TObject);
begin
  if TNewCheckBox(Sender).Checked then
    WizardForm.RunList.Checked[TNewCheckBox(Sender).Tag]:= True
  else WizardForm.RunList.Checked[TNewCheckBox(Sender).Tag]:= False;
end;

procedure LabelClick(Sender: TObject);
begin
  if CheckBox[TLabel(Sender).Tag].Checked then
    begin
      WizardForm.RunList.Checked[TLabel(Sender).Tag]:= False;
      CheckBox[TLabel(Sender).Tag].Checked:= False;
    end
  else
    begin
      WizardForm.RunList.Checked[TLabel(Sender).Tag]:= True;
      CheckBox[TLabel(Sender).Tag].Checked:= True;
    end;
end;

procedure HideRunList(Control: TWinControl);
var
  i, t: Integer;
  str: string;
begin
  if WizardForm.RunList.Items.Count > 0 then
    begin
      WizardForm.RunList.Hide;
      SetArrayLength(CheckBox, SizeOf(WizardForm.RunList.Items.Count));
      for i:= 0 to WizardForm.RunList.Items.Count-1 do
        begin
          CheckBox[i]:= TNewCheckBox.Create(Control);
          with CheckBox[i] do
            begin
              SetBounds(ScaleX(WizardForm.RunList.Left+2),ScaleY(WizardForm.RunList.Top+2+t),14,14);
              Tag:= i;
              Checked:= WizardForm.RunList.Checked[i];
              Caption:= WizardForm.RunList.Items.Strings[i];
              OnClick:= @CheckBoxClick;
              Color:= clWhite;
              Parent:= Control;
            end;
          str:= WizardForm.RunList.Items.Strings[i];
          with TLabel.Create(WizardForm) do
            begin
              SetBounds(ScaleX(WizardForm.RunList.Left+20),ScaleY(WizardForm.RunList.Top+2+t),
                        WizardForm.RunList.Width,14);
              Caption:= str;
              Tag:= i;
              OnClick:= @LabelClick;
              Transparent:= True;
              Parent:= Control;
            end;
          t:= t + 20;
        end;
    end;
end;

procedure FinishedPage;
begin
  HideRunList(pnl);
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.FinishedHeadingLabel.AutoSize;
      SetBounds(WizardForm.FinishedHeadingLabel.Left,WizardForm.FinishedHeadingLabel.Top,
                WizardForm.FinishedHeadingLabel.Width,WizardForm.FinishedHeadingLabel.Height);
      WordWrap:= WizardForm.FinishedHeadingLabel.WordWrap;
      Caption:= WizardForm.FinishedHeadingLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.FinishedHeadingLabel.Font.Color;
          Style:= WizardForm.FinishedHeadingLabel.Font.Style;
          Name:= WizardForm.FinishedHeadingLabel.Font.Name;
          Size:= WizardForm.FinishedHeadingLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.FinishedLabel.AutoSize;
      SetBounds(WizardForm.FinishedLabel.Left,WizardForm.FinishedLabel.Top,
                WizardForm.FinishedLabel.Width,WizardForm.FinishedLabel.Height);
      WordWrap:= WizardForm.FinishedLabel.WordWrap;
      Caption:= WizardForm.FinishedLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.FinishedLabel.Font.Color;
          Style:= WizardForm.FinishedLabel.Font.Style;
          Name:= WizardForm.FinishedLabel.Font.Name;
          Size:= WizardForm.FinishedLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

procedure CurPageChanged(CurPageID: Integer);
begin
  pnl:= TPanel.Create(WizardForm);
  with pnl do
    begin
      Align:= alClient;
      Parent:= WizardForm;
    end;
  with WizardForm do
    begin
      with WizardBitmapImage do
        begin
          Align:= alClient;
          Stretch:= True;
          Parent:= pnl;
        end;
      NextButton.Parent:= pnl;
      CancelButton.Parent:= pnl;
      BackButton.Parent:= pnl;
      Bevel.Parent:= pnl;
      pnl.Repaint;
    end;

  if (CurPageID > wpWelcome) and (CurPageID < wpFinished) then
    begin
      WizardForm.Bevel1.Parent:= pnl;
      with TLabel.Create(pnl) do
        begin
          AutoSize:= WizardForm.PageNameLabel.AutoSize;
          SetBounds(WizardForm.PageNameLabel.Left,WizardForm.PageNameLabel.Top,
                    WizardForm.PageNameLabel.Width,WizardForm.PageNameLabel.Height);
          Caption:= WizardForm.PageNameLabel.Caption;
          with Font do
            begin
              Color:= WizardForm.PageNameLabel.Font.Color;
              Style:= WizardForm.PageNameLabel.Font.Style;
              Name:= WizardForm.PageNameLabel.Font.Name;
              Size:= WizardForm.PageNameLabel.Font.Size;
            end;
          Transparent:= True;
          Parent:= pnl;
        end;
      with TLabel.Create(pnl) do
        begin
          AutoSize:= WizardForm.PageDescriptionLabel.AutoSize;
          SetBounds(WizardForm.PageDescriptionLabel.Left,WizardForm.PageDescriptionLabel.Top,
                    WizardForm.PageDescriptionLabel.Width,WizardForm.PageDescriptionLabel.Height);
          Caption:= WizardForm.PageDescriptionLabel.Caption;
          with Font do
            begin
              Color:= WizardForm.PageDescriptionLabel.Font.Color;
              Style:= WizardForm.PageDescriptionLabel.Font.Style;
              Name:= WizardForm.PageDescriptionLabel.Font.Name;
              Size:= WizardForm.PageDescriptionLabel.Font.Size;
            end;
          Transparent:= True;
          Parent:= pnl;
        end;
      pnl.Repaint;
    end;

  if CurPageID = wpWelcome then WelcomePage;
  if CurPageID = wpSelectDir then SelectDirPage;
  if CurPageID = wpReady then ReadyPage;
  if CurPageID = wpInstalling then InstallingPage;
  if CurPageID = wpFinished then FinishedPage;
end;


Serega 03-11-2009 21:49 1260811

Цитата:

Цитата Tukash
хочу сделать что-бы был шрифт(вернуть его на ВСЕ страницы) и возможность его менять »

Ну так просто не используйте данный код и всё будет по умолчанию, а поменять шрифт можно так:
Код:

  WizardForm.Font.Name:= 'имя шрифта';

kampaster 04-11-2009 04:50 1261040

Доброе утро.... вот зарегистрировался на этом замечательном сайте, делаю репаки - довольно не плохо, вот подумал перекодировать музыку с помощью oggdec.exe..... я знаю как конвертировать музыку из ogg в wav и знаю что писать в батнике и в Inno Setup чтоб это красиво во время установки конвертировалось ну вобщем работало.... но проблема в том что я немогу понять как мне конвертнуть из wav в ogg....
Калбасился калбасился в батнике.... Помогите пожалуйста добрые люди=)
Вот консольный oggdec.exe (команды)

BlackSelf 04-11-2009 07:45 1261078

kampaster, к inno это вообще не относится. А oggdec, к твоему сведению, кодирует только ogg в wav.

kampaster 04-11-2009 09:04 1261101

BlackSelf спасибо за ответ....
Цитата:

А oggdec, к твоему сведению, кодирует только ogg в wav.
Жалко, а я так надеялся....
Цитата:

kampaster, к inno это вообще не относится.
Вобщето относится..... Яже с inno работаю.. поэтому мне это нужно.... Но всёравно спсибо!=)

Tukash 04-11-2009 10:17 1261170

Serega
да не))) я хочу и скрипт и шрифт!

Serega 04-11-2009 15:44 1261447

Цитата:

Цитата Tukash
я хочу и скрипт и шрифт! »

Извините я не телепат и не могу прочитать ваши мысли, что всё таки вы хотите сделать...
К сведению, у каждого TLabel есть Font.Name, т.е. - TLabel.Font.Name:= 'имя'

A1EXXX 04-11-2009 18:27 1261603

Inno Setup Compiler [03.11.09] (English) - новая версия компилятора от ResTools

МИШАНЧИК 05-11-2009 13:50 1262304

Подскажите пожалуйста!
Есть папка Gamedate и нужно сделать чтоб она находилась в дистрибутиве, но копировалась в {app} только когда включен чекбокс на дополнительных задачах.
Как правильно это оформить?

A1EXXX 05-11-2009 14:18 1262324

МИШАНЧИК,
читать дальше »

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

[Tasks]
Name: "gamedata"; Description: "{cm:xxx}";

[CustomMessages]
Russian.xxx=Установить Gamedata?

[Files]
Source: D:\Gamedata\*; DestDir: "{app}"; Tasks: gamedata; Flags: ignoreversion recursesubdirs createallsubdirs

МИШАНЧИК 05-11-2009 15:42 1262405

A1EXXX, большое спасибо!
А ещё вопрос, можно ли как-то сделать чтоб при наведении курсора на этот чекбокс появлялась всплывающая надпись с описанием?

A1EXXX 05-11-2009 17:06 1262475

МИШАНЧИК, можно! Немного повозился и вот, что получилось :)
читать дальше »

Цитата:

; Первоисточник - скрипт ComponentsDescriptions by Victor Dobrov
; изменён и переделан под TaskPage by A1EXXX

[Setup]
AppName=Tasks Descriptions
AppVerName=Tasks Descriptions 1.0
DefaultDirName=Tasks Descriptions
OutputDir=.

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

[Files]
; скачать библиотеку descctrl.dll (6 кб) можно здесь: http://victor-dobrov.narod.ru/inno_descctrl.7z
Source: descctrl.dll; Flags: dontcopy;
Source: D:\Gamedata\*; DestDir: "{app}"; Tasks: gamedata; Flags: ignoreversion recursesubdirs createallsubdirs

[CustomMessages]
Russian.xxx=Установка компонента Gamedata

[Tasks]
Name: "gamedata"; Description: "{cm:xxx}";

[code]
var Point: TPoint; CompDesc: TEdit; MessageForm: TForm; MessagePanel: TPanel; MessageLabel: TLabel; n, frame: integer;

function EnableDesc(TasksListHandle, DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';
function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';
procedure GetCursorPos(var Point: TPoint); external 'GetCursorPos@user32 stdcall delayload';
function SetWindowPos(hWnd, hWndInsertAfter, X, Y, cx, cy, wFlags: Longint):Boolean; external 'SetWindowPos@user32.dll stdcall';

Procedure DrawIcon(Form: TWinControl; File: String; nIcon, Left, Top, Size, BColor: Integer); var Panel: TPanel; Rect: TRect; Begin
Panel:= TPanel.Create(Form); Panel.SetBounds(Left, Top, Size, Size); Panel.Parent:= Form
with TBitmapImage.Create(Panel) do begin Parent:= Panel; with Bitmap do begin
Width:= Size; Height:= Size; Rect.Right:= Size; Rect.Bottom:= Size; Canvas.Brush.Color:= BColor; Canvas.FillRect(Rect); end; end;
End;

Procedure ResizeLabel(Obj: TLabel; Text: String; MaxWidth: Integer); var k, w, h: integer; Begin {размер формы подгоняется под текст}
Obj.AutoSize:= true; Obj.WordWrap:= false; Obj.Caption:= Text; {авторазмер}
w:= Obj.Width; h:= Obj.Height; n:= (w + frame*2)/MaxWidth + 1
Repeat
Obj.Width:= w/n + frame*2*n + k
Obj.Height:= h * n
Obj.WordWrap:= true; k:= k + 4
Until Obj.Height/h = n
End;

Procedure ShowHint(String: string; AIndex: Integer; Center: Bool); Begin {размер формы подгоняется под текст, если AIndex = 0, значок не рисуется}
frame:= 10; if AIndex <> 0 then String:= ' '+ String;
GetCursorPos(Point); MessageLabel.Left:= frame; MessageLabel.Top:= frame
ResizeLabel(MessageLabel, String, WizardForm.ClientWidth)
if Center then n:= WizardForm.Left + WizardForm.Width/2 - (MessageLabel.Width + frame*2 -2)/2 else n:= Point.X + 12
MessageForm.SetBounds(n, Point.Y + 12, MessageLabel.Width + frame*2 -2, MessageLabel.Height + frame*2 -2)
MessageForm.Show; SetWindowPos(MessageForm.Handle, -1, 0, 0, 0, 0, 3);
End;

Procedure DeinitializeSetup();
Begin
disabledesc();
End;

Procedure CurStepChanged(CurStep: TSetupStep);
Begin
if CurStep = ssInstall then disabledesc();
End;

Procedure CurPageChanged(CurPageID: Integer);
Begin
if CurPageID = wpSelectTasks then enableDesc(WizardForm.TasksList.Handle,CompDesc.Handle,
'Демонстрационный режим (описание компонента)'); // текст описания
End;

Procedure ObjectOnClick(Sender: TObject);
Begin
Case TObject(Sender) of {событие объекта}
CompDesc:
if CompDesc.Text > '' then ShowHint(CompDesc.Text, 0, true) else MessageForm.Hide;
MessageForm:
WizardForm.BringToFront;
end;
End;

Procedure InitializeWizard;
Begin
CompDesc:= TEdit.Create(WizardForm)
CompDesc.Parent:= WizardForm
CompDesc.Visible:= false
CompDesc.OnChange:= @ObjectOnClick
MessageForm:= CreateCustomForm;
MessageForm.BorderStyle:= bsNone
MessageForm.OnActivate:= @ObjectOnClick
MessagePanel:= TPanel.Create(MessageForm)
MessagePanel.BevelInner:= bvLowered;
MessagePanel.Align:= alClient;
MessagePanel.Color:= $E1FFFF; // цвет панели
MessagePanel.Parent:= MessageForm
MessageLabel:= TLabel.Create(MessagePanel)
MessageLabel.Transparent:= true
MessageLabel.Font.Name:= 'Tahoma' // шрифт описания
MessageLabel.Font.Size:= WizardForm.Font.Size
MessageLabel.Parent:= MessagePanel
End;

МИШАНЧИК 06-11-2009 07:35 1262937

A1EXXX, большое Вам спасибо! Буду пробовать.

A1EXXX 06-11-2009 15:07 1263218

Подобный вопрос звучал уже неоднократно, но ответа на него так и не увидел... В общем, можно ли прикрутить запрос 2-го диска к скрипту Булата FreeArc_Example? Запаковка arc'ов в инсталл не подходит. Или может можно записать в [Files] архив, который будет находиться на другом носителе (хотя бы для SFX, но чтобы по окончании распаковки основных, выводился запрос для следующего архива....)
А ещё лучше бы сделать так (если возможно): допустим, на 1-ом диске находится 4 архива. Распаковавшись, инсталлятор делает паузу и выводит сообщение (окошко) - мол, хотите продолжить, вставьте диск 2, и по нажатии "Да" инсталл не замечая подвоха распаковывает ещё один архив (вот только как сообщить ему заранее, что архивов 5, чтобы прогресс-бар не заполнился до конца :(), а если "Нет" - завершение установки... А может есть решение куда проще? Жду ваших предложений :)

Serega 06-11-2009 21:16 1263478

Цитата:

Цитата A1EXXX
В общем, можно ли прикрутить запрос 2-го диска к скрипту Булата FreeArc_Example? »

Можно, но об этом спросите автора...
P.S.
Обычно я игнорирую вопросы на данную тему... извините, но просто уже устал разбираться в чужих дебрях...

S.E.K.T.O.R. 06-11-2009 22:19 1263535

Уже задавал этот вопрос но ответа не увидел. Мож кто-нибудь догадался как изменить сообщение "Недостаточно места на диске" или вовсе отключить его, а вместо него заставить инсалл выдавать другое

S.E.K.T.O.R. 06-11-2009 23:15 1263570

Цитата:

Цитата A1EXXX
1) Как сделать, чтобы когда игру уже установлена, при запуске инсталла выскакивало такое вот окошко? »

По-моему никто не ответил, а делается это
так
Код:

[Setup]
AppId={{B9B31282-6F8D-4D74-A8F2-24AE59608A9D}
AppName=My Program
AppVerName=My Program 1.5
AppPublisher=My Company, Inc.
AppPublisherURL=http://www.example.com/
AppSupportURL=http://www.example.com/
AppUpdatesURL=http://www.example.com/
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

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

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

[Files]
Source: "C:\Program Files\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

[Icons]
Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"
Name: "{group}\{cm:UninstallProgram,My Program}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\My Program"; Filename: "{app}\MyProg.exe"; Tasks: desktopicon

[Run]
Filename: "{app}\MyProg.exe"; Description: "{cm:LaunchProgram,My Program}"; Flags: nowait postinstall skipifsilent

[Registry]
Root: HKLM; Subkey: Software\My Program; ValueType: string; ValueName: InstallPath; ValueData: {app}; Flags: uninsdeletekey

[_Code]
function InitializeSetup: Boolean;
var
  path: string;
  res: Integer;
begin
  Result:= True;
  if RegValueExists(HKLM, 'Software\My Program', 'InstallPath') then
    if RegQueryStringValue(HKLM, 'Software\My Program', 'InstallPath', path) then
      if FileExists(path + '\MyProg.exe') then
  if MsgBox('Запустить My Program?', mbConfirmation, MB_YESNO) = IDYES then
    begin
      Exec(path + '\MyProg.exe', '', '', SW_SHOW, ewWaitUntilTerminated, res);
      Result:= False;
    end
  else Result:= False;
end;


S.E.K.T.O.R. 07-11-2009 00:12 1263602

Serega, Вы не знаете как инсталл Сталкера определяет версию Windows XP т.е. Professional или Home Edition, а в висте розрядность (32 или 64)

serg aka lain 07-11-2009 00:22 1263606

Цитата:

Цитата S.E.K.T.O.R.
Professional или Home Edition »

Присмотритесь к Help'у, к функции GetWindowsVersionEx(Version);
Код:


  // Disallow installation on Home edition of Windows
  if Version.SuiteMask and VER_SUITE_PERSONAL <> 0 then
  begin
    SuppressibleMsgBox('This program cannot be installed on a Home edition of Windows.',
      mbCriticalError, MB_OK, MB_OK);
    Result := False;
    Exit;
  end;

  // On Windows XP, check for SP2
  if Version.NTPlatform and
    (Version.Major = 5) and
    (Version.Minor = 1) and
    (Version.ServicePackMajor < 2) then
  begin
    SuppressibleMsgBox('When running on Windows XP, Service Pack 2 is required.',
      mbCriticalError, MB_OK, MB_OK);
    Result := False;
    Exit;
  end;


S.E.K.T.O.R. 07-11-2009 01:33 1263648

Я хочу чтобы в проверке сист. требований кроме " Microsoft Windows XP Service Pack 2" еще было "Microsoft Windows XP Professional Edition Service Pack 2, а в Висте "Windows Vista Ultimate, 32 bits, Service Pack 1"

ADremLIN 07-11-2009 03:12 1263686

Inno Setup Form Designer (ISFD).

У кого-нибудь остались старые версии сабжа? 2.0.5, 2.0.6с, 2.0.7?
У меня есть 2.0.4.

А вот 2.0.8 почему-то падает с ошибкой: Runtime error 216 at 00404036 (У меня Win7) :(

И было бы совсем неплохо какой нибудь русский хелп к нему...

Спасибо.

[Добавлено]

Мануалы к ISFD похоже "умерли" вместе с официальным сайтом программы.
Прогуглил все что мог - ничего не нашел :(
В веб-архиве упоминалось даже о видео-мануале:
(2006/08/20 Added Video-Tutorials for ISFD http://web.archive.org/web/200610230...isfd.kaju74.de)

Может у кого завалялось что-нибудь по теме?

serg aka lain 07-11-2009 18:09 1264052

Цитата:

Цитата S.E.K.T.O.R.
хотите сказать, что за это отвечают данные по адресу
HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions\ProductSuite
т.е. если ProductSuite - Personal значит это Home, если значения нет Professional »

Не совсем так (были в сети не так давно статьи, как из Хомяка сделать Профессионал)
Но, тем не менее, примерно так.

Lancer2404 08-11-2009 20:53 1265071

Скажите как сделать чтобы после установки выдавалось сообщение?

serg aka lain 08-11-2009 21:59 1265137

Цитата:

Цитата Lancer2404
Скажите как сделать чтобы после установки выдавалось сообщение? »

Код:

[Setup]
AppName=My Program
AppVerName=My Program
CreateAppDir=False
Uninstallable=False
OutputDir=userdocs:My Program.

[code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssDone then
    MsgBox('Сообщение', mbInformation, MB_OK);
end;


Lancer2404 09-11-2009 18:37 1265918

спасибо

Habetdin 10-11-2009 13:34 1266605

Проблема решена :)
читать дальше »
Решение:
Код:

[code]
procedure CurPageChanged(CurPageID: Integer);
begin
        if CurPageID = wpInstalling then
                begin
                if FileExists(ExpandConstant('{src}\File.ext')) then
                FileCopy(ExpandConstant('{src}\File.ext'), ExpandConstant('{app}\File.ext'), False);
        end;
end;


Serega 10-11-2009 18:36 1266829

Habetdin, дело в том, что есть только:
Код:

function FileCopy(const ExistingFile, NewFile: string; const FailIfExists: Boolean): Boolean;
Цитата:

Цитата из Справки
Копирует ExistingFile в NewFile, сохраняя временные отметки и атрибуты файла.
Если FailIfExists=True и NewFile уже существует, файл не копируется, если FailIfExists=False, существующий файл заменится на NewFile.
Если копирование успешно, возвращает True, иначе False.


lmiol 11-11-2009 11:56 1267365

у меня трабла , при выборе всех компонентов ставятся все ярлыки, а мне нужно чтобы при выборе компонентов main и browser ставился только ярлык Name: "{userdesktop}\Quake Live", а ставятся оба Name: "{userdesktop}\Quake Live" и Name: "{userdesktop}\QuakeLive.com"
Как нужно выставить компоненты чтобы такого небыло или что нужно сделать?

Код:

[Types]
Name: "full"; Description: "Все компоненты";
Name: "custom"; Description: "Выбрать компоненты"; Flags: iscustom

[Components]
Name: "main"; Description: "Главные файлы Quake Live"; Types: full custom; Flags: fixed
Name: "browser"; Description: "Firefox и дополнение Prism"; Types: full custom
Name: "manual"; Description: "Руководство и Награды"; Types: full custom
Name: "anti"; Description: "Античит PunkBuster"; Types: full custom

[Messages]
BeveledLabel=Copyright © Mio Dark Project

[Tasks]
Name: "desktopicon"; Description: "Создать ярлык на Рабочем Столе"; GroupDescription: "{cm:AdditionalIcons}"

[Files]
Source: "uninstall.ico"; Components: main; DestDir: "{userappdata}\id Software\uninstall"; Flags: ignoreversion
Source: "usercur\*"; Components: main; DestDir: "{userappdata}\id Software"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Source: "usercur2\*"; Components: manual; DestDir: "{userappdata}\id Software"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Source: "usercur3\*"; Components: browser; DestDir: "{userappdata}\"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Source: "programfiles\*"; Components: browser; DestDir: "{pf}\"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Source: "pk3\*"; Components: main; DestDir: "{userappdata}\id Software"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension nocompression
Source: "pbsvc.exe" ;Components: anti;DestDir: "{tmp}"; Flags: ignoreversion

[Icons]
Name: "{group}\QuakeLive.com"; Filename: "http://www.quakelive.com"; IconFilename: "{userappdata}\id Software\quakelive\home\baseq3\quakelive.dll"; IconIndex: 0; Components: main
Name: "{group}\Руководство к игре"; Filename: "{userappdata}\id Software\quakelive\home\manual\manual.htm"; IconFilename: "{userappdata}\id Software\quakelive\home\links\qlm.ico"
Name: "{group}\Демки"; Filename: "{userappdata}\id Software\quakelive\home\baseq3\demos"; IconFilename: "{sys}\SHELL32.dll";  IconIndex: 126
Name: "{group}\Скриншоты"; Filename: "{userappdata}\id Software\quakelive\home\baseq3\screenshots"; IconFilename: "{sys}\SHELL32.dll";  IconIndex: 127
Name: "{group}\Удалить игру"; Filename: "{uninstallexe}"; IconFilename: "{userappdata}\id Software\uninstall\uninstall.ico"
Name: "{userdesktop}\QuakeLive.com"; Filename: "http://www.quakelive.com"; Tasks: desktopicon; IconFilename: "{userappdata}\id Software\quakelive\home\baseq3\quakelive.dll"; IconIndex: 0; Components: main
Name: "{userdesktop}\Quake Live"; Filename: {pf}\FirefoxPrismQuakeLive\Firefox\Quake Live.exe; WorkingDir: {pf}\FirefoxPrismQuakeLive\Profiles\Clear\extensions\refractor@developer.mozilla.org\prism; Tasks: desktopicon; IconFilename: "{pf}\FirefoxPrismQuakeLive\Firefox\Quake Live.exe"; IconIndex: 0; Components: browser
Name: "{userdesktop}\Руководство к игре"; Filename: "{userappdata}\id Software\quakelive\home\manual\manual.htm"; IconFilename: "{userappdata}\id Software\quakelive\home\links\qlm.ico"

[Run]
Filename: {tmp}\pbsvc.exe; StatusMsg: "Установка античита PunkBuster..."; Parameters: "/i --no-display --i-accept-the-pb-eula /u"; WorkingDir: {tmp}; Flags: runhidden waituntilterminated ; Components: anti;
Filename: {pf}\FirefoxPrismQuakeLive\Firefox\Quake Live.exe; WorkingDir: {pf}\FirefoxPrismQuakeLive\Profiles\Clear\extensions\refractor@developer.mozilla.org\prism; Description: "Войти в игру"; Flags: nowait shellexec postinstall skipifsilent unchecked; Components: browser
Filename: "http://www.quakelive.com/#home"; Description: "Войти в игру"; Flags: nowait shellexec postinstall skipifsilent unchecked; Components: main
Filename: {userappdata}\id Software\quakelive\home\manual\manual.htm; Description: "Прочитать руководство"; Flags: nowait shellexec postinstall skipifsilent unchecked; Components: manual


ADremLIN 11-11-2009 13:12 1267417

Скрипты добавляющие/удаляющие ваш путь в переменной %PATH%:
читать дальше »
Код:

///////////////////////////////////////////////////////////////////////////////////////////////////
// Сохранить сей манускрипт как "env-tools.iss" (без кавычек)
//
//  По мотивам сообщения тов. omals и zhe_zho от 02-12-2008 09:21
//  http://forum.ru-board.com/topic.cgi/tools.cgi?action=notifyon&forum=5&topic=27438&start=1685
//
//  Для применения нового значения %PATH% после завершения инсталяции
//  необходимо добавить в секцию:
//
//  [Setup]
//  ChangesEnvironment=yes
//
//  В скрипт подключается так:
//
//  [_Code]                          "_Code" - Из-за ограничений тегов форума. Имеется ввиду секция Code
//  #include "env-tools.iss"
//
//  Процедуры описаны в env-tools.iss:
//
//  SetEnvironmentPath('<ваш_путь>');    // Добавляет <ваш_путь> к системному %PATH%
//  DeleteEnvironmentPath('<ваш_путь>'); // Удаляет <ваш_путь> из системного %PATH%
//
//  Вызывать по смыслу в нужном месте инсталляции или деинсталяции
//  Например:
//  {После инсталляции:}
//  procedure CurStepChanged(CurStep: TSetupStep);
//  begin
//    if CurStep = ssPostInstall then
//    begin
//      SetEnvironmentPath(ExpandConstant('{app}\bin'));
//    end;
//  end;
//
//  {Перед деинсталляцией:}
//  procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
//  begin
//    if CurUninstallStep = usUninstall then
//    begin
//      DeleteEnvironmentPath(ExpandConstant('{app}\bin'));
//    end;
//  end;
//       
///////////////////////////////////////////////////////////////////////////////////////////////////

procedure SetEnvironmentPath(NewPath: String);
var
  PathStr: String;
begin
  {Получаем значение текущего системного %PATH%}
  RegQueryStringValue(HKLM,'SYSTEM\CurrentControlSet\Control\Session Manager\Environment', 'Path', PathStr);
  {Ищем NewPath в текущем системном %PATH%}
  if Pos(NewPath, PathStr) <= 0 then // Если в текущем %PATH% не найдено NewPath;
  begin
    PathStr := NewPath + ';' + PathStr;
    RegWriteStringValue(HKLM,'SYSTEM\CurrentControlSet\Control\Session Manager\Environment', 'Path', PathStr);
  end;
end;

procedure DeleteEnvironmentPath(OldPath: String);
var
  PathStr: String;
  StartPos, Len: Integer;
begin
  {Получаем значение текущего системного %PATH%}
  RegQueryStringValue(HKLM,'SYSTEM\CurrentControlSet\Control\Session Manager\Environment', 'Path', PathStr);

  {Ищем OldPath c ";" в текущем системном %PATH%}
  StartPos := Pos(OldPath + ';', PathStr); //индекс начала вхождения OldPath c ";"
  if StartPos > 0 then // Если в текущем %PATH% найден OldPath;
  begin
    Len := Length(OldPath + ';');  //длина строки OldPath c ";"
    Delete(PathStr, StartPos, Len); // удаляем из текущего системного %PATH% (PathStr) строку OldPath c ";"
    {Записываем изменения в реестр}
    RegWriteStringValue(HKLM,'SYSTEM\CurrentControlSet\Control\Session Manager\Environment', 'Path', PathStr);
    Exit;
  end;

  {Ищем OldPath без ";" в текущем системном %PATH%}
  StartPos := Pos(OldPath, PathStr);
  if StartPos > 0 then // Если в текущем %PATH% найден OldPath без ";"
  begin
    Len := Length(OldPath); //индекс начала вхождения OldPath без ";"
    Delete(PathStr, StartPos, Len); // удаляем из текущего системного %PATH% (PathStr) строку OldPath без ";"
    {Записываем изменения в реестр}
    RegWriteStringValue(HKLM,'SYSTEM\CurrentControlSet\Control\Session Manager\Environment', 'Path', PathStr);
  end;
end;


Может кому пригодится...

Внимание, здесь нет проверки входного параметра функций на "пустую строку" - осторожней с этим... (Доделаю при удобном случае)

ЗЫ: Как принудительно заставить систему обновить(перечитать) измененный %PATH%, ДО ЗАВЕРШЕНИЯ установки?
Дело в том, что ChangesEnvironment=yes срабатывает уже ПОСЛЕ ЗАВЕРШЕНИЯ установки.
А то у меня в постинстале батник не работает т.к. использует уже "новую" %PATH%... :(

abc 11-11-2009 17:54 1267677

Подскажите, как сделать в программе установки проверку на наличие установленного распространяемого пакета ms visual c++ 2008 и в случае отсутствия автоматически (с учётом разрядности системы) загрузить (в ISTool есть модуль закачи файлов) и выполнить файл инсталлятора пакета. Заранее благодарен. Прошу прощение, если это уже где-то обсуждалось.

Serega 11-11-2009 19:36 1267767

Цитата:

Цитата lmiol
у меня трабла , при выборе всех компонентов ставятся все ярлыки »

Добавьте проверку на выбранный компонент:
Код:

Name: "{userdesktop}\Quake Live"; Filename: {pf}\FirefoxPrismQuakeLive\Firefox\Quake Live.exe; WorkingDir: {pf}\FirefoxPrismQuakeLive\Profiles\Clear\extensions\refractor@developer.mozilla.org\prism; Tasks: desktopicon; IconFilename: "{pf}\FirefoxPrismQuakeLive\Firefox\Quake Live.exe"; IconIndex: 0; Components: browser; Check: not IsComponentSelected('main')
Цитата:

Цитата ADremLIN
Дело в том, что ChangesEnvironment=yes срабатывает уже ПОСЛЕ ЗАВЕРШЕНИЯ установки. »

Цитата из Справки
Цитата:

Порядок установки

Задания в секциях от начала до завершения установки выполняются в следующем порядке:

·Выполняется [InstallDelete].

·Параметры секции [UninstallDelete] располагаются в логе деинсталлятора (который на этом этапе находится в оперативной памяти).

·При необходимости создается папка приложения.

·Выполняется [Dirs].

·При необходимости резервируется имя файла деинсталлятора.

·Выполняется [Files]. (Регистрация файлов не происходит.)

·Выполняется [Icons].

·Выполняется [INI].

·Выполняется [Registry].

·Регистрируются файлы, нуждающиеся в регистрации, если только не требуется перезагрузка системы - в этом случае ни один файл не будет зарегистрирован до тех пор, пока система не перезапустится. .

·При необходимости создается пункт в Установка/Удаление программ.

·Параметры [UninstallRun] располагаются в логе деинсталлятора.

·Завершается создание деинсталлятора и он сохраняется на диске.

·При ChangesAssociations=yes меняются ассоциации для файлов.

·Если ChangesEnvironment=yes, остальные приложения информируются об изменении переменных среды.

·Выполняется [Run], за исключением файлов с флагом postinstall, которые выполнятся после того, как отобразится страница Установка завершена.

Все параметры выполняются инсталлятором в том порядке, в котором они располагаются в секции

Все изменения отменяются деинсталлятором в порядке, обратном их созданию инсталлятором. Это происходит потому, что лог деинсталлятора выполняется от конца к началу..

если вы запускаете в ssPostInstall батник, то соответственно приложения уже перезагрузились. Видимо что-то не так с батником...

Serega 11-11-2009 19:51 1267784

Цитата:

Цитата abc
Подскажите, как сделать в программе установки проверку на наличие установленного распространяемого пакета ms visual c++ 2008 и в случае отсутствия автоматически (с учётом разрядности системы) загрузить»

У меня есть пример проверки и загрузки в случае отсутствия .NET Framework'a, можете сделать по аналогии
Пример
Код:

; определение версии установленного .NetFramework

[Setup]
AppName=NetFramework
AppVerName=NetFramework
DefaultDirName={pf}\NetFramework
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes
VersionInfoCopyright=Serega

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

[Code]
const
  MinNetFrameWork = 'v3.5'; // минимальная версия NetFrameWork

var
  url: string;

function GetNetFrameWork(ver: string): Integer;
begin
// страница загрузок http://www.microsoft.com/downloads/results.aspx?pocId=&freetext=Framework&DisplayLang=ru
  Result:= 5;
  url:= 'http://download.microsoft.com/download/5/6/7/567758a3-759e-473e-bf8f-52154438565a/dotnetfx.exe';
  case ver of
  'v1.0':
      begin
      // по этой ссылке v1.1, т.к. ссылку на v1.0, я не нашёл... раритет... ;)
        url:= 'http://download.microsoft.com/download/0/8/6/086e7824-ddad-45c0-b765-721e5e28e4c5/dotnetfx.exe';
        Result:= 0;
      end;
  'v1.1':
      begin
        url:= 'http://download.microsoft.com/download/0/8/6/086e7824-ddad-45c0-b765-721e5e28e4c5/dotnetfx.exe';
        Result:= 1;
      end;
  'v2.0':
      begin
        url:= 'http://download.microsoft.com/download/5/6/7/567758a3-759e-473e-bf8f-52154438565a/dotnetfx.exe';
        Result:= 2;
      end;
  'v3.0':
      begin
        url:= 'http://download.microsoft.com/download/4/d/a/4da3a5fa-ee6a-42b8-8bfa-ea5c4a458a7d/dotnetfx3setup.exe';
        Result:= 3;
      end;
  'v3.5':
      begin
        url:= 'http://download.microsoft.com/download/7/0/3/703455ee-a747-4cc8-bd3e-98a615c3aedb/dotNetFx35setup.exe';
        Result:= 4;
      end;
  end;
end;

function SearchNetFrameWork: Boolean;
var
  Error: Integer;
  VerNetFrameWork: array of string;
  VerNetFrameWorkInstalled: TArrayOfString;
  i, n: Integer;
begin
  VerNetFrameWork:= ['v1.0', 'v1.1', 'v2.0', 'v3.0', 'v3.5'];
  SetArrayLength(VerNetFrameWork, GetArrayLength(VerNetFrameWork));
  if RegGetSubkeyNames(HKLM, 'SOFTWARE\Microsoft\.NETFramework\policy', VerNetFrameWorkInstalled) then
    begin
      SetArrayLength(VerNetFrameWorkInstalled, GetArrayLength(VerNetFrameWorkInstalled));
      for i:= 0 to GetArrayLength(VerNetFrameWorkInstalled)-1 do
        begin
          for n:= 0 to GetArrayLength(VerNetFrameWork)-1 do
          if VerNetFrameWorkInstalled[i] = VerNetFrameWork[n] then
          if n >= GetNetFrameWork(MinNetFrameWork) then
            begin
              Result:= True;
              Break;
            end
          else
            begin
              if MsgBox('Для этой программы требуется установленный .NET Framework не ниже ' + MinNetFrameWork + '. ' +
                        'Пожалуйста загрузите и установите .NET Framework и запустите установку снова. ' +
                        'Вы хотите загрузить .NET Framework сейчас?', mbConfirmation, MB_YESNO) = idYes then
              ShellExec('open', url,'','',SW_SHOWNORMAL,ewNoWait,Error);
              Result:= False;
            end;
        end;
    end;
end;

function InitializeSetup: Boolean;
begin
  if SearchNetFrameWork then Result:= True;
end;


lmiol 12-11-2009 00:22 1268040

Цитата:

Добавьте проверку на выбранный компонент
Код:

Name: "{userdesktop}\Quake Live"; Filename: {pf}\FirefoxPrismQuakeLive\Firefox\Quake Live.exe; WorkingDir: {pf}\FirefoxPrismQuakeLive\Profiles\Clear\extensions\refractor@developer.mozilla.org\prism; Tasks: desktopicon; IconFilename: "{pf}\FirefoxPrismQuakeLive\Firefox\Quake Live.exe"; IconIndex: 0; Components: browser; Check: not IsComponentSelected('main')

:
Помогло!!! только надо было наоборот :) , спасибо еще раз!!!

ADremLIN 12-11-2009 01:16 1268054

2 Serega:

Цитата:

Цитата Serega
если вы запускаете в ssPostInstall батник, то соответственно приложения уже перезагрузились. Видимо что-то не так с батником... »

Цитата:

Цитата из справки
·Выполняется [Run], за исключением файлов с флагом postinstall, которые выполнятся после того, как отобразится страница Установка завершена.


Вот-вот, как раз мой случай: запуск батника из [Run] с флагом postinstall :), хотя все равно не работает.

Буду копать дальше. Спасибо!

AH4OyC 12-11-2009 22:47 1268814

Помогите! Что надо сделать со скриптом?



Скрипт
читать дальше »


[Setup]
DiskSpanning=true
DiskSliceSize=1457664000
AppName=Pure 2009
AppVerName=Pure 2009 1.0
AppPublisher=AH4OyC
AppPublisherURL=http://www.pure.com/
AppSupportURL=http://www.pure.com/
AppUpdatesURL=http://www.pure.com/
DefaultDirName={pf}\Pure 2009
DefaultGroupName=Pure 2009
LicenseFile=D:\Репаки\Рисунки\EULARU.txt
OutputDir=D:\Репаки
OutputBaseFilename=setup
WizardImageFile=D:\Репаки\Рисунки\123.bmp
SetupIconFile=D:\Репаки\Рисунки\fr.ico
Compression=lzma/ultra64
SolidCompression=true
InternalCompressLevel=ultra64

[Languages]
Name: russian; MessagesFile: compiler:Default.isl

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "rus"; Description: "Phesix"; Flags: unchecked

[Files]
Source: ISSkin.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression

Source: Vista.cjstyles; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: C:\Users\Максим\Desktop\NOKIA 5800\My cert; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs

[Run]
Tasks: rus; Filename: "{src}\Redist\keygen.exe"; WorkingDir: "{src}\Redist"; Parameters: "/q"; StatusMsg: "Установка Pisix..."; Flags: waituntilterminated

[code]
procedure LoadSkin(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@files:isskin.dll stdcall';
procedure UnloadSkin(); external 'UnloadSkin@files:isskin.dll stdcall';
function ShowWindow(hWnd: Integer; uType: Integer): Integer; external 'ShowWindow@user32.dll stdcall';

function InitializeSetup:boolean;
begin
ExtractTemporaryFile('Vista.cjstyles');
LoadSkin(ExpandConstant('{tmp}')+'\Vista.cjstyles', '');
Result:=True;
end;

const
Color = clGray;

procedure InitializeWizard();
begin
WizardForm.Font.Color:=clWhite;
WizardForm.Color:=Color;
WizardForm.WelcomePage.Color:=Color;
WizardForm.InnerPage.Color:=Color;
WizardForm.FinishedPage.Color:=Color;
WizardForm.LicensePage.Color:=Color;
WizardForm.PasswordPage.Color:=Color;
WizardForm.InfoBeforePage.Color:=Color;
WizardForm.UserInfoPage.Color:=Color;
WizardForm.SelectDirPage.Color:=Color;
WizardForm.SelectComponentsPage.Color:=Color;
WizardForm.SelectProgramGroupPage.Color:=Color;
WizardForm.SelectTasksPage.Color:=Color;
WizardForm.ReadyPage.Color:=Color;
WizardForm.PreparingPage.Color:=Color;
WizardForm.InstallingPage.Color:=Color;
WizardForm.InfoAfterPage.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.DiskSpaceLabel.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.GroupEdit.Color:=Color;
WizardForm.PasswordLabel.Color:=Color;
WizardForm.PasswordEdit.Color:=Color;
WizardForm.PasswordEditLabel.Color:=Color;
WizardForm.ReadyMemo.Color:=Color;
WizardForm.TypesCombo.Color:=Color;
WizardForm.WelcomeLabel1.Color:=Color;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.Color:=Color;
WizardForm.YesRadio.Color:=Color;
WizardForm.NoRadio.Color:=Color;
WizardForm.WelcomeLabel2.Color:=Color;
WizardForm.LicenseLabel1.Color:=Color;
WizardForm.InfoAfterClickLabel.Color:=Color;
WizardForm.ComponentsList.Color:=Color;
WizardForm.ComponentsDiskSpaceLabel.Color:=Color;
WizardForm.BeveledLabel.Color:=Color;
WizardForm.StatusLabel.Color:=Color;
WizardForm.FilenameLabel.Color:=Color;
WizardForm.SelectDirLabel.Color:=Color;
WizardForm.SelectStartMenuFolderLabel.Color:=Color;
WizardForm.SelectComponentsLabel.Color:=Color;
WizardForm.SelectTasksLabel.Color:=Color;
WizardForm.LicenseAcceptedRadio.Color:=Color;
WizardForm.LicenseNotAcceptedRadio.Color:=Color;
WizardForm.UserInfoNameLabel.Color:=Color;
WizardForm.UserInfoNameEdit.Color:=Color;
WizardForm.UserInfoOrgLabel.Color:=Color;
WizardForm.UserInfoOrgEdit.Color:=Color;
WizardForm.PreparingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Color:=Color;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
end;

YURSHAT 13-11-2009 04:58 1268984

Цитата:

Цитата AH4OyC
Помогите! Что надо сделать со скриптом? »

попробуйте
так
[Setup]
DiskSpanning=true
DiskSliceSize=1457664000
AppName=Pure 2009
AppVerName=Pure 2009 1.0
AppPublisher=AH4OyC
AppPublisherURL=http://www.pure.com/
AppSupportURL=http://www.pure.com/
AppUpdatesURL=http://www.pure.com/
DefaultDirName={pf}\Pure 2009
DefaultGroupName=Pure 2009
OutputDir=D:\Репаки
OutputBaseFilename=setup
Compression=lzma/ultra64
SolidCompression=true
InternalCompressLevel=ultra64

[Languages]
Name: russian; MessagesFile: compiler:Default.isl

[Files]
Source: ISSkin.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: Vista.cjstyles; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "C:\Program Files\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: изображение в нижней части инсталлятора.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression

[Run]
Filename: "{src}\DirectX\DXSETUP.exe"; Parameters: "\silent"; StatusMsg: ExpandConstant('{cm:UP}'); Check: InstallDirectX
Filename: "{src}\Redist\vcredist_x86.exe"; Parameters: "\q"; StatusMsg: "Идет установка Microsoft Visual C++ Redistibutable"; WorkingDir: "{src}\Redist"; Check: InstallRedist

[Icons]
Name: {group}\MyProg.exe; Filename: {app}\iconxp.exe; Check: GroupIcons
Name: {commondesktop}\MyProg.exe; Filename: {app}\iconxp.exe; Check: CreateIcons

[CustomMessages]

russian.DRT=Обновить DirectX
russian.UP=Идет обновление DirectX...
russian.Icons=Создать ярлык на рабочем столе
russian.Group=Создать ярлыки в меню "Пуск"
russian.Redist=Установить Microsoft C++ Redist

[code]
procedure LoadSkin(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@files:isskin.dll stdcall';
procedure UnloadSkin(); external 'UnloadSkin@files:isskin.dll stdcall';
function ShowWindow(hWnd: Integer; uType: Integer): Integer; external 'ShowWindow@user32.dll stdcall';

var
bottom_img:TBitmapImage;
BmpFile: TBitmapImage;

DirectX, Redist, Icons, Group, RunProgram: TCheckBox; //Чекбоксы
IconsLabel, GroupLabel, RedistLabel, DirectXLabel: TLabel; //Надписи к чекбоксам

function InitializeSetup:boolean;
begin
ExtractTemporaryFile('Vista.cjstyles');
LoadSkin(ExpandConstant('{tmp}')+'\Vista.cjstyles', '');
Result:=True;
end;

//Функция проверки чекбоксов
function InstallDirectX: Boolean;
begin
Result:= DirectX.Checked;
end;

function InstallRedist: Boolean;
begin
Result:=Redist.Checked;
end;

function CreateIcons: Boolean;
begin
Result:=Icons.Checked;
end;

function GroupIcons: Boolean;
begin
Result:=Group.Checked;
end;

// Процедура, чтоб отмечался чебокс еси кликнуть по надписи
procedure RedistOnClick(Sender: TObject);
begin
if Redist.Checked = False then
Redist.Checked:= True else
Redist.Checked:= False;
end;

procedure DirectXLabelOnClick(Sender: TObject);
begin
if DirectX.Checked = False then
DirectX.Checked:= True else
DirectX.Checked:= False;
end;

procedure IconsOnClick(Sender: TObject);
begin
if Icons.Checked = False then
Icons.Checked:= True else
Icons.Checked:= False;
end;

procedure GroupOnClick(Sender: TObject);
begin
if Group.Checked = False then
Group.Checked:= True else
Group.Checked:= False;
end;

const
Color = clGray;

procedure InitializeWizard();
begin
WizardForm.FileNameLabel.Visible:= False;
ExtractTemporaryFile('изображение в нижней части инсталлятора.bmp');
bottom_img:= TBitmapImage.Create(WizardForm);
bottom_img.Bitmap.LoadFromFile(ExpandConstant('{tmp}\изображение в нижней части инсталлятора.bmp'));
bottom_img.SetBounds(0, 315, 497, 48);
bottom_img.Parent:= WizardForm;
bottom_img.Stretch:= True;
WizardForm.Font.Color:=clWhite;
WizardForm.Color:=Color;
WizardForm.WelcomePage.Color:=Color;
WizardForm.InnerPage.Color:=Color;
WizardForm.FinishedPage.Color:=Color;
WizardForm.LicensePage.Color:=Color;
WizardForm.PasswordPage.Color:=Color;
WizardForm.InfoBeforePage.Color:=Color;
WizardForm.UserInfoPage.Color:=Color;
WizardForm.SelectDirPage.Color:=Color;
WizardForm.SelectComponentsPage.Color:=Color;
WizardForm.SelectProgramGroupPage.Color:=Color;
WizardForm.SelectTasksPage.Color:=Color;
WizardForm.ReadyPage.Color:=Color;
WizardForm.PreparingPage.Color:=Color;
WizardForm.InstallingPage.Color:=Color;
WizardForm.InfoAfterPage.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.DiskSpaceLabel.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.GroupEdit.Color:=Color;
WizardForm.PasswordLabel.Color:=Color;
WizardForm.PasswordEdit.Color:=Color;
WizardForm.PasswordEditLabel.Color:=Color;
WizardForm.ReadyMemo.Color:=Color;
WizardForm.TypesCombo.Color:=Color;
WizardForm.WelcomeLabel1.Color:=Color;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.Color:=Color;
WizardForm.YesRadio.Color:=Color;
WizardForm.NoRadio.Color:=Color;
WizardForm.WelcomeLabel2.Color:=Color;
WizardForm.LicenseLabel1.Color:=Color;
WizardForm.InfoAfterClickLabel.Color:=Color;
WizardForm.ComponentsList.Color:=Color;
WizardForm.ComponentsDiskSpaceLabel.Color:=Color;
WizardForm.BeveledLabel.Color:=Color;
WizardForm.StatusLabel.Color:=Color;
WizardForm.FilenameLabel.Color:=Color;
WizardForm.SelectDirLabel.Color:=Color;
WizardForm.SelectStartMenuFolderLabel.Color:=Color;
WizardForm.SelectComponentsLabel.Color:=Color;
WizardForm.SelectTasksLabel.Color:=Color;
WizardForm.LicenseAcceptedRadio.Color:=Color;
WizardForm.LicenseNotAcceptedRadio.Color:=Color;
WizardForm.UserInfoNameLabel.Color:=Color;
WizardForm.UserInfoNameEdit.Color:=Color;
WizardForm.UserInfoOrgLabel.Color:=Color;
WizardForm.UserInfoOrgEdit.Color:=Color;
WizardForm.PreparingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Color:=Color;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;

//Создаем чекбоксы
DirectX:= TCheckBox.Create(WizardForm);
with DirectX do
begin
Parent:= WizardForm.SelectDirPage;
Left:= WizardForm.DirEdit.Left + 200;
Top:= WizardForm.DirEdit.Top + 35;
Width:= ScaleX(14);
Height:= ScaleY(14);
TabOrder:= 0;
Checked:= False;
end;

DirectXLabel:= TLabel.Create(WizardForm);
with DirectXLabel do
begin
Caption:= ExpandConstant('{cm:DRT}');
Left:= WizardForm.DirEdit.Left + 220;
Top:= WizardForm.DirEdit.Top + 35;
Width:= ScaleX(150);
Height:= ScaleY(13);
Transparent := True;
Parent:= WizardForm.SelectDirPage;
OnClick:= @DirectXLabelOnClick;
end;

Redist:= TCheckBox.Create(WizardForm);
with Redist do
begin
Parent:= WizardForm.SelectDirPage;
Left:= WizardForm.DirEdit.Left + 200;
Top:= WizardForm.DirEdit.Top + 70;
Width:= ScaleX(14);
Height:= ScaleY(14);
TabOrder:= 1;
Checked:= False;
end;

RedistLabel:= TLabel.Create(WizardForm);
with RedistLabel do
begin
Caption:=ExpandConstant('{cm:Redist}');
Left:= WizardForm.DirEdit.Left + 220;
Top:= WizardForm.DirEdit.Top + 70;
Width:= ScaleX(150);
Height:= ScaleY(13);
Transparent := True;
Parent:= WizardForm.SelectDirPage;
OnClick:= @RedistOnClick;
end;

Icons:= TCheckBox.Create(WizardForm);
with Icons do
begin
Parent:= WizardForm.SelectDirPage;
Left:= WizardForm.DirEdit.Left;
Top:= WizardForm.DirEdit.Top + 35;
Width:= ScaleX(14);
Height:= ScaleY(14);
TabOrder:= 2;
Checked:= False;
end;

IconsLabel:= TLabel.Create(WizardForm);
with IconsLabel do
begin
Caption:=ExpandConstant('{cm:Icons}');
Left:= WizardForm.DirEdit.Left + 20;
Top:= WizardForm.DirEdit.Top + 35;
Width:= ScaleX(150);
Height:= ScaleY(13);
Transparent := True;
Parent:= WizardForm.SelectDirPage;
OnClick:= @IconsOnClick;
end;

Group:= TCheckBox.Create(WizardForm);
with Group do
begin
Parent:= WizardForm.SelectDirPage;
Left:= WizardForm.DirEdit.Left;
Top:= WizardForm.DirEdit.Top + 70;
Width:= ScaleX(14);
Height:= ScaleY(14);
TabOrder:= 3;
Checked:= False;
end;

GroupLabel:= TLabel.Create(WizardForm);
with GroupLabel do
begin
Caption:=ExpandConstant('{cm:Group}');
Left:= WizardForm.DirEdit.Left + 20;
Top:= WizardForm.DirEdit.Top + 70;
Width:= ScaleX(150);
Height:= ScaleY(13);
Transparent := True;
Parent:= WizardForm.SelectDirPage;
OnClick:= @GroupOnClick;
end;
end;

AH4OyC 13-11-2009 21:45 1269695

При изменение цвета с серого на чёрный! Возникла Проблема с Заголовками! И со страницей лицензии! Помогите пожалуйста!



Ещё скрины!



скрипт

читать дальше »
[Setup]
DiskSpanning=true
DiskSliceSize=1457664000
AppName=Pure 2009
AppVerName=Pure 2009 1.0
AppPublisher=AH4OyC
AppPublisherURL=http://www.pure.com/
AppSupportURL=http://www.pure.com/
AppUpdatesURL=http://www.pure.com/
DefaultDirName={pf}\Pure 2009
DefaultGroupName=Pure 2009
LicenseFile=D:\Ðåïàêè\Ðèñóíêè\Ëèöåíçèÿ.txt
OutputDir=D:\Ðåïàêè
OutputBaseFilename=setup
WizardImageFile=D:\Ðåïàêè\Ðèñóíêè\ íà÷àëå.bmp
SetupIconFile=D:\Ðåïàêè\Ðèñóíêè\fr.ico
Compression=lzma/ultra64
SolidCompression=true
InternalCompressLevel=ultra64

[Languages]
Name: russian; MessagesFile: compiler:Default.isl

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "rus"; Description: "Óñòàíîâèòü äîïîëíèòåëüíîå ïðîãðàìíîå îáåñïå÷åíèå"; Flags: unchecked
Name: "rus\da"; Description: "Óñòàíîâèòü Derex"; Flags: unchecked
Name: "rus\ne"; Description: "Óñòàíîâèòü PisiX"; Flags: unchecked

[Files]
Source: ISSkin.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: Vista.cjstyles; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: C:\Users\Ìàêñèì\Desktop\NOKIA 5800\My cert; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
Source: papka.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: Vnizy.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression


[Run]
Tasks: rus\da; Filename: "{src}\Redist\keygen.exe"; WorkingDir: "{src}\Redist"; Parameters: "/q"; StatusMsg: "Óñòàíîâêà Pisix..."; Flags: waituntilterminated

[CustomMessages]

russian.DRT=Îáíîâèòü DirectX
russian.UP=Èäåò îáíîâëåíèå DirectX...
russian.Icons=Ñîçäàòü ÿðëûê íà ðàáî÷åì ñòîëå
russian.Group=Ñîçäàòü ÿðëûêè â ìåíþ "Ïóñê"
russian.Redist=Óñòàíîâèòü Microsoft C++ Redist



[code]
procedure LoadSkin(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@files:isskin.dll stdcall';
procedure UnloadSkin(); external 'UnloadSkin@files:isskin.dll stdcall';
function ShowWindow(hWnd: Integer; uType: Integer): Integer; external 'ShowWindow@user32.dll stdcall';

var
bottom_img:TBitmapImage;
BmpFile: TBitmapImage;

DirectX, Redist, Icons, Group, RunProgram: TCheckBox; //×åêáîêñû
IconsLabel, GroupLabel, RedistLabel, DirectXLabel: TLabel; //Íàäïèñè ê ÷åêáîêñàì

function InitializeSetup:boolean;
begin
ExtractTemporaryFile('Vista.cjstyles');
LoadSkin(ExpandConstant('{tmp}')+'\Vista.cjstyles', '');
Result:=True;
end;


const
Color = clBlack;

procedure InitializeWizard1();
begin
WizardForm.FileNameLabel.Visible:= False;
ExtractTemporaryFile('Vnizy.bmp');
bottom_img:= TBitmapImage.Create(WizardForm);
bottom_img.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Vnizy.bmp'));
bottom_img.SetBounds(0, 315, 497, 48);
bottom_img.Parent:= WizardForm;
bottom_img.Stretch:= True;
WizardForm.Font.Color:=clWhite;
WizardForm.Color:=Color;
WizardForm.WelcomePage.Color:=Color;
WizardForm.InnerPage.Color:=Color;
WizardForm.FinishedPage.Color:=Color;
WizardForm.LicensePage.Color:=Color;
WizardForm.PasswordPage.Color:=Color;
WizardForm.InfoBeforePage.Color:=Color;
WizardForm.UserInfoPage.Color:=Color;
WizardForm.SelectDirPage.Color:=Color;
WizardForm.SelectComponentsPage.Color:=Color;
WizardForm.SelectProgramGroupPage.Color:=Color;
WizardForm.SelectTasksPage.Color:=Color;
WizardForm.ReadyPage.Color:=Color;
WizardForm.PreparingPage.Color:=Color;
WizardForm.InstallingPage.Color:=Color;
WizardForm.InfoAfterPage.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.DiskSpaceLabel.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.GroupEdit.Color:=Color;
WizardForm.PasswordLabel.Color:=Color;
WizardForm.PasswordEdit.Color:=Color;
WizardForm.PasswordEditLabel.Color:=Color;
WizardForm.ReadyMemo.Color:=Color;
WizardForm.TypesCombo.Color:=Color;
WizardForm.WelcomeLabel1.Color:=Color;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.Color:=Color;
WizardForm.YesRadio.Color:=Color;
WizardForm.NoRadio.Color:=Color;
WizardForm.WelcomeLabel2.Color:=Color;
WizardForm.LicenseLabel1.Color:=Color;
WizardForm.InfoAfterClickLabel.Color:=Color;
WizardForm.ComponentsList.Color:=Color;
WizardForm.ComponentsDiskSpaceLabel.Color:=Color;
WizardForm.BeveledLabel.Color:=Color;
WizardForm.StatusLabel.Color:=Color;
WizardForm.FilenameLabel.Color:=Color;
WizardForm.SelectDirLabel.Color:=Color;
WizardForm.SelectStartMenuFolderLabel.Color:=Color;
WizardForm.SelectComponentsLabel.Color:=Color;
WizardForm.SelectTasksLabel.Color:=Color;
WizardForm.LicenseAcceptedRadio.Color:=Color;
WizardForm.LicenseNotAcceptedRadio.Color:=Color;
WizardForm.UserInfoNameLabel.Color:=Color;
WizardForm.UserInfoNameEdit.Color:=Color;
WizardForm.UserInfoOrgLabel.Color:=Color;
WizardForm.UserInfoOrgEdit.Color:=Color;
WizardForm.PreparingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Color:=Color;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
end;

// Ïàïêà ------------------------------------------------------------------------------------------------------------------------------------------------
procedure InitializeWizard2();
begin
ExtractTemporaryFile('papka.bmp');
WizardForm.SelectDirBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\papka.bmp'));
WizardForm.SelectDirBitmapImage.AutoSize:=True;
WizardForm.SelectGroupBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\papka.bmp'));
WizardForm.SelectGroupBitmapImage.AutoSize:=True;
end;

procedure InitializeWizard();
begin
InitializeWizard1();
InitializeWizard2();

end;

malyta 14-11-2009 20:55 1270386

AH4OyC,но зачем страница с лицензией если Вы делаете переупаковку?
Цитата:

Цитата Serega
а лицензионное соглашение, помоему это:
читать дальше »
Код:

WizardForm.LicenseAcceptedRadio.Font.Color:= clWhite;
WizardForm.LicenseNotAcceptedRadio.Font.Color:= clWhite;

»

увы этот вопрос подымался всего однажды на него был дан ответ, предполагаемый вариант решения проблемы указан выше к сожалению он не дает того результата который Вам бы подошел.

AH4OyC 15-11-2009 01:46 1270571

Цитата:

Цитата malyta
AH4OyC,но зачем страница с лицензией если Вы делаете переупаковку? »

Решил избавится от лицензии! Спасибо!

YURSHAT 15-11-2009 02:48 1270595

Цитата:

Цитата AH4OyC
Возникла Проблема с Заголовками »

Если без лицензии, то так
читать дальше »
[Setup]
DiskSpanning=true
DiskSliceSize=1457664000
AppName=Pure 2009
AppVerName=Pure 2009 1.0
AppPublisher=AH4OyC
AppPublisherURL=http://www.pure.com/
AppSupportURL=http://www.pure.com/
AppUpdatesURL=http://www.pure.com/
DefaultDirName={pf}\Pure 2009
DefaultGroupName=Pure 2009
LicenseFile=D:\?aiaee\?enoiee\Eeoaicey.txt
OutputDir=D:\?aiaee
OutputBaseFilename=setup
WizardImageFile=D:\?aiaee\?enoiee\A ia?aea.bmp
SetupIconFile=D:\?aiaee\?enoiee\fr.ico
Compression=lzma/ultra64
SolidCompression=true
InternalCompressLevel=ultra64

[Languages]
Name: russian; MessagesFile: compiler:Default.isl

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "rus"; Description: "Onoaiiaeou aiiieieoaeuiia i?ia?aiiia iaania?aiea"; Flags: unchecked
Name: "rus\da"; Description: "Onoaiiaeou Derex"; Flags: unchecked
Name: "rus\ne"; Description: "Onoaiiaeou PisiX"; Flags: unchecked

[Files]
Source: ISSkin.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: Vista.cjstyles; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: C:\Users\Iaenei\Desktop\NOKIA 5800\My cert; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
Source: papka.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: Vnizy.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression


[Run]
Tasks: rus\da; Filename: "{src}\Redist\keygen.exe"; WorkingDir: "{src}\Redist"; Parameters: "/q"; StatusMsg: "Onoaiiaea Pisix..."; Flags: waituntilterminated

[CustomMessages]

russian.DRT=Iaiiaeou DirectX
russian.UP=Eaao iaiiaeaiea DirectX...
russian.Icons=Nicaaou y?eue ia ?aai?ai noiea
russian.Group=Nicaaou y?euee a iai? "Ione"
russian.Redist=Onoaiiaeou Microsoft C++ Redist



[code]
procedure LoadSkin(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@files:isskin.dll stdcall';
procedure UnloadSkin(); external 'UnloadSkin@files:isskin.dll stdcall';
function ShowWindow(hWnd: Integer; uType: Integer): Integer; external 'ShowWindow@user32.dll stdcall';

var
bottom_img:TBitmapImage;
BmpFile: TBitmapImage;

DirectX, Redist, Icons, Group, RunProgram: TCheckBox; //?aeaienu
IconsLabel, GroupLabel, RedistLabel, DirectXLabel: TLabel; //Iaaiene e ?aeaienai

function InitializeSetup:boolean;
begin
ExtractTemporaryFile('Vista.cjstyles');
LoadSkin(ExpandConstant('{tmp}')+'\Vista.cjstyles', '');
Result:=True;
end;


const
Color = clBlack;

procedure InitializeWizard();
begin
WizardForm.FileNameLabel.Visible:= False;
ExtractTemporaryFile('Vnizy.bmp');
bottom_img:= TBitmapImage.Create(WizardForm);
bottom_img.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Vnizy.bmp'));
bottom_img.SetBounds(0, 315, 497, 48);
bottom_img.Parent:= WizardForm;
bottom_img.Stretch:= True;
WizardForm.Font.Color:=clWhite;
WizardForm.Color:=Color;
WizardForm.WelcomePage.Color:=Color;
WizardForm.InnerPage.Color:=Color;
WizardForm.FinishedPage.Color:=Color;
WizardForm.LicensePage.Color:=Color;
WizardForm.PasswordPage.Color:=Color;
WizardForm.InfoBeforePage.Color:=Color;
WizardForm.UserInfoPage.Color:=Color;
WizardForm.SelectDirPage.Color:=Color;
WizardForm.SelectComponentsPage.Color:=Color;
WizardForm.SelectProgramGroupPage.Color:=Color;
WizardForm.SelectTasksPage.Color:=Color;
WizardForm.ReadyPage.Color:=Color;
WizardForm.PreparingPage.Color:=Color;
WizardForm.InstallingPage.Color:=Color;
WizardForm.InfoAfterPage.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.DiskSpaceLabel.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.GroupEdit.Color:=Color;
WizardForm.PasswordLabel.Color:=Color;
WizardForm.PasswordEdit.Color:=Color;
WizardForm.PasswordEditLabel.Color:=Color;
WizardForm.ReadyMemo.Color:=Color;
WizardForm.TypesCombo.Color:=Color;
WizardForm.WelcomeLabel1.Color:=Color;
WizardForm.WelcomeLabel1.Font.Color:=clWhite;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.Color:=Color;
WizardForm.YesRadio.Color:=Color;
WizardForm.NoRadio.Color:=Color;
WizardForm.WelcomeLabel2.Color:=Color;
WizardForm.LicenseLabel1.Color:=Color;
WizardForm.InfoAfterClickLabel.Color:=Color;
WizardForm.ComponentsList.Color:=Color;
WizardForm.ComponentsDiskSpaceLabel.Color:=Color;
WizardForm.BeveledLabel.Color:=Color;
WizardForm.StatusLabel.Color:=Color;
WizardForm.FilenameLabel.Color:=Color;
WizardForm.SelectDirLabel.Color:=Color;
WizardForm.SelectStartMenuFolderLabel.Color:=Color;
WizardForm.SelectComponentsLabel.Color:=Color;
WizardForm.SelectTasksLabel.Color:=Color;
WizardForm.LicenseAcceptedRadio.Color:=Color;
WizardForm.LicenseNotAcceptedRadio.Color:=Color;
WizardForm.UserInfoNameLabel.Color:=Color;
WizardForm.UserInfoNameEdit.Color:=Color;
WizardForm.UserInfoOrgLabel.Color:=Color;
WizardForm.UserInfoOrgEdit.Color:=Color;
WizardForm.PreparingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Font.Color:=clWhite;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
WizardForm.PageNameLabel.Font.Color:=clWhite;
//*******************************************Папка*************************************//
ExtractTemporaryFile('papka.bmp');
WizardForm.SelectDirBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\papka.bmp'));
WizardForm.SelectDirBitmapImage.AutoSize:=True;
WizardForm.SelectGroupBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\papka.bmp'));
WizardForm.SelectGroupBitmapImage.AutoSize:=True;
end;


вышел новый релиз Inno Setup 5.3.6 (2009-11-14)
Тут обычная версия
Тут Unicode

Serega 15-11-2009 09:28 1270652

Цитата:

Цитата YURSHAT
вышел новый релиз Inno Setup 5.3.6 (2009-11-14) »

Спасибо, обновил ссылки в теме Inno Setup. Обсуждение установщика.

YURSHAT 15-11-2009 09:59 1270668

Цитата:

Цитата Serega
Спасибо, обновил ссылки в теме »

Всегда пожалуйста :)

YURSHAT 15-11-2009 20:49 1271185

isSlideShow v1.01 [20-10-2009] от ExpeditorR.

Это dll для показа слайд-шоу с эффектами переходов в окне Inno Setup.
В новой версии добавлена возможность выбора эффекта перехода, возможно 12 вариантов (подробнее смотрите readme.rtf). В архиве имеются два примера использования, и подробное описание. isSlideShow.dll может работать в любой версии Windows.

malyta 16-11-2009 01:22 1271390

YURSHAT, зачем изображения в архиве?

YURSHAT 16-11-2009 02:10 1271410

Цитата:

Цитата malyta
зачем изображения в архиве? »

Ну для образца. Если вы имеете в виду то, что размер архива из-за изображений большой, то вопрос не ко мне, я архив не создавал и не размещал.

P.S. Если вы заметили, то изображения разных размеров и расширений. Этим автор хочет показать, что .dll может добавлять несколько форматов (.bmp, .jpg, .png) и подгонять размер под ваше разрешение монитора.

malyta 16-11-2009 02:57 1271426

Цитата:

Цитата YURSHAT
Ну для образца. Если вы имеете в виду то, что размер архива из-за изображений большой, то вопрос не ко мне, я архив не создавал и не размещал.
P.S. Если вы заметили, то изображения разных размеров и расширений. Этим автор хочет показать, что .dll может добавлять несколько форматов (.bmp, .jpg, .png) и подгонять размер под ваше разрешение монитора. »

не обратил внимания приношу свои извинения!

YURSHAT 16-11-2009 08:18 1271495

Цитата:

Цитата malyta
не обратил внимания приношу свои извинения! »

:)

_Monster_ 16-11-2009 17:56 1271856

Такая проблема. После создания установочного приложения и его установки оно не запускается не на рабочем столе, не в пуске. А все дело в том что отсутствует в свойстве ярлыка "рабочая папка"

Как это исправить? (ручками дописать не вариант:))

Habetdin 16-11-2009 18:18 1271885

_Monster_, пример:
Цитата:

[Icons]
Name: {group}\AIMP2; Filename: {app}\AIMP2.EXE; WorkingDir: {app}

_Monster_ 16-11-2009 19:57 1271978

Спасибо попробую ;)

user_123 16-11-2009 20:36 1272014

Какое значение параметра MinVersion из секции [Setup] нужно установить для windows 7 32bit и windows 7 64bit?

Habetdin 16-11-2009 21:12 1272033

Цитата:

Цитата user_123
Какое значение параметра MinVersion из секции [Setup] нужно установить для windows 7 32bit и windows 7 64bit? »

Из справки:
читать дальше »
Цитата:

Цитата ISHelp, Windows versions
Windows versions:

4.0.950 Windows 95
4.0.1111 Windows 95 OSR 2 & OSR 2.1
4.0.1212 Windows 95 OSR 2.5
4.1.1998 Windows 98
4.1.2222 Windows 98 Second Edition
4.9.3000 Windows Me

Windows NT versions:

4.0.1381 Windows NT 4.0
5.0.2195 Windows 2000
5.01.2600 Windows XP
or Windows XP 64-Bit Edition Version 2002 (Itanium)
5.02.3790 Windows Server 2003
or Windows XP x64 Edition (AMD64/EM64T)
or Windows XP 64-Bit Edition Version 2003 (Itanium)
6.0.6000 Windows Vista
6.0.6001 Windows Vista with Service Pack 1
or Windows Server 2008
6.01.7600 Windows 7
or Windows Server 2008 R2

Note that there is normally no need to specify the build numbers (i.e. you may simply use "4.1" for Windows 98).


YURSHAT 17-11-2009 00:35 1272168

Народ у кого есть лицуха S.T.A.L.K.E.R.: Зов Припяти, выложите пожалуйста get_hw_caps.dll

malyta 17-11-2009 03:31 1272215

Вложений: 1
Цитата:

Цитата YURSHAT
Народ у кого есть лицуха S.T.A.L.K.E.R.: Зов Припяти, выложите пожалуйста get_hw_caps.dll »

не с игры, но может Вам пригодится (прикрепил)

YURSHAT 17-11-2009 04:11 1272222

Цитата:

Цитата malyta
не с игры, но может Вам пригодится (прикрепил) »

Спасибо, уже нашел.

Berline 17-11-2009 11:25 1272434

ADremLIN, сделал как вы написали... добавил в код, и в сетап, но после установки программы - переменная как была, в таком же составе и осталась... путь. куда поставл я программу не добавился...

Raf-9600 17-11-2009 23:37 1273043

Ктонить может написать код, чтоб перед запуском инсталлятора, запускался файл "manialogo.exe"?
Этот exe'шник выполняет функцию запуска логотипа "LOGO.bmp".

malyta 18-11-2009 00:12 1273056

Цитата:

Цитата Raf-9600
Ктонить может написать код, чтоб перед запуском инсталлятора, запускался файл "manialogo.exe"?
Этот exe'шник выполняет функцию запуска логотипа "LOGO.bmp". »

код написанный не мной (я в этом не силен)
читать дальше »
[Files]
Source: manialogo.exe; DestDir: {tmp}; Flags: dontcopy
Source: LOGO.bmp; DestDir: {tmp}; Flags: dontcopy
Source: LOGO1.bmp; DestDir: {tmp}; Flags: dontcopy

[code]
function InitializeSetup(): Boolean;
var
ErrorCode: Integer;
begin
ExtractTemporaryFile('LOGO.bmp');
ExtractTemporaryFile('LOGO1.bmp');
ExtractTemporaryFile('manialogo.exe');

Exec(ExpandConstant('{tmp}\manialogo.exe'), '', '', SW_SHOW, ewWaitUntilTerminated, ErrorCode);
DeleteFile(ExpandConstant('{tmp}\LOGO.bmp'));
RenameFile(ExpandConstant('{tmp}\LOGO1.bmp'), ExpandConstant('{tmp}\LOGO.bmp'));
Exec(ExpandConstant('{tmp}\manialogo.exe'), '', '', SW_SHOW, ewWaitUntilTerminated, ErrorCode);
Result := True;
end;

Vsirf 18-11-2009 17:48 1273690

Serega, а где можно скачать chm версию етой темы ?

malyta 18-11-2009 19:31 1273805

Цитата:

Цитата Vsirf
Serega, а где можно скачать chm версию етой темы ? »

могу предположить что этой версии нету.

YURSHAT 18-11-2009 20:44 1273882

Цитата:

Цитата malyta
могу предположить что этой версии нету »

Вы правы сударь :)

_Monster_ 19-11-2009 10:01 1274278

А что-нибудь вроде этого можно сделать

A1EXXX 19-11-2009 14:13 1274621

_Monster_, посмотри в этой подборке, кажись видел там нечто подобное...

Colapse 20-11-2009 00:42 1275242

Помагите мне пожалуйста!Стандартний скрипт создаю-все норм!А есKи хочу добавить черний цвет или еще что-то в етом роде-пишет ошибку Duplikate identifer "INITIALEWIZARD"!Я понимаю што ето потому што в секции Code у меня 2 значения INITIALEWIZARD но не знаю как ето исправить!Help!!!

malyta 20-11-2009 00:59 1275247

Цитата:

Цитата Colapse
Помагите мне пожалуйста!Стандартний скрипт создаю-все норм!А есKи хочу добавить черний цвет или еще что-то в етом роде-пишет ошибку Duplikate identifer "INITIALEWIZARD"!Я понимаю што ето потому што в секции Code у меня 2 значения INITIALEWIZARD но не знаю как ето исправить!Help!!! »

читать дальше »
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{4D20CA87-CB25-4252-9E32-48D949EA8C84}
AppName=My Program
AppVerName=My Program 1.5
AppPublisher=My Company, Inc.
AppPublisherURL=http://www.example.com/
AppSupportURL=http://www.example.com/
AppUpdatesURL=http://www.example.com/
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

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

[Files]
Source: "C:\Program Files\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[code]
const
Color = clblack;

procedure InitializeWizard();
begin
WizardForm.PageNameLabel.Font.Color:=clWhite;
WizardForm.Font.Color:=clWhite;
WizardForm.Color:=Color;
WizardForm.WelcomePage.Color:=Color;
WizardForm.InnerPage.Color:=Color;
WizardForm.FinishedPage.Color:=Color;
WizardForm.LicensePage.Color:=Color;
WizardForm.PasswordPage.Color:=Color;
WizardForm.InfoBeforePage.Color:=Color;
WizardForm.UserInfoPage.Color:=Color;
WizardForm.SelectDirPage.Color:=Color;
WizardForm.SelectComponentsPage.Color:=Color;
WizardForm.SelectProgramGroupPage.Color:=Color;
WizardForm.SelectTasksPage.Color:=Color;
WizardForm.ReadyPage.Color:=Color;
WizardForm.PreparingPage.Color:=Color;
WizardForm.InstallingPage.Color:=Color;
WizardForm.InfoAfterPage.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.DiskSpaceLabel.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.GroupEdit.Color:=Color;
WizardForm.PasswordLabel.Color:=Color;
WizardForm.PasswordEdit.Color:=Color;
WizardForm.PasswordEditLabel.Color:=Color;
WizardForm.ReadyMemo.Color:=Color;
WizardForm.TypesCombo.Color:=Color;
WizardForm.WelcomeLabel1.Color:=Color;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.Color:=Color;
WizardForm.YesRadio.Color:=Color;
WizardForm.NoRadio.Color:=Color;
WizardForm.WelcomeLabel2.Color:=Color;
WizardForm.LicenseLabel1.Color:=Color;
WizardForm.InfoAfterClickLabel.Color:=Color;
WizardForm.ComponentsList.Color:=Color;
WizardForm.ComponentsDiskSpaceLabel.Color:=Color;
WizardForm.BeveledLabel.Color:=Color;
WizardForm.StatusLabel.Color:=Color;
WizardForm.FilenameLabel.Color:=Color;
WizardForm.SelectDirLabel.Color:=Color;
WizardForm.SelectStartMenuFolderLabel.Color:=Color;
WizardForm.SelectComponentsLabel.Color:=Color;
WizardForm.SelectTasksLabel.Color:=Color;
WizardForm.LicenseAcceptedRadio.Color:=Color;
WizardForm.LicenseNotAcceptedRadio.Color:=Color;
WizardForm.UserInfoNameLabel.Color:=Color;
WizardForm.UserInfoNameEdit.Color:=Color;
WizardForm.UserInfoOrgLabel.Color:=Color;
WizardForm.UserInfoOrgEdit.Color:=Color;
WizardForm.PreparingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Color:=Color;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
end;

Colapse 20-11-2009 01:21 1275253

не помагает!

A1EXXX 20-11-2009 01:28 1275256

Colapse, для объединения скриптов используй ISS Joiner (в шапке есть), и предварительно почитай справки и FAQ по объединению процедур INITIALEWIZARD и других...

malyta 20-11-2009 01:30 1275257

Цитата:

Цитата Colapse
не помагает! »

Уважаемый пример скрипта работоспособный, я только что сам еще раз проверил!

Colapse 20-11-2009 01:35 1275261

A1EXXX и malyta спасибо!
malyta я верю што способний но мне выдает всю туже ошибку!не подскажите ссылочку на FAQ по объединению процедур INITIALEWIZARD?

malyta 20-11-2009 01:44 1275265

Цитата:

Цитата Colapse
A1EXXX и malyta спасибо!
malyta я верю што способний но мне выдает всю туже ошибку!не подскажите ссылочку на FAQ по объединению процедур INITIALEWIZARD? »

читать дальше »
Цитата:

Цитата Serega
В секции кода могут быть процедуры (procedure) или функции (function), имена у них должны быть уникальные, т.е. два одинаковых имени не допускаются.
Если в какой-нибудь процедуре или функции (назовём её вызывающая функция) есть ссылка на другую процедуру или функцию (назовём её - вызываемая функция), то эта вызываемая функция должна быть расположена выше чем вызывающая функция.
Так же не надо забывать про структуру процедур и функций, т.е.:
Код:

procedure MyProc; // имя процедуры
begin // начало процедуры
// тело процедуры, какой-то код
end; // конец процедуры

Одним словом, сколько begin в процедуре, столько должно быть и end;

Пример объединения двух процедур InitializeWizard:
Код:

procedure InitializeWizard;
var // так обозначают, что будут заданны переменные
s: string; // задана переменная, только для этой процедуры
begin
// код 1
end;

и вторая:
Код:

procedure InitializeWizard;
var
i: Integer; // задана переменная, только для этой процедуры
begin
// код 2
end;

Результат:
Код:

procedure InitializeWizard;
var
s: string;
i: Integer;
begin
// код 1
// код 2
end;

Если коротко, то вот так...

P.S.
Удобней всего объединять скрипты в редакторе от Restools, т.к. у него слева есть окно в котором отображаются имена всех процедур в скрипте и что самое важное, эти имена сортируются не по расположению в скрипте, а по имени, т.е. все дубликаты процедур или функций видны сразу.


YURSHAT 20-11-2009 04:00 1275321

Цитата:

Цитата Colapse
Помагите мне пожалуйста!Стандартний скрипт создаю-все норм!А есKи хочу добавить черний цвет или еще что-то в етом роде-пишет ошибку Duplikate identifer "INITIALEWIZARD"!Я понимаю што ето потому што в секции Code у меня 2 значения INITIALEWIZARD но не знаю как ето исправить!Help!!! »

Маленький FAQ
Для объединения процедур INITIALEWIZARD и других нужно сделать следующее. Вы можете иметь в скрипте хоть десять одинаковых процедур, а объединять нужно так. Например у вас в скрипте три процедуры InitializeWizard. Каждую из них нужно пронумеровать:

procedure InitializeWizard1();
begin
\\Текст
end;

procedure InitializeWizard2();
begin
\\снова ваш текст
end;

\\не обязательно, чтобы процедуры были одна за другой, между ними могут быть другие процедуры

procedure InitializeWizard3();
begin
\\бла-бла-бла
end;

А в конце скрипта:

procedure InitializeWizard();
begin
procedure InitializeWizard1();
procedure InitializeWizard2();
procedure InitializeWizard3();
end;

Colapse 20-11-2009 12:21 1275544

Помагите научитса пользоватса Inno Script Joiner!рускоэ FAQ по нему читал на когда пробую через командною строку то не срабативает! а как соедининить скрипти в IE я совсем не понял!

МИШАНЧИК 20-11-2009 15:14 1275690

Colapse, нужно просто выделить необходимые скрипты, нажать правую кнопку и в контекстном меню выбрать Join Scripts. И получите объединённый скрипт joined.

VLADIS LOVE 20-11-2009 17:43 1275832

Здравствуйте.
Подскажите пожалуйста, как можно сделать превью в виде картинки для каждого компонента? Если можно, по пунктам.
Заранее благодарен :)

YURSHAT 20-11-2009 21:51 1276069

Цитата:

Цитата VLADIS LOVE
Подскажите пожалуйста, как можно сделать превью в виде картинки для каждого компонента? »

Можно
так
Код:

[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program

[Files]
; Файлы с описанием
Source: ReadMe1.rtf; Flags: dontcopy
Source: ReadMe2.rtf; Flags: dontcopy
Source: ReadMe3.rtf; Flags: dontcopy
; Картинки к описаниям
Source: Image1.bmp; Flags: dontcopy
Source: Image2.bmp; Flags: dontcopy
Source: Image3.bmp; Flags: dontcopy
; Устанавливаемые файлы
; Будут установлены только если отмечен соответсвующий чекбокс
; Нумерация с нуля - CheckedBox(0) - первый; CheckedBox(1) - второй и т.д.
Source: compiler:MyProg.exe; DestDir: {app}; Flags: ignoreversion; Check: CheckedBox(0)
Source: compiler:MyProg.chm; DestDir: {app}; Flags: ignoreversion; Check: CheckedBox(1)
Source: Files\*; DestDir: {app}\add; Flags: ignoreversion recursesubdirs createallsubdirs; Check: CheckedBox(2)

[_Code]
var
  Page: TWizardPage;
  ListBox: TNewCheckListBox;
  Memo: TRichEditViewer;
  CheckLabel: TLabel;
  MouseY: integer;
  BitmapImage: TBitmapImage;
  InfoBmp: array of TBitmap;

function CheckedBox(ItemNumber: integer): Boolean;
begin                                    // проверка,
  Result:= ListBox.Checked[ItemNumber];  // отмечен ли соответствующий чекбокс
end;

// ВНИМАНИЕ! Данная реализация процедур CheckOnClick и CheckMouseMove применима только если ListBox отображается без скролбара,
// т.е. все чекбоксы видны без промотки.
procedure CheckOnClick (Sender: TObject); // событие на клик
begin
  if MouseY < ListBox.Items.Count then
    begin // выполняется, если кликнули на чекбокс с номером MouseY
      ListBox.Checked[MouseY]:= Not(ListBox.Checked[MouseY]);
      // если надо при клике выполнить еще что-то, дописываем сюда
    end;
end;

procedure CheckMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin                                      // событие на движение мыши
  MouseY:= Y/ScaleY(16);
  if MouseY < ListBox.Items.Count then
    begin  // выполняется, если курсор пересекает чекбокс с номером MouseY
      Memo.RTFText:= TStrings(ListBox.ItemObject[MouseY]).Text;
      BitmapImage.Bitmap:= InfoBmp[MouseY];
      // если надо при движении курсора выполнить еще что-то, дописываем сюда
    end;
end;

procedure InitializeWizard();
var
  i: integer;
begin
  ExtractTemporaryFile('ReadMe1.rtf'); // распаковка фалов описания
  ExtractTemporaryFile('ReadMe2.rtf');
  ExtractTemporaryFile('ReadMe3.rtf');
  ExtractTemporaryFile('Image1.bmp');  // распаковка картинок к описаниям
  ExtractTemporaryFile('Image2.bmp');
  ExtractTemporaryFile('Image3.bmp');

  // Создание страницы, которая будет отображена после wpWelcome
  // Надо в другом месте, меняем wpWelcome на wpSelectDir или другую
  Page:=CreateCustomPage(wpWelcome, 'Интерфейс', 'Выберите компоненты, которые вы хотите установить.')

  ListBox:= TNewCheckListBox.Create(Page); // создание списка чекбоксов
  with ListBox do
    begin
      Left  := 15
      Top    := 0
      Width  := 200
      Height := 149
      Parent := Page.Surface
      // Добавляем нужное кол-во чекбоксов
      AddCheckBox('Моя программа', '', 0, True, True, True, True, TStringList.Create);
      AddCheckBox('Хелп', '', 1, True, True, False, True, TStringList.Create);
      AddCheckBox('Дополнительные файлы', '', 1, True, True, False, True, TStringList.Create);
      // Загружаем файлы описания (каждому чекбоксу - свой файл)
      TStrings(ItemObject[0]).LoadFromFile(ExpandConstant('{tmp}\ReadMe1.rtf'));
      TStrings(ItemObject[1]).LoadFromFile(ExpandConstant('{tmp}\ReadMe2.rtf'));
      TStrings(ItemObject[2]).LoadFromFile(ExpandConstant('{tmp}\ReadMe3.rtf'));
    end;

  Memo:= TRichEditViewer.Create(Page); // создаем Memo для отображения описаний
  with Memo do
    begin
      Left        := ListBox.Left + ListBox.Width + 8;
      Top        := ListBox.Top;
      Width      := ListBox.Width;
      Height      := ListBox.Height;
      Color      := clBtnFace;
      Enabled    := False;
      BorderStyle := bsNone;
      Parent      := Page.Surface;
    end;

  CheckLabel:= TLabel.Create(Page);  // создаем TLabel (для событий мыши)
  with CheckLabel do
    begin
      Width      :=ListBox.Width;
      Height      :=ListBox.Height;
      Autosize    :=False;
      Transparent :=True;
      OnMouseMove :=@CheckMouseMove;
      OnClick    :=@CheckOnClick;
      Parent      :=ListBox;
      Cursor      := 1;
    end;

  BitmapImage := TBitmapImage.Create(Page); // создаем TBitmapImage для
  with BitmapImage do                      // отображения картинок
    begin                                  // к описаниям
      AutoSize := True;
      Left        := ListBox.Left;
      Top        := ListBox.Top + ListBox.Height + 8;
      Width      := ListBox.Width;
      Height      := 32;
      Parent := Page.Surface;
    end;

  for i:=0 to ListBox.Items.Count - 1 do  // по кол-ву чекбоксов
    begin                                // создаем  TBitmap-ы
      SetArrayLength(InfoBmp, i+1);
      InfoBmp[i]:= TBitmap.Create;
    end;
  // для каждого чекбокса грузим свою картинку к описанию
  InfoBmp[0].LoadFromFile(ExpandConstant('{tmp}\Image1.bmp'));
  InfoBmp[1].LoadFromFile(ExpandConstant('{tmp}\Image2.bmp'));
  InfoBmp[2].LoadFromFile(ExpandConstant('{tmp}\Image3.bmp'));
end;


или
так
Код:

[Setup]
AppName=AppName
AppVerName=AppVerName
CreateAppDir=false

[Files]
Source: compiler:WizModernSmallImage.bmp; DestDir: {tmp}; Flags: dontcopy
Source: compiler:WizModernSmallImage-IS.bmp; DestDir: {tmp}; Flags: dontcopy

[_Code]
Var
  Page: TWizardPage;
  Text1,Text2,Text3,Text4: TNewStaticText;
  Panel: TPanel;
  ListBox: TListBox;
  Check1,Check2: TCheckBox;
  NoChecks,Label1,Label2: TLabel;
  Image: TBitmapImage;

Function Checked1: Boolean;
begin
  Result:=Check1.Checked
end;

Function Checked2: Boolean;
begin
  Result:=Check2.Checked
end;

Procedure Check1OnClick (Sender: TObject);
begin
  Check1.Checked:=Not(Check1.Checked)
end;

Procedure Check2OnClick (Sender: TObject);
begin
  Check2.Checked:=Not(Check2.Checked)
end;

procedure Check1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Text4.Enabled:=True
Text4.Caption:='Описание первого компонента'
Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizModernSmallImage.bmp'))
Image.Visible:=True
end;

procedure Check2MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Text4.Enabled:=True
Text4.Caption:='Описание второго компонента'
Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizModernSmallImage-IS.bmp'))
Image.Visible:=True
end;

procedure NoChecksMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Text4.Enabled:=False
Text4.Caption:='Наведите курсор мыши на название компонента, чтобы прочесть его описание.'
Image.Visible:=False
end;

Procedure InitializeWizard();
begin
  ExtractTemporaryFile('WizModernSmallImage.bmp')
  ExtractTemporaryFile('WizModernSmallImage-IS.bmp')

  Page:=CreateCustomPage(2, 'Компоненты устанавливаемой программы', 'Выберите компоненты, которые вы хотите установить.')

  Text1:=TNewStaticText.Create(Page)
  Text1.Left:=0
  Text1.Top:=0
  Text1.Width:=417
  Text1.Height:=28
  Text1.AutoSize:=False
  Text1.WordWrap:=True
  Text1.Caption:='Выберите компоненты программы, которые вы хотите установить. Нажмите на кнопку "Далее" для продолжения.'
  Text1.Parent:=Page.Surface

  Text2:=TNewStaticText.Create(Page)
  Text2.Left:=0
  Text2.Top:=63
  Text2.Width:=130
  Text2.Height:=42
  Text2.AutoSize:=False
  Text2.WordWrap:=True
  Text2.Caption:='Выберите компоненты программы для установки:'
  Text2.Parent:=Page.Surface

  Image:=TBitmapImage.Create(WizardForm)
  Image.Left:=0
  Image.Top:=Text2.Top + Text2.Height + 10;
  Image.Width:=55
  Image.Height:=55
  Image.Parent:=Page.Surface

  Panel:=TPanel.Create(Page)
  Panel.Left:=287
  Panel.Top:=60
  Panel.Width:=130
  Panel.Height:=160
  Panel.BevelInner:=bvLowered
  Panel.Parent:=Page.Surface

  Text3:=TNewStaticText.Create(Page)
  Text3.Left:=293
  Text3.Top:=54
  Text3.Font.Color:=clBlue
  Text3.Caption:='Описание'
  Text3.Parent:=Page.Surface

  Text4:=TNewStaticText.Create(Page)
  Text4.Left:=4
  Text4.Top:=10
  Text4.Width:=122
  Text4.Height:=140
  Text4.AutoSize:=False
  Text4.WordWrap:=True
  Text4.Parent:=Panel

  NoChecks:=TLabel.Create(Page)
  NoChecks.Width:=WizardForm.Width
  NoChecks.Height:=WizardForm.Height
  NoChecks.Autosize:=False
  NoChecks.Transparent:=True
  NoChecks.OnMouseMove:=@NoChecksMouseMove
  NoChecks.Parent:=Page.Surface

  ListBox:=TListBox.Create(Page)
  ListBox.Left:=135
  ListBox.Top:=60
  ListBox.Width:=140
  ListBox.Height:=160
  ListBox.Parent:=Page.Surface

  Check1:=TCheckBox.Create(Page)
  Check1.Left:=2
  Check1.Top:=0
  Check1.Checked:=True
  Check1.Parent:=ListBox

  Check2:=TCheckBox.Create(Page)
  Check2.Left:=2
  Check2.Top:=16
  Check2.Checked:=True
  Check2.Parent:=ListBox

  Label1:=TLabel.Create(Page)
  Label1.Left:=16
  Label1.Top:=2
  Label1.Caption:='Компонент 1'
  Label1.OnClick:=@Check1OnClick
  Label1.OnMouseMove:=@Check1MouseMove
  Label1.Parent:=Check1

  Label2:=TLabel.Create(Page)
  Label2.Left:=16
  Label2.Top:=2
  Label2.Caption:='Компонент 2'
  Label2.OnClick:=@Check2OnClick
  Label2.OnMouseMove:=@Check2MouseMove
  Label2.Parent:=Check2
end;


100pudov 21-11-2009 15:49 1276473

Вопрос простой и наверняка уже задавался. Но 200 страниц я не осилю.
Что прописать в скрипте, для возможности выбора вот к примеру этих установок. И вообще появления этого окна во время установки.



С созданием ярлыков все понятно, а вот с установкой дополнительных программ ничего не получается.
Какой нибудь скрипт для примера с флагом для доп программ. А дальше я сам разберусь.
Спасибо.

Habetdin 21-11-2009 15:53 1276477

100pudov, http://www.jrsoftware.org/ishelp/topic_taskssection.htm

100pudov 21-11-2009 16:12 1276505

Habetdin Спасибо конечно. Это из справки, я прочитал. Опять же там только про создание ярлыков.
Мне нужна всего одна строчка из [Tasks], которая добавит в установку, к примеру пункт (с флагом) для установки DirectX 9.0c.
На примере все понятнее.

Habetdin 21-11-2009 16:18 1276509

100pudov, пример:
Код:

[Tasks]
Name: dxinstall; Description: "Обновить DirectX"; GroupDescription: "Дополнительно:"

[Run]
Filename: "{src}\DirectX\dxsetup.exe"; Parameters: "/silent"; Tasks: dxinstall


100pudov 21-11-2009 16:32 1276518

Habetdin Спасибо. То, что надо. Все сработало, все легко.
На примере, всегда легче все воспринимается.

Colapse 21-11-2009 23:47 1276869

можно скрипт на черный цвет инстала,белиэ буквы в нем?плис!

postalok 22-11-2009 00:17 1276882

Помогите пожалуйста! Не могу создать инсталлятор больше 2 гб! У меня папка 7гб, компилирую инсталлятор. Пишет что неляза там больше 2гб создать =(

Habetdin 22-11-2009 00:25 1276887

postalok, делите на части..
Код:

[Setup]
DiskSpanning=true


Serega 22-11-2009 00:26 1276888

Цитата:

Цитата postalok
Не могу создать инсталлятор больше 2 гб! У меня папка 7гб, компилирую инсталлятор. Пишет что неляза там больше 2гб создать »

Используйте DiskSpanning
Цитата:

Цитата из Справки
[Setup]: DiskSpanning
Возможные значения: yes or no
Значение по умолчанию: no
Опмсание:

При значении yes будет производиться разбиение на диски. Определяет, создавать ли компилятору один файл SETUP.EXE, или делить его на файлы, которые помещаются на дискету, CD-ROM, DVD-ROM или другой носитель. Каждый файл в своем имени будет содержать номер, по которому можно будет определить на какой диск его следует скопировать. Скопируйте SETUP.EXE и SETUP-1.BIN на первый диск, SETUP-2.BIN на второй и т. д.

В этом случае размер каждого файла и число файлов, создаваемых для каждого диска диктуется директивой DiskSliceSize и SlicesPerDisk секции [Setup]. Другие директивы, отвечающие за разбиение на диски, которые вы захотите внедрить, должны включать директивы DiskClusterSize и ReserveBytes.

Обратите внимание, что нужно обязательно задать этим директивам значение yes, если размер сжатого файла инсталлятора превышает 2,100,000,000 байт, даже если вы не планируете разбивать инсталлятор на диски. (Инсталлятор будет работать правильно, даже если все SETUP-*.BIN файлы будут размещены на одном диске).

Упс... уже ответил Habetdin

Serega 22-11-2009 03:03 1276947

Berline, вы как-то спрашивали про выделение компонентов отдельными кнопками.
На тот момент, правильного решения я не нашёл, а оно было рядом...

Пример
Код:

; выделение или снятие отметки со всех компонентов одной кнопкой...
; Автор: Serega, http://forum.oszone.net/member.php?userid=88670

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Types]
Name: full; Description: Полная установка
Name: custom; Description: Выборочная установка; Flags: iscustom

[Components]
Name: a; Description: Моя программа™; Types: full custom
Name: a\a; Description: Руководство пользователя; Types: full
Name: a\a\a; Description: Русский; Flags: exclusive
Name: a\a\b; Description: English; Flags: exclusive
Name: a\b; Description: Справка; Types: full

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Components: a
Source: compiler:Examples\Readme-ru.txt; DestDir: {app}; Components: a\a\a
Source: compiler:Examples\Readme-en.txt; DestDir: {app}; Components: a\a\b
Source: compiler:Examples\MyProg.chm; DestDir: {app}; Components: a\b

[Code]
var
  i, k, count: Integer;

procedure btnClick(Sender: TObject);
begin
  count:= WizardForm.ComponentsList.Items.Count-1;
  for i:= count downto 0 do
    begin
      case TButton(Sender).Tag of
        0: WizardForm.ComponentsList.Checked[i]:= True;
        1: WizardForm.ComponentsList.Checked[i]:= False;
      end;
      WizardForm.ComponentsList.OnClickCheck(WizardForm.ComponentsList.ItemObject[i]);
    end;
end;

procedure InitializeWizard();
begin
  for i:= 0 to 1 do
  with TButton.Create(WizardForm) do
    begin
      SetBounds(295+k,210,60,25);
      OnClick:= @btnClick;
      Parent:= WizardForm.SelectComponentsPage;
      Tag:= i;
      case i of
        0: Caption:= 'Все';
        1: Caption:= 'Ничего';
      end;
      k:= 62;
    end;
end;


Zolotnik 22-11-2009 13:43 1277114

Вопрос такой:

Можно ли связать [Components] и [Types] с кодом определения свободного места на диске. дело в том, что в зависимости от выбраного диска должны вноситься разные записи реестра (пути соответствующие выбраному диску).
тоесть дополнительно к вариантам выбора установки и дополнительным компонентам. может как то через секцию [Tasks]?
Спасибо.

Serega 22-11-2009 14:36 1277173

Цитата:

Цитата Zolotnik
Можно ли связать [Components] и [Types] с кодом определения свободного места на диске »

Не совсем понятен вопрос, разясните поподробней.
Цитата:

Цитата Zolotnik
что в зависимости от выбраного диска должны вноситься разные записи реестра (пути соответствующие выбраному диску). »

При использовании коонстант пути и так будут в соответствии с выборанным диском, т.е. если использовать константу {app}, пример:
Код:

[Registry]
Root: HKLM; Subkey: Software\My Company\My Program; ValueType: string; ValueName: InstallPath; ValueData: {app}

{app} вернёт полный путь, куда устанавливается приложение.
Весь список возможных констант, можете посмотреть в Справке (есть ссылка в шапке темы), раздел Константы.

Zolotnik 22-11-2009 15:27 1277222

тоесть, если я вместо ValueData: D:\My Program\xxxx сделаю ValueData:{app}\xxxx то все будет так как надо?

тогда этот вопрос снимается как бесполезный:
Можно ли связать [Components] и [Types] с кодом определения свободного места на диске.

Спасибо Вам.

еще просьба: где то видел такой код, который скрывает типы установки, оставляя для выбора только компоненты. щас немогу найти.

Serega 22-11-2009 16:12 1277253

Цитата:

Цитата Zolotnik
тоесть, если я вместо ValueData: D:\My Program\xxxx сделаю ValueData:{app}\xxxx то все будет так как надо? »

Немного уточню,
пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Registry]
Root: HKLM; Subkey: Software\My Company\My Program; ValueType: string; ValueName: InstallPath; ValueData: {app}


{app} будет означать C:\Program Files\My Program (если С системный диск).

Цитата:

Цитата Zolotnik
где то видел такой код, который скрывает типы установки, оставляя для выбора только компоненты. щас немогу найти. »

пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Types]
Name: full; Description: Полная установка
Name: custom; Description: Выборочная установка; Flags: iscustom

[Components]
Name: a; Description: Моя программа™; Types: full custom
Name: a\a; Description: Руководство пользователя; Types: full
Name: a\a\a; Description: Русский; Flags: exclusive
Name: a\a\b; Description: English; Flags: exclusive
Name: a\b; Description: Справка; Types: full

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Components: a
Source: compiler:Examples\Readme-ru.txt; DestDir: {app}; Components: a\a\a
Source: compiler:Examples\Readme-en.txt; DestDir: {app}; Components: a\a\b
Source: compiler:Examples\MyProg.chm; DestDir: {app}; Components: a\b

[Code]
procedure InitializeWizard();
begin
  // скрываем TypesCombo
  WizardForm.TypesCombo.Hide;
  // чтоб смотрелось лучше, поднимаем выше и увеличиваем окно компонентов ComponentsList
  WizardForm.ComponentsList.Top:= WizardForm.TypesCombo.Top;
  WizardForm.ComponentsList.Height:= 160;
end;


Colapse 22-11-2009 17:24 1277296

можно скрипт на черный цвет инстала,белиэ буквы в нем?плиc скажите!нашел все скрипти што мне нужны кроме етого!

RapMan 22-11-2009 18:19 1277336

Доброе время суток!

У меня следующий вопрос: как с помощь Form Designer можно заюзать свою страницу в Inno Setup ? То есть мне нужно чтобы после определенного нажатие на Далее отобразилась сначала моя форма, а потом уже инсталл

Заранее спасибо!

malyta 22-11-2009 18:24 1277342

Colapse, Вот пожалуйста
Цитата:

читать дальше »
[code]
const
Color = clblack;

procedure InitializeWizard();
begin
WizardForm.PageNameLabel.Font.Color:=clWhite;
WizardForm.Font.Color:=clWhite;
WizardForm.Color:=Color;
WizardForm.WelcomePage.Color:=Color;
WizardForm.InnerPage.Color:=Color;
WizardForm.FinishedPage.Color:=Color;
WizardForm.LicensePage.Color:=Color;
WizardForm.PasswordPage.Color:=Color;
WizardForm.InfoBeforePage.Color:=Color;
WizardForm.UserInfoPage.Color:=Color;
WizardForm.SelectDirPage.Color:=Color;
WizardForm.SelectComponentsPage.Color:=Color;
WizardForm.SelectProgramGroupPage.Color:=Color;
WizardForm.SelectTasksPage.Color:=Color;
WizardForm.ReadyPage.Color:=Color;
WizardForm.PreparingPage.Color:=Color;
WizardForm.InstallingPage.Color:=Color;
WizardForm.InfoAfterPage.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.DiskSpaceLabel.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.GroupEdit.Color:=Color;
WizardForm.PasswordLabel.Color:=Color;
WizardForm.PasswordEdit.Color:=Color;
WizardForm.PasswordEditLabel.Color:=Color;
WizardForm.ReadyMemo.Color:=Color;
WizardForm.TypesCombo.Color:=Color;
WizardForm.WelcomeLabel1.Color:=Color;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.Color:=Color;
WizardForm.YesRadio.Color:=Color;
WizardForm.NoRadio.Color:=Color;
WizardForm.WelcomeLabel2.Color:=Color;
WizardForm.LicenseLabel1.Color:=Color;
WizardForm.InfoAfterClickLabel.Color:=Color;
WizardForm.ComponentsList.Color:=Color;
WizardForm.ComponentsDiskSpaceLabel.Color:=Color;
WizardForm.BeveledLabel.Color:=Color;
WizardForm.StatusLabel.Color:=Color;
WizardForm.FilenameLabel.Color:=Color;
WizardForm.SelectDirLabel.Color:=Color;
WizardForm.SelectStartMenuFolderLabel.Color:=Color;
WizardForm.SelectComponentsLabel.Color:=Color;
WizardForm.SelectTasksLabel.Color:=Color;
WizardForm.LicenseAcceptedRadio.Color:=Color;
WizardForm.LicenseNotAcceptedRadio.Color:=Color;
WizardForm.UserInfoNameLabel.Color:=Color;
WizardForm.UserInfoNameEdit.Color:=Color;
WizardForm.UserInfoOrgLabel.Color:=Color;
WizardForm.UserInfoOrgEdit.Color:=Color;
WizardForm.PreparingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Color:=Color;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
end;


Colapse 22-11-2009 18:28 1277344

malyta
спасибо!!!!

100pudov 22-11-2009 19:55 1277427

Инсталлятор не может запустить фаил с расширением "*.msi", конкретно фаил vcredist.msi, для установки Microsoft Visual C++. Пишет, что не является приложением Win32.
Из системы, фаил запускается и установка Visual C++ проходит нормально.
Файлы с расширением MSI являются упакованными инсталяционными файлами для Windows Installer. Может нужно какой-то ключ в скрипте прописывать, для установки этой проги?

Habetdin 22-11-2009 20:00 1277432

100pudov, запускайте через msiexec. Использование ключей и свойств установщика Windows
Код:

[Run]
Filename: msiexec; Parameters: "/i ""{src}\setup.msi"" /qn"; Flags: waituntilidle


100pudov 22-11-2009 20:34 1277463

Не хочет инсталятор применять параметры запуска msiexec.

[Run]
Filename: msiexec.exe; Parameters: /i {src}\Redist\vcredist.msi /qn; Tasks: visualc_redist; Flags: waituntilidle

Наверно, что-то не правильно.

Habetdin 22-11-2009 20:40 1277467

100pudov, а кавычки в пути?
Цитата:

Parameters: /i ""{src}\Redist\vcredist.msi"" /qn;
P.S.: {src} - каталог, в котором расположен инсталлятор, все константы - тут

100pudov 22-11-2009 21:10 1277486

Спасибо.
Вроде бы в таком виде прошла установка.

Filename: msiexec.exe; Parameters: /i "{src}\Redist\vcredist.msi"; Tasks: visualc_redist; Flags: waituntilidle

Жаль нет проги, типа ISTool, только с большим (раз в 100) параметрами установок. Спецом для таких как я.
А то я, уже в транс вошел со всеми этими параметрами, константами, ключами, кавычками.)

Zolotnik 22-11-2009 21:21 1277495

Serega, спасибо Вам большое. разобрался.

но есть еще желание: хочу что б сначала была страничка выбора дополнительних задач, а потом страничка выбора компонентов. по умолчанию наоборот. Как реализовать?

дело в том, что варианты установки (сетевая\локальная) я задаю через секцию [Tasks]. (в идеале разбить бы как то секцию [Tasks] на 2 странички: одна(с вариантами установки) до странички выбора компонентов, вторая - после.)

а в секции [Components] определяю дополнительние утилиты (в том числе две только для сетевой)

100pudov 22-11-2009 23:10 1277558

[Run]
Filename: {app}\{#MyAppExeName}; Description: {cm:LaunchProgram,{#MyAppName}}; Flags: waituntilidle postinstall skipifsilent
Filename: {src}\DirectX\DXSETUP.exe; WorkingDir: {src}\DirectX; Tasks: dxinstall; Flags: waituntilidle
Filename: msiexec.exe; Parameters: /i "{src}\Redist\vcredist.msi"; Tasks: visualc_redist; Flags: waituntilidle
Filename: {src}\Redist\wmp10-windowsxp-x86-ru-ru.exe; WorkingDir: {src}\Redist; Tasks: wmp10_windowsxp; Flags: waituntilidle

Почему инсталятор запускает установку всех трех прог сразу (в месте). Вроде бы Flags: waituntilidle должен ждать процесса установки предыдущей проги.
Как сделать, чтоб установка шла по очереди.

Habetdin 22-11-2009 23:30 1277579

100pudov, используйте waituntilterminated вместо waituntilidle, если у вас программы запускаются "громко", с участием пользователя..
Можно ведь "тихо" запускать:
Цитата:

Filename: {src}\DirectX\DXSETUP.exe; Parameters: /silent; WorkingDir: {src}\DirectX; Tasks: dxinstall; Flags: waituntilidle
Filename: msiexec.exe; Parameters: /i "{src}\Redist\vcredist.msi" /qn; Tasks: visualc_redist; Flags: waituntilidle

Цитата:

Цитата 100pudov
Вроде бы Flags: waituntilidle должен ждать процесса установки предыдущей проги. »

RTFM :read:

Serega 22-11-2009 23:37 1277583

Цитата:

Цитата Zolotnik
(в идеале разбить бы как то секцию [Tasks] на 2 странички: одна(с вариантами установки) до странички выбора компонентов, вторая - после.) »

Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Types]
Name: full; Description: Полная установка
Name: custom; Description: Выборочная установка; Flags: iscustom

[Components]
Name: a; Description: Моя программа™; Types: full custom
Name: a\a; Description: Руководство пользователя; Types: full
Name: a\a\a; Description: Русский; Flags: exclusive
Name: a\a\b; Description: English; Flags: exclusive
Name: a\b; Description: Справка; Types: full

[Tasks]
Name: main; Description: Я точно зарегистрированный пользователь :); GroupDescription: Вы точно зарегистрированный пользователь?; Flags: unchecked

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Components: a
Source: compiler:Examples\Readme-ru.txt; DestDir: {app}; Components: a\a\a
Source: compiler:Examples\Readme-en.txt; DestDir: {app}; Components: a\a\b
Source: compiler:Examples\MyProg.chm; DestDir: {app}; Components: a\b

[Code]
var
  Page: TInputOptionWizardPage;
  IsRegisteredUser: Boolean;

procedure InitializeWizard();
begin
  // Создание страницы
  Page:= CreateInputOptionPage(wpSelectDir, 'Лицензионное соглашение',
        'Вы зарегистрированный пользователь?',
        'Если вы зарегистрированы, поставьте флажок ниже и нажмите Далее.',False, False);
  // Добавление значений
  Page.Add('Я зарегистрированный пользователь');
  // Задание первоначальных значений (не обязательно)
  Page.Values[0]:= False;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID > Page.ID then
  // Передача значений переменным
  IsRegisteredUser:= Page.Values[0];
end;


RapMan 23-11-2009 00:32 1277621

кто-то может помочь мне с моей проблемой?

Serega 23-11-2009 00:51 1277631

Цитата:

Цитата RapMan
как с помощь Form Designer можно заюзать свою страницу в Inno Setup ? »

Открываете Form Designer создаёте страницу и копируете код из вкладки Пример кода. Затем вставляете в свой скрипт.
Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[CustomMessages]
SampleForm_Caption=SampleForm Caption
SampleForm_Description=SampleForm Description
SampleForm_Label1_Caption0=This is a demo label
SampleForm_Button1_Caption0=Button1
SampleForm_Button2_Caption0=Button2
SampleForm_ListBox1_Line0=Line1
SampleForm_ListBox1_Line1=Line2
SampleForm_ListBox1_Line2=Line3
SampleForm_ListBox1_Line3=Line4
SampleForm_ListBox1_Line4=Line5
SampleForm_CheckBox1_Caption0=CheckBox1
SampleForm_CheckBox2_Caption0=CheckBox2
SampleForm_CheckBox3_Caption0=CheckBox3
SampleForm_RadioButton1_Caption0=RadioButton1
SampleForm_RadioButton2_Caption0=RadioButton2

[Code]
var
  Label1: TLabel;
  Panel1: TPanel;
  Button1: TButton;
  Button2: TButton;
  ListBox1: TListBox;
  NewProgressBar1: TNewProgressBar;
  CheckBox1: TCheckBox;
  CheckBox2: TCheckBox;
  CheckBox3: TCheckBox;
  Panel2: TPanel;
  RadioButton1: TRadioButton;
  RadioButton2: TRadioButton;

{ SampleForm_Activate }

procedure SampleForm_Activate(Page: TWizardPage);
begin
  // enter code here...
end;

{ SampleForm_ShouldSkipPage }

function SampleForm_ShouldSkipPage(Page: TWizardPage): Boolean;
begin
  Result := False;
end;

{ SampleForm_BackButtonClick }

function SampleForm_BackButtonClick(Page: TWizardPage): Boolean;
begin
  Result := True;
end;

{ SampleForm_NextkButtonClick }

function SampleForm_NextButtonClick(Page: TWizardPage): Boolean;
begin
  Result := True;
end;

{ SampleForm_CancelButtonClick }

procedure SampleForm_CancelButtonClick(Page: TWizardPage; var Cancel, Confirm: Boolean);
begin
  // enter code here...
end;

{ SampleForm_CreatePage }

function SampleForm_CreatePage(PreviousPageId: Integer): Integer;
var
  Page: TWizardPage;
begin
  Page := CreateCustomPage(
    PreviousPageId,
    ExpandConstant('{cm:SampleForm_Caption}'),
    ExpandConstant('{cm:SampleForm_Description}')
  );

{ Label1 }
  Label1 := TLabel.Create(Page);
  with Label1 do
  begin
    Parent := Page.Surface;
    Caption := ExpandConstant('{cm:SampleForm_Label1_Caption0}');
    Left := ScaleX(16);
    Top := ScaleY(8);
    Width := ScaleX(92);
    Height := ScaleY(13);
  end;

  { Panel1 }
  Panel1 := TPanel.Create(Page);
  with Panel1 do
  begin
    Parent := Page.Surface;
    Left := ScaleX(8);
    Top := ScaleY(32);
    Width := ScaleX(393);
    Height := ScaleY(193);
    BevelInner := bvLowered;
    BevelWidth := ScaleX(2);
    BorderStyle := bsSingle;
    TabOrder := 0;
  end;

  { Button1 }
  Button1 := TButton.Create(Page);
  with Button1 do
  begin
    Parent := Panel1;
    Caption := ExpandConstant('{cm:SampleForm_Button1_Caption0}');
    Left := ScaleX(14);
    Top := ScaleY(14);
    Width := ScaleX(75);
    Height := ScaleY(23);
    TabOrder := 0;
  end;

  { Button2 }
  Button2 := TButton.Create(Page);
  with Button2 do
  begin
    Parent := Panel1;
    Caption := ExpandConstant('{cm:SampleForm_Button2_Caption0}');
    Left := ScaleX(94);
    Top := ScaleY(14);
    Width := ScaleX(75);
    Height := ScaleY(23);
    TabOrder := 1;
  end;

  { ListBox1 }
  ListBox1 := TListBox.Create(Page);
  with ListBox1 do
  begin
    Parent := Panel1;
    Left := ScaleX(14);
    Top := ScaleY(46);
    Width := ScaleX(153);
    Height := ScaleY(129);
    Items.Add(ExpandConstant('{cm:SampleForm_ListBox1_Line0}'));
    Items.Add(ExpandConstant('{cm:SampleForm_ListBox1_Line1}'));
    Items.Add(ExpandConstant('{cm:SampleForm_ListBox1_Line2}'));
    Items.Add(ExpandConstant('{cm:SampleForm_ListBox1_Line3}'));
    Items.Add(ExpandConstant('{cm:SampleForm_ListBox1_Line4}'));
    TabOrder := 2;
  end;

  { NewProgressBar1 }
  NewProgressBar1 := TNewProgressBar.Create(Page);
  with NewProgressBar1 do
  begin
    Parent := Panel1;
    Left := ScaleX(174);
    Top := ScaleY(158);
    Width := ScaleX(206);
    Height := ScaleY(17);
    Min := 0;
    Max := 100;
    Position := 50;
  end;

  { CheckBox1 }
  CheckBox1 := TCheckBox.Create(Page);
  with CheckBox1 do
  begin
    Parent := Panel1;
    Caption := ExpandConstant('{cm:SampleForm_CheckBox1_Caption0}');
    Left := ScaleX(182);
    Top := ScaleY(14);
    Width := ScaleX(97);
    Height := ScaleY(17);
    Font.Height := ScaleY(-11);
    Font.Name := 'Tahoma';
    TabOrder := 3;
  end;

  { CheckBox2 }
  CheckBox2 := TCheckBox.Create(Page);
  with CheckBox2 do
  begin
    Parent := Panel1;
    Caption := ExpandConstant('{cm:SampleForm_CheckBox2_Caption0}');
    Left := ScaleX(182);
    Top := ScaleY(38);
    Width := ScaleX(97);
    Height := ScaleY(17);
    TabOrder := 4;
  end;

  { CheckBox3 }
  CheckBox3 := TCheckBox.Create(Page);
  with CheckBox3 do
  begin
    Parent := Panel1;
    Caption := ExpandConstant('{cm:SampleForm_CheckBox3_Caption0}');
    Left := ScaleX(182);
    Top := ScaleY(62);
    Width := ScaleX(97);
    Height := ScaleY(17);
    TabOrder := 5;
  end;

  { Panel2 }
  Panel2 := TPanel.Create(Page);
  with Panel2 do
  begin
    Parent := Panel1;
    Left := ScaleX(174);
    Top := ScaleY(88);
    Width := ScaleX(205);
    Height := ScaleY(59);
    TabOrder := 6;
  end;

  { RadioButton1 }
  RadioButton1 := TRadioButton.Create(Page);
  with RadioButton1 do
  begin
    Parent := Panel2;
    Caption := ExpandConstant('{cm:SampleForm_RadioButton1_Caption0}');
    Left := ScaleX(16);
    Top := ScaleY(8);
    Width := ScaleX(113);
    Height := ScaleY(17);
    TabOrder := 0;
  end;

  { RadioButton2 }
  RadioButton2 := TRadioButton.Create(Page);
  with RadioButton2 do
  begin
    Parent := Panel2;
    Caption := ExpandConstant('{cm:SampleForm_RadioButton2_Caption0}');
    Left := ScaleX(16);
    Top := ScaleY(32);
    Width := ScaleX(113);
    Height := ScaleY(17);
    TabOrder := 1;
  end;

  with Page do
  begin
    OnActivate := @SampleForm_Activate;
    OnShouldSkipPage := @SampleForm_ShouldSkipPage;
    OnBackButtonClick := @SampleForm_BackButtonClick;
    OnNextButtonClick := @SampleForm_NextButtonClick;
    OnCancelButtonClick := @SampleForm_CancelButtonClick;
  end;

  Result := Page.ID;
end;

{ SampleForm_InitializeWizard }

procedure InitializeWizard();
begin
  SampleForm_CreatePage(wpWelcome);
end;


malyta 23-11-2009 01:10 1277643

Цитата:

Цитата Colapse
можно скрипт на черный цвет инстала,белиэ буквы в нем?плиc скажите!нашел все скрипти што мне нужны кроме етого! »

Пример скрипта (черный цвет инсталлятора, черные кнопки, темная папка на странице выбора установки приложения,растянутое фоновое изображение,растянутое изображение WizardSmallImage.bmp, изображение в левом нижнем углу,на странице завершения установки WizardImage.bmp )
ссылка на архив с изображениями которые используются в скрипте
Цитата:

читать дальше »
; http://forum.oszone.net/thread-148703-47.html
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{35133CCE-057F-4218-9C63-007B8E03A776}
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
WizardImageFile=D:\image\WizardImage.bmp
WizardSmallImageFile=D:\image\WizardSmallImage.bmp

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

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

[Files]
Source: "C:\Program Files\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\image\button.bmp"; DestDir: "{tmp}"; Flags: dontcopy
Source: "D:\image\black_folder.bmp"; DestDir: "{tmp}"; Flags: dontcopy
Source: "D:\image\logo.bmp"; DestDir: "{tmp}"; Flags: dontcopy
Source: "D:\image\background.bmp"; DestDir: "{tmp}"; Flags: dontcopy
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"
Name: "{commondesktop}\My Program"; Filename: "{app}\MyProg.exe"; Tasks: desktopicon

[Run]
Filename: "{app}\MyProg.exe"; Description: "{cm:LaunchProgram,My Program}"; Flags: nowait postinstall skipifsilent

[code]
const
ButtonWidth = 80; //Указываем размер кнопок
ButtonHeight = 23;

bidBack = 0;
bidNext = 1;
bidCancel = 2;
bidDirBrowse = 3;
bidGroupBrowse = 4;

var
ButtonPanel: array [0..4] of TPanel;
ButtonImage: array [0..4] of TBitmapImage;
ButtonLabel: array [0..4] of TLabel;

procedure ButtonLabelClick(Sender: TObject);
var
Button: TButton;
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
case TLabel(Sender).Tag of
bidBack: Button:=WizardForm.BackButton
bidNext: Button:=WizardForm.NextButton
bidCancel: Button:=WizardForm.CancelButton
bidDirBrowse: Button:=WizardForm.DirBrowseButton
bidGroupBrowse: Button:=WizardForm.GroupBrowseButton
else
Exit
end
Button.OnClick(Button)
end;

procedure ButtonLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if ButtonLabel[TLabel(Sender).Tag].Enabled then
ButtonImage[TLabel(Sender).Tag].Left:=-ButtonWidth
end;

procedure ButtonLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
end;

procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
Image: TBitmapImage;
Panel: TPanel;
Labl: TLabel;

begin
Panel:=TPanel.Create(WizardForm)
Panel.Left:=AButton.Left
Panel.Top:=AButton.Top
Panel.Width:=AButton.Width
Panel.Height:=AButton.Height
Panel.Tag:=AButtonIndex
Panel.Parent:=AButton.Parent
ButtonPanel[AButtonIndex]:=Panel

Image:=TBitmapImage.Create(WizardForm) //Рисунок который ложится на кнопку
Image.Width:=160 //Обязательно прописать оригинальный размер рисунка
Image.Height:=23
Image.Enabled:=False
Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\button.bmp'))
Image.Parent:=Panel
ButtonImage[AButtonIndex]:=Image

with TLabel.Create(WizardForm) do begin
Tag:=AButtonIndex
Parent:=Panel
Width:=Panel.Width
Height:=Panel.Height
Transparent:=True
OnClick:=@ButtonLabelClick
OnDblClick:=@ButtonLabelClick
OnMouseDown:=@ButtonLabelMouseDown
OnMouseUp:=@ButtonLabelMouseUp
end

Labl:=TLabel.Create(WizardForm) //Текст кнопок
Labl.Left:=13 //Указываем положение текста
Labl.Top:=5
Labl.Autosize:=True
Labl.Alignment:=taCenter
Labl.Tag:=AButtonIndex
Labl.Transparent:=True
Labl.Font.Color:=clWhite //Цвет текста
Labl.Caption:=AButton.Caption
Labl.OnClick:=@ButtonLabelClick
Labl.OnDblClick:=@ButtonLabelClick
Labl.OnMouseDown:=@ButtonLabelMouseDown
Labl.OnMouseUp:=@ButtonLabelMouseUp
Labl.Parent:=Panel
ButtonLabel[AButtonIndex]:=Labl
end;

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
ButtonLabel[AButtonIndex].Caption:=AButton.Caption
ButtonPanel[AButtonIndex].Visible:=AButton.Visible
ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=True
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=False
end;

procedure CurPageChanged1(CurPageID: Integer);
begin
UpdateButton(WizardForm.BackButton,bidBack)
UpdateButton(WizardForm.NextButton,bidNext)
UpdateButton(WizardForm.CancelButton,bidCancel)
end;

procedure InitializeWizard1();
begin
WizardForm.BackButton.Width:=ButtonWidth
WizardForm.BackButton.Height:=ButtonHeight

WizardForm.NextButton.Width:=ButtonWidth
WizardForm.NextButton.Height:=ButtonHeight

WizardForm.CancelButton.Width:=ButtonWidth
WizardForm.CancelButton.Height:=ButtonHeight

WizardForm.DirBrowseButton.Left:=337
WizardForm.DirBrowseButton.Width:=ButtonWidth
WizardForm.DirBrowseButton.Height:=ButtonHeight

WizardForm.GroupBrowseButton.Left:=337
WizardForm.GroupBrowseButton.Width:=ButtonWidth
WizardForm.GroupBrowseButton.Height:=ButtonHeight

WizardForm.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick

WizardForm.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick

ExtractTemporaryFile('button.bmp')
LoadButtonImage(WizardForm.BackButton,bidBack)
LoadButtonImage(WizardForm.NextButton,bidNext)
LoadButtonImage(WizardForm.CancelButton,bidCancel)
LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;

procedure InitializeWizard2();
begin
with WizardForm do begin
with MainPanel do
Height := Height - 1;
with WizardSmallBitmapImage do begin
Left := 0;
Top := 0;
Height := 55; //Размер рисунка
Width := 483; //
end;
with PageNameLabel do begin
Font.Name := 'Tahoma'
Width := Width - 483; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 483; //
end;
with PageDescriptionLabel do begin
Font.Name := 'Tahoma'
Width := Width - 483; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 483; //
end;
end;
end;

const
Color = clblack;

procedure InitializeWizard3();
begin
WizardForm.PageNameLabel.Font.Color:=clWhite;
WizardForm.Font.Color:=clWhite;
WizardForm.Color:=Color;
WizardForm.WelcomePage.Color:=Color;
WizardForm.InnerPage.Color:=Color;
WizardForm.FinishedPage.Color:=Color;
WizardForm.LicensePage.Color:=Color;
WizardForm.PasswordPage.Color:=Color;
WizardForm.InfoBeforePage.Color:=Color;
WizardForm.UserInfoPage.Color:=Color;
WizardForm.SelectDirPage.Color:=Color;
WizardForm.SelectComponentsPage.Color:=Color;
WizardForm.SelectProgramGroupPage.Color:=Color;
WizardForm.SelectTasksPage.Color:=Color;
WizardForm.ReadyPage.Color:=Color;
WizardForm.PreparingPage.Color:=Color;
WizardForm.InstallingPage.Color:=Color;
WizardForm.InfoAfterPage.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.DiskSpaceLabel.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.GroupEdit.Color:=Color;
WizardForm.PasswordLabel.Color:=Color;
WizardForm.PasswordEdit.Color:=Color;
WizardForm.PasswordEditLabel.Color:=Color;
WizardForm.ReadyMemo.Color:=Color;
WizardForm.TypesCombo.Color:=Color;
WizardForm.WelcomeLabel1.Color:=Color;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.Color:=Color;
WizardForm.YesRadio.Color:=Color;
WizardForm.NoRadio.Color:=Color;
WizardForm.WelcomeLabel2.Color:=Color;
WizardForm.LicenseLabel1.Color:=Color;
WizardForm.InfoAfterClickLabel.Color:=Color;
WizardForm.ComponentsList.Color:=Color;
WizardForm.ComponentsDiskSpaceLabel.Color:=Color;
WizardForm.BeveledLabel.Color:=Color;
WizardForm.StatusLabel.Color:=Color;
WizardForm.FilenameLabel.Color:=Color;
WizardForm.SelectDirLabel.Color:=Color;
WizardForm.SelectStartMenuFolderLabel.Color:=Color;
WizardForm.SelectComponentsLabel.Color:=Color;
WizardForm.SelectTasksLabel.Color:=Color;
WizardForm.LicenseAcceptedRadio.Color:=Color;
WizardForm.LicenseNotAcceptedRadio.Color:=Color;
WizardForm.UserInfoNameLabel.Color:=Color;
WizardForm.UserInfoNameEdit.Color:=Color;
WizardForm.UserInfoOrgLabel.Color:=Color;
WizardForm.UserInfoOrgEdit.Color:=Color;
WizardForm.PreparingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Color:=Color;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
end;

procedure InitializeWizard4();
begin
ExtractTemporaryFile('black_folder.bmp');
WizardForm.SelectDirBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\black_folder.bmp'));
WizardForm.SelectDirBitmapImage.AutoSize:=true;
WizardForm.SelectGroupBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\black_folder.bmp'));
WizardForm.SelectGroupBitmapImage.AutoSize:=true;
end;

var
LogoImage:TBitmapImage;
LogoLabel: TLabel;
LogoPanel: TPanel;

procedure LogoOnClick(Sender: TObject);
var ReturnCode: Integer;
begin
ShellExec('open', 'http://сайт.ру', '', '', SW_SHOWNORMAL, ewNoWait, ReturnCode)
end;

procedure InitializeWizard5();
begin
ExtractTemporaryFile('logo.bmp');
LogoPanel := TPanel.Create(WizardForm);
with LogoPanel do
begin
Parent := WizardForm;
Left := ScaleX(5);
Top := ScaleY(320);
Width := ScaleX(161);
Height := ScaleY(36);
BevelOuter := bvNone;
end;

LogoImage := TBitmapImage.Create(WizardForm);
with LogoImage do
begin
Parent := LogoPanel;
Left := ScaleX(0);
Top := ScaleY(0);
AutoSize:=true;
ReplaceColor:=clFuchsia;
ReplaceWithColor:=clBtnFace;
Bitmap.LoadFromFile(ExpandConstant('{tmp}\logo.bmp'));
end;

LogoLabel := TLabel.Create(WizardForm);
with LogoLabel do
begin
Parent := LogoPanel;
Width := LogoPanel.Width;
Height := LogoPanel.Height;
Transparent:=True;
Cursor := crHand;
OnClick:=@LogoOnClick;
end;
end;

var
WelcomeLabel1, WelcomeLabel2: TLabel;
BmpFile: TBitmapImage;

procedure InitializeWizard6();
begin
ExtractTemporaryFile('background.bmp');

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\background.bmp'));
BmpFile.SetBounds(0, 0, 483, 313);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.WelcomePage;

with WizardForm do
begin
WelcomeLabel1.Hide;
WelcomeLabel2.hide;
end;

WelcomeLabel1:= TLabel.Create(WizardForm);
with WelcomeLabel1 do
begin
WelcomeLabel1.Alignment:=taCenter;
Left:= ScaleX(176);
Top:= ScaleY(66);
Width:= ScaleX(301);
Height:= ScaleY(71);
AutoSize:= false;
Transparent:= true;
WordWrap:= true;
Font.Name:='Arial'
Font.Size:= 12;
Font.Color:=ClWhite
Parent:= WizardForm.WelcomePage;
Caption:= WizardForm.WelcomeLabel1.Caption;
end;

WelcomeLabel2:=TLabel.Create(WizardForm);
with WelcomeLabel2 do
begin
WelcomeLabel2.Alignment:=taCenter;
Top:= ScaleY(136);
Left:= ScaleX(176);
Width:= ScaleX(301);
Height:= ScaleY(300);
AutoSize:= false;
WordWrap:= true;
Font.Color:=ClWhite
Font.Name:='Tahoma'
Transparent:= true;
Parent:= WizardForm.WelcomePage;
Caption:= WizardForm.WelcomeLabel2.Caption;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
CurPageChanged1(CurPageID);
end;

procedure InitializeWizard();
begin
InitializeWizard1();
InitializeWizard2();
InitializeWizard3();
InitializeWizard4();
InitializeWizard5();
InitializeWizard6();
end;

RapMan, не приходилось работать с выше указаной программой.

Berline 23-11-2009 10:29 1277802

День Добрый!
Так сказать, очередной вопрос хотелка, не взыщите строго...
Через реестр добавляю во такое в контекстное меню проводника, для простоты и удобства, но:
Код:

Root: HKCR; SubKey: Directory\shell\FarHere; ValueType: string; ValueData: Open Far Here; Flags: uninsdeletekey 
Root: HKCR; SubKey: Directory\shell\FarHere\command; ValueType: expandsz; ValueData: """%PROGRAMFILES%\Far 2\Far.exe"" ""%1"""; Flags: uninsdeletekey 
Root: HKCR; SubKey: Drive\shell\FarHere; ValueType: string; ValueData: Open Far Here; Flags: uninsdeletekey 
Root: HKCR; SubKey: Drive\shell\FarHere\command; ValueType: expandsz; ValueData: """%PROGRAMFILES%\Far 2\Far.exe"" ""%1"""; Flags: uninsdeletekey

Чтоб это сработало, нужно запретить инсталлятору выбирать путь установки, а следовательно, не очень хорошо...
Можно ли как-то реализовать через код, чтобы он автоматически подставлял путь той папки, куда выбрали установить программу, в момент инсталла?

***

И всетки как обновлять корректно значение переменной Path переменных среды, для устанавливаемого приложения?

A1EXXX 23-11-2009 12:54 1277926

Berline, если я правильно понял, то есть переменная {app}, которую в данном случае лучше записать вместо %PROGRAMFILES%\Far 2, и выбранный путь добавиться в реестр....

Habetdin 23-11-2009 13:09 1277934

Berline, используйте константу {app} вместо %PROGRAMFILES%\Far 2
A1EXXX,
Цитата:

Цитата A1EXXX
есть переменная {app}, которую в данном случае лучше записать вместо %PROGRAMFILES% »

%ProgramFiles% - {pf}
А вот {app} это путь установки ;)

Berline 23-11-2009 13:23 1277947

Да, спасибо!
Главное, куда копировать файло - переменную app я прописал, в то что и про реестр это проканает - не подумал!

A1EXXX 23-11-2009 13:27 1277953

Цитата:

Цитата Habetdin
%ProgramFiles% - {pf}
А вот {app} это путь установки »

Эт я знаю, но разве я написал что-то не так? :)
Упс, то я сначала недоглядел, потом исправил...

ADremLIN 23-11-2009 16:15 1278096

Добавлены примеры использования

Функции изменяющие системный %PATH% (добавляет/удаляет <ваш_путь>)

A1EXXX 23-11-2009 18:35 1278206

Помогите разобраться: есть простенький скрипт с запросом второго диска для распаковки FreeArc:
читать дальше »

Цитата:

#define MyAppName "Test"
#define MyAppVerName "Test"
#define MyAppExeName "Test.exe"

[Setup]
AppName={#MyAppName}
AppVerName={#MyAppName}
DefaultDirName={pf}\{#MyAppName}
DirExistsWarning=no
;DisableReadyPage=true
ShowLanguageDialog=auto
OutputBaseFilename=setup
OutputDir=.
UninstallDisplayIcon={app}\{#MyAppExeName}
DefaultGroupName={#MyAppName}
InternalCompressLevel=none
Compression=none

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

[Languages]
Name: eng; MessagesFile: compiler:Default.isl
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[Files]
Source: C:\Program Files\FreeArc\bin\Arc.exe; DestDir: {tmp}; Flags: dontcopy

[CustomMessages]
ExtrError=Произошла ошибка во время извлечения данных. Установка будет прервана.

[code]
var
SecondProgressBar: TNewProgressBar;

procedure InitializeWizard();
begin
WizardForm.FileNameLabel.Hide;
WizardForm.StatusLabel.Top:=ScaleY(81);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.StatusLabel.Width:=ScaleX(262);
WizardForm.ProgressGauge.Top:=ScaleY(100);
WizardForm.ProgressGauge.Left:=ScaleX(155);
WizardForm.ProgressGauge.Width:=ScaleX(262);

SecondProgressBar := TNewProgressBar.Create(WizardForm);
with SecondProgressBar do
begin
Parent := WizardForm.InstallingPage;
Left := ScaleX(0);
Top := ScaleY(100);
Width := ScaleX(150);
Height := ScaleY(21);
Min := 0;
Max := 13; //задается как (кол-во распаковываемых архивов * 3) + 1
end;
end;

procedure PlsInsertNextDisk(num: integer; CheckedFile: string);
var Capt:string;
begin
CheckedFile:=ExpandConstant(CheckedFile);
if not FileExists(CheckedFile) then begin
Capt:='Пожалуйста, вставьте диск %n, содержащий файл %f и нажмите ОК для продолжения установки.';
StringChange(Capt, '%n', inttostr(num));
StringChange(Capt, '%f', ExtractFileName(CheckedFile));
MsgBox(Capt, mbInformation, MB_OK);
PlsInsertNextDisk(num, CheckedFile);
end;
end;

procedure ExtractArc(arcArchName,arcDestDir:string);
var ResCode:integer;
begin
WizardForm.StatusLabel.Caption:=SetupMessage(msgStatusExtractFiles);
Exec(ExpandConstant('{tmp}\arc.exe'), 'x '+AddQuotes(ExpandConstant(arcArchName))+' -y -dp'+AddQuotes(ExpandConstant(arcDestDir)), '', SW_HIDE, ewWaitUntilTerminated, ResCode);
if (ResCode <> 0) then begin
MsgBox(ExpandConstant('{cm:ExtrError}'), mbCriticalError, MB_OK);
SecondProgressBar.Hide;
DelTree(ExpandConstant('{app}'), True, True, True);
Abort;
end else
SecondProgressBar.Position:= SecondProgressBar.Position+3
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then begin
WizardForm.StatusLabel.Caption:=SetupMessage(msgStatusExtractFiles);
ExtractTemporaryFile('arc.exe');
SecondProgressBar.Position:=SecondProgressBar.Position+1;

ExtractArc('{src}\data-1.arc','{app}\');
ExtractArc('{src}\data-2.arc','{app}\');

PlsInsertNextDisk(2, '{src}\data-3.arc'); //если data4.arc не найден в корне диска, просим второй диск
ExtractArc('{src}\data-3.arc','{app}\');
ExtractArc('{src}\data-4.arc','{app}\');
PlsInsertNextDisk(1, '{src}\data-1.arc'); //снова просим первый диск
end;
end;

Если пытаюсь установить в папку по умолчанию (именно этого скрипта) - не распаковывается, ошибка! Если, например, меняю путь на D:\Games\Test - распаковывается!
Теперь самое ужасное: использую этот скрипт для игры - ни в какую папку, ни на какой диск распаковка не идёт!!! Пробовал на одних и тех же архивах! Help! :(
Serega, как-то пробовал ваш скрипт FreeArc - вообще не распаковывалось... что я не так делаю? :(
З.Ы. Окно во время распаковки не кликабельное, т.е. свернуть, переместить нельзя, - это можно как-то исправить???

A1EXXX 23-11-2009 18:52 1278216

Inno Setup ISCmplr 5.3.6 (build 091123) от ResTools

RapMan 23-11-2009 19:03 1278229

Цитата:

Цитата Serega
Пример кода »

у меня в Form Designer нету такой закладки, есть
Редактор кода но он показывает только:
Код:

var
  Memo1: TMemo;
  ListBox1: TListBox;
  CheckBox1: TCheckBox;

а вот координаты и другие свойства объектов - нету, где их взять?
Версия 1.1.2c

нашел, оказывается в настройках нужно было поставить... Все спасибо!

A1EXXX 23-11-2009 20:24 1278290

:search: :sorry:

Serega 23-11-2009 22:07 1278410

Цитата:

Цитата A1EXXX
Помогите разобраться: »

Лишний бэкслеш, т.е. надо так - ExtractArc('{src}\data-1.arc','{app}'); и т.д.

Цитата:

Цитата A1EXXX
как-то пробовал ваш скрипт FreeArc - вообще не распаковывалось... что я не так делаю? »

У меня всё нормально распаковывается...

Цитата:

Цитата A1EXXX
Окно во время распаковки не кликабельное, т.е. свернуть, переместить нельзя, - это можно как-то исправить??? »

При использовании ewWaitUntilTerminated окно и будет не кликабельным...
Выход из ситуации - это запускать распаковку без ожидания, плюс добавить процедуру в которой проверять в цикле список процессов и если arc.exe есть, то делать ожидание, скажем 200-300 мс.
Процесс можно проверять через ISTask.dll или через функцию IsProgRunning, из этого скрипта (правда работает не на всех версиях Windows):
Пример
Код:

; В Диспетчере задач, вкладка Процессы, присутствует MyProc.exe.
; Как его остановить программно, аналогично тому, как это делает кнопка Завершить процесс в Диспетчере?
; Данный пример показывает, как проверить работает ли программа и если необходимо, то завершить её.
; Не уверен, что будет работать на всех версиях Windows...

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes
VersionInfoCopyright=Serega, serg_0675@mail.ru

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

[Code]
var
  ResultCode: Integer;

function IsProgRunning(ProgName: string): Boolean;
// функция определяет, запущенно ли приложение
var
  Size: Integer;
begin
  Result:= False;
  Exec('cmd', '/c tasklist /fi "IMAGENAME eq ' + ProgName + '" >"' +
    ExpandConstant('{tmp}\RunList"'), '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
  if FileSize(ExpandConstant('{tmp}\RunList'), Size) then
    if Size > 0 then Result:= True;
end;

function CloseProg(ProgName: string; Child: Boolean): Boolean;
// функция завершает работающее приложение со всеми дочерними (Child) процессами
var
  Tree: string;
begin
  Result:= False;
  if Child then Tree:= ' /t' else Tree:= '';
  Exec('cmd', '/c taskkill /f' + Tree + ' /im ' + ProgName, '', SW_HIDE,
    ewWaitUntilTerminated, ResultCode);
  if not IsProgRunning(ProgName) then Result:= True;
end;

function InitializeSetup(): Boolean;
begin
  Result:= False;
  if Exec(ExpandConstant('{win}\notepad.exe'), '', '', SW_SHOWMINIMIZED, ewNoWait, ResultCode) then
  if IsProgRunning('notepad.exe') then
    if MsgBox('Обнаружена работающая программа notepad. Закрыть её?',
      mbConfirmation, MB_YESNO) = IDYES then
    if CloseProg('notepad.exe', True) then
      begin
        MsgBox('Программа успешно завершена.', mbInformation, MB_OK)
        Result:= True;
      end
    else MsgBox('К сожалению, программу завершить не удалось.', mbInformation, MB_OK);
end;


A1EXXX 23-11-2009 22:07 1278411

Убрал, теперь всё как по маслу :tongue:
Буду пробовать добавить кликабельность ;)
Serega, как всегда на высоте, респект :good:

Нифига не получается :(

Serega 23-11-2009 22:48 1278458

Цитата:

Цитата A1EXXX
не получается »

а конкретней, что именно не получается?

A1EXXX 23-11-2009 22:55 1278461

Serega, не знаю, как применить это в моём случае... :( Очень нужна помощь гуру :blush:


Можно ли в этом коде:
Цитата:

[Dirs]
Name: "{app}"; Attribs: system; AfterInstall: CreateIni();

[Files]
Source: C:\icon.ico; DestDir: {app}

[code]
procedure CreateIni();
begin
SaveStringsToFile(ExpandConstant('{app}\Desktop.ini'), ['[.ShellClassInfo]',
'IconFile=icon.ico',
'IconIndex=0'], False)
end;
добавить файлу Desctop.ini атрибуты system и hidden. Альтернативку нашёл: Source: "C:\Desktop.ini"; DestDir: "{app}"; Attribs: system hidden, но создавать файл каждый раз вручную надоедает :(

Berline 24-11-2009 12:07 1278812

Снова я! Наверн боян... наверн примитив...
Сколько бы я не добавлял в секцию [Tasks] элементы, по дефолту всегда галочка стоит... Как ее снять? т.е. чтоб пир инсталле галочка не стояла на той задаче, на котороу ненад...
А итакж добавляю в [Run] программу, чтоб на последней странице была галочка - тож по дефолту она стоит...

A1EXXX 24-11-2009 12:26 1278823

Berline, добавь после каждого Flags: unchecked :)

Raf-9600 24-11-2009 20:02 1279125

Ктонить может объединить эти коды?

Запрет установки в папку Windows
читать дальше »
Function NextButtonClick(CurPageID: Integer): Boolean; Begin
Result:= True
if (CurPageID = wpSelectDir) and (Pos(Uppercase(ExpandConstant('{win}')), Uppercase(ExpandConstant('{app}'))) > 0) then Result:= MessageBox(StrToInt(ExpandConstant('{wizardhwnd}')), ExpandConstant('{cm:SysDirSelect}'), 'Установка в системную папку', MB_YESNO or $30) = idYes;
End;


Описания компонентов
читать дальше »
function enabledesc(ComponentsListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';

function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';

var
Info: TNewStaticText;
InfoCaption: TNewStaticText;
InfoPanel: TPanel;

procedure DeinitializeSetup();
begin
disabledesc();
end;

procedure InitializeWizard();
begin
WizardForm.TYPESCOMBO.Visible:= false;
WizardForm.ComponentsList.Height := WizardForm.ComponentsList.Height + WizardForm.ComponentsList.Top - WizardForm.TYPESCOMBO.Top;
WizardForm.ComponentsList.Top := WizardForm.TYPESCOMBO.Top;
WizardForm.ComponentsList.Width := ScaleX(200);
InfoPanel := TPanel.Create(WizardForm);
InfoPanel.Parent := WizardForm.SelectComponentsPage;
InfoPanel.Caption := '';
InfoPanel.Top := WizardForm.ComponentsList.Top;
InfoPanel.Left := ScaleX(216);
InfoPanel.Width := ScaleX(200);
InfoPanel.Height := WizardForm.ComponentsList.Height;
InfoPanel.BevelInner := bvRaised;
InfoPanel.BevelOuter := bvLowered;
InfoCaption := TNewStaticText.Create(WizardForm);
InfoCaption.Parent := WizardForm.SelectComponentsPage;
InfoCaption.Caption := 'ГиКц';
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 := 'Переместите ваш указатель мыши на компоненты чтобы увидеть их описание.';
Info.WordWrap := true;
enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,
'Английская озвучка;'+ // SoundUnit\eng
'Французская озвучка;'+ // SoundUnit\fra
'Немецкая озвучка;'+ // SoundUnit\deu
'Итальянская озвучка;'+ // SoundUnit\ita
'Испанская озвучка;' // SoundUnit\spa
);
end;


Сколько есть, и требуеться для установки
читать дальше »
var
NeedSize:Integer;
FreeMB, TotalMB: Cardinal;
NeedSpaceLabel: TLabel;
n: Integer;
VolumeName, FileSystemName: String;
VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint;
ListBox: TListBox;
StartMenuTreeView: TStartMenuFolderTreeView;

procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False else
WizardForm.NextButton.Enabled := True; end;

procedure GetNeedSpaceCaption;
begin
if NeedSize > 1024 then
NeedSpaceLabel.Caption := 'Требуется как минимум '+ FloatToStr(round(NeedSize/1024*100)/100) + ' Гб свободного дискового пространства.' else
NeedSpaceLabel.Caption := 'Требуется как минимум '+ IntToStr(NeedSize)+ ' Мб свободного дискового пространства.';end;

const oneMB= 1024*1024;
function GetLogicalDrives: DWord; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(nDrive: String): Longint; external 'GetDriveTypeA@kernel32.dll stdcall';
function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';
function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';

Function ByteOrTB(Bytes: Extended; noMB: Boolean): String; { Перевод числа в значение бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)}
Begin
if not noMB then Result:= FloatToStr(Int(Bytes)) +' Мб' else
if Bytes < 1024 then Result:= FloatToStr(Int(Bytes)) +' Бт' else
if Bytes/1024 < 1024 then Result:= FloatToStr(round((Bytes/1024)*10)/10) +' Кб' else
If Bytes/oneMB < 1024 then Result:= FloatToStr(round(Bytes/oneMB*100)/100) +' Мб' else
If Bytes/oneMB/1000 < 1024 then Result:= FloatToStr(round(Bytes/oneMB/1024*1000)/1000) +' Гб' else
Result:= FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Тб'
StringChange(Result, ',', '.')
End;

Function DelSP(String: String): String; { Удаление начальных, конечных и повторных пробелов }
Begin while (Pos(' ', String) > 0) do Delete(String, Pos(' ', String), 1); Result:= Trim(String); End;

Function CutString(String: String; MaxLength: Longint): String; { Обрезать строку до заданного кол-ва символов}
Begin
if Length(String) > MaxLength then Result:= Copy(String, 1, 6) +'...'+ Copy(String, Length(String) - MaxLength +9, MaxLength)
else Result:= String;
End;

Procedure GetDiskInfo(Disk: String);
Begin
FileSystemName:= StringOfChar(' ', 32); VolumeName:= StringOfChar(' ', 256);
GetVolumeInformation(Disk, VolumeName, 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, 31);
FileSystemName:= DelSp(FileSystemName); VolumeName:= DelSp(VolumeName); if VolumeName='' then VolumeName:='без метки';
End;

Procedure ListBoxRefresh; var FreeB, TotalB: Cardinal; Path, String: string; Begin
ListBox.Items.Clear
for n:= 1 to 31 do // диск 'А' пропустить
if (GetLogicalDrives and (1 shl n)) > 0 then
if (GetDriveType(Chr(ord('A') + n) +':\') = 2) or (GetDriveType(Chr(ord('A') + n) +':\') = 3) then
if GetSpaceOnDisk(Chr(ord('A') + n) +':\', True, FreeMB, TotalMB) then ListBox.Items.Add(Chr(ord('A') + n) +':');
for n:= 0 to ListBox.Items.Count -1 do begin
Path:= Copy(ListBox.Items[n],1,2) +'\' { если в накопителе нет диска, пропустить обновление }
if GetSpaceOnDisk(Path, False, FreeB, TotalB) and GetSpaceOnDisk(Path, True, FreeMB, TotalMB) then begin GetDiskInfo(Path);
if FreeB >= $7FFFFFFF then String:= PadL(ByteOrTB(FreeMB*oneMB, true),10) else String:= PadL(ByteOrTB(FreeB, true),10);
if TotalB >= $7FFFFFFF then begin TotalB:= TotalMB; FreeB:= FreeMB; String:= PadL(ByteOrTB(TotalMB*oneMB, true),11) +' всего -'+ String end else String:= PadL(ByteOrTB(TotalB, true),11) +' всего| '+ String;
ListBox.Items[n]:= Copy(Path,1,2) + String + PadL(FloatToStr(round(FreeB/TotalB*100)),3)+ '% своб|'+ PadL(FileSystemName,5)+ '| '+ CutString(VolumeName,9); end; end;
End;

Procedure ObjectOnClick(Sender: TObject); Begin
Case TObject(Sender) of
ListBox: for n:= 0 to ListBox.Items.Count-1 do if ListBox.Selected[n] then WizardForm.DirEdit.Text:= Copy(ListBox.Items[n],1,1) +Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text))
StartMenuTreeView: if StartMenuTreeView.Directory <> '' then WizardForm.GroupEdit.Text:= StartMenuTreeView.Directory else WizardForm.GroupEdit.Text:= '{#SetupSetting("DefaultGroupName")}'
WizardForm.NoIconsCheck: begin WizardForm.GroupEdit.Enabled:= not(WizardForm.GroupEdit.Enabled); StartMenuTreeView.Enabled:= WizardForm.GroupEdit.Enabled; WizardForm.GroupBrowseButton.Enabled:= WizardForm.GroupEdit.Enabled end;
end; End;

procedure InitializeWizard();
begin
NeedSize := 6100; //Здесь указывается место для приложения
WizardForm.DiskSpaceLabel.Hide;
NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(220);
Width := ScaleX(209);
Height := ScaleY(13);
end;
ListBox:= TListBox.Create(WizardForm)
ListBox.SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 8, WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left, WizardForm.DiskSpaceLabel.Top - (WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 12))
ListBox.Font.Size:= 9
ListBox.Font.Style:= []
ListBox.Font.Name:= 'Courier New';
ListBox.OnClick:= @ObjectOnClick;
ListBox.Parent:= WizardForm.SelectDirPage;
WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then
begin
GetNeedSpaceCaption;
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled:=False
ListBoxRefresh
end;
end;


Слайд-шоу рандомно (в окне инсталляции)
читать дальше »
const
n=21; //количество слайдов
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);
TRandNumbers = array[1..N] of byte;

function WrapTimerProc(callback:TProc; paramcount:integer):longword;
external 'wrapcallback@files:InnoCallback.dll stdcall';

function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
external 'SetTimer@user32.dll stdcall';

function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
external 'KillTimer@user32.dll stdcall';

function get_unique_random_number(X:byte):TRandNumbers;
var
A,b,c: string;
i,j,k:byte;
begin
For i:=1 to X do A:=A+chr(i);
B:='';
For i:=1 to X do begin
j:=Random(Length(A)-1)+1;
C:='';
B:=B + A[j];
for k:=1 to Length(A) do
if k<>j then C:=C+A[k];
A:=C;
end;
for i:=1 to X do Result[i]:=ord(B[i]);
end;

var
TimerID: LongWord;
currTime: Integer;
SplashImage: TBitmapImage;
StatusMessages: TNewStaticText;
bmp: TRandNumbers;
z:byte;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
currTime := currTime + 1;
if (currTime mod {#TIME_FOR_VIEW} = 0)
then begin
SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[currTime/{#TIME_FOR_VIEW}])+'.bmp'));
if (currTime/{#TIME_FOR_VIEW} = N) then currTime:=0;
end;
end;


procedure InitializeWizard;
begin
bmp:=get_unique_random_number(N);
ExtractTemporaryFile('Image_'+inttostr(bmp[1])+'.bmp');

currTime := 0;

WizardForm.ProgressGauge.Parent := WizardForm;
WizardForm.ProgressGauge.Top := WizardForm.CancelButton.Top + ScaleY(12);
WizardForm.ProgressGauge.Left := ScaleX(10);
WizardForm.ProgressGauge.Width := WizardForm.MainPanel.Width - ScaleX(20);
WizardForm.ProgressGauge.Height := 16;
WizardForm.ProgressGauge.Hide;

WizardForm.StatusLabel.Parent := WizardForm;
WizardForm.StatusLabel.Top := WizardForm.ProgressGauge.Top - ScaleY(18);
WizardForm.StatusLabel.Left := ScaleX(10);
WizardForm.StatusLabel.Width := ScaleX(397);
WizardForm.StatusLabel.Hide;

SplashImage := TBitmapImage.Create(WizardForm);
SplashImage.Top := 0;
SplashImage.Left := 0;
SplashImage.Width := WizardForm.MainPanel.Width;
SplashImage.Height := WizardForm.Bevel.Top;
SplashImage.Parent := WizardForm.InnerPage;
SplashImage.Stretch := True;
SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[1])+'.bmp'));
SplashImage.Hide;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
WizardForm.StatusLabel.Caption := 'Распаковка слайдов ...';
for z:=2 to N do ExtractTemporaryFile('Image_'+inttostr(bmp[z])+'.bmp');
end;
end;

procedure CurPageChanged(CurPageID: Integer);
var
pfunc: LongWord;
begin
if (CurPageID = wpInstalling) then
begin
pfunc := WrapTimerProc(@OnTimer, 5);
TimerID := SetTimer(0, 0, 1000, pfunc);
WizardForm.PageNameLabel.Visible := False;
WizardForm.PageDescriptionLabel.Visible := False;
WizardForm.InnerNotebook.Hide;
WizardForm.Bevel1.Hide;
WizardForm.MainPanel.Hide;
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.ProgressGauge.Show;
WizardForm.StatusLabel.Show;
SplashImage.Show;
WizardForm.CancelButton.Enabled := True;
WizardForm.CancelButton.Top := WizardForm.Bevel.Top + ScaleY(100);
end else
begin
WizardForm.ProgressGauge.Hide;
SplashImage.Hide;
WizardForm.FileNameLabel.Hide;
WizardForm.StatusLabel.Hide;
if (CurPageID > wpInstalling) and (CurPageID < wpFinished) then
begin
WizardForm.InnerNotebook.Show;
WizardForm.Bevel1.Show;
WizardForm.MainPanel.Show;
WizardForm.PageNameLabel.Show;
WizardForm.PageDescriptionLabel.Show;
end;
If CurPageID = wpFinished then
end;
end;

procedure DeInitializeSetup();
begin
KillTimer(0, TimerID);
end;


Улучшенный деинсталлятор
читать дальше »
function ShouldSkipPage(CurPage: Integer): Boolean;
begin
if Pos('/SP-', UpperCase(GetCmdTail)) > 0 then
case CurPage of
wpLicense, wpPassword, wpInfoBefore, wpUserInfo,
wpSelectDir, wpSelectProgramGroup, wpInfoAfter:
Result := True;
end;
end;

const
WM_LBUTTONDOWN = 513;
WM_LBUTTONUP = 514;

procedure InitializeWizard();
begin
if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) then
begin
PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONDOWN,0,0);
PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONUP,0,0);
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) and
(CurPageID = wpSelectComponents) then
WizardForm.BackButton.Visible := False;
end;


//Ïðîâåðêà íà îñòàâøûåñÿ ôàéëû
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
Res: Integer;
begin
case CurUninstallStep of
usPostUninstall:
begin
if DirExists(ExpandConstant('{app}')) then
if ExpandConstant('{language}') = 'ua' then
case MsgBox('Ïàïêà "' + ExpandConstant('{app}') + '" íå ïîðîæíÿ.'#13#13 +
'"Òàê" – ïîâíå âèäàëåííÿ âñ³õ ôàéë³â ó ïàïö³, âêëþ÷àþ÷è ñàìó ïàïêó.' #13#13 +
'"ͳ" – â³äêðèòè ïàïêó â ïðîâ³äíèêó, ùîá âðó÷íó âèäàëèòè ôàéëè.'#13#13 +
'"Ñêàñóâàòè" – í³÷îãî íå ðîáèòè, âèäàëèòè ïàïêó ï³çí³øå ñàìîñò³éíî.', mbInformation, MB_YESNOCANCEL) of

IDYES:
if not DelTree(ExpandConstant('{app}'), True, True, True) then
MsgBox('Ïàïêà íå âèäàëåíà.' #13#13 'Ïàïêà àáî îäèí ç ôàéë³â ó í³é çàä³ÿí³ ³íøîþ ïðîãðàìîþ.', mbError, MB_OK);

IDNO:
if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Ïîìèëêà â³äêðèòòÿ.' #13#13 'Ïàïêà íå çíàéäåíà.', mbError, MB_OK);

IDCANCEL:;
end
else
if ExpandConstant('{language}') = 'ru' then
case MsgBox('Ïàïêà "' + ExpandConstant('{app}') + '" íå ïóñòà.'#13#13 +
'"Äà" – ïîëíîå óäàëåíèå âñåõ ôàéëîâ â ïàïêå, âêëþ÷àÿ ñàìó ïàïêó.' #13#13 +
'"Íåò" – îòêðûòü ïàïêó â ïðîâîäíèêå, ÷òîáû âðó÷íóþ óäàëèòü ôàéëû.'#13#13 +
'"Îòìåíà" – íè÷åãî íå äåëàòü, óäàëèòü ïàïêó ïîçæå ñàìîñòîÿòåëüíî.', mbInformation, MB_YESNOCANCEL) of

IDYES:
if not DelTree(ExpandConstant('{app}'), True, True, True) then
MsgBox('Ïàïêà íå óäàëåíà.' #13#13 'Ïàïêà èëè îäèí èç ôàéëîâ â íåé çàäåéñòâîâàíû äðóãèì ïðèëîæåíèåì.', mbError, MB_OK);

IDNO:
if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Îøèáêà îòêðûòèÿ.' #13#13 'Ïàïêà íå íàéäåíà.', mbError, MB_OK);

IDCANCEL:;
end
else
case MsgBox('Directory "' + ExpandConstant('{app}') + '" is not empty.'#13#13 +
'"Yes" to delete all of the files in the directory, including the directory itself.' #13#13 +
'"No" to open the directory with explorer to delete the files manually.'#13#13 +
'"Cancel" to do nothing and delete the directory later manually.', mbInformation, MB_YESNOCANCEL) of

IDYES:
if not DelTree(ExpandConstant('{app}'), True, True, True) then
MsgBox('Directory is not deleted.' #13#13 'Directory or one of the files are used by the other application.', mbError, MB_OK);

IDNO:
if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Error opening the directory.' #13#13 'Directory is not found.', mbError, MB_OK);

IDCANCEL:;
end
end
end
end;


Реализация рисунка 497х58 в верху инсталлятора
читать дальше »
procedure InitializeWizard();
begin
with WizardForm do begin
with MainPanel do
Height := Height - 1;
with WizardSmallBitmapImage do begin
Left := 0;
Top := 0;
Height := 58; //Размер рисунка
Width := 497; //
end;
with PageNameLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
with PageDescriptionLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
end;
end;

serg aka lain 24-11-2009 20:08 1279129

Цитата:

Цитата A1EXXX
создавать файл каждый раз вручную надоедает »

Ну, можно положить в установочный пакет готовый "desktop.ini",
насколько мне извесно, винде не важно точное расположение иконки в папке
(Serega, думаю меня поправит, или опровергнет), посему его можно заполнить сразу, и добавить в пакет установки.
Код:

[.ShellClassInfo]
IconResource=MyProg.exe
IconIndex=0

и использовать такой код:
читать дальше »

Код:

[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
OutputDir=userdocs:My Program.

[Dirs]
Name: "{app}"; Attribs: "readonly";

[Files]
Source: "compiler:Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion;
Source: "desktop.ini"; Attribs: "system hidden"; DestDir: "{app}"; Flags: ignoreversion;


Или вариант без таскания за собой готового desktop.ini, создать его во время установки:
читать дальше »
Код:

[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
OutputDir=userdocs:My Program.

[Files]
Source: "compiler:Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion;

[code]
procedure CurStepChanged(CurStep: TSetupStep);
var
  ErrorCode: Integer;
begin
  if CurStep = ssPostInstall then
  begin
    SetIniString('.ShellClassInfo', 'IconResource',
                      ExpandConstant('{app}\MyProg.exe') + #13#10 'IconIndex=0', ExpandConstant('{app}\desktop.ini'));
    Exec('attrib', ' +r ' + '"' + ExpandConstant('{app}') + '"', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
    Exec('attrib', ' +h +s ' + '"' + ExpandConstant('{app}\desktop.ini') + '"', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
  end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usUninstall then
    DeleteFile(ExpandConstant('{app}\desktop.ini'));
end;


A1EXXX 24-11-2009 20:22 1279138

serg aka lain, первый код я вроде как пометил "альтернативкой", т.е. использование готового Desktop.ini (ну или создавать и подключать через [Files]). А второй код как раз оно :)
Но меня больше интересует избавление от ewWaitUntilTerminated в скрипте FreeArc...

Raf-9600, а ISS Joiner'ом не пробовал??

Raf-9600 24-11-2009 20:32 1279145

A1EXXX, Пробовал - некатит.

serg aka lain 24-11-2009 20:37 1279148

Цитата:

Цитата A1EXXX
А второй код как раз оно »

Ну, хоть это радует.
Цитата:

меня больше интересует избавление от ewWaitUntilTerminated в скрипте FreeArc...
Понятия не имею, но, думаю придёт Serega, и обязательно поможет.

Serega 24-11-2009 20:55 1279160

Цитата:

Цитата A1EXXX
не знаю, как применить это в моём случае... »

Вы какую версию Inno используете? Дело в том, что для обычной версии (пробовал на 5.3.5 ansi) не получается, в момент установки вылетает ошибка, а для Restools - без проблем...
Цитата:

Цитата A1EXXX
но создавать файл каждый раз вручную надоедает »

Все скрипты приходится писать руками... :)

Цитата:

Цитата serg aka lain
винде не важно точное расположение иконки в папке »

Только если она расположена в корне самой папки, а не её подпапках. ;)
Цитата:

Цитата serg aka lain
Serega, думаю меня поправит »

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

A1EXXX 24-11-2009 21:23 1279176

Serega, у меня последняя от Restools. Для моего случая нужно использовать весь пример скрипта или этого куска достаточно?
Цитата:

[code]
var
ResultCode: Integer;

function IsProgRunning(ProgName: string): Boolean;
// функция определяет, запущенно ли приложение
var
Size: Integer;
begin
Result:= False;
Exec('cmd', '/c tasklist /fi "IMAGENAME eq ' + ProgName + '" >"' +
ExpandConstant('{tmp}\RunList"'), '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
if FileSize(ExpandConstant('{tmp}\RunList'), Size) then
if Size > 0 then Result:= True;
end;
если достаточно, то как задать задержку 200-300 мс и связать с arc.exe моего скрипта... :(

Serega 24-11-2009 22:33 1279221

Цитата:

Цитата A1EXXX
у меня последняя от Restools. »

Написал на основе .dll'ки, т.к. при частом запуске cmd для проверки процесса, не всегда удаётся нажать на кнопку Отмена в момент распаковки.
Пример
Код:

#define MyAppName "Test"
#define MyAppVerName "Test"
#define MyAppExeName "Test.exe"

[Setup]
AppName={#MyAppName}
AppVerName={#MyAppName}
DefaultDirName={pf}\{#MyAppName}
DirExistsWarning=no
;DisableReadyPage=true
ShowLanguageDialog=auto
OutputBaseFilename=setup
OutputDir=.
UninstallDisplayIcon={app}\{#MyAppExeName}
DefaultGroupName={#MyAppName}
InternalCompressLevel=none
Compression=none

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

[Languages]
Name: eng; MessagesFile: compiler:Default.isl
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[Files]
; измените на своё место расположение dll'ки, у меня она расположена
; C:\Program Files\Inno Setup 5\Libraries\*
Source: C:\Program Files\Inno Setup 5\Libraries\ISTask.dll; Flags: dontcopy
Source: C:\Program Files\FreeArc\bin\Arc.exe; Flags: dontcopy

[CustomMessages]
ExtrError=Произошла ошибка во время извлечения данных. Установка будет прервана.

[Code]
function RunTaskA(FileName: string; bFullpath: Boolean): Boolean;
  external 'RunTask@files:ISTask.dll stdcall delayload setuponly';
function KillTaskA(ExeFileName: string): Integer;
  external 'KillTask@files:ISTask.dll stdcall delayload setuponly';

// запускает указанный файл, с параметрами указанными в CmdShow
function WinExec(lpCmdLine: PChar; uCmdShow: Cardinal): Cardinal;
  external 'WinExec@kernel32.dll stdcall';

var
  SecondProgressBar: TNewProgressBar;
  ExtractAllArc: Boolean;

procedure InitializeWizard();
begin
  WizardForm.FileNameLabel.Hide;
  WizardForm.StatusLabel.Top:=ScaleY(81);
  WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
  WizardForm.StatusLabel.Width:=ScaleX(262);
  WizardForm.ProgressGauge.Top:=ScaleY(100);
  WizardForm.ProgressGauge.Left:=ScaleX(155);
  WizardForm.ProgressGauge.Width:=ScaleX(262);

  SecondProgressBar := TNewProgressBar.Create(WizardForm);
  with SecondProgressBar do
    begin
      Parent := WizardForm.InstallingPage;
      Left := ScaleX(0);
      Top := ScaleY(100);
      Width := ScaleX(150);
      Height := ScaleY(21);
      Min := 0;
      Max := 13; //задается как (кол-во распаковываемых архивов * 3) + 1
    end;
end;

procedure WaitProgUntilTerminated;
var
  i: Integer;
begin
  // проверим запустился ли файл, если нет, то
  if not RunTaskA('Arc.exe', False) then
  for i:= 0 to 500 do
    // подождём пока файл запустится
    if not RunTaskA('Arc.exe', False) then
      begin
        Sleep(10); // ждём максимум 5 сек.
        Application.ProcessMessages;
      end
    else Break;
  // если запущен, то ждём завершения
  while RunTaskA('Arc.exe', False) do
    begin
      Sleep(10);
      Application.ProcessMessages;
    end;
end;

procedure PlsInsertNextDisk(num: Integer; CheckedFile: string);
var
  Capt: string;
begin
  CheckedFile:= ExpandConstant(CheckedFile);
  if not FileExists(CheckedFile) then
    begin
      Capt:= 'Пожалуйста, вставьте диск %n, содержащий файл %f и нажмите ОК для продолжения установки.';
      StringChange(Capt, '%n', inttostr(num));
      StringChange(Capt, '%f', ExtractFileName(CheckedFile));
      MsgBox(Capt, mbInformation, MB_OK);
      PlsInsertNextDisk(num, CheckedFile);
    end;
end;

procedure ExtractArc(arcArchName, arcDestDir:string);
var
  ResultCode: Integer;
begin
  WizardForm.StatusLabel.Caption:= SetupMessage(msgStatusExtractFiles);
  // запускаем файл
  ResultCode:= WinExec(AddQuotes(ExpandConstant('{tmp}\arc.exe')) + ' x ' +
    AddQuotes(ExpandConstant(arcArchName)) + ' -y -dp' +
      AddQuotes(ExpandConstant(arcDestDir)), SW_HIDE);

  if (ResultCode < 33) then
    begin
      MsgBox(ExpandConstant('{cm:ExtrError}'), mbCriticalError, MB_OK);
      SecondProgressBar.Hide;
      if RunTaskA('Arc.exe', False) then KillTaskA('Arc.exe');
      DelTree(ExpandConstant('{app}'), True, True, True);
      Abort;
    end
  else
    begin
      SecondProgressBar.Position:= SecondProgressBar.Position + 3;
      WaitProgUntilTerminated;
    end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssInstall then
    begin
      WizardForm.StatusLabel.Caption:= SetupMessage(msgStatusExtractFiles);
      ExtractTemporaryFile('arc.exe');
      SecondProgressBar.Position:= SecondProgressBar.Position + 1;

      ExtractArc('{src}\Project.arc','{app}');
      ExtractArc('{src}\data-2.arc','{app}');

      PlsInsertNextDisk(2, '{src}\data-3.arc'); //если data4.arc не найден в корне диска, просим второй диск
      ExtractArc('{src}\data-3.arc','{app}');
      ExtractArc('{src}\data-4.arc','{app}');
      PlsInsertNextDisk(1, '{src}\data-1.arc'); //снова просим первый диск

      ExtractAllArc:= True; // сообщим, что все архивы распаковали
    end;
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  if CurPageID = wpInstalling then
    if ExtractAllArc then
      Cancel:= True
    else
    if ExitSetupMsgBox then
      begin
        if RunTaskA('Arc.exe', False) then KillTaskA('Arc.exe');
        DelTree(ExpandConstant('{app}'), True, True, True);
        KillTaskA(ChangeFileExt(ExtractFileName(ParamStr(0)), '.tmp'));
      end
    else
  Cancel:= False;
end;


A1EXXX 24-11-2009 22:42 1279230

Serega, :rupor:, огромное спасибо! :up Мегареспект!!!

JohnDes 24-11-2009 23:45 1279281

Добрые и знающие люди помогите пожалуйста.
Напишите скрипт в котором осуществляется проверка ип адресса компьютера и если он есть в списке, установка закрывается с ошибкой "Вам запрещено устанавливать данный продукт"
Ип чтобы был на подобии 192.168.11.22.
И их могло быть несколько. И чтобы была кнопка обратиться к администрации (кнопка вела на сайт).
Помогите пожалуйста.
Или вообще такое возможно ?

A1EXXX 25-11-2009 00:43 1279312

Serega, ещё один скромный вопросик: как только начинается распаковка, прогресс-бар сразу заполняется почти наполовину , а до этого заполнение
было в два раза меньше :(
Это поправимо? :blush:


Кажется разобрался :)
Цитата:

else
begin
SecondProgressBar.Position:= SecondProgressBar.Position + 3;
WaitProgUntilTerminated;
end;
end;
здесь +3 заменил на +1

A1EXXX 25-11-2009 16:46 1279625

Serega, разобрался, да не совсем ))) Начинается распаковка с приемлемым заполнением, а заполняется дальше просто ужасно.... Не знаю, как тут разрулить... И ещё: можно сделать так, чтобы при нажатии "Отмена" в инсталле надпись менялась, типа "Откат изменений" или нечто подобное??? А то создаётся впечатление, что установщик завис :)
Пробовал добавить WizardForm.StatusLabel.Caption:= 'Откат изменений...'; после DelTree(ExpandConstant('{app}'), True, True, True); - если много распаковано, - не работает :(

Serega 25-11-2009 20:44 1279802

Цитата:

Цитата A1EXXX
разобрался, да не совсем ))) »

Переделал вам скрипт, с учётом расширенной версии. Прогрессбар при распаковке, показывает реальные значения, попробуйте:
Пример
Код:

#define MyAppName "Test"
#define MyAppVerName "Test"
#define MyAppExeName "Test.exe"

[Setup]
AppName={#MyAppName}
AppVerName={#MyAppName}
DefaultDirName={pf}\{#MyAppName}
DirExistsWarning=no
;DisableReadyPage=true
ShowLanguageDialog=auto
OutputBaseFilename=setup
OutputDir=.
UninstallDisplayIcon={app}\{#MyAppExeName}
DefaultGroupName={#MyAppName}
InternalCompressLevel=none
Compression=none

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

[Languages]
Name: eng; MessagesFile: compiler:Default.isl
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[Files]
; измените на своё место расположение dll'ки, у меня она расположена
; C:\Program Files\Inno Setup 5\Libraries\*
Source: C:\Program Files\Inno Setup 5\Libraries\ISTask.dll; Flags: dontcopy
Source: C:\Program Files\FreeArc\bin\Arc.exe; Flags: dontcopy

[CustomMessages]
ExtrError=Произошла ошибка во время извлечения данных. Установка будет прервана.

[Code]
function RunTaskA(FileName: string; bFullpath: Boolean): Boolean;
  external 'RunTask@files:ISTask.dll stdcall delayload setuponly';
function KillTaskA(ExeFileName: string): Integer;
  external 'KillTask@files:ISTask.dll stdcall delayload setuponly';

// запускает указанный файл, с параметрами указанными в CmdShow
function WinExec(lpCmdLine: PChar; uCmdShow: Cardinal): Cardinal;
  external 'WinExec@kernel32.dll stdcall';

////////////////////////////////////////////////////////////////////////////////////
const
  CountArc = 4; // количество архивов

var
  SecondProgressBar: TNewProgressBar;
  ExtractAllArc: Boolean;
  StartPos: Integer;
 
procedure InitializeWizard();
begin
  WizardForm.FileNameLabel.Hide;
  WizardForm.StatusLabel.Top:= ScaleY(81);
  WizardForm.StatusLabel.Width:= WizardForm.InnerNotebook.Width;
  WizardForm.StatusLabel.Width:= ScaleX(262);
  WizardForm.ProgressGauge.Top:= ScaleY(100);
  WizardForm.ProgressGauge.Left:= ScaleX(155);
  WizardForm.ProgressGauge.Width:= ScaleX(262);

  SecondProgressBar:= TNewProgressBar.Create(WizardForm);
  with SecondProgressBar do
    begin
      Parent:= WizardForm.InstallingPage;
      SetBounds(0, 100, 150, 21);
      Min:= 0;
      Max:= 100;
      Position:= 0;
    end;
end;

procedure ParserLog;
var
  in_File, out_File, S, S1: string;
  i, j, n: Integer;
begin
  in_File := ExpandConstant('{tmp}\in_log');
  out_File := ExpandConstant('{tmp}\out_log');
//  ProgressBar.Show;
//  ProgressLabel.Show;
  // если файла нет, то подождём... ;)
  if FileExists(in_File) = False then
    repeat
      Application.ProcessMessages; // необходима расширенная версия от Restools
      n:= n + 1;
      Sleep(500); // ждём полсекунды и повторяем цикл
    until (FileExists(in_File) = True) or (n = 10); // максимально повторяем цикл 10 раз, что составит 5 секунд...
  // если всё же файла нет, то выходим
  if FileExists(in_File) = False then Exit;
  // если файл существует, то обрабатываем его
  repeat
    FileCopy(in_File, out_File, False); // копируем файл, чтоб можно было открыть out_File для чтения
    LoadStringFromFile(out_File, S); // если попытаться загрузить in_File, то ничего не выйдет, пока в него пишет Arc.exe...
    Application.ProcessMessages; // необходима расширенная версия от Restools
    if Pos('%', S) > 0 then
      begin
        S1:= Copy(S, Length(S) - 4, (Length(S) - 2) - (Length(S) - 4));
        StringChange(S1, ' ', ''); // удаляем пробелы
        for i:= 0 to 100 do
        if S1 = IntToStr(i) then
          begin
            j:= StrToInt(S1);
            SecondProgressBar.Position:= StartPos + (j/CountArc);
            WizardForm.StatusLabel.Caption:= 'Распаковка файлов, ждите...  ' +
              IntToStr(SecondProgressBar.Position)+'%';
            Application.ProcessMessages; // необходима расширенная версия от Restools
          end;
      end;
  until (Pos('Extracted', S) or Pos('ERROR', S)) > 0;
  StartPos:= SecondProgressBar.Position;
  // удаляем временные файлы
  DelayDeleteFile(in_File, 4);
  DelayDeleteFile(out_File, 4);
end;

procedure ExtractArc(arcArchName, arcDestDir:string);
var
  ResultCode: Integer;
begin
//  WizardForm.StatusLabel.Caption:= SetupMessage(msgStatusExtractFiles);
  // запускаем файл
  ResultCode:= WinExec('cmd.exe /c ' + AddQuotes(ExpandConstant('{tmp}\arc.exe')) + ' x ' +
    AddQuotes(ExpandConstant(arcArchName)) + ' -y -s2 -dp' +
      AddQuotes(ExpandConstant(arcDestDir)) + ' >' +
        AddQuotes(ExpandConstant('{tmp}\in_log')), SW_HIDE);

  if (ResultCode < 33) then
    begin
      MsgBox(ExpandConstant('{cm:ExtrError}'), mbCriticalError, MB_OK);
      SecondProgressBar.Position:= 0;
      if RunTaskA('Arc.exe', False) then KillTaskA('Arc.exe'); // теоретически не нужно, но всё же...
      if DirExists(ExpandConstant('{app}')) then DelTree(ExpandConstant('{app}'), True, True, True);
      Abort;
    end
  else ParserLog;
end;

procedure CloseSetup;
begin
  WizardForm.StatusLabel.Caption:= 'Откат изменений...';
  SecondProgressBar.Position:= 0;
  if RunTaskA('Arc.exe', False) then KillTaskA('Arc.exe');
  DelTree(ExpandConstant('{app}'), True, True, True);
  // при убиваниии процесса остаётся одна папка в Temp, поэтому решил её удалить батником
  SaveStringToFile(ExpandConstant('{tmp}\del.bat'), 'rd /s /q ' +
    AddQuotes(ExpandConstant('{tmp}')), False);
  WinExec(ExpandConstant('{tmp}\del.bat'), SW_HIDE);
  KillTaskA(ChangeFileExt(ExtractFileName(ParamStr(0)), '.tmp'));
end;

procedure PlsInsertNextDisk(num: Integer; CheckedFile: string);
var
  Capt: string;
begin
  CheckedFile:= ExpandConstant(CheckedFile);
  if not FileExists(CheckedFile) then
    begin
      Capt:= Format('Пожалуйста, вставьте диск №%d и нажмите ОК для продолжения установки.' + #13 +
        'Если Вы нажмёте Отмена, то дальнейшая установка %s будет невозможна.', [num, '{#MyAppName}']);
      // конечно для красоты лучше делать отдельную форму в виде сообщения, чтоб текст был по центру,
      // но так самое простое...
      if MsgBox(Capt, mbInformation, MB_OKCANCEL) = IDOK then
        PlsInsertNextDisk(num, CheckedFile)
      else CloseSetup;
    end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssInstall then
    begin
      ExtractTemporaryFile('arc.exe');

      ExtractArc('{src}\data-1.arc','{app}');
      ExtractArc('{src}\data-2.arc','{app}');

      PlsInsertNextDisk(2, '{src}\data-3.arc'); //если data3.arc не найден в корне диска, просим второй диск
      ExtractArc('{src}\data-3.arc','{app}');
      ExtractArc('{src}\data-4.arc','{app}');
      PlsInsertNextDisk(1, '{src}\data-1.arc'); //снова просим первый диск

      ExtractAllArc:= True; // сообщим, что все архивы распаковали
    end;
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  if CurPageID = wpInstalling then
    if ExtractAllArc then
      Cancel:= True
    else
    if ExitSetupMsgBox then
      CloseSetup
    else
  Cancel:= False;
end;


A1EXXX 25-11-2009 21:05 1279819

Serega, ваще от души!!! :up Всех зайцев убили )) Прям Рождественское чудо средь бела дня :yahoo: :)
Ещё и проценты?!!! Бомба!!! Респектище Вам за Ваши труды ;)


Странная вещь... из двух архивов распаковался первый и запросило 2-й диск... :(

Habetdin 25-11-2009 21:18 1279829

A1EXXX,
Цитата:

Цитата Serega
//если data3.arc не найден в корне диска, просим второй диск »


A1EXXX 25-11-2009 21:22 1279833

Habetdin, я понимаю, но data2.arc ещё не распаковался! + решил удовлетворить инсталл и вставил диск 2 - ничё не распаковал :( и сразу запросил 1-й...
Причиной не может быть то, что я arc'и маскирую под cab'ы? в скрипте приписать не забыл...

Serega 25-11-2009 23:23 1279910

Цитата:

Цитата A1EXXX
из двух архивов распаковался первый »

Поправил скрипт в предыдущем сообщении, попробуйте.

STRELOK 25-11-2009 23:28 1279916

Народ как это реализовать??? Сколько не пробовал всегда траблы выходили.
читать дальше »
http://imageban.ru/out/2009/11/24/1eb9b162026fcf085256925375fbd9a5.jpg

Serega 25-11-2009 23:29 1279917

Цитата:

Цитата STRELOK
Сколько не пробовал всегда траблы выходили »

Что конкретно не получается?

STRELOK 25-11-2009 23:30 1279918

Serega,
всё не получается. :-((((((((

Serega 25-11-2009 23:49 1279930

Цитата:

Цитата STRELOK
всё не получается »

Ну извините, за вас никто писать не будет...
Делается (внешний вид) так:
1. Изменяете размер окна инсталлятора WizardForm.ClientHeight и WizardForm.ClientWidth;
2. Создаёте панель, задаёте ей свойство Align:= alClient;
3. Создаёте на панели картинку (TBitmapImage), с такимм же свойством TBitmapImage.Align:= alClient, затем загружаете из файла картинку;
4. Делаете кнопки видимыми WizardForm.кнопка.Parent:= панель;
Ну и т.д. и т.п.

A1EXXX 25-11-2009 23:50 1279932

Serega, всё путём ))) Ещё раз спасибо!
STRELOK, всё-таки классный у Black'a скриптец )))

YURSHAT 26-11-2009 00:13 1279946

Serega, вопрос к Вам как к человеку знающему! Как реализовать "Список жестких дисков и свободного места" через get_hw_caps.dll . Самую новую версию get_hw_caps.dll 1.0.0.3 прикрепляю.

P.S. Кстати, заметил в инсталле Зова Припяти файлик get_hw_caps.exe. Не знаете для чего он?

Serega 26-11-2009 01:41 1280000

Цитата:

Цитата YURSHAT
Как реализовать "Список жестких дисков и свободного места" через get_hw_caps.dll »

Вот простой пример использования функций:
Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Files]
Source: compiler:Libraries\get_hw_caps.dll; Flags: dontcopy

[Code]
function GetHardDriveFreeSpace(hdd: integer): Integer;
  external 'hwc_GetHardDriveFreeSpace@files:get_hw_caps.dll stdcall';
function GetHardDriveName(hdd: integer): PChar;
  external 'hwc_GetHardDriveName@files:get_hw_caps.dll stdcall';
function GetHardDriveTotalSpace(hdd: integer): Integer;
  external 'hwc_GetHardDriveTotalSpace@files:get_hw_caps.dll stdcall';
function GetHardDrivesCount(): Integer; external 'hwc_GetHardDrivesCount@files:get_hw_caps.dll stdcall';

function InitializeSetup(): Boolean;
var
  i, count: Integer;
  msg: string;
begin
  count:= GetHardDrivesCount();
  msg:= 'Количество дисков: ' + IntToStr(count) + #13;
  for i:= 0 to count - 1 do
    msg:= msg + 'Размер: ' + GetHardDriveName(i) + ' - ' +
      IntToStr(GetHardDriveTotalSpace(i)) + ' Мб' +
        ', своб.: ' + IntToStr(GetHardDriveFreeSpace(i)) + ' Мб' +#13;
  MsgBox(msg, mbInformation, MB_OK);
end;



Цитата:

Цитата YURSHAT
Не знаете для чего он? »

Нет.

YURSHAT 26-11-2009 01:55 1280009

Serega, спасибо! И еще 2 небольших вопросика:
1. Выводить инфу в Гб, до трех заков после зяпятой (если можно с предидущим примером)
2. Как сделать проверку версии пиксельных шейдеров у видеокарты

Вот второе действительно очечь интересует, в инно еще не встречал

Заранее благодарю за помощь!

МИШАНЧИК 26-11-2009 08:38 1280091

A1EXXX, подскажите пожалуйста по поводу:
Цитата:

Цитата A1EXXX
всё-таки классный у Black'a скриптец »

А что за скрипт, можно глянуть?

A1EXXX 26-11-2009 12:28 1280254

МИШАНЧИК, он на скрине реализован )) Исходники у автора :)

Raf-9600 26-11-2009 15:11 1280409

Ктонить может объединить эти скрипты? http://forum.oszone.net/post-1279125.html#post1279125
Через ISS Joiner пробовал, но он создает некорректный скрипт.

RapMan 26-11-2009 15:50 1280440

Всем привет, у кого есть Inno Setup Form Designer 2.0.8 ?

A1EXXX 26-11-2009 16:09 1280462

Raf-9600, соединил, только "Запрет установки в папку Windows" здесь отсутствует (там ошибка в самом коде есть; MessageBox изменил на MsgBox и появилась другая ошибка :()
читать дальше »
Цитата:

[code]
const
n=21; //количество слайдов
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);
TRandNumbers = array[1..N] of byte;

function WrapTimerProc(callback:TProc; paramcount:integer):longword;
external 'wrapcallback@files:InnoCallback.dll stdcall';

function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
external 'SetTimer@user32.dll stdcall';

function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
external 'KillTimer@user32.dll stdcall';

function get_unique_random_number(X:byte):TRandNumbers;
var
A,b,c: string;
i,j,k:byte;
begin
For i:=1 to X do A:=A+chr(i);
B:='';
For i:=1 to X do begin
j:=Random(Length(A)-1)+1;
C:='';
B:=B + A[j];
for k:=1 to Length(A) do
if k<>j then C:=C+A[k];
A:=C;
end;
for i:=1 to X do Result[i]:=ord(B[i]);
end;

var
TimerID: LongWord;
currTime: Integer;
SplashImage: TBitmapImage;
bmp: TRandNumbers;
z:byte;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
currTime := currTime + 1;
if (currTime mod {#20} = 0) // здесь, вместо TIME_FOR_VIEW ввести время показа слайда (в секундах)
then begin
SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[currTime/{#20}])+'.bmp')); // здесь тоже
if (currTime/{#20} = N) then currTime:=0 ; // и здесь :)
end;
end;


procedure InitializeWizard1;
begin
bmp:=get_unique_random_number(N);
ExtractTemporaryFile('Image_'+inttostr(bmp[1])+'.bmp');

currTime := 0;

WizardForm.ProgressGauge.Parent := WizardForm;
WizardForm.ProgressGauge.Top := WizardForm.CancelButton.Top + ScaleY(12);
WizardForm.ProgressGauge.Left := ScaleX(10);
WizardForm.ProgressGauge.Width := WizardForm.MainPanel.Width - ScaleX(20);
WizardForm.ProgressGauge.Height := 16;
WizardForm.ProgressGauge.Hide;

WizardForm.StatusLabel.Parent := WizardForm;
WizardForm.StatusLabel.Top := WizardForm.ProgressGauge.Top - ScaleY(18);
WizardForm.StatusLabel.Left := ScaleX(10);
WizardForm.StatusLabel.Width := ScaleX(397);
WizardForm.StatusLabel.Hide;

SplashImage := TBitmapImage.Create(WizardForm);
SplashImage.Top := 0;
SplashImage.Left := 0;
SplashImage.Width := WizardForm.MainPanel.Width;
SplashImage.Height := WizardForm.Bevel.Top;
SplashImage.Parent := WizardForm.InnerPage;
SplashImage.Stretch := True;
SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[1])+'.bmp'));
SplashImage.Hide;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
WizardForm.StatusLabel.Caption := 'Распаковка слайдов ...';
for z:=2 to N do ExtractTemporaryFile('Image_'+inttostr(bmp[z])+'.bmp');
end;
end;

procedure CurPageChanged1(CurPageID: Integer);
var
pfunc: LongWord;
begin
if (CurPageID = wpInstalling) then
begin
pfunc := WrapTimerProc(@OnTimer, 5);
TimerID := SetTimer(0, 0, 1000, pfunc);
WizardForm.PageNameLabel.Visible := False;
WizardForm.PageDescriptionLabel.Visible := False;
WizardForm.InnerNotebook.Hide;
WizardForm.Bevel1.Hide;
WizardForm.MainPanel.Hide;
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.ProgressGauge.Show;
WizardForm.StatusLabel.Show;
SplashImage.Show;
WizardForm.CancelButton.Enabled := True;
WizardForm.CancelButton.Top := WizardForm.Bevel.Top + ScaleY(100);
end else
begin
WizardForm.ProgressGauge.Hide;
SplashImage.Hide;
WizardForm.FileNameLabel.Hide;
WizardForm.StatusLabel.Hide;
if (CurPageID > wpInstalling) and (CurPageID < wpFinished) then
begin
WizardForm.InnerNotebook.Show;
WizardForm.Bevel1.Show;
WizardForm.MainPanel.Show;
WizardForm.PageNameLabel.Show;
WizardForm.PageDescriptionLabel.Show;
end;
If CurPageID = wpFinished then
end;
end;

procedure DeInitializeSetup1();
begin
KillTimer(0, TimerID);
end;

function ShouldSkipPage(CurPage: Integer): Boolean;
begin
if Pos('/SP-', UpperCase(GetCmdTail)) > 0 then
case CurPage of
wpLicense, wpPassword, wpInfoBefore, wpUserInfo,
wpSelectDir, wpSelectProgramGroup, wpInfoAfter:
Result := True;
end;
end;

const
WM_LBUTTONDOWN = 513;
WM_LBUTTONUP = 514;

procedure InitializeWizard2();
begin
if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) then
begin
PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONDOWN,0,0);
PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONUP,0,0);
end;
end;

procedure CurPageChanged2(CurPageID: Integer);
begin
if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) and
(CurPageID = wpSelectComponents) then
WizardForm.BackButton.Visible := False;
end;


//I?iaa?ea ia inoaaouany oaeeu
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
Res: Integer;
begin
case CurUninstallStep of
usPostUninstall:
begin
if DirExists(ExpandConstant('{app}')) then
if ExpandConstant('{language}') = 'ua' then
case MsgBox('Iaiea "' + ExpandConstant('{app}') + '" ia ii?i?iy.'#13#13 +
'"Oae" – iiaia aeaaeaiiy an?o oaee?a o iaio?, aee??a??e naio iaieo.' #13#13 +
'"I?" – a?ae?eoe iaieo a i?ia?aieeo, uia a?o?io aeaaeeoe oaeee.'#13#13 +
'"Neanoaaoe" – i??iai ia ?iaeoe, aeaaeeoe iaieo i?ci?oa naiino?eii.', mbInformation, MB_YESNOCANCEL) of

IDYES:
if not DelTree(ExpandConstant('{app}'), True, True, True) then
MsgBox('Iaiea ia aeaaeaia.' #13#13 'Iaiea aai iaei c oaee?a o i?e caa?yi? ?ioi? i?ia?aii?.', mbError, MB_OK);

IDNO:
if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Iiieeea a?ae?eooy.' #13#13 'Iaiea ia ciaeaaia.', mbError, MB_OK);

IDCANCEL:;
end
else
if ExpandConstant('{language}') = 'ru' then
case MsgBox('Iaiea "' + ExpandConstant('{app}') + '" ia ionoa.'#13#13 +
'"Aa" – iieiia oaaeaiea anao oaeeia a iaiea, aee??ay naio iaieo.' #13#13 +
'"Iao" – ioe?uou iaieo a i?iaiaieea, ?oiau a?o?io? oaaeeou oaeeu.'#13#13 +
'"Ioiaia" – ie?aai ia aaeaou, oaaeeou iaieo iic?a naiinoiyoaeuii.', mbInformation, MB_YESNOCANCEL) of

IDYES:
if not DelTree(ExpandConstant('{app}'), True, True, True) then
MsgBox('Iaiea ia oaaeaia.' #13#13 'Iaiea eee iaei ec oaeeia a iae caaaenoaiaaiu a?oaei i?eei?aieai.', mbError, MB_OK);

IDNO:
if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Ioeaea ioe?uoey.' #13#13 'Iaiea ia iaeaaia.', mbError, MB_OK);

IDCANCEL:;
end
else
case MsgBox('Directory "' + ExpandConstant('{app}') + '" is not empty.'#13#13 +
'"Yes" to delete all of the files in the directory, including the directory itself.' #13#13 +
'"No" to open the directory with explorer to delete the files manually.'#13#13 +
'"Cancel" to do nothing and delete the directory later manually.', mbInformation, MB_YESNOCANCEL) of

IDYES:
if not DelTree(ExpandConstant('{app}'), True, True, True) then
MsgBox('Directory is not deleted.' #13#13 'Directory or one of the files are used by the other application.', mbError, MB_OK);

IDNO:
if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Error opening the directory.' #13#13 'Directory is not found.', mbError, MB_OK);

IDCANCEL:;
end
end
end
end;

procedure InitializeWizard3();
begin
with WizardForm do begin
with MainPanel do
Height := Height - 1;
with WizardSmallBitmapImage do begin
Left := 0;
Top := 0;
Height := 58; //Размер рисунка
Width := 497; //
end;
with PageNameLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
with PageDescriptionLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
end;
end;

function enabledesc(ComponentsListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';

function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';

var
Info: TNewStaticText;
InfoCaption: TNewStaticText;
InfoPanel: TPanel;

procedure DeinitializeSetup2();
begin
disabledesc();
end;

procedure InitializeWizard4();
begin
WizardForm.TYPESCOMBO.Visible:= false;
WizardForm.ComponentsList.Height := WizardForm.ComponentsList.Height + WizardForm.ComponentsList.Top - WizardForm.TYPESCOMBO.Top;
WizardForm.ComponentsList.Top := WizardForm.TYPESCOMBO.Top;
WizardForm.ComponentsList.Width := ScaleX(200);
InfoPanel := TPanel.Create(WizardForm);
InfoPanel.Parent := WizardForm.SelectComponentsPage;
InfoPanel.Caption := '';
InfoPanel.Top := WizardForm.ComponentsList.Top;
InfoPanel.Left := ScaleX(216);
InfoPanel.Width := ScaleX(200);
InfoPanel.Height := WizardForm.ComponentsList.Height;
InfoPanel.BevelInner := bvRaised;
InfoPanel.BevelOuter := bvLowered;
InfoCaption := TNewStaticText.Create(WizardForm);
InfoCaption.Parent := WizardForm.SelectComponentsPage;
InfoCaption.Caption := 'ГиКц';
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 := 'Переместите ваш указатель мыши на компоненты чтобы увидеть их описание.';
Info.WordWrap := true;
enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,
'Английская озвучка;'+ // SoundUnit\eng
'Французская озвучка;'+ // SoundUnit\fra
'Немецкая озвучка;'+ // SoundUnit\deu
'Итальянская озвучка;'+ // SoundUnit\ita
'Испанская озвучка;' // SoundUnit\spa
);
end;

var
NeedSize:Integer;
FreeMB, TotalMB: Cardinal;
NeedSpaceLabel: TLabel;
n1: Integer;
VolumeName, FileSystemName: String;
VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint;
ListBox: TListBox;
StartMenuTreeView: TStartMenuFolderTreeView;

procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False else
WizardForm.NextButton.Enabled := True; end;

procedure GetNeedSpaceCaption;
begin
if NeedSize > 1024 then
NeedSpaceLabel.Caption := 'Требуется как минимум '+ FloatToStr(round(NeedSize/1024*100)/100) + ' Гб свободного дискового пространства.' else
NeedSpaceLabel.Caption := 'Требуется как минимум '+ IntToStr(NeedSize)+ ' Мб свободного дискового пространства.';end;

const oneMB= 1024*1024;
function GetLogicalDrives: DWord; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(nDrive: String): Longint; external 'GetDriveTypeA@kernel32.dll stdcall';
function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';
function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';

Function ByteOrTB(Bytes: Extended; noMB: Boolean): String; { Перевод числа в значение бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)}
Begin
if not noMB then Result:= FloatToStr(Int(Bytes)) +' Мб' else
if Bytes < 1024 then Result:= FloatToStr(Int(Bytes)) +' Бт' else
if Bytes/1024 < 1024 then Result:= FloatToStr(round((Bytes/1024)*10)/10) +' Кб' else
If Bytes/oneMB < 1024 then Result:= FloatToStr(round(Bytes/oneMB*100)/100) +' Мб' else
If Bytes/oneMB/1000 < 1024 then Result:= FloatToStr(round(Bytes/oneMB/1024*1000)/1000) +' Гб' else
Result:= FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Тб'
StringChange(Result, ',', '.')
End;

Function DelSP(String: String): String; { Удаление начальных, конечных и повторных пробелов }
Begin while (Pos(' ', String) > 0) do Delete(String, Pos(' ', String), 1); Result:= Trim(String); End;

Function CutString(String: String; MaxLength: Longint): String; { Обрезать строку до заданного кол-ва символов}
Begin
if Length(String) > MaxLength then Result:= Copy(String, 1, 6) +'...'+ Copy(String, Length(String) - MaxLength +9, MaxLength)
else Result:= String;
End;

Procedure GetDiskInfo(Disk: String);
Begin
FileSystemName:= StringOfChar(' ', 32); VolumeName:= StringOfChar(' ', 256);
GetVolumeInformation(Disk, VolumeName, 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, 31);
FileSystemName:= DelSp(FileSystemName); VolumeName:= DelSp(VolumeName); if VolumeName='' then VolumeName:='без метки';
End;

Procedure ListBoxRefresh; var FreeB, TotalB: Cardinal; Path, String: string; Begin
ListBox.Items.Clear
for n1:= 1 to 31 do // диск 'А' пропустить
if (GetLogicalDrives and (1 shl n)) > 0 then
if (GetDriveType(Chr(ord('A') + n) +':\') = 2) or (GetDriveType(Chr(ord('A') + n) +':\') = 3) then
if GetSpaceOnDisk(Chr(ord('A') + n) +':\', True, FreeMB, TotalMB) then ListBox.Items.Add(Chr(ord('A') + n) +':');
for n1:= 0 to ListBox.Items.Count -1 do begin
Path:= Copy(ListBox.Items[n],1,2) +'\' { если в накопителе нет диска, пропустить обновление }
if GetSpaceOnDisk(Path, False, FreeB, TotalB) and GetSpaceOnDisk(Path, True, FreeMB, TotalMB) then begin GetDiskInfo(Path);
if FreeB >= $7FFFFFFF then String:= PadL(ByteOrTB(FreeMB*oneMB, true),10) else String:= PadL(ByteOrTB(FreeB, true),10);
if TotalB >= $7FFFFFFF then begin TotalB:= TotalMB; FreeB:= FreeMB; String:= PadL(ByteOrTB(TotalMB*oneMB, true),11) +' всего -'+ String end else String:= PadL(ByteOrTB(TotalB, true),11) +' всего| '+ String;
ListBox.Items[n]:= Copy(Path,1,2) + String + PadL(FloatToStr(round(FreeB/TotalB*100)),3)+ '% своб|'+ PadL(FileSystemName,5)+ '| '+ CutString(VolumeName,9); end; end;
End;

Procedure ObjectOnClick(Sender: TObject); Begin
Case TObject(Sender) of
ListBox: for n1:= 0 to ListBox.Items.Count-1 do if ListBox.Selected[n] then WizardForm.DirEdit.Text:= Copy(ListBox.Items[n],1,1) +Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text))
StartMenuTreeView: if StartMenuTreeView.Directory <> '' then WizardForm.GroupEdit.Text:= StartMenuTreeView.Directory else WizardForm.GroupEdit.Text:= '{#SetupSetting("DefaultGroupName")}'
WizardForm.NoIconsCheck: begin WizardForm.GroupEdit.Enabled:= not(WizardForm.GroupEdit.Enabled); StartMenuTreeView.Enabled:= WizardForm.GroupEdit.Enabled; WizardForm.GroupBrowseButton.Enabled:= WizardForm.GroupEdit.Enabled end;
end; End;

procedure InitializeWizard5();
begin
NeedSize := 6100; //Здесь указывается место для приложения
WizardForm.DiskSpaceLabel.Hide;
NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(220);
Width := ScaleX(209);
Height := ScaleY(13);
end;
ListBox:= TListBox.Create(WizardForm)
ListBox.SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 8, WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left, WizardForm.DiskSpaceLabel.Top - (WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 12))
ListBox.Font.Size:= 9
ListBox.Font.Style:= []
ListBox.Font.Name:= 'Courier New';
ListBox.OnClick:= @ObjectOnClick;
ListBox.Parent:= WizardForm.SelectDirPage;
WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;

procedure CurPageChanged3(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then
begin
GetNeedSpaceCaption;
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled:=False
ListBoxRefresh
end;
end;

procedure InitializeWizard();
begin
InitializeWizard1();
InitializeWizard2();
InitializeWizard3();
InitializeWizard4();
InitializeWizard5();
end;

procedure CurPageChanged(CurPageID: Integer);
begin
CurPageChanged1(CurPageID);
CurPageChanged2(CurPageID);
CurPageChanged3(CurPageID);
end;

procedure DeinitializeSetup();
begin
DeinitializeSetup1();
DeinitializeSetup2();
end;

Скрипт проверял на IS от Restools...
З.Ы. Если где-то будут крякозяблины - твоя вина; возможно когда копировал скрипты (Слайд-шоу и Деинсталлятора), был включен английский язык, просто найдёшь и заменишь на строки из исходника :)


RapMan, качай с зеркал :)

RapMan 26-11-2009 17:07 1280521

A1EXXX, Большое спасибо!

У меня Windows 7 и ISFD падает с ошибкой Runtime error 216 at 00404036 что можно с этим сделать?

A1EXXX 26-11-2009 17:26 1280545

RapMan, у меня на Windows 7 то же самое, режим совместимости не помогает :( На ХР нормально работает...

RapMan 26-11-2009 17:28 1280550

а есть какая-то версия что под семеркой работает? из последних?

A1EXXX 26-11-2009 17:35 1280556

RapMan, понятия не имею, я этой прогой не пользуюсь....

RapMan 26-11-2009 17:39 1280560

а какую можно программу использовать чтобы создать свои собственные окна (ну как в ISFD) ?

Cranz86 26-11-2009 18:52 1280627

Доброго времени суток.
Люди, в программенге не особо забираюсь, но по работе очень много приходить собирать IS-ом. Сейчас мне требуется что бы после установки игры, т.е. перед экраном с вопросом "Вы хотите запустить ******", сделать тихую установку toolbar'a. Т.е. нужен экран на котором я уже доработаю 3 варианта установки, ссылки на сайт и т.д.
Кто поможет? Заранее благодарен!

Serega 26-11-2009 19:38 1280667

Цитата:

Цитата YURSHAT
1. Выводить инфу в Гб, до трех заков после зяпятой (если можно с предидущим примером) »

Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Files]
Source: compiler:Libraries\get_hw_caps.dll; Flags: dontcopy

[Code]
function GetHardDriveFreeSpace(hdd: integer): Integer;
  external 'hwc_GetHardDriveFreeSpace@files:get_hw_caps.dll stdcall';
function GetHardDriveName(hdd: integer): PChar;
  external 'hwc_GetHardDriveName@files:get_hw_caps.dll stdcall';
function GetHardDriveTotalSpace(hdd: integer): Integer;
  external 'hwc_GetHardDriveTotalSpace@files:get_hw_caps.dll stdcall';
function GetHardDrivesCount(): Integer; external 'hwc_GetHardDrivesCount@files:get_hw_caps.dll stdcall';

const
  TB = 1024 * 1024;
  GB = 1024;

function TBorGBorMB(const FileSize: Extended): string;
// функция определения ТБ, ГБ или МБ
begin
  if FileSize/TB > 1 then
    Result:= Format('%.3f ТБ', [FileSize/TB])
  else
  if FileSize/GB > 1 then
    Result:= Format('%.3f ГБ', [FileSize/GB])
  else Result:= Format('%.3f MБ', [FileSize]);
end;

function InitializeSetup(): Boolean;
var
  i, count: Integer;
  msg: string;
begin
  count:= GetHardDrivesCount();
  msg:= 'Количество дисков: ' + IntToStr(count) + #13;
  for i:= 0 to count - 1 do
    msg:= msg + 'Размер: ' + GetHardDriveName(i) + ' - ' +
      TBorGBorMB(GetHardDriveTotalSpace(i)) +
        ', своб.: ' + TBorGBorMB(GetHardDriveFreeSpace(i)) + #13;
  MsgBox(msg, mbInformation, MB_OK);
end;


Цитата:

Цитата YURSHAT
2. Как сделать проверку версии пиксельных шейдеров у видеокарты »

Не знаю.

Цитата:

Цитата Cranz86
Т.е. нужен экран на котором я уже доработаю 3 варианта установки, ссылки на сайт и т.д. »

Вы имеете ввиду, сделать свою дополнительную страницу? Если да, то:
Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
var
  Page: TWizardPage;

procedure InitializeWizard();
begin
  Page:= CreateCustomPage(wpInstalling, 'Caption', 'Description');
end;


STRELOK 26-11-2009 20:26 1280701

Народ если кому не сложно подредактируйте скрипт вот этот http://slil.ru/28258362 ( залил т.к не помещается в сообш )
Мне хотелось бы реализовать это:
Как тут сделать картинку по верх текста а не наоборот?


Как сделать чтобы тут чтобы картинка была из приветствия? Т.е не разные а одинаковые, и чтобы так же была растянута.


И ещё в моменте при выборе папки установки хотелось бы сделать "вывод данных о винтах"
как тут


читать дальше »

var
NeedSize:Integer;
FreeMB, TotalMB: Cardinal;
NeedSpaceLabel: TLabel;
n: Integer;
VolumeName, FileSystemName: String;
VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint;
ListBox: TListBox;
StartMenuTreeView: TStartMenuFolderTreeView;
procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False else
WizardForm.NextButton.Enabled := True; end;
procedure GetNeedSpaceCaption;
begin
if NeedSize > 1024 then
NeedSpaceLabel.Caption := 'Требуется как минимум '+ FloatToStr(round(NeedSize/1024*100)/100) + ' Гб свободного дискового пространства.' else
NeedSpaceLabel.Caption := 'Требуется как минимум '+ IntToStr(NeedSize)+ ' Мб свободного дискового пространства.';end;
const oneMB= 1024*1024;
function GetLogicalDrives: DWord; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(nDrive: String): Longint; external 'GetDriveTypeA@kernel32.dll stdcall';
function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';
function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';
Function ByteOrTB(Bytes: Extended; noMB: Boolean): String; { Перевод числа в значение бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)}
Begin
if not noMB then Result:= FloatToStr(Int(Bytes)) +' Мб' else
if Bytes < 1024 then Result:= FloatToStr(Int(Bytes)) +' Бт' else
if Bytes/1024 < 1024 then Result:= FloatToStr(round((Bytes/1024)*10)/10) +' Кб' else
If Bytes/oneMB < 1024 then Result:= FloatToStr(round(Bytes/oneMB*100)/100) +' Мб' else
If Bytes/oneMB/1000 < 1024 then Result:= FloatToStr(round(Bytes/oneMB/1024*1000)/1000) +' Гб' else
Result:= FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Тб'
StringChange(Result, ',', '.')
End;
Function DelSP(String: String): String; { Удаление начальных, конечных и повторных пробелов }
Begin while (Pos(' ', String) > 0) do Delete(String, Pos(' ', String), 1); Result:= Trim(String); End;
Function CutString(String: String; MaxLength: Longint): String; { Обрезать строку до заданного кол-ва символов}
Begin
if Length(String) > MaxLength then Result:= Copy(String, 1, 6) +'...'+ Copy(String, Length(String) - MaxLength +9, MaxLength)
else Result:= String;
End;
Procedure GetDiskInfo(Disk: String);
Begin
FileSystemName:= StringOfChar(' ', 32); VolumeName:= StringOfChar(' ', 256);
GetVolumeInformation(Disk, VolumeName, 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, 31);
FileSystemName:= DelSp(FileSystemName); VolumeName:= DelSp(VolumeName); if VolumeName='' then VolumeName:='без метки';
End;
Procedure ListBoxRefresh; var FreeB, TotalB: Cardinal; Path, String: string; Begin
ListBox.Items.Clear
for n:= 1 to 31 do // диск 'А' пропустить
if (GetLogicalDrives and (1 shl n)) > 0 then
if (GetDriveType(Chr(ord('A') + n) +':\') = 2) or (GetDriveType(Chr(ord('A') + n) +':\') = 3) then
if GetSpaceOnDisk(Chr(ord('A') + n) +':\', True, FreeMB, TotalMB) then ListBox.Items.Add(Chr(ord('A') + n) +':');
for n:= 0 to ListBox.Items.Count -1 do begin
Path:= Copy(ListBox.Items[n],1,2) +'\' { если в накопителе нет диска, пропустить обновление }
if GetSpaceOnDisk(Path, False, FreeB, TotalB) and GetSpaceOnDisk(Path, True, FreeMB, TotalMB) then begin GetDiskInfo(Path);
if FreeB >= $7FFFFFFF then String:= PadL(ByteOrTB(FreeMB*oneMB, true),10) else String:= PadL(ByteOrTB(FreeB, true),10);
if TotalB >= $7FFFFFFF then begin TotalB:= TotalMB; FreeB:= FreeMB; String:= PadL(ByteOrTB(TotalMB*oneMB, true),11) +' всего -'+ String end else String:= PadL(ByteOrTB(TotalB, true),11) +' всего| '+ String;
ListBox.Items[n]:= Copy(Path,1,2) + String + PadL(FloatToStr(round(FreeB/TotalB*100)),3)+ '% своб|'+ PadL(FileSystemName,5)+ '| '+ CutString(VolumeName,9); end; end;
End;
Procedure ObjectOnClick(Sender: TObject); Begin
Case TObject(Sender) of
ListBox: for n:= 0 to ListBox.Items.Count-1 do if ListBox.Selected[n] then WizardForm.DirEdit.Text:= Copy(ListBox.Items[n],1,1) +Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text))
StartMenuTreeView: if StartMenuTreeView.Directory <> '' then WizardForm.GroupEdit.Text:= StartMenuTreeView.Directory else WizardForm.GroupEdit.Text:= '{#SetupSetting("DefaultGroupName")}'
WizardForm.NoIconsCheck: begin WizardForm.GroupEdit.Enabled:= not(WizardForm.GroupEdit.Enabled); StartMenuTreeView.Enabled:= WizardForm.GroupEdit.Enabled; WizardForm.GroupBrowseButton.Enabled:= WizardForm.GroupEdit.Enabled end;
end; End;
procedure InitializeWizard();
begin
NeedSize := 6100; //Здесь указывается место для приложения
WizardForm.DiskSpaceLabel.Hide;
NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(220);
Width := ScaleX(209);
Height := ScaleY(13);
end;
ListBox:= TListBox.Create(WizardForm)
ListBox.SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 8, WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left, WizardForm.DiskSpaceLabel.Top - (WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 12))
ListBox.Font.Size:= 9
ListBox.Font.Style:= []
ListBox.Font.Name:= 'Courier New';
ListBox.OnClick:= @ObjectOnClick;
ListBox.Parent:= WizardForm.SelectDirPage;
WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then
begin
GetNeedSpaceCaption;
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled:=False
ListBoxRefresh
end;
end;

ПОМОГИТЕ
За ранее огромное спасибо!

YURSHAT 26-11-2009 20:27 1280703

Цитата:

Цитата CrOsP
подскажите как поставить фон в инсталере ? »

Что вы имеете в виду под словом фон?

Serega 26-11-2009 20:29 1280705

Цитата:

Цитата CrOsP
подскажите как поставить фон в инсталере ? »

В секцию [Setup] добавьте WindowVisible=yes

solvador 26-11-2009 23:11 1280832

Цитата:

Цитата Serega
Цитировать »

Можно пример скрипта в котором эти кнопки можно было бы разместить на нескольких страницах с доп.задачами. Если это возможно. В данном виде кнопка "Всё" отображается только на последней странице, а кнопка "Ничего" есть на всех.
Заранее благодарен.

Serega 26-11-2009 23:25 1280840

Цитата:

Цитата solvador
В данном виде кнопка "Всё" отображается только на последней странице, а кнопка "Ничего" есть на всех. »

Вы заблуждаетесь, видимо вы что-то поменяли в скрипте...
Именно в данном виде, кнопки отображаются на странице компонентов (Parent:= WizardForm.SelectComponentsPage;).

solvador 26-11-2009 23:34 1280847

Serega, я не совсем может правильно выразился. У меня несколько доп. страниц Page1, Page2 с задачами. Если скрипт привязать к одной из них, то всё работает, обе кнопки на месте. Если привязать скрипт ещё на другую страницу, то кнопка "Всё" имеется только на Page1 , на Page2 её нет, только кнопка "Ничего".
Могу в личку скрипт кинуть, чтобы понятнее было.

ЗЫ Вместо Parent:= WizardForm.SelectComponentsPage; я соответственно вписал свои страницы Parent:= Page1.Surface;. И в procedure btnClick так же внёс нужные правки.

YURSHAT 26-11-2009 23:38 1280852

Serega, а есть возмозножность сделать так, чтобы мое созданное сообщение выводилось раньше стандартного. Например это
Код:

function NextButtonClick(CurPageID: Integer): Boolean;
var
  Path,s: String;
  FreeMB, TotalMB: Cardinal;
begin
  Result:= True;
  if CurPageID = wpSelectDir then
    begin
      Path:= ExtractFileDrive(WizardForm.DirEdit.Text);
      GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
      if FreeMB < (NeedSize*1024) then
    begin
      if FreeMB>1024 then
      begin
      s:='Для установки приложения необходимо '+ IntTostr(NeedSize)+ ' GB,'#13+'а на выбранном Вами диске доступно только '+ floatToStr(round(FreeMB/1024*100)/100) + ' GB!'
      end
        else s:='Для установки приложения необходимо '+ IntTostr(NeedSize)+ ' GB,'#13+'а на выбранном Вами диске доступно только '+ + IntToStr(FreeMB)+' MB';
      MsgBox(s, mbCriticalError, MB_OK)
        Result := False;
    end;
    end;


Serega 26-11-2009 23:59 1280864

Цитата:

Цитата solvador
я не совсем может правильно выразился »

У вас в коде где-то ошибка. Надо смотреть.

Цитата:

Цитата YURSHAT
а есть возмозножность сделать так, чтобы мое созданное сообщение »

Код:

....................................................
  if CurPageID = wpSelectDir then
    begin
      // здесь вставьте ваше сообщение...
.....................................................


solvador 27-11-2009 00:47 1280889

Serega, подвела меня моя невнимательность. У меня просто кнопки друг на друга накладывались. Исправил, всё работает.
Спасибо. За скрипт и за помощь.

STRELOK 27-11-2009 09:50 1281024

Народ помогите последние время IS стал выдавать такую ошибку

Кому не сложно соедините этот скрипт
читать дальше »

[Setup]
AppName=Call of Duty Modern Warfare 2
AppVerName=Call of Duty Modern Warfare 2
DefaultDirName={pf}\Call of Duty Modern Warfare 2
DefaultGroupName=Call of Duty Modern Warfare 2
UsePreviousAppDir=false
DirExistsWarning=no
ShowLanguageDialog=yes
OutputBaseFilename=setup
OutputDir=/сod6
VersionInfoCopyright=kid#why? ^_-
WizardImageFile=WizardImage1231.bmp
WizardSmallImageFile=small11.bmp
AppCopyRight=kid#why? ^_-
Compression=lzma/ultra64
InternalCompressLevel=ultra64
SolidCompression=true
DiskSpanning=yes
DiskSliceSize=1000000000
SlicesPerDisk=2
SetupIconFile=Icon.ico

[Languages]
Name: eng; MessagesFile: compiler:Default.isl
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[CustomMessages]
eng.ArcBreak=Installation cancelled!
eng.ExtractedInfo=Extracted %1 Mb of %2 Mb
eng.ArcInfo=Archive: %1 of %2
eng.ArcTitle=Extracting FreeArc archive
eng.ArcError=Decompression failed with error code %1
eng.ArcFail=Decompression failed!
eng.AllProgress=Overall extraction progress: %1%%
eng.ArcBroken=Archive %1 is damaged%nor not enough free space.
eng.Extracting=Extracting: %1
eng.taskbar=%1%%, %2 remains
eng.remains=Remaining time: %1
eng.LongTime=at no time
eng.ending=ending
eng.hour= hours
eng.min= mins
eng.sec= secs

rus.ArcBreak=Установка прервана!
rus.ExtractedInfo=Распаковано %1 Мб из %2 Мб
rus.ArcInfo=Архив: %1 из %2
rus.ArcTitle=Распаковка архивов FreeArc
rus.ArcError=Распаковщик FreeArc вернул код ошибки: %1
rus.ArcFail=Распаковка не завершена!
rus.AllProgress=Общий прогресс распаковки: %1%%
rus.ArcBroken=Возможно, архив %1 повреждён%nили недостаточно места на диске назначения.
rus.Extracting=Распаковывается: %1
rus.taskbar=%1%%, жди %2
rus.remains=Осталось ждать %1
rus.LongTime=вечно
rus.ending=завершение
rus.hour= часов
rus.min= мин
rus.sec= сек

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"
Name: task1; Description: Доп. программное обеспечение
Name: task1\task2; Description: DirectX
Name: task1\task3; Description: Visual C++

[Icons]
Name: "{group}\Call of Duty Modern Warfare 2"; Filename: "{app}\iw4sp.exe"; WorkingDir: "{app}"; Parameters: Call of Duty Modern Warfare 2;
Name: "{userdesktop}\Call of Duty Modern Warfare 2"; Filename: "{app}\iw4sp.exe"; WorkingDir: "{app}"; Tasks: desktopicon; Parameters: Call of Duty Modern Warfare 2;
Name: "{group}\{cm:UninstallProgram,Call of Duty Modern Warfare 2}"; Filename: "{uninstallexe}"

[Run]
Filename: {src}\DirectX\dxsetup.exe; Parameters: /silent; StatusMsg: Идет установка дополнительных программ...; Tasks: task1\task2; Flags: waituntilterminated
Filename: {src}\Redist\vcredist_x86.exe; Parameters: /Q; StatusMsg: Идет установка дополнительных программ...; Tasks: task1\task3; Flags: waituntilterminated

[Files]
;Source: *.arc; DestDir: {app}; Flags: nocompression deleteafterinstall
Source: unarc.dll; DestDir: {tmp}; Flags: dontcopy deleteafterinstall
Source: compiler:InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
Source: logo1.bmp; DestDir: {tmp}; Flags: dontcopy


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

[code]
// Страница приветствия ---------------------------------------------------------------------------------------------------------------------------------

procedure InitializeWizard2();
var
WLabel1, WLabel2: TLabel;
//FLabel1, FLabel2: TLabel;
bottom_img:TBitmapImage;
BmpFile: TBitmapImage;
FinishedHeadingLabel ,FinishedLabel:TLabel;

begin
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.WizardBitmapImage.Width := 497;
WizardForm.WizardBitmapImage.Height := 314;
WizardForm.Bevel1.Hide;
WizardForm.FinishedHeadingLabel.Hide;
WizardForm.FinishedLabel.Hide;
begin

ExtractTemporaryFile('logo1.bmp');
bottom_img:= TBitmapImage.Create(WizardForm);
bottom_img.Bitmap.LoadFromFile(ExpandConstant('{tmp}\logo1.bmp'));
bottom_img.SetBounds(5, 320, 128, 30); {первые 2 параметра - координаты левогого верхнего угла по горизонтали и вертикали, дальше ширина и высота, до которой растянуть}
bottom_img.Parent:= WizardForm;
bottom_img.Stretch:= True;
end;

WLabel1 := TLabel.Create(WizardForm);
WLabel1.Left := ScaleX(165);
WLabel1.Top := ScaleY(45);
WLabel1.Width := ScaleX(321);
WLabel1.Height := ScaleY(54);
WLabel1.AutoSize := False;
WLabel1.WordWrap := True;
WLabel1.Font.Size := 13;
WLabel1.Font.Style := [fsBold];
WLabel1.Font.Color:= clBlack;
WLabel1.Font.name:='Constantia';
WLabel1.ShowAccelChar := False;
WLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
WLabel1.Transparent := True;
WLabel1.Parent := WizardForm.WelcomePage;
WLabel1.Alignment:= taCenter;

WLabel2:=TLabel.Create(WizardForm);
WLabel2.Top := ScaleY(140);
WLabel2.Left := ScaleX(165);
WLabel2.Width := ScaleX(301);
WLabel2.Height := ScaleY(234);
WLabel2.AutoSize := False;
WLabel2.WordWrap := True;
WLabel2.Alignment:= taCenter;
WLabel2.Font.Color:= clBlack;
WLabel2.Font.Size := 9;
//WLabel2.Font.Style := [fsBold];
WLabel2.ShowAccelChar := False;
WLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
WLabel2.Transparent := True;
WLabel2.Parent := WizardForm.WelcomePage;





FinishedHeadingLabel:=TLabel.Create(WizardForm);
with FinishedHeadingLabel do
begin
Left:= ScaleX(165);
Top:= ScaleY(30);
Width:= ScaleX(330);
Height:= ScaleY(74);
AutoSize:= false;
WordWrap:= true;
Alignment:= taCenter;
Font.Size:= 13;
Font.Color:=ClBlack
Font.Style:=[fsBold];
Font.Name:= 'Constantia';

Transparent:= true;
Parent:= WizardForm.FinishedPage;
Caption:= WizardForm.FinishedHeadingLabel.Caption;
end;


FinishedLabel:= TLabel.Create(WizardForm);
with FinishedLabel do
begin
Left:= ScaleX(210);
Top:= ScaleY(145);
Width:= ScaleX(250);
Height:= ScaleY(250);
AutoSize:= false;
WordWrap:= true;
Transparent:= false;
Font.Size:= 9;
Alignment:= taCenter;
Font.Color:=ClBlack
// Font.Style:=[fsBold, fsItalic];
// Font.Name:= 'Constantia';
Parent:= WizardForm.FinishedPage;
Caption:= 'Игра {#SetupSetting("AppName")} установлена на Ваш компьютер.' +#10#13#10 + 'Нажмите «Завершить», чтобы выйти из программы установки.'
end;



//////////////////Картинка вверху//////////////////////////
begin
with WizardForm do begin
with MainPanel do
Height := Height - 0;
with WizardSmallBitmapImage do begin
Left := 0;
Top := 0;
Height := 58; //Размер рисунка
Width := 497; //
end;
with PageNameLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
with PageDescriptionLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
end;
end;


begin
//Извлечение изображения
//Динамическое выделение памяти под изображение (BMP-файла)
BmpFile:= TBitmapImage.Create(WizardForm);
//Загрузка изображения из директории, в которую извлекали файл
//Задание размеров изображения согласно исходному
//Заменить widht - ширина, height - высота
BmpFile.SetBounds(0, 0, 164, 314);
//Подгоняем изображение под widht х height
BmpFile.Stretch:= true
//Привязка изображения к странице
BmpFile.Parent:= WizardForm.FinishedPage;
end;
end;


//конец








// Фриарк ------------------------------------------------------------------------------------------------------------------------------------------------
const
Archives = '*.arc'; // укажите расположение архивов FreeArc; для внешних файлов строку в [Files] добавлять необязательно

PM_REMOVE = 1;
CP_ACP = 0; CP_UTF8 = 65001;
oneMb = 1048576;

type
#ifdef UNICODE ; если у вас ошибка на этой строке, то установите препроцессор или исправьте скрипт для вашей версии Inno Setup
#define A "W"
#else
#define A "A" ; точка входа в SetWindowText, {#A} меняется на A или W в зависимости от версии
PAnsiChar = PChar; // Required for Inno Setup 5.3.0 and higher. (требуется для Inno Setup версии 5.3.0 и ниже)
#endif
#if Ver < 84018176
AnsiString = String; // There is no need for this line in Inno Setup 5.2.4 and above (для Inno Setup версий 5.2.4 и выше эта строка не нужна)
#endif

TMyMsg = record
hwnd: HWND;
message: UINT;
wParam: Longint;
lParam: Longint;
time: DWORD;
pt: TPoint;
end;

TFreeArcCallback = function (what: PAnsiChar; int1, int2: Integer; str: PAnsiChar): Integer;
TArc = record Path: string; OrigSize: Integer; Size: Extended; end;

var
ExtractFile: TLabel;
lblExtractFileName: TLabel;
btnCancelUnpacking: TButton;
CancelCode, n, UnPackError, StartInstall: Integer;
Arcs: array of TArc;
msgError: string;
lastMb: Integer;
baseMb: Integer;
totalUncompressedSize: Integer; // total uncompressed size of archive data in mb
LastTimerEvent: DWORD;

Function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: string; cbMultiByte: integer; lpWideCharStr: string; cchWideChar: integer): longint; external 'MultiByteToWideChar@kernel32.dll stdcall';
Function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: string; cchWideChar: integer; lpMultiByteStr: string; cbMultiByte: integer; lpDefaultChar: integer; lpUsedDefaultChar: integer): longint; external 'WideCharToMultiByte@kernel32.dll stdcall';

function PeekMessage(var lpMsg: TMyMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMyMsg): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: TMyMsg): Longint; external 'DispatchMessageA@user32.dll stdcall';

Function OemToChar(lpszSrc, lpszDst: AnsiString): longint; external 'OemToCharA@user32.dll stdcall';
function GetWindowLong(hWnd, nIndex: Integer): Longint; external 'GetWindowLongA@user32 stdcall delayload';
function SetWindowText(hWnd: Longint; lpString: String): Longint; external 'SetWindowText{#A}@user32 stdcall delayload';

function GetTickCount: DWord; external 'GetTickCount@kernel32';
function WrapFreeArcCallback (callback: TFreeArcCallback; paramcount: integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function FreeArcExtract (callback: longword; cmd1,cmd2,cmd3,cmd4,cmd5,cmd6,cmd7,cmd8,cmd9,cmd10: PAnsiChar): integer; external 'FreeArcExtract@files:unarc.dll cdecl';

procedure AppProcessMessage;
var
Msg: TMyMsg;
begin
while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;

// Перевод числа в строку с точностью 3 знака (%.3n) с округлением дробной части, если она есть
Function NumToStr(Float: Extended): String;
Begin
Result:= Format('%.3n', [Float]); StringChange(Result, ',', '.');
while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Length(Result) > 1) do
SetLength(Result, Length(Result)-1);
End;

function cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;

Function Size64(Hi, Lo: Integer): Extended;
Begin
Result:= Lo;
if Lo<0 then Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
for Hi:= Hi-1 Downto 0 do
Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
End;

// Converts OEM encoded string into ANSI
// Преобразует OEM строку в ANSI кодировку
function OemToAnsiStr( strSource: AnsiString): AnsiString;
var
nRet : longint;
begin
SetLength( Result, Length( strSource ) );
nRet:= OemToChar( strSource, Result );
end;

// Converts ANSI encoded string into UTF-8
// Преобразует строку из ANSI в UTF-8 кодировку
function AnsiToUtf8( strSource: string ): string;
var
nRet : integer;
WideCharBuf: string;
MultiByteBuf: string;
begin
strSource:= strSource + chr(0);
SetLength( WideCharBuf, Length( strSource ) * 2 );
SetLength( MultiByteBuf, Length( strSource ) * 2 );

nRet:= MultiByteToWideChar( CP_ACP, 0, strSource, -1, WideCharBuf, Length(WideCharBuf) );
nRet:= WideCharToMultiByte( CP_UTF8, 0, WideCharBuf, -1, MultiByteBuf, Length(MultiByteBuf), 0, 0);

Result:= MultiByteBuf;
end;

// OnClick event function for btnCancel
procedure btnCancelUnpackingOnClick(Sender: TObject);
begin
if MsgBox( SetupMessage( msgExitSetupMessage ), mbInformation, MB_YESNO ) = IDYES then
CancelCode:= -127;
end;

var origsize: Integer;
// The callback function for getting info about FreeArc archive
function FreeArcInfoCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
begin
if string(what)='origsize' then origsize := Mb else
if string(what)='compsize' then else
if string(what)='total_files' then else
Result:= CancelCode;
end;

// Returns decompressed size of files in archive
function ArchiveOrigSize(arcname: string): Integer;
var
callback: longword;
Begin
callback:= WrapFreeArcCallback(@FreeArcInfoCallback,4); //FreeArcInfoCallback has 4 arguments
CancelCode:= 0;
AppProcessMessage;
try
// Pass the specified arguments to 'unarc.dll'
Result:= FreeArcExtract (callback, 'l', '--', AnsiToUtf8(arcname), '', '', '', '', '', '', '');
if CancelCode < 0 then Result:= CancelCode;
if Result >= 0 then Result:= origsize;
except
Result:= -63; // ArcFail
end;
end;

// Scans the specified folders for archives and add them to list
function FindArcs(dir: string): Extended;
var
FSR: TFindRec;
Begin
Result:= 0;
if FindFirst(ExpandConstant(dir), FSR) then begin
try
repeat
// Skip everything but the folders
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then CONTINUE;
n:= GetArrayLength(Arcs);
// Expand the folder list
SetArrayLength(Arcs, n +1);
Arcs[n].Path:= ExtractFilePath(ExpandConstant(dir)) + FSR.Name;
Arcs[n].Size:= Size64(FSR.SizeHigh, FSR.SizeLow);
Result:= Result + Arcs[n].Size;
Arcs[n].OrigSize := ArchiveOrigSize(Arcs[n].Path)
totalUncompressedSize := totalUncompressedSize + Arcs[n].OrigSize
until not FindNext(FSR);
finally
FindClose(FSR);
end;
end;
End;

// Sets the TaskBar title
Procedure SetTaskBarTitle(Title: String); var h: Integer;
Begin
h:= GetWindowLong(MainForm.Handle, -8); if h <> 0 then SetWindowText(h, Title);
End;

// Converts milliseconds to human-readable time
// Конвертирует милисекунды в человеко-читаемое изображение времени
Function TicksToTime(Ticks: DWord; h,m,s: String; detail: Boolean): String;
Begin
if detail {hh:mm:ss format} then
Result:= PADZ(IntToStr(Ticks/3600000), 2) +':'+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +':'+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2)
else if Ticks/3600 >= 1000 {more than hour} then
Result:= IntToStr(Ticks/3600000) +h+' '+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +m
else if Ticks/60 >= 1000 {1..60 minutes} then
Result:= IntToStr(Ticks/60000) +m+' '+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2) +s
else Result:= IntToStr(Ticks/1000) +s {less than one minute}
End;

// The main callback function for unpacking FreeArc archives
function FreeArcCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
var
percents, Remaining: Integer;
s: String;
begin
if GetTickCount - LastTimerEvent > 1000 then begin
// This code will be executed once each 1000 ms (этот код будет выполняться раз в 1000 миллисекунд)
// ....
// End of code executed by timer
LastTimerEvent := LastTimerEvent+1000;
end;

if string(what)='filename' then begin
// Update FileName label
lblExtractFileName.Caption:= FmtMessage( cm( 'Extracting' ), [OemToAnsiStr( str )] )
end else if (string(what)='write') and (totalUncompressedSize>0) and (Mb>lastMb) then begin
// Assign to Mb *total* amount of data extracted to the moment from all archives
lastMb := Mb;
Mb := baseMb+Mb;

// Update progress bar
WizardForm.ProgressGauge.Position:= Mb;

// Show how much megabytes/archives were processed up to the moment
percents:= (Mb*1000) div totalUncompressedSize;
s := FmtMessage(cm('ExtractedInfo'), [IntToStr(Mb), IntToStr(totalUncompressedSize)]);
if GetArrayLength(Arcs)>1 then
s := s + '. '+FmtMessage(cm('ArcInfo'), [IntToStr(n+1), IntToStr(GetArrayLength(Arcs))])
ExtractFile.Caption := s

// Calculate and show current percents
percents:= (Mb*1000) div totalUncompressedSize;
s:= FmtMessage(cm('AllProgress'), [Format('%.1n', [Abs(percents/10)])]);
if Mb > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((totalUncompressedSize - Mb)/Mb)) else Remaining:= 0;
if Remaining = 0 then SetTaskBarTitle(cm('ending')) else begin
s:= s + '. '+FmtMessage(cm('remains'), [TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)])
SetTaskBarTitle(FmtMessage(cm('taskbar'), [IntToStr(percents/10), TicksToTime(Remaining, 'h', 'm', 's', false)]))
end;
WizardForm.FileNameLabel.Caption := s
end;
AppProcessMessage;
Result:= CancelCode;
end;

// Extracts all found archives
function UnPack(Archives: string): Integer;
var
totalCompressedSize: Extended;
callback: longword;
FreeMB, TotalMB: Cardinal;
begin
// Display 'Extracting FreeArc archive'
lblExtractFileName.Caption:= '';
lblExtractFileName.Show;
ExtractFile.caption:= cm('ArcTitle');
ExtractFile.Show;
// Show the 'Cancel unpacking' button and set it as default button
btnCancelUnpacking.Caption:= WizardForm.CancelButton.Caption;
btnCancelUnpacking.Show;
WizardForm.ActiveControl:= btnCancelUnpacking;
WizardForm.ProgressGauge.Position:= 0;
// Get the size of all archives
totalUncompressedSize := 0;
totalCompressedSize := FindArcs(Archives);
WizardForm.ProgressGauge.Max:= totalUncompressedSize;
// Other initializations
callback:= WrapFreeArcCallback(@FreeArcCallback,4); //FreeArcCallback has 4 arguments
StartInstall:= GetTickCount; {время начала распаковки}
LastTimerEvent:= GetTickCount;
baseMb:= 0

for n:= 0 to GetArrayLength(Arcs) -1 do
begin
lastMb := 0
CancelCode:= 0;
AppProcessMessage;
try
// Pass the specified arguments to 'unarc.dll'
Result:= FreeArcExtract (callback, 'x', '-o+', '-dp' + AnsiToUtf8( ExpandConstant('{app}') ), '--', AnsiToUtf8(Arcs[n].Path), '', '', '', '', '');
if CancelCode < 0 then Result:= CancelCode;
except
Result:= -63; // ArcFail
end;
baseMb:= baseMb+lastMb

// Error occured
if Result <> 0 then
begin
msgError:= FmtMessage(cm('ArcError'), [IntToStr(Result)]);
GetSpaceOnDisk(ExtractFileDrive(ExpandConstant('{app}')), True, FreeMB, TotalMB);
case Result of
-1: if FreeMB < 32 {Мб на диске} then msgError:= SetupMessage(msgDiskSpaceWarningTitle)
else msgError:= msgError + #13#10 + FmtMessage(cm('ArcBroken'), [ExtractFileName(Arcs[n].Path)]);
-127: msgError:= cm('ArcBreak'); //Cancel button
-63: msgError:= cm('ArcFail');
end;
// MsgBox(msgError, mbInformation, MB_OK); //сообщение показывается на странице завершения
Log(msgError);
Break; //прервать цикл распаковки
end;
end;
// Hide labels and button
WizardForm.FileNameLabel.Caption:= '';
lblExtractFileName.Hide;
ExtractFile.Hide;
btnCancelUnpacking.Hide;
end;

procedure CurStepChanged1(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
UnPackError:= UnPack(Archives)
if UnPackError = 0 then
SetTaskBarTitle(SetupMessage(msgSetupAppTitle))
else
begin
// Error occured, uninstall it then
Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n); //откат установки из-за ошибки unarc.dll
SetTaskBarTitle(SetupMessage(msgErrorTitle))
WizardForm.Caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
end;
end;
end;

// стандартный способ отката (не нужна CurPageChanged), но архивы распаковываются до извлечения файлов инсталлятора
// if CurStep = ssInstall then
// if UnPack(Archives) <> 0 then Abort;

Procedure CurPageChanged1(CurPageID: Integer);
Begin
if (CurPageID = wpFinished) and (UnPackError <> 0) then
begin // Extraction was unsuccessful (распаковщик вернул ошибку)
// Show error message
WizardForm.FinishedLabel.Font.Color:= $0000C0; // red (красный)
WizardForm.FinishedLabel.Height:= WizardForm.FinishedLabel.Height * 2;
WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) + #13#10#13#10 + msgError;
end;
End;

procedure InitializeWizard3();
begin
with WizardForm.ProgressGauge do
begin
// Create a label to show current FileName being extracted
lblExtractFileName:= TLabel.Create(WizardForm);
lblExtractFileName.parent:=WizardForm.InstallingPage;
lblExtractFileName.autosize:=false;
lblExtractFileName.Width:= Width;
lblExtractFileName.top:=Top + ScaleY(35);
lblExtractFileName.Caption:= '';
lblExtractFileName.Hide;

// Create a label to show percentage
ExtractFile:= TLabel.Create(WizardForm);
ExtractFile.parent:=WizardForm.InstallingPage;
ExtractFile.autosize:=false;
ExtractFile.Width:= Width;
ExtractFile.top:=lblExtractFileName.Top + ScaleY(16);
ExtractFile.caption:= '';
ExtractFile.Hide;
end;

// Create a 'Cancel unpacking' button and hide it for now.
btnCancelUnpacking:=TButton.create(WizardForm);
btnCancelUnpacking.Parent:= WizardForm;
btnCancelUnpacking.SetBounds(WizardForm.CancelButton.Left, WizardForm.CancelButton.top, WizardForm.CancelButton.Width, WizardForm.CancelButton.Height);
btnCancelUnpacking.OnClick:= @btnCancelUnpackingOnClick;
btnCancelUnpacking.Hide;
end;


// Чек боксы и проверка харды ------------------------------------------------------------------------------------------------------------------------------------------------
const
NeedSize = 10000;

var
NeedSpaceLabel,FreeSpaceLabel: TLabel;
FreeMB, TotalMB: Cardinal;
Icons: TCheckBox;

function InstallDirectX: Boolean;
begin
end;

function InstallRedist: Boolean;
begin
end;
////////////////////////////////////////////////////////////////////////////////////////////////////////
function InstallPhysX: Boolean;
begin
end;

function CreateIcons: Boolean;
begin
Result:=Icons.Checked;
end;

procedure RedistOnClick(Sender: TObject);
begin
end;

procedure DirectXLabelOnClick(Sender: TObject);
begin
end;

procedure IconsOnClick(Sender: TObject);
begin
if Icons.Checked = False then
Icons.Checked:= True else
Icons.Checked:= False;
end;
procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
FreeSpaceLabel.Caption := 'Свободно на выбранном диске: ' + FloatToStr(round(FreeMB/1024*100)/100) + ' GB'
else
FreeSpaceLabel.Caption := 'Свободно на выбранном диске: ' + IntToStr(FreeMB)+ ' MB';
begin
if FreeMB < NeedSize then
begin
WizardForm.NextButton.Enabled:=false;
end else
WizardForm.NextButton.Enabled:=true;
end;
end;

procedure InitializeWizard5();
begin
WizardForm.DiskSpaceLabel.Hide;

NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(198);
Width := ScaleX(209);
Height := ScaleY(13);
Caption := 'Требуется для установки: 12 GB';
end;

FreeSpaceLabel := TLabel.Create(WizardForm);
with FreeSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(216);
Width := ScaleX(209);
Height := ScaleY(13);
end;

WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;

procedure CurPageChanged3(CurPageID: Integer);
begin
if CurPageID = wpSelectDir then
if FreeMB < NeedSize then
begin
WizardForm.NextButton.Enabled:=False
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
CurPageChanged1(CurPageID);
CurPageChanged3(CurPageID);
end;


procedure InitializeWizard();
begin
InitializeWizard2();
InitializeWizard3();
InitializeWizard5();
end;

STRELOK 27-11-2009 09:50 1281025

Вот с этим
читать дальше »

var
NeedSize:Integer;
FreeMB, TotalMB: Cardinal;
NeedSpaceLabel: TLabel;
n: Integer;
VolumeName, FileSystemName: String;
VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint;
ListBox: TListBox;
StartMenuTreeView: TStartMenuFolderTreeView;

procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False else
WizardForm.NextButton.Enabled := True; end;

procedure GetNeedSpaceCaption;
begin
if NeedSize > 1024 then
NeedSpaceLabel.Caption := 'Требуется как минимум '+ FloatToStr(round(NeedSize/1024*100)/100) + ' Гб свободного дискового пространства.' else
NeedSpaceLabel.Caption := 'Требуется как минимум '+ IntToStr(NeedSize)+ ' Мб свободного дискового пространства.';end;

const oneMB= 1024*1024;
function GetLogicalDrives: DWord; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(nDrive: String): Longint; external 'GetDriveTypeA@kernel32.dll stdcall';
function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';
function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';

Function ByteOrTB(Bytes: Extended; noMB: Boolean): String; { Перевод числа в значение бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)}
Begin
if not noMB then Result:= FloatToStr(Int(Bytes)) +' Мб' else
if Bytes < 1024 then Result:= FloatToStr(Int(Bytes)) +' Бт' else
if Bytes/1024 < 1024 then Result:= FloatToStr(round((Bytes/1024)*10)/10) +' Кб' else
If Bytes/oneMB < 1024 then Result:= FloatToStr(round(Bytes/oneMB*100)/100) +' Мб' else
If Bytes/oneMB/1000 < 1024 then Result:= FloatToStr(round(Bytes/oneMB/1024*1000)/1000) +' Гб' else
Result:= FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Тб'
StringChange(Result, ',', '.')
End;

Function DelSP(String: String): String; { Удаление начальных, конечных и повторных пробелов }
Begin while (Pos(' ', String) > 0) do Delete(String, Pos(' ', String), 1); Result:= Trim(String); End;

Function CutString(String: String; MaxLength: Longint): String; { Обрезать строку до заданного кол-ва символов}
Begin
if Length(String) > MaxLength then Result:= Copy(String, 1, 6) +'...'+ Copy(String, Length(String) - MaxLength +9, MaxLength)
else Result:= String;
End;

Procedure GetDiskInfo(Disk: String);
Begin
FileSystemName:= StringOfChar(' ', 32); VolumeName:= StringOfChar(' ', 256);
GetVolumeInformation(Disk, VolumeName, 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, 31);
FileSystemName:= DelSp(FileSystemName); VolumeName:= DelSp(VolumeName); if VolumeName='' then VolumeName:='без метки';
End;

Procedure ListBoxRefresh; var FreeB, TotalB: Cardinal; Path, String: string; Begin
ListBox.Items.Clear
for n:= 1 to 31 do // диск 'А' пропустить
if (GetLogicalDrives and (1 shl n)) > 0 then
if (GetDriveType(Chr(ord('A') + n) +':\') = 2) or (GetDriveType(Chr(ord('A') + n) +':\') = 3) then
if GetSpaceOnDisk(Chr(ord('A') + n) +':\', True, FreeMB, TotalMB) then ListBox.Items.Add(Chr(ord('A') + n) +':');
for n:= 0 to ListBox.Items.Count -1 do begin
Path:= Copy(ListBox.Items[n],1,2) +'\' { если в накопителе нет диска, пропустить обновление }
if GetSpaceOnDisk(Path, False, FreeB, TotalB) and GetSpaceOnDisk(Path, True, FreeMB, TotalMB) then begin GetDiskInfo(Path);
if FreeB >= $7FFFFFFF then String:= PadL(ByteOrTB(FreeMB*oneMB, true),10) else String:= PadL(ByteOrTB(FreeB, true),10);
if TotalB >= $7FFFFFFF then begin TotalB:= TotalMB; FreeB:= FreeMB; String:= PadL(ByteOrTB(TotalMB*oneMB, true),11) +' всего -'+ String end else String:= PadL(ByteOrTB(TotalB, true),11) +' всего| '+ String;
ListBox.Items[n]:= Copy(Path,1,2) + String + PadL(FloatToStr(round(FreeB/TotalB*100)),3)+ '% своб|'+ PadL(FileSystemName,5)+ '| '+ CutString(VolumeName,9); end; end;
End;

Procedure ObjectOnClick(Sender: TObject); Begin
Case TObject(Sender) of
ListBox: for n:= 0 to ListBox.Items.Count-1 do if ListBox.Selected[n] then WizardForm.DirEdit.Text:= Copy(ListBox.Items[n],1,1) +Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text))
StartMenuTreeView: if StartMenuTreeView.Directory <> '' then WizardForm.GroupEdit.Text:= StartMenuTreeView.Directory else WizardForm.GroupEdit.Text:= '{#SetupSetting("DefaultGroupName")}'
WizardForm.NoIconsCheck: begin WizardForm.GroupEdit.Enabled:= not(WizardForm.GroupEdit.Enabled); StartMenuTreeView.Enabled:= WizardForm.GroupEdit.Enabled; WizardForm.GroupBrowseButton.Enabled:= WizardForm.GroupEdit.Enabled end;
end; End;

procedure InitializeWizard();
begin
NeedSize := 6100; //Здесь указывается место для приложения
WizardForm.DiskSpaceLabel.Hide;
NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(220);
Width := ScaleX(209);
Height := ScaleY(13);
end;
ListBox:= TListBox.Create(WizardForm)
ListBox.SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 8, WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left, WizardForm.DiskSpaceLabel.Top - (WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 12))
ListBox.Font.Size:= 9
ListBox.Font.Style:= []
ListBox.Font.Name:= 'Courier New';
ListBox.OnClick:= @ObjectOnClick;
ListBox.Parent:= WizardForm.SelectDirPage;
WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then
begin
GetNeedSpaceCaption;
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled:=False
ListBoxRefresh
end;
end;

написал в 2 сообщ т.к в 1 не помещается

volk1234 27-11-2009 11:33 1281077

STRELOK

1. Используйте тег [code]
2. Большие скрипты лучше выкладывайть в виде вложенных файлов.

Raf-9600 27-11-2009 11:35 1281079

Цитата:

Цитата A1EXXX
Raf-9600, соединил, только "Запрет установки в папку Windows" здесь отсутствует (там ошибка в самом коде есть; MessageBox изменил на MsgBox и появилась другая ошибка )

Скрипт проверял на IS от Restools...
З.Ы. Если где-то будут крякозяблины - твоя вина; возможно когда копировал скрипты (Слайд-шоу и Деинсталлятора), был включен английский язык, просто найдёшь и заменишь на строки из исходника »

Спасибо! Я уш не думал что кто-то возьмется.

Правда есть два нюанса:
1. В классической версии Inno, не отображается список винтов.
2. Если использовать "BeveledLabel", то страница с слайд-шоу выглядит не очень эстетично.



Можно сделать чтоб BeveledLabel не отображался на этой странице?

STRELOK 27-11-2009 11:41 1281087

volk1234,
пробЫвал, делал, за тем выскакивала ошибка на строке [code] я её удалял, за тем оно просило все удалить( до бесконечности.) а без него выскакивает ошибка связанная либо с var, либо с n: Integer; и с procedure InitializeWizard();

volk1234 27-11-2009 13:11 1281151

Вы меня не поняли. :)
Я про ваши посты - сообщения здесь.
Закрывайте код скрипта в тег [code] так будет всем удобнее.
Пример:

Код:

x=u
y=a
z=1

В компилятор не надо вставлять...

STRELOK 27-11-2009 13:27 1281165

ок.
возник другой вопрос
как исправить вот это?

Вот скрипт
читать дальше »

Код:

[Setup]
AppName=Call of Duty Modern Warfare 2
AppVerName=Call of Duty Modern Warfare 2
DefaultDirName={pf}\Call of Duty Modern Warfare 2
DefaultGroupName=Call of Duty Modern Warfare 2
UsePreviousAppDir=false
DirExistsWarning=no
ShowLanguageDialog=yes
OutputBaseFilename=setup
OutputDir=/сod6
VersionInfoCopyright=kid#why? ^_-
WizardImageFile=WizardImage1231.bmp
WizardSmallImageFile=small11.bmp
AppCopyRight=kid#why? ^_-
Compression=lzma/ultra64
InternalCompressLevel=ultra64
SolidCompression=true
DiskSpanning=yes
DiskSliceSize=1000000000
SlicesPerDisk=2
SetupIconFile=Icon.ico

[Languages]
Name: eng; MessagesFile: compiler:Default.isl
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[CustomMessages]
eng.ArcBreak=Installation cancelled!
eng.ExtractedInfo=Extracted %1 Mb of %2 Mb
eng.ArcInfo=Archive: %1 of %2
eng.ArcTitle=Extracting FreeArc archive
eng.ArcError=Decompression failed with error code %1
eng.ArcFail=Decompression failed!
eng.AllProgress=Overall extraction progress: %1%%
eng.ArcBroken=Archive %1 is damaged%nor not enough free space.
eng.Extracting=Extracting: %1
eng.taskbar=%1%%, %2 remains
eng.remains=Remaining time: %1
eng.LongTime=at no time
eng.ending=ending
eng.hour= hours
eng.min= mins
eng.sec= secs

rus.ArcBreak=Установка прервана!
rus.ExtractedInfo=Распаковано %1 Мб из %2 Мб
rus.ArcInfo=Архив: %1 из %2
rus.ArcTitle=Распаковка архивов FreeArc
rus.ArcError=Распаковщик FreeArc вернул код ошибки: %1
rus.ArcFail=Распаковка не завершена!
rus.AllProgress=Общий прогресс распаковки: %1%%
rus.ArcBroken=Возможно, архив %1 повреждён%nили недостаточно места на диске назначения.
rus.Extracting=Распаковывается: %1
rus.taskbar=%1%%, жди %2
rus.remains=Осталось ждать %1
rus.LongTime=вечно
rus.ending=завершение
rus.hour= часов
rus.min= мин
rus.sec= сек

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"
Name: task1; Description: Доп. программное обеспечение
Name: task1\task2; Description: DirectX
Name: task1\task3; Description: Visual C++

[Icons]
Name: "{group}\Call of Duty Modern Warfare 2"; Filename: "{app}\iw4sp.exe"; WorkingDir: "{app}"; Parameters: Call of Duty Modern Warfare 2;
Name: "{userdesktop}\Call of Duty Modern Warfare 2"; Filename: "{app}\iw4sp.exe"; WorkingDir: "{app}"; Tasks: desktopicon; Parameters: Call of Duty Modern Warfare 2;
Name: "{group}\{cm:UninstallProgram,Call of Duty Modern Warfare 2}"; Filename: "{uninstallexe}"

[Run]
Filename: {src}\DirectX\dxsetup.exe; Parameters: /silent; StatusMsg: Идет установка дополнительных программ...; Tasks: task1\task2; Flags: waituntilterminated
Filename: {src}\Redist\vcredist_x86.exe; Parameters: /Q; StatusMsg: Идет установка дополнительных программ...; Tasks: task1\task3; Flags: waituntilterminated

[Files]
;Source: *.arc; DestDir: {app}; Flags: nocompression deleteafterinstall
Source: unarc.dll; DestDir: {tmp}; Flags: dontcopy deleteafterinstall
Source: compiler:InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
Source: logo1.bmp; DestDir: {tmp}; Flags: dontcopy


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


       
Код:

       
// Страница приветствия  ---------------------------------------------------------------------------------------------------------------------------------

procedure InitializeWizard2();
var
WLabel1, WLabel2: TLabel;
//FLabel1, FLabel2: TLabel;
bottom_img:TBitmapImage;
BmpFile: TBitmapImage;
FinishedHeadingLabel ,FinishedLabel:TLabel;

begin
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.WizardBitmapImage.Width := 497;
WizardForm.WizardBitmapImage.Height := 314;
WizardForm.Bevel1.Hide;
WizardForm.FinishedHeadingLabel.Hide;
WizardForm.FinishedLabel.Hide;
begin

ExtractTemporaryFile('logo1.bmp');
bottom_img:= TBitmapImage.Create(WizardForm);
bottom_img.Bitmap.LoadFromFile(ExpandConstant('{tmp}\logo1.bmp'));
bottom_img.SetBounds(5, 320, 128, 30); {первые 2 параметра - координаты левогого верхнего угла по горизонтали и вертикали, дальше ширина и высота, до которой растянуть}
bottom_img.Parent:= WizardForm;
bottom_img.Stretch:= True;
end;

WizardForm.Caption:='Программа установки игры "Call of Duty: Modern Warfare 2"';
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.FinishedHeadingLabel.Hide;
WizardForm.FinishedLabel.Hide;
WizardForm.WizardBitmapImage.Width := 497;
WizardForm.WizardBitmapImage.Height := 313;
WizardForm.WizardSmallBitmapImage.Left:=0;
WizardForm.WizardSmallBitmapImage.Width:=497;
WizardForm.WizardSmallBitmapImage.Height:=58;
WizardForm.PageDescriptionLabel.Width:=300;
WizardForm.PageNameLabel.Width:=300;
WizardForm.FileNameLabel.Visible:=False;
WizardForm.ProgressGauge.Top:=ScaleY(100);
WizardForm.StatusLabel.Top:=ScaleY(80);
WLabel1 := TLabel.Create(WizardForm);
WLabel1.Left := ScaleX(176);
WLabel1.Top := ScaleY(16);
WLabel1.Width := ScaleX(301);
WLabel1.Height := ScaleY(54);
WLabel1.AutoSize := False;
WLabel1.WordWrap := True;
WLabel1.Font.Size := 11;
WLabel1.Font.Style := [fsBold];
WLabel1.Font.Color:= clBlack;
WLabel1.WordWrap := True;
WLabel1.Font.Color:= clBlack;

WLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
WLabel1.Transparent := True;
WLabel1.Parent := WizardForm.WelcomePage;
WLabel2 :=TLabel.Create(WizardForm);
WLabel2.Top := ScaleY(20);
WLabel2.Left := ScaleX(180);
WLabel2.Width := ScaleX(300);
WLabel2.Height := ScaleY(234);
WLabel2.AutoSize := False;
WLabel2.WordWrap := True;
WLabel2.AutoSize := False;
WLabel2.WordWrap := True;
WLabel2.Font.Size := 9;
WLabel2.Font.Style := [fsBold];
WLabel2.Font.Color:= clGreen;
WLabel2.Font.name:='Constantia';
WLabel2.ShowAccelChar := False;
WLabel2.Caption := WizardForm.WelcomeLabel1.Caption;
WLabel2.Transparent := True;
WLabel2.Parent := WizardForm.WelcomePage;


WLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
WLabel2.Transparent := True;
WLabel2.Parent := WizardForm.WelcomePage;
WizardForm.WizardBitmapImage2.Width := 497;
WizardForm.WizardBitmapImage2.Height := 313;
WLabel2 := TLabel.Create(WizardForm);
WLabel1.Left := ScaleX(176);
WLabel1.Top := ScaleY(16);
WLabel1.Width := ScaleX(301);
WLabel1.Height := ScaleY(54);
WLabel1.AutoSize := False;
WLabel1.WordWrap := True;
WLabel1.Font.Size := 11;
WLabel1.Font.Style := [fsBold];
WLabel1.Font.Color:= clGreen;

WLabel1.Caption := WizardForm.FinishedHeadingLabel.Caption;
WLabel1.Transparent := True;
WLabel1.Parent := WizardForm.FinishedPage;
WLabel2 :=TLabel.Create(WizardForm);
WLabel2.Top := ScaleY(60);
WLabel2.Left := ScaleX(180);
WLabel2.Width := ScaleX(300);
WLabel2.Height := ScaleY(234);
WLabel2.AutoSize := False;
WLabel2.WordWrap := True;
WLabel2.AutoSize := False;
WLabel2.WordWrap := True;
WLabel2.Font.Size := 10;
WLabel2.Font.Style := [fsBold];
WLabel2.Font.Color:= clGreen;
WLabel2.Font.name:='Constantia';
WLabel2.ShowAccelChar := False;
WLabel2.Caption := WizardForm.WelcomeLabel1.Caption;
WLabel2.Transparent := True;
WLabel2.Parent := WizardForm.WelcomePage;

WLabel2.Caption := 'Программа установлена на Ваш компьютер.' #13#13
'Нажмите «Завершить», чтобы выйти из программы установки.';
WLabel2.Transparent := True;
WLabel2.Parent := WizardForm.FinishedPage;



//////////////////Картинка вверху//////////////////////////
begin
with WizardForm do begin
with MainPanel do
Height := Height - 0;
with WizardSmallBitmapImage do begin
Left := 0;
Top := 0;
Height := 58; //Размер рисунка
Width := 497; //
end;
with PageNameLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
with PageDescriptionLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
end;
end;


begin
//Извлечение изображения
//Динамическое выделение памяти под изображение (BMP-файла)
BmpFile:= TBitmapImage.Create(WizardForm);
//Загрузка изображения из директории, в которую извлекали файл
//Задание размеров изображения согласно исходному
//Заменить widht - ширина, height - высота
BmpFile.SetBounds(0, 0, 164, 314);
//Подгоняем изображение под widht х height
BmpFile.Stretch:= true
//Привязка изображения к странице
BmpFile.Parent:= WizardForm.FinishedPage;
end;
end;


//конец








// Фриарк ------------------------------------------------------------------------------------------------------------------------------------------------
const
    Archives = '*.arc';    // укажите расположение архивов FreeArc; для внешних файлов строку в [Files] добавлять необязательно

    PM_REMOVE = 1;
    CP_ACP = 0; CP_UTF8 = 65001;
    oneMb = 1048576;

type
#ifdef UNICODE  ; если у вас ошибка на этой строке, то установите препроцессор или исправьте скрипт для вашей версии Inno Setup
    #define A "W"
#else
    #define A "A"  ; точка входа в SetWindowText, {#A} меняется на A или W в зависимости от версии
    PAnsiChar = PChar;  // Required for Inno Setup 5.3.0 and higher. (требуется для Inno Setup версии 5.3.0 и ниже)
#endif
#if Ver < 84018176
    AnsiString = String; // There is no need for this line in Inno Setup 5.2.4 and above (для Inno Setup версий 5.2.4 и выше эта строка не нужна)
#endif

    TMyMsg = record
        hwnd: HWND;
        message: UINT;
        wParam: Longint;
        lParam: Longint;
        time: DWORD;
        pt: TPoint;
    end;

    TFreeArcCallback = function (what: PAnsiChar; int1, int2: Integer; str: PAnsiChar): Integer;
    TArc = record Path: string; OrigSize: Integer; Size: Extended; end;

var
    ExtractFile: TLabel;
    lblExtractFileName: TLabel;
    btnCancelUnpacking: TButton;
    CancelCode, n, UnPackError, StartInstall: Integer;
    Arcs: array of TArc;
    msgError: string;
    lastMb: Integer;
    baseMb: Integer;
    totalUncompressedSize: Integer;             // total uncompressed size of archive data in mb
    LastTimerEvent: DWORD;

Function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: string; cbMultiByte: integer; lpWideCharStr: string; cchWideChar: integer): longint; external 'MultiByteToWideChar@kernel32.dll stdcall';
Function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: string; cchWideChar: integer; lpMultiByteStr: string; cbMultiByte: integer; lpDefaultChar: integer; lpUsedDefaultChar: integer): longint; external 'WideCharToMultiByte@kernel32.dll stdcall';

function PeekMessage(var lpMsg: TMyMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMyMsg): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: TMyMsg): Longint; external 'DispatchMessageA@user32.dll stdcall';

Function OemToChar(lpszSrc, lpszDst: AnsiString): longint; external 'OemToCharA@user32.dll stdcall';
function GetWindowLong(hWnd, nIndex: Integer): Longint; external 'GetWindowLongA@user32 stdcall delayload';
function SetWindowText(hWnd: Longint; lpString: String): Longint; external 'SetWindowText{#A}@user32 stdcall delayload';

function GetTickCount: DWord; external 'GetTickCount@kernel32';
function WrapFreeArcCallback (callback: TFreeArcCallback; paramcount: integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function FreeArcExtract (callback: longword; cmd1,cmd2,cmd3,cmd4,cmd5,cmd6,cmd7,cmd8,cmd9,cmd10: PAnsiChar): integer; external 'FreeArcExtract@files:unarc.dll cdecl';

procedure AppProcessMessage;
var
    Msg: TMyMsg;
begin
    while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do begin
        TranslateMessage(Msg);
        DispatchMessage(Msg);
    end;
end;

// Перевод числа в строку с точностью 3 знака (%.3n) с округлением дробной части, если она есть
Function NumToStr(Float: Extended): String;
Begin
    Result:= Format('%.3n', [Float]); StringChange(Result, ',', '.');
    while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Length(Result) > 1) do
        SetLength(Result, Length(Result)-1);
End;

function cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;

Function Size64(Hi, Lo: Integer): Extended;
Begin
    Result:= Lo;
    if Lo<0 then Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
    for Hi:= Hi-1 Downto 0 do
        Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
End;

// Converts OEM encoded string into ANSI
// Преобразует OEM строку в ANSI кодировку
function OemToAnsiStr( strSource: AnsiString): AnsiString;
var
    nRet : longint;
begin
    SetLength( Result, Length( strSource ) );
    nRet:= OemToChar( strSource, Result );
end;

// Converts ANSI encoded string into UTF-8
// Преобразует строку из ANSI в UTF-8 кодировку
function AnsiToUtf8( strSource: string ): string;
var
    nRet : integer;
    WideCharBuf: string;
    MultiByteBuf: string;
begin
    strSource:= strSource + chr(0);
    SetLength( WideCharBuf, Length( strSource ) * 2 );
    SetLength( MultiByteBuf, Length( strSource ) * 2 );

    nRet:= MultiByteToWideChar( CP_ACP, 0, strSource, -1, WideCharBuf, Length(WideCharBuf) );
    nRet:= WideCharToMultiByte( CP_UTF8, 0, WideCharBuf, -1, MultiByteBuf, Length(MultiByteBuf), 0, 0);

    Result:= MultiByteBuf;
end;

// OnClick event function for btnCancel
procedure btnCancelUnpackingOnClick(Sender: TObject);
begin
    if MsgBox( SetupMessage( msgExitSetupMessage ), mbInformation, MB_YESNO ) = IDYES then
        CancelCode:= -127;
end;

var origsize: Integer;
// The callback function for getting info about FreeArc archive
function FreeArcInfoCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
begin
    if string(what)='origsize'    then origsize := Mb else
    if string(what)='compsize'    then                else
    if string(what)='total_files' then                else
    Result:= CancelCode;
end;

// Returns decompressed size of files in archive
function ArchiveOrigSize(arcname: string): Integer;
var
    callback: longword;
Begin
    callback:= WrapFreeArcCallback(@FreeArcInfoCallback,4);   //FreeArcInfoCallback has 4 arguments
    CancelCode:= 0;
    AppProcessMessage;
    try
        // Pass the specified arguments to 'unarc.dll'
        Result:= FreeArcExtract (callback, 'l', '--', AnsiToUtf8(arcname), '', '', '', '', '', '', '');
        if CancelCode < 0 then Result:= CancelCode;
        if Result >= 0 then Result:= origsize;
    except
        Result:= -63;  //    ArcFail
    end;
end;

// Scans the specified folders for archives and add them to list
function FindArcs(dir: string): Extended;
var
    FSR: TFindRec;
Begin
    Result:= 0;
    if FindFirst(ExpandConstant(dir), FSR) then begin
        try
            repeat
                // Skip everything but the folders
                if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then CONTINUE;
                n:= GetArrayLength(Arcs);
                // Expand the folder list
                SetArrayLength(Arcs, n +1);
                Arcs[n].Path:= ExtractFilePath(ExpandConstant(dir)) + FSR.Name;
                Arcs[n].Size:= Size64(FSR.SizeHigh, FSR.SizeLow);
                Result:= Result + Arcs[n].Size;
                Arcs[n].OrigSize := ArchiveOrigSize(Arcs[n].Path)
                totalUncompressedSize := totalUncompressedSize + Arcs[n].OrigSize
            until not FindNext(FSR);
        finally
            FindClose(FSR);
        end;
    end;
End;

// Sets the TaskBar title
Procedure SetTaskBarTitle(Title: String); var h: Integer;
Begin
    h:= GetWindowLong(MainForm.Handle, -8); if h <> 0 then SetWindowText(h, Title);
End;

// Converts milliseconds to human-readable time
// Конвертирует милисекунды в человеко-читаемое изображение времени
Function TicksToTime(Ticks: DWord; h,m,s: String; detail: Boolean): String;
Begin
    if detail                               {hh:mm:ss format} then
        Result:= PADZ(IntToStr(Ticks/3600000), 2) +':'+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +':'+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2)
    else if Ticks/3600 >= 1000              {more than hour}  then
        Result:= IntToStr(Ticks/3600000) +h+' '+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +m
    else if Ticks/60 >= 1000                {1..60 minutes}   then
        Result:= IntToStr(Ticks/60000) +m+' '+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2) +s
   else Result:= IntToStr(Ticks/1000) +s    {less than one minute}
End;

// The main callback function for unpacking FreeArc archives
function FreeArcCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
var
    percents, Remaining: Integer;
    s: String;
begin
    if GetTickCount - LastTimerEvent > 1000 then begin
        // This code will be executed once each 1000 ms (этот код будет выполняться раз в 1000 миллисекунд)
        //  ....
        // End of code executed by timer
        LastTimerEvent := LastTimerEvent+1000;
    end;

    if string(what)='filename' then begin
        // Update FileName label
        lblExtractFileName.Caption:= FmtMessage( cm( 'Extracting' ), [OemToAnsiStr( str )] )
    end else if (string(what)='write') and (totalUncompressedSize>0) and (Mb>lastMb) then begin
        // Assign to Mb *total* amount of data extracted to the moment from all archives
        lastMb := Mb;
        Mb := baseMb+Mb;

        // Update progress bar
        WizardForm.ProgressGauge.Position:= Mb;

        // Show how much megabytes/archives were processed up to the moment
        percents:= (Mb*1000) div totalUncompressedSize;
        s := FmtMessage(cm('ExtractedInfo'), [IntToStr(Mb), IntToStr(totalUncompressedSize)]);
        if GetArrayLength(Arcs)>1 then
            s := s + '. '+FmtMessage(cm('ArcInfo'), [IntToStr(n+1), IntToStr(GetArrayLength(Arcs))])
        ExtractFile.Caption := s

        // Calculate and show current percents
        percents:= (Mb*1000) div totalUncompressedSize;
        s:= FmtMessage(cm('AllProgress'), [Format('%.1n', [Abs(percents/10)])]);
        if Mb > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((totalUncompressedSize - Mb)/Mb)) else Remaining:= 0;
        if Remaining = 0 then SetTaskBarTitle(cm('ending')) else begin
            s:= s + '.  '+FmtMessage(cm('remains'), [TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)])
            SetTaskBarTitle(FmtMessage(cm('taskbar'), [IntToStr(percents/10), TicksToTime(Remaining, 'h', 'm', 's', false)]))
        end;
        WizardForm.FileNameLabel.Caption := s
    end;
    AppProcessMessage;
    Result:= CancelCode;
end;

// Extracts all found archives
function UnPack(Archives: string): Integer;
var
    totalCompressedSize: Extended;
    callback: longword;
    FreeMB, TotalMB: Cardinal;
begin
    // Display 'Extracting FreeArc archive'
    lblExtractFileName.Caption:= '';
    lblExtractFileName.Show;
    ExtractFile.caption:= cm('ArcTitle');
    ExtractFile.Show;
    // Show the 'Cancel unpacking' button and set it as default button
    btnCancelUnpacking.Caption:= WizardForm.CancelButton.Caption;
    btnCancelUnpacking.Show;
    WizardForm.ActiveControl:= btnCancelUnpacking;
    WizardForm.ProgressGauge.Position:= 0;
    // Get the size of all archives
    totalUncompressedSize := 0;
    totalCompressedSize := FindArcs(Archives);
    WizardForm.ProgressGauge.Max:= totalUncompressedSize;
    // Other initializations
    callback:= WrapFreeArcCallback(@FreeArcCallback,4);   //FreeArcCallback has 4 arguments
    StartInstall:= GetTickCount;    {время начала распаковки}
    LastTimerEvent:= GetTickCount;
    baseMb:= 0

    for n:= 0 to GetArrayLength(Arcs) -1 do
    begin
        lastMb := 0
        CancelCode:= 0;
        AppProcessMessage;
        try
            // Pass the specified arguments to 'unarc.dll'
            Result:= FreeArcExtract (callback, 'x', '-o+', '-dp' + AnsiToUtf8( ExpandConstant('{app}') ), '--', AnsiToUtf8(Arcs[n].Path), '', '', '', '', '');
            if CancelCode < 0 then Result:= CancelCode;
        except
            Result:= -63;  //    ArcFail
        end;
        baseMb:= baseMb+lastMb

        // Error occured
        if Result <> 0 then
        begin
            msgError:= FmtMessage(cm('ArcError'), [IntToStr(Result)]);
            GetSpaceOnDisk(ExtractFileDrive(ExpandConstant('{app}')), True, FreeMB, TotalMB);
            case Result of
                -1: if FreeMB < 32 {Мб на диске} then msgError:= SetupMessage(msgDiskSpaceWarningTitle)
                    else msgError:= msgError + #13#10 + FmtMessage(cm('ArcBroken'), [ExtractFileName(Arcs[n].Path)]);
                -127:   msgError:= cm('ArcBreak');    //Cancel button
                -63:    msgError:= cm('ArcFail');
            end;
//          MsgBox(msgError, mbInformation, MB_OK);    //сообщение показывается на странице завершения
            Log(msgError);
            Break;    //прервать цикл распаковки
        end;
    end;
    // Hide labels and button
    WizardForm.FileNameLabel.Caption:= '';
    lblExtractFileName.Hide;
    ExtractFile.Hide;
    btnCancelUnpacking.Hide;
end;

procedure CurStepChanged1(CurStep: TSetupStep);
begin
    if CurStep = ssPostInstall then
    begin
        UnPackError:= UnPack(Archives)
        if UnPackError = 0 then
            SetTaskBarTitle(SetupMessage(msgSetupAppTitle))
        else
        begin
            // Error occured, uninstall it then
            Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n);    //откат установки из-за ошибки unarc.dll
            SetTaskBarTitle(SetupMessage(msgErrorTitle))
            WizardForm.Caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
        end;
    end;
end;

//    стандартный способ отката (не нужна CurPageChanged), но архивы распаковываются до извлечения файлов инсталлятора
//    if CurStep = ssInstall then
//      if UnPack(Archives) <> 0 then Abort;

Procedure CurPageChanged1(CurPageID: Integer);
Begin
    if (CurPageID = wpFinished) and (UnPackError <> 0) then
    begin // Extraction was unsuccessful (распаковщик вернул ошибку)
        // Show error message
        WizardForm.FinishedLabel.Font.Color:= $0000C0;    // red (красный)
        WizardForm.FinishedLabel.Height:= WizardForm.FinishedLabel.Height * 2;
        WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) + #13#10#13#10 + msgError;
    end;
End;

procedure InitializeWizard3();
begin
    with WizardForm.ProgressGauge do
    begin
        // Create a label to show current FileName being extracted
        lblExtractFileName:= TLabel.Create(WizardForm);
        lblExtractFileName.parent:=WizardForm.InstallingPage;
        lblExtractFileName.autosize:=false;
        lblExtractFileName.Width:= Width;
        lblExtractFileName.top:=Top + ScaleY(35);
        lblExtractFileName.Caption:= '';
        lblExtractFileName.Hide;

        // Create a label to show percentage
        ExtractFile:= TLabel.Create(WizardForm);
        ExtractFile.parent:=WizardForm.InstallingPage;
        ExtractFile.autosize:=false;
        ExtractFile.Width:= Width;
        ExtractFile.top:=lblExtractFileName.Top + ScaleY(16);
        ExtractFile.caption:= '';
        ExtractFile.Hide;
    end;

    // Create a 'Cancel unpacking' button and hide it for now.
    btnCancelUnpacking:=TButton.create(WizardForm);
    btnCancelUnpacking.Parent:= WizardForm;
    btnCancelUnpacking.SetBounds(WizardForm.CancelButton.Left, WizardForm.CancelButton.top, WizardForm.CancelButton.Width, WizardForm.CancelButton.Height);
    btnCancelUnpacking.OnClick:= @btnCancelUnpackingOnClick;
    btnCancelUnpacking.Hide;
end;


// Чек боксы и проверка харды ------------------------------------------------------------------------------------------------------------------------------------------------
 const
  NeedSize = 10000;

var
NeedSpaceLabel,FreeSpaceLabel: TLabel;
FreeMB, TotalMB: Cardinal;
Icons: TCheckBox;

function InstallDirectX: Boolean;
begin
 end;

function InstallRedist: Boolean;
begin
end;
                           ////////////////////////////////////////////////////////////////////////////////////////////////////////
function InstallPhysX: Boolean;
begin
end;

function CreateIcons: Boolean;
begin
  Result:=Icons.Checked;
end;

 procedure RedistOnClick(Sender: TObject);
begin
end;

procedure DirectXLabelOnClick(Sender: TObject);
begin
end;

procedure IconsOnClick(Sender: TObject);
begin
  if Icons.Checked = False then
    Icons.Checked:= True else
  Icons.Checked:= False;
end;
procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
FreeSpaceLabel.Caption := 'Свободно на выбранном диске: ' + FloatToStr(round(FreeMB/1024*100)/100) + ' GB'
else
FreeSpaceLabel.Caption := 'Свободно на выбранном диске: ' + IntToStr(FreeMB)+ ' MB';
begin
if FreeMB < NeedSize then
begin
WizardForm.NextButton.Enabled:=false;
end else
WizardForm.NextButton.Enabled:=true;
end;
end;

procedure InitializeWizard5();
begin
WizardForm.DiskSpaceLabel.Hide;

NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(198);
Width := ScaleX(209);
Height := ScaleY(13);
Caption := 'Требуется для установки: 12 GB';
end;

FreeSpaceLabel := TLabel.Create(WizardForm);
with FreeSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(216);
Width := ScaleX(209);
Height := ScaleY(13);
end;

WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;

procedure CurPageChanged3(CurPageID: Integer);
begin
if  CurPageID = wpSelectDir then
if FreeMB < NeedSize then
begin
WizardForm.NextButton.Enabled:=False
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  CurPageChanged1(CurPageID);
  CurPageChanged3(CurPageID);
  end;


 procedure InitializeWizard();
begin
InitializeWizard2();
InitializeWizard3();
InitializeWizard5();
end;




volk1234 27-11-2009 13:45 1281190

Пользуйтесь расширеным режимом для написания сообщений
и очень советую почитать вот это:
http://forum.oszone.net/misc.php?do=bbcode

STRELOK 27-11-2009 14:02 1281201

volk1234,
я вроде как ты сказал скрипт в [code] сделал. Что неправельно?

A1EXXX 27-11-2009 14:10 1281208

Raf-9600, скрыть сам BeveledLabel не получилось, поэтому сделал немного иначе ;) (старый BeveledLabel просто удалишь из [Messages]):
читать дальше »
Код:

[Code]
Var
Text: TNewStaticText;

Procedure InitializeWizard();
begin
Text:=TNewStaticText.Create(WizardForm)
Text.Left:=10  // сдвиг влево
Text.Top:=305  // сдвиг вниз
Text.Color:=WizardForm.Color;
Text.Font.Name:='Courier New'  // шрифт
Text.Font.Color:=clGray  // цвет шрифта
Text.Caption:='Created by Raf-9600'  // надпись
Text.Parent:=WizardForm
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if (CurPageID = wpWelcome) or (CurPageID = wpFinished) or (CurPageID = wpInstalling) then  // скроем надпись на стриницах Приветствия, Завершения (картинку портит) и Установки :)
    begin
      Text.Visible:= False;
    end;

  if (CurPageID = wpLicense) or (CurPageID = wpInfoBefore) or (CurPageID = wpSelectDir) then  // начиная с любой из этих страниц надпись появится
    begin
      Text.Visible:= True;
    end;
end;


По-моему, так даже лучше смотрится, вот скрин :)

И добавил этот кусок в общий скрипт:
читать дальше »
Код:

[Code]
const
n=21; //количество слайдов
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);
TRandNumbers = array[1..N] of byte;

function WrapTimerProc(callback:TProc; paramcount:integer):longword;
external 'wrapcallback@files:InnoCallback.dll stdcall';

function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
external 'SetTimer@user32.dll stdcall';

function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
external 'KillTimer@user32.dll stdcall';

function get_unique_random_number(X:byte):TRandNumbers;
var
A,b,c: string;
i,j,k:byte;
begin
For i:=1 to X do A:=A+chr(i);
B:='';
For i:=1 to X do begin
j:=Random(Length(A)-1)+1;
C:='';
B:=B + A[j];
for k:=1 to Length(A) do
if k<>j then C:=C+A[k];
A:=C;
end;
for i:=1 to X do Result[i]:=ord(B[i]);
end;

var
TimerID: LongWord;
currTime: Integer;
SplashImage: TBitmapImage;
bmp: TRandNumbers;
z:byte;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
currTime := currTime + 1;
if (currTime mod {#20} = 0) // здесь, вместо TIME_FOR_VIEW ввести время показа слайда (в секундах)
then begin
SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[currTime/{#20}])+'.bmp')); // здесь тоже
if (currTime/{#20} = N) then currTime:=0 ; // и здесь
end;
end;


procedure InitializeWizard1;
begin
bmp:=get_unique_random_number(N);
ExtractTemporaryFile('Image_'+inttostr(bmp[1])+'.bmp');

currTime := 0;

WizardForm.ProgressGauge.Parent := WizardForm;
WizardForm.ProgressGauge.Top := WizardForm.CancelButton.Top + ScaleY(12);
WizardForm.ProgressGauge.Left := ScaleX(10);
WizardForm.ProgressGauge.Width := WizardForm.MainPanel.Width - ScaleX(20);
WizardForm.ProgressGauge.Height := 16;
WizardForm.ProgressGauge.Hide;

WizardForm.StatusLabel.Parent := WizardForm;
WizardForm.StatusLabel.Top := WizardForm.ProgressGauge.Top - ScaleY(18);
WizardForm.StatusLabel.Left := ScaleX(10);
WizardForm.StatusLabel.Width := ScaleX(397);
WizardForm.StatusLabel.Hide;

SplashImage := TBitmapImage.Create(WizardForm);
SplashImage.Top := 0;
SplashImage.Left := 0;
SplashImage.Width := WizardForm.MainPanel.Width;
SplashImage.Height := WizardForm.Bevel.Top;
SplashImage.Parent := WizardForm.InnerPage;
SplashImage.Stretch := True;
SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[1])+'.bmp'));
SplashImage.Hide;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
WizardForm.StatusLabel.Caption := 'Распаковка слайдов ...';
for z:=2 to N do ExtractTemporaryFile('Image_'+inttostr(bmp[z])+'.bmp');
end;
end;

procedure CurPageChanged1(CurPageID: Integer);
var
pfunc: LongWord;
begin
if (CurPageID = wpInstalling) then
begin
pfunc := WrapTimerProc(@OnTimer, 5);
TimerID := SetTimer(0, 0, 1000, pfunc);
WizardForm.PageNameLabel.Visible := False;
WizardForm.PageDescriptionLabel.Visible := False;
WizardForm.InnerNotebook.Hide;
WizardForm.Bevel1.Hide;
WizardForm.MainPanel.Hide;
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.ProgressGauge.Show;
WizardForm.StatusLabel.Show;
SplashImage.Show;
WizardForm.CancelButton.Enabled := True;
WizardForm.CancelButton.Top := WizardForm.Bevel.Top + ScaleY(100);
end else
begin
WizardForm.ProgressGauge.Hide;
SplashImage.Hide;
WizardForm.FileNameLabel.Hide;
WizardForm.StatusLabel.Hide;
if (CurPageID > wpInstalling) and (CurPageID < wpFinished) then
begin
WizardForm.InnerNotebook.Show;
WizardForm.Bevel1.Show;
WizardForm.MainPanel.Show;
WizardForm.PageNameLabel.Show;
WizardForm.PageDescriptionLabel.Show;
end;
If CurPageID = wpFinished then
end;
end;

procedure DeInitializeSetup1();
begin
KillTimer(0, TimerID);
end;

function ShouldSkipPage(CurPage: Integer): Boolean;
begin
if Pos('/SP-', UpperCase(GetCmdTail)) > 0 then
case CurPage of
wpLicense, wpPassword, wpInfoBefore, wpUserInfo,
wpSelectDir, wpSelectProgramGroup, wpInfoAfter:
Result := True;
end;
end;

const
WM_LBUTTONDOWN = 513;
WM_LBUTTONUP = 514;

procedure InitializeWizard2();
begin
if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) then
begin
PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONDOWN,0,0);
PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONUP,0,0);
end;
end;

procedure CurPageChanged2(CurPageID: Integer);
begin
if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) and
(CurPageID = wpSelectComponents) then
WizardForm.BackButton.Visible := False;
end;


//I?iaa?ea ia inoaaouany oaeeu
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
Res: Integer;
begin
case CurUninstallStep of
usPostUninstall:
begin
if DirExists(ExpandConstant('{app}')) then
if ExpandConstant('{language}') = 'ua' then
case MsgBox('Iaiea "' + ExpandConstant('{app}') + '" ia ii?i?iy.'#13#13 +
'"Oae" – iiaia aeaaeaiiy an?o oaee?a o iaio?, aee??a??e naio iaieo.' #13#13 +
'"I?" – a?ae?eoe iaieo a i?ia?aieeo, uia a?o?io aeaaeeoe oaeee.'#13#13 +
'"Neanoaaoe" – i??iai ia ?iaeoe, aeaaeeoe iaieo i?ci?oa naiino?eii.', mbInformation, MB_YESNOCANCEL) of

IDYES:
if not DelTree(ExpandConstant('{app}'), True, True, True) then
MsgBox('Iaiea ia aeaaeaia.' #13#13 'Iaiea aai iaei c oaee?a o i?e caa?yi? ?ioi? i?ia?aii?.', mbError, MB_OK);

IDNO:
if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Iiieeea a?ae?eooy.' #13#13 'Iaiea ia ciaeaaia.', mbError, MB_OK);

IDCANCEL:;
end
else
if ExpandConstant('{language}') = 'ru' then
case MsgBox('Iaiea "' + ExpandConstant('{app}') + '" ia ionoa.'#13#13 +
'"Aa" – iieiia oaaeaiea anao oaeeia a iaiea, aee??ay naio iaieo.' #13#13 +
'"Iao" – ioe?uou iaieo a i?iaiaieea, ?oiau a?o?io? oaaeeou oaeeu.'#13#13 +
'"Ioiaia" – ie?aai ia aaeaou, oaaeeou iaieo iic?a naiinoiyoaeuii.', mbInformation, MB_YESNOCANCEL) of

IDYES:
if not DelTree(ExpandConstant('{app}'), True, True, True) then
MsgBox('Iaiea ia oaaeaia.' #13#13 'Iaiea eee iaei ec oaeeia a iae caaaenoaiaaiu a?oaei i?eei?aieai.', mbError, MB_OK);

IDNO:
if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Ioeaea ioe?uoey.' #13#13 'Iaiea ia iaeaaia.', mbError, MB_OK);

IDCANCEL:;
end
else
case MsgBox('Directory "' + ExpandConstant('{app}') + '" is not empty.'#13#13 +
'"Yes" to delete all of the files in the directory, including the directory itself.' #13#13 +
'"No" to open the directory with explorer to delete the files manually.'#13#13 +
'"Cancel" to do nothing and delete the directory later manually.', mbInformation, MB_YESNOCANCEL) of

IDYES:
if not DelTree(ExpandConstant('{app}'), True, True, True) then
MsgBox('Directory is not deleted.' #13#13 'Directory or one of the files are used by the other application.', mbError, MB_OK);

IDNO:
if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Error opening the directory.' #13#13 'Directory is not found.', mbError, MB_OK);

IDCANCEL:;
end
end
end
end;

procedure InitializeWizard3();
begin
with WizardForm do begin
with MainPanel do
Height := Height - 1;
with WizardSmallBitmapImage do begin
Left := 0;
Top := 0;
Height := 58; //Размер рисунка
Width := 497; //
end;
with PageNameLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
with PageDescriptionLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
end;
end;

function enabledesc(ComponentsListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';

function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';

var
Info: TNewStaticText;
InfoCaption: TNewStaticText;
InfoPanel: TPanel;

procedure DeinitializeSetup2();
begin
disabledesc();
end;

procedure InitializeWizard4();
begin
WizardForm.TYPESCOMBO.Visible:= false;
WizardForm.ComponentsList.Height := WizardForm.ComponentsList.Height + WizardForm.ComponentsList.Top - WizardForm.TYPESCOMBO.Top;
WizardForm.ComponentsList.Top := WizardForm.TYPESCOMBO.Top;
WizardForm.ComponentsList.Width := ScaleX(200);
InfoPanel := TPanel.Create(WizardForm);
InfoPanel.Parent := WizardForm.SelectComponentsPage;
InfoPanel.Caption := '';
InfoPanel.Top := WizardForm.ComponentsList.Top;
InfoPanel.Left := ScaleX(216);
InfoPanel.Width := ScaleX(200);
InfoPanel.Height := WizardForm.ComponentsList.Height;
InfoPanel.BevelInner := bvRaised;
InfoPanel.BevelOuter := bvLowered;
InfoCaption := TNewStaticText.Create(WizardForm);
InfoCaption.Parent := WizardForm.SelectComponentsPage;
InfoCaption.Caption := 'ГиКц';
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 := 'Переместите ваш указатель мыши на компоненты чтобы увидеть их описание.';
Info.WordWrap := true;
enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,
'Английская озвучка;'+ // SoundUnit\eng
'Французская озвучка;'+ // SoundUnit\fra
'Немецкая озвучка;'+ // SoundUnit\deu
'Итальянская озвучка;'+ // SoundUnit\ita
'Испанская озвучка;' // SoundUnit\spa
);
end;

var
NeedSize:Integer;
FreeMB, TotalMB: Cardinal;
NeedSpaceLabel: TLabel;
n1: Integer;
VolumeName, FileSystemName: String;
VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint;
ListBox: TListBox;
StartMenuTreeView: TStartMenuFolderTreeView;

procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False else
WizardForm.NextButton.Enabled := True; end;

procedure GetNeedSpaceCaption;
begin
if NeedSize > 1024 then
NeedSpaceLabel.Caption := 'Требуется как минимум '+ FloatToStr(round(NeedSize/1024*100)/100) + ' Гб свободного дискового пространства.' else
NeedSpaceLabel.Caption := 'Требуется как минимум '+ IntToStr(NeedSize)+ ' Мб свободного дискового пространства.';end;

const oneMB= 1024*1024;
function GetLogicalDrives: DWord; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(nDrive: String): Longint; external 'GetDriveTypeA@kernel32.dll stdcall';
function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';
function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';

Function ByteOrTB(Bytes: Extended; noMB: Boolean): String; { Перевод числа в значение бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)}
Begin
if not noMB then Result:= FloatToStr(Int(Bytes)) +' Мб' else
if Bytes < 1024 then Result:= FloatToStr(Int(Bytes)) +' Бт' else
if Bytes/1024 < 1024 then Result:= FloatToStr(round((Bytes/1024)*10)/10) +' Кб' else
If Bytes/oneMB < 1024 then Result:= FloatToStr(round(Bytes/oneMB*100)/100) +' Мб' else
If Bytes/oneMB/1000 < 1024 then Result:= FloatToStr(round(Bytes/oneMB/1024*1000)/1000) +' Гб' else
Result:= FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Тб'
StringChange(Result, ',', '.')
End;

Function DelSP(String: String): String; { Удаление начальных, конечных и повторных пробелов }
Begin while (Pos(' ', String) > 0) do Delete(String, Pos(' ', String), 1); Result:= Trim(String); End;

Function CutString(String: String; MaxLength: Longint): String; { Обрезать строку до заданного кол-ва символов}
Begin
if Length(String) > MaxLength then Result:= Copy(String, 1, 6) +'...'+ Copy(String, Length(String) - MaxLength +9, MaxLength)
else Result:= String;
End;

Procedure GetDiskInfo(Disk: String);
Begin
FileSystemName:= StringOfChar(' ', 32); VolumeName:= StringOfChar(' ', 256);
GetVolumeInformation(Disk, VolumeName, 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, 31);
FileSystemName:= DelSp(FileSystemName); VolumeName:= DelSp(VolumeName); if VolumeName='' then VolumeName:='без метки';
End;

Procedure ListBoxRefresh; var FreeB, TotalB: Cardinal; Path, String: string; Begin
ListBox.Items.Clear
for n1:= 1 to 31 do // диск 'А' пропустить
if (GetLogicalDrives and (1 shl n)) > 0 then
if (GetDriveType(Chr(ord('A') + n) +':\') = 2) or (GetDriveType(Chr(ord('A') + n) +':\') = 3) then
if GetSpaceOnDisk(Chr(ord('A') + n) +':\', True, FreeMB, TotalMB) then ListBox.Items.Add(Chr(ord('A') + n) +':');
for n1:= 0 to ListBox.Items.Count -1 do begin
Path:= Copy(ListBox.Items[n],1,2) +'\' { если в накопителе нет диска, пропустить обновление }
if GetSpaceOnDisk(Path, False, FreeB, TotalB) and GetSpaceOnDisk(Path, True, FreeMB, TotalMB) then begin GetDiskInfo(Path);
if FreeB >= $7FFFFFFF then String:= PadL(ByteOrTB(FreeMB*oneMB, true),10) else String:= PadL(ByteOrTB(FreeB, true),10);
if TotalB >= $7FFFFFFF then begin TotalB:= TotalMB; FreeB:= FreeMB; String:= PadL(ByteOrTB(TotalMB*oneMB, true),11) +' всего -'+ String end else String:= PadL(ByteOrTB(TotalB, true),11) +' всего| '+ String;
ListBox.Items[n]:= Copy(Path,1,2) + String + PadL(FloatToStr(round(FreeB/TotalB*100)),3)+ '% своб|'+ PadL(FileSystemName,5)+ '| '+ CutString(VolumeName,9); end; end;
End;

Procedure ObjectOnClick(Sender: TObject); Begin
Case TObject(Sender) of
ListBox: for n1:= 0 to ListBox.Items.Count-1 do if ListBox.Selected[n] then WizardForm.DirEdit.Text:= Copy(ListBox.Items[n],1,1) +Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text))
StartMenuTreeView: if StartMenuTreeView.Directory <> '' then WizardForm.GroupEdit.Text:= StartMenuTreeView.Directory else WizardForm.GroupEdit.Text:= '{#SetupSetting("DefaultGroupName")}'
WizardForm.NoIconsCheck: begin WizardForm.GroupEdit.Enabled:= not(WizardForm.GroupEdit.Enabled); StartMenuTreeView.Enabled:= WizardForm.GroupEdit.Enabled; WizardForm.GroupBrowseButton.Enabled:= WizardForm.GroupEdit.Enabled end;
end; End;

procedure InitializeWizard5();
begin
NeedSize := 6100; //Здесь указывается место для приложения
WizardForm.DiskSpaceLabel.Hide;
NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(220);
Width := ScaleX(209);
Height := ScaleY(13);
end;
ListBox:= TListBox.Create(WizardForm)
ListBox.SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 8, WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left, WizardForm.DiskSpaceLabel.Top - (WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 12))
ListBox.Font.Size:= 9
ListBox.Font.Style:= []
ListBox.Font.Name:= 'Courier New';
ListBox.OnClick:= @ObjectOnClick;
ListBox.Parent:= WizardForm.SelectDirPage;
WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;

procedure CurPageChanged3(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then
begin
GetNeedSpaceCaption;
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled:=False
ListBoxRefresh
end;
end;

Var
Text: TNewStaticText;

Procedure InitializeWizard6();
begin
Text:=TNewStaticText.Create(WizardForm)
Text.Left:=10  // сдвиг влево
Text.Top:=305  // сдвиг вниз
Text.Color:=WizardForm.Color;
Text.Font.Name:='Courier New'  // шрифт
Text.Font.Color:=clGray  // цвет шрифта
Text.Caption:='Created by Raf-9600'  // надпись
Text.Parent:=WizardForm
end;

procedure CurPageChanged4(CurPageID: Integer);
begin
if (CurPageID = wpWelcome) or (CurPageID = wpFinished) or (CurPageID = wpInstalling) then  // скроем надпись на стриницах Приветствия, Завершения (картинку портит) и Установки :)
    begin
      Text.Visible:= False;
    end;

  if (CurPageID = wpLicense) or (CurPageID = wpInfoBefore) or (CurPageID = wpSelectDir) then  // начиная с любой из этих страниц надпись появится
    begin
      Text.Visible:= True;
    end;
end;

procedure InitializeWizard();
begin
InitializeWizard1();
InitializeWizard2();
InitializeWizard3();
InitializeWizard4();
InitializeWizard5();
InitializeWizard6();
end;

procedure CurPageChanged(CurPageID: Integer);
begin
CurPageChanged1(CurPageID);
CurPageChanged2(CurPageID);
CurPageChanged3(CurPageID);
CurPageChanged4(CurPageID);
end;

procedure DeinitializeSetup();
begin
DeinitializeSetup1();
DeinitializeSetup2();
end;


volk1234 27-11-2009 14:15 1281215

STRELOK
Вы пропустили завершающий тег [/code]
поэтому тег и не сработал :)

Serega 27-11-2009 15:26 1281292

volk1234, спасибо, дельное замечание насчёт [code][/code] ;)
A1EXXX, лучше использовать тег [code][/code], чем [quote][/quote], т.к. в первом варианте сохраняется структура скрипта... просто воспринимать легче.

A1EXXX 27-11-2009 15:49 1281318

Serega, поправил :)

Serega 27-11-2009 15:57 1281333

Цитата:

Цитата A1EXXX
поправил »

Расскажу маленький фокус, чтоб не писать в скрипте [_Code], я делаю [b][[/b]Code]

Cranz86 27-11-2009 17:21 1281414

Люди помогите с проблемой, делаю новую страницу, все что в ней надо сделать, сделал, а как на ней разместить все "галочки" не пойму, они появляются на предыдущей странице...это вырезка из кода:

Код:

[Tasks]
Name: "desktopicon"; Description: "Create &desktop icons"; GroupDescription: "Additional icons:"; MinVersion: 4,4
Name: Toolbar; Description: "Instal Toolbar"; GroupDescription: "WWW";


[Co&de]
var
  Page: TWizardPage;
procedure InitializeWizard();
begin
  Page:= CreateCustomPage(wpInstalling, 'Realore Toolbar Installation', 'Thank you for choosing to install GAMENAME. After installation of the application, you can also get the official Realore toolbar. The toolbar gives you instant access to cool tools like radio, weather, e-mail notifier and more.');
end;


Serega 27-11-2009 17:56 1281441

Цитата:

Цитата Cranz86
помогите с проблемой, делаю новую страницу »

Вам нужно использовать функцию CreateInputOptionPage
Пример
Цитата:

Цитата из Справки
Описание:
Создание страницы мастера, содержащей флажки (check box) и переключатели (radio button).

Если Exclusive=True, вместо флажков будут отображены переключатели, и в этом случае может быть выбран только один пункт из списка. Если ListBox=True, флажки или переключатели будут помещены в прокручиваемый список.

Замечания:
Для создания на странице флажков/переключателей используется метод Add. Для добавления/считывания состояния флажка/переключателя используется свойство Values. Страницы, для которых Exclusive=True, можно добавить/считать состояние выбранного пункта в SelectedValueIndex.

Например:

var
Page: TInputOptionWizardPage;
IsRegisteredUser: Boolean;
...
// Создание страницы
Page := CreateInputOptionPage(wpWelcome,
'Лицензионное соглашение', 'Вы зарегистрированный пользователь?',
'Если вы зарегистрированы, поставьте флажок ниже и нажмите Далее.',False, False);

// Добавление значений
Page.Add('Я зарегистрированный пользователь');

// Задание первоначальных значений (не обязательно)
Page.Values[0] := False;
...
// Передача значений переменным
IsRegisteredUser := Page.Values[0];


A1EXXX 27-11-2009 20:18 1281541

Serega, не знаете, как цвет прогресс-бара поменять? Хотелось бы где-то такой...

Serega 27-11-2009 23:17 1281679

Цитата:

Цитата A1EXXX
как цвет прогресс-бара поменять? »

Посмотрите здесь в сообщении SotM сделал скриншот, а через три сообщения сам скрипт.

A1EXXX 27-11-2009 23:37 1281688

Serega, спасибо. Не знаете, как здесь (и на следующих страницах) сделать прозрачность? Пробовал что-то вымутить из вашего скрипта, но ничего не получилось :(
читать дальше »
Код:

[Setup]
AppName=Status Panel
AppVerName=Status Panel
DefaultDirName={pf}\Test
DefaultGroupName=Status Panel
WizardImageFile=compiler:WizModernImage.bmp
OutputDir=.
OutputBaseFilename=status_panel
DisableReadyPage=True

[Languages]
Name: "Russian"; MessagesFile: "compiler:Languages\Russian.isl"
 
[Files]
; Test
Source: "{sys}\*.dll"; DestDir: "{app}"; Flags: ignoreversion external deleteafterinstall;
 
[Icons]
Name: "{group}\Удалить StatusPanel"; Filename: "{uninstallexe}";
 
[Code]
function GetSystemMetrics(nIndex:Integer):Integer;
 external 'GetSystemMetrics@user32.dll stdcall';
 
var
  Welcome, Edit1, Edit2, Ready1, Ready2,
  Setup1, Setup2, Finish1, Finish2: TLabel;
 
procedure InitializeWizard();
begin
  WizardForm.Font.Color:= clWhite;
  WizardForm.ClientWidth := ScaleX(680);
  WizardForm.ClientHeight := ScaleY(480);
  WizardForm.Bevel.Hide;
  WizardForm.Bevel1.Hide;
  WizardForm.MainPanel.Hide;
 
  WizardForm.WizardBitmapImage.Left := ScaleX(0);
  WizardForm.WizardBitmapImage.Top := ScaleY(0);
  WizardForm.WizardBitmapImage.Width := WizardForm.Width;
  WizardForm.WizardBitmapImage.Height := WizardForm.Height;
  WizardForm.WizardBitmapImage.Parent := WizardForm;
  WizardForm.WizardBitmapImage2.Hide;
 
  Welcome := TLabel.Create(WizardForm);
  Welcome.Top := ScaleY(45);
  Welcome.Caption := 'Приветствие';
  Welcome.Transparent := True;
  Welcome.Parent := WizardForm;
 
  Edit1 := TLabel.Create(WizardForm);
  Edit1.Left := WizardForm.ClientWidth / 5;
  Edit1.Top := ScaleY(45);
  Edit1.Width := WizardForm.ClientWidth / 5;
  Edit1.AutoSize := False;
  Edit1.Caption := '|';
  Edit1.Transparent := True;
  Edit1.Parent := WizardForm;
 
  Edit2 := TLabel.Create(WizardForm);
  Edit2.Top := ScaleY(45);
  Edit2.Caption:= 'Параметры';
  Edit2.Transparent := True;
  Edit2.Parent := WizardForm;
 
  Ready1 := TLabel.Create(WizardForm);
  Ready1.Left := Edit1.Left + Edit1.Width;
  Ready1.Top := ScaleY(45);
  Ready1.Width := WizardForm.ClientWidth / 5;
  Ready1.AutoSize := False;
  Ready1.Caption := '|';
  Ready1.Transparent := True;
  Ready1.Parent := WizardForm;
 
  Ready2 := TLabel.Create(WizardForm);
  Ready2.Top := ScaleY(45);
  Ready2.Caption := 'Меню "Пуск"';
  Ready2.Transparent := True;
  Ready2.Parent := WizardForm;
 
  Setup1 := TLabel.Create(WizardForm);
  Setup1.Left := Ready1.Left + Ready1.Width;
  Setup1.Top := ScaleY(45);
  Setup1.Width := WizardForm.ClientWidth / 5;
  Setup1.AutoSize := False;
  Setup1.Caption := '|';
  Setup1.Transparent := True;
  Setup1.Parent := WizardForm;
 
  Setup2 := TLabel.Create(WizardForm);
  Setup2.Top := ScaleY(45);
  Setup2.Caption := 'Установка';
  Setup2.Transparent := True;
  Setup2.Parent := WizardForm;
 
  Finish1 := TLabel.Create(WizardForm);
  Finish1.Left := Setup1.Left + Setup1.Width;
  Finish1.Top := ScaleY(45);
  Finish1.Width := WizardForm.ClientWidth / 5;
  Finish1.AutoSize := False;
  Finish1.Caption := '|';
  Finish1.Transparent := True;
  Finish1.Parent := WizardForm;
 
  Finish2 := TLabel.Create(WizardForm);
  Finish2.Top := ScaleY(45);
  Finish2.Caption := 'Готово';
  Finish2.Transparent := True;
  Finish2.Parent := WizardForm;
 
  WizardForm.BackButton.Top := WizardForm.BackButton.Top + ScaleY(110);
  WizardForm.NextButton.Top := WizardForm.NextButton.Top + ScaleY(110);
  WizardForm.CancelButton.Top := WizardForm.CancelButton.Top + ScaleY(110);
 
  WizardForm.OuterNotebook.Left := WizardForm.Width / 2 - WizardForm.OuterNotebook.Width / 2;
  WizardForm.OuterNotebook.Top := ScaleY(105);
  WizardForm.InnerNotebook.Top := ScaleY(10);
 
  WizardForm.Left := GetSystemMetrics(0) / 2 - WizardForm.Width / 2;
  WizardForm.Top := GetSystemMetrics(1) / 2 - WizardForm.Height / 2;
end;
 
procedure CurPageChanged(CurPageID: Integer);
begin
  Welcome.Font.Color := clSilver;
  Edit1.Font.Color := clSilver;
  Edit2.Font.Color := clSilver;
  Ready1.Font.Color := clSilver;
  Ready2.Font.Color := clSilver;
  Setup1.Font.Color := clSilver;
  Setup2.Font.Color := clSilver;
  Finish1.Font.Color := clSilver;
  Finish2.Font.Color := clSilver;
 
  Welcome.Left := WizardForm.ClientWidth / 5 / 2 - Welcome.Width / 2;
  Edit2.Left := Edit1.Left + Edit1.Width / 2 - Edit2.Width / 2;
  Ready2.Left := Ready1.Left + Ready1.Width / 2 - Ready2.Width / 2;
  Setup2.Left := Setup1.Left + Setup1.Width / 2 - Setup2.Width / 2;
  Finish2.Left := Finish1.Left + Finish1.Width / 2 - Finish2.Width / 2;
 
  if CurPageID = wpWelcome then
  begin
    Welcome.Font.Color := clWhite;
    Edit1.Font.Color := clWhite;
  end;
 
  if CurPageID = wpSelectDir then
  begin
    Edit1.Font.Color := clWhite;
    Edit2.Font.Color := clWhite;
    Ready1.Font.Color := clWhite;
  end;
 
  if CurPageID = wpSelectProgramGroup then
  begin
    Ready1.Font.Color := clWhite;
    Ready2.Font.Color := clWhite;
    Setup1.Font.Color := clWhite;
    WizardForm.NextButton.Caption := 'Установить';
  end;
 
  if CurPageID = wpInstalling then
  begin
    Setup1.Font.Color := clWhite;
    Setup2.Font.Color := clWhite;
    Finish1.Font.Color := clWhite;
  end;
 
  if CurPageID = wpFinished then
  begin
    Finish1.Font.Color := clWhite;
    Finish2.Font.Color := clWhite;
  end;
end;


Serega 28-11-2009 00:21 1281724

Цитата:

Цитата A1EXXX
как здесь (и на следующих страницах) сделать прозрачность? »

Придётся создавать панель, и на неё накладывать все контролы, присмотритесь внимательней к процедуре CurPageChanged в моём скрипте, там сначала создаётся панель.

A1EXXX 28-11-2009 00:35 1281738

Serega, ого... :( Спасибо за наводку....

CrOsP 28-11-2009 10:54 1281889

Подскажите ребята как добавил данный тут скрипт чтобы повесить картинку на ссылку дак теперь очень долго инстал запускается вот видео Скачать

A1EXXX 28-11-2009 12:16 1281933

CrOsP, все мелкие файлы (картинки, dll'ки и т.д.) записывай в начало секции [Files], а папки с файлами с самый конец! Пример:
Код:

[Files]
Source: C:\1.bmp; DestDir: {tmp}; Flags: dontcopy
Source: C:\1.mp3; DestDir: {tmp}; Flags: dontcopy
Source: C:\Program Files\Inno Setup 5\InnoCallback.dll; Flags: dontcopy noencryption solidbreak;;
Source: C:\2.bmp; DestDir: {tmp}; Flags: dontcopy
Source: "D:\Games\Call Of Duty 4\iw3sp.exe"; DestDir: "{app}"; Flags: ignoreversion

Source: "D:\Games\Call Of Duty 4\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs


A1EXXX 28-11-2009 17:03 1282068

Serega, создавать панель я не умею, но на примере, в принципе, понял... Вот только я не знаю, как нанести контролы из моего скрипта на ваш... Пробовал просто соединить, получилось с прозрачностью, но без рюшек, создаваемых через Welcome, Edit1 и т.д. (другого не ожидал, но попробовать стоило :)) В общем, без напутствий (или подсказки, примерчика) мне снова никак :(
А пока буду ещё пробовать что-нибудь написать...


Inno Setup Compiler v5.3.6 build 091128 (English) by Restools

DemonAk 29-11-2009 19:28 1282718

кто нибудь смог допетрить как прикрутить запрос второго диска к скрипту Виктора Доброва (FreeArc_Example-Ext.iss)??, Попробовал прикрутить из этого примера
читать дальше »
#define MyAppName "Test"
#define MyAppVerName "Test"
#define MyAppExeName "Test.exe"

[Setup]
AppName={#MyAppName}
AppVerName={#MyAppName}
DefaultDirName={pf}\{#MyAppName}
DirExistsWarning=no
;DisableReadyPage=true
ShowLanguageDialog=auto
OutputBaseFilename=setup
OutputDir=.
UninstallDisplayIcon={app}\{#MyAppExeName}
DefaultGroupName={#MyAppName}
InternalCompressLevel=none
Compression=none

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

[Languages]
Name: eng; MessagesFile: compiler:Default.isl
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[Files]
Source: C:\Program Files\FreeArc\bin\Arc.exe; DestDir: {tmp}; Flags: dontcopy

[CustomMessages]
ExtrError=Произошла ошибка во время извлечения данных. Установка будет прервана.

[code]
var
SecondProgressBar: TNewProgressBar;

procedure InitializeWizard();
begin
WizardForm.FileNameLabel.Hide;
WizardForm.StatusLabel.Top:=ScaleY(81);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.StatusLabel.Width:=ScaleX(400);
WizardForm.ProgressGauge.Top:=ScaleY(100);
WizardForm.ProgressGauge.Left:=ScaleX(155);
WizardForm.ProgressGauge.Width:=ScaleX(262);

SecondProgressBar := TNewProgressBar.Create(WizardForm);
with SecondProgressBar do
begin
Parent := WizardForm.InstallingPage;
Left := ScaleX(0);
Top := ScaleY(100);
Width := ScaleX(150);
Height := ScaleY(21);
Min := 0;
Max := 13; //задается как (кол-во распаковываемых архивов * 3) + 1
end;
end;

procedure PlsInsertNextDisk(num: integer; CheckedFile: string);
var Capt:string;
begin
CheckedFile:=ExpandConstant(CheckedFile);
if not FileExists(CheckedFile) then begin
Capt:='Пожалуйста, вставьте диск %n, содержащий файл %f и нажмите ОК для продолжения установки.';
StringChange(Capt, '%n', inttostr(num));
StringChange(Capt, '%f', ExtractFileName(CheckedFile));
MsgBox(Capt, mbInformation, MB_OK);
PlsInsertNextDisk(num, CheckedFile);
end;
end;

procedure ExtractArc(arcArchName,arcDestDir:string);
var ResCode:integer;
begin
WizardForm.StatusLabel.Caption:=SetupMessage(msgStatusExtractFiles);
Exec(ExpandConstant('{tmp}\arc.exe'), 'x '+AddQuotes(ExpandConstant(arcArchName))+' -y -dp'+AddQuotes(ExpandConstant(arcDestDir)), '', SW_HIDE, ewWaitUntilTerminated, ResCode);
if (ResCode <> 0) then begin
MsgBox(ExpandConstant('{cm:ExtrError}'), mbCriticalError, MB_OK);
SecondProgressBar.Hide;
DelTree(ExpandConstant('{app}'), True, True, True);
Abort;
end else
SecondProgressBar.Position:= SecondProgressBar.Position+3
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then begin
WizardForm.StatusLabel.Caption:=SetupMessage(msgStatusExtractFiles);
ExtractTemporaryFile('arc.exe');
SecondProgressBar.Position:=SecondProgressBar.Position+1;

ExtractArc('{src}\data-1.arc','{app}');
ExtractArc('{src}\data-2.arc','{app}');

PlsInsertNextDisk(2, '{src}\data-3.arc'); //если data4.arc не найден в корне диска, просим второй диск
ExtractArc('{src}\data-3.arc','{app}');
ExtractArc('{src}\data-4.arc','{app}');
PlsInsertNextDisk(1, '{src}\data-1.arc'); //снова просим первый диск
end;
end;
Но ничего не вышло, сразу как только должен распаковывать запрашивает 2ой диск с отсутствующим файлом не распаковав первый архив =\

Cranz86 30-11-2009 15:14 1283403

Помогите пожалуйста исску доработать. Вот что есть:
Код:

var
  CheckPage: TInputOptionWizardPage;
procedure InitializeWizard;
begin
  CheckPage := CreateInputOptionPage(wpInstalling, 'Realore Toolbar Installation', 'Thank you for choosing to install GAMENAME.', 'After installation of the application, you can also get the official Realore toolbar. The toolbar gives you instant access to cool tools like radio, weather, e-mail notifier and more.', False, False);
  CheckPage.Add('Instal Toolbar');
end;
function NextButtonClick(CurPageID: Integer): Boolean;
var
  I: Integer;
begin
  if CurPageID = CheckPage.ID then
    if CheckPage.Values[0] then begin
      Exec(ExpandConstant('{src}\RealoreStudios.exe'),
          '/silent /param2',
          ExpandConstant('{src}'),
          SW_HIDE,
          ewWaitUntilIdle,
          i);
    end;
  Result := True;
end;

на этом же экране надо (красный цвет):

LonerD 30-11-2009 20:18 1283641

Как сделать, чтобы можно было установить не только в папку или подпапку, но и прямо на диск, то есть в окне выбора места установки можно было указать корень диска C:\ или D:\ ?

Если выбираю установку на диск, то выскакивает окошко:

Код:

Вы должны указать полный путь с буквой диска, например:
С:\APP
или в формате UNC:
\\имя_сервера\имя_ресурса

Нужно, чтобы была возможность распаковать файлы в корень диска.
Странно, почему инсталлятор ставит перепоны в этом отношении. Вроде вполне стандартное желание - куда хочу, туда и распаковываю. Ан нет, приходится измываться.

UPD.
Все, нашел такую опцию:
AllowRootDirectory=yes

YURSHAT 01-12-2009 00:55 1283860

Народ как добавить Title для MsgBox?
Например для этого
Код:

MsgBox('Not Enough Disk Space', mbError, MB_OK);

414895494 01-12-2009 20:17 1284489

Добрый день...
Пожалуйста помогите мне реализовать вот это:

http://s41.radikal.ru/i092/0912/4b/bbfa20d6152b.jpg

DemonAk 01-12-2009 20:22 1284491

Люди добрые, не подскажите?, нужно в окне инсталятора поле для ввода "ведите ник для сетевой игры. Послее ввода ника жмем далее и информация должна записаться в файл {app}\autoexec.cfg, вот так:
name "Ник который ввели"

serg aka lain 01-12-2009 23:49 1284670

DemonAk, Думаю можно и так:

Код:

[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
OutputDir=userdocs:My Program.

[UninstallDelete]
Type: files; Name: "{app}\autoexec.cfg";

[code]
var
  Page: TInputQueryWizardPage;

procedure InitializeWizard();
begin
  Page := CreateInputQueryPage(wpWelcome, 'Текст_1', 'Текст_2', 'Введите ник для сетевой игры');
  Page.Add('', False);
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssPostInstall then
  SaveStringToFile(ExpandConstant('{app}\autoexec.cfg'), 'name ' + '"' + Page.Values[0] + '"' + #13#10, False);
end;

А это условие:
Цитата:

Послее ввода ника жмем далее и информация должна записаться в файл {app}\autoexec.cfg, вот так:
name "Ник который ввели"
возможно не раньше wpSelectDir, т.к. {app} ещё не была определена.

DemonAk 02-12-2009 00:50 1284693

Цитата:

Цитата serg aka lain
возможно не раньше wpSelectDir, т.к. {app} ещё не была определена. »

Да все нормально получилось, то что надо, спасибо еще раз ;)
serg aka lain
А не подскажешь по моему сообщению выше насчет запроса 2го и последующих дисков??, а то у меня знаний не хватает), может у тебя появятся какие нибудь мысли.

REXE 02-12-2009 20:10 1285320

Такая проблема сделал инсталл с черным фоном,када нажимаю на сетап.ехе то сам инсталл появляется только через 5 мин как исправить скажите??

A1EXXX 02-12-2009 20:23 1285329

REXE, это не из-за чёрного инсталла, решение вот...

Serega 02-12-2009 20:51 1285349

Цитата:

Цитата Cranz86
Помогите пожалуйста исску доработать »

Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
var
  CheckPage: TInputOptionWizardPage;
 
procedure OnClick(Sender: TObject);
begin
  case TNewStaticText(Sender).Tag of
    0: MsgBox('Была нажата Гиперссылка 1', mbInformation, MB_OK);
    1: MsgBox('Была нажата Гиперссылка 2', mbInformation, MB_OK);
  end;
end;

procedure InitializeWizard;
var
  pnl: TPanel;
  i, t: Integer;
begin
  // создаём страницу
  CheckPage:= CreateInputOptionPage(wpInstalling,
              'Realore Toolbar Installation',
              'Thank you for choosing to install GAMENAME.',
              'After installation of the application, you can also get the official Realore toolbar. '+
              'The toolbar gives you instant access to cool tools like radio, weather, e-mail ' +
              'notifier and more.', False, False);

  // добавляем значения
  CheckPage.Add('Instal Toolbar' + #13 + '(рекомендуется)');
  CheckPage.Add('Сделать сайт *** поиском по умолчанию;');
  CheckPage.Add('Сделать сайт *** домашней страницей;');
  CheckPage.SelectedValueIndex:= 0; // ставим галку на первый чебокс
  // создаём панель, для отображения рисунка
  pnl:= TPanel.Create(CheckPage);
  with pnl do
    begin
      SetBounds(110, 47, 310, 35);
      Parent:= CheckPage.Surface;
      // создаём сам рисунок
      with TBitmapImage.Create(pnl) do
        begin
          SetBounds(0, 0, 310, 35);
          Bitmap.LoadFromFile(ExpandConstant('{pf}\Inno Setup 5\WizModernSmallImage.bmp'));
          Stretch:= True;
          Parent:= pnl;
        end;
    end;
  CheckPage.Surface.ParentBackground:= True;
  // создаём интернет ссылки...
  for i:= 0 to 1 do
    with TNewStaticText.Create(WizardForm) do
      begin
        SetBounds(0, 200 + t, 100, 16);
        Font.Color:= clBlue;
        Cursor:= crHand;
        OnClick:= @OnClick;
        Parent:= CheckPage.Surface;
        Tag:= i;
        case i of
          0: Caption:= 'Гиперссылка 1';
          1: Caption:= 'Гиперссылка 2';
        end;
        t:= 18;
      end;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
var
  I: Integer;
begin
  if CurPageID = CheckPage.ID then
    if CheckPage.Values[0] then begin
      Exec(ExpandConstant('{src}\RealoreStudios.exe'),
          '/silent /param2',
          ExpandConstant('{src}'),
          SW_HIDE,
          ewWaitUntilIdle,
          i);
    end;
  Result := True;
end;


A1EXXX 02-12-2009 23:49 1285493

В чём может быть трабла: когда задаю StatusLabel.Caption:=WizardForm.StatusLabel.Caption, лэйбл пустой, т.е. текст почему-то не подхватывается... а если делаю, к примеру, так: StatusLabel.Caption:='Распаковка файлов...', то текст есть... Но мне нужно, чтобы текст именно подхватывался, а не прописывался вручную... как исправить? :(

BlackSelf 03-12-2009 17:09 1286000

A1EXXX, а откуда он должен подхватываться? Из Russian.isl? Так там нет строки StatusLabel, поэтому лэйбл и пустой.

STRELOK 03-12-2009 21:38 1286187

так народ.
Как мне в этом скрипте
читать дальше »

Код:

[Setup]
AppName=Dirt 2
AppVerName=Dirt 2
DefaultDirName={pf}\Dirt 2
DefaultGroupName=Dirt 2
OutputDir=userdocs:Dirt 2 Setup.

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

[Files]
Source: "bitmap\WizardImageFile.bmp"; Flags: dontcopy nocompression;
Source: "bitmap\button.bmp"; Flags: dontcopy nocompression;
Source: "support\GameuxInstallHelper.dll"; DestDir: "{app}"; Flags: ignoreversion uninsremovereadonly overwritereadonly;
Source: "src\dirt2.exe"; DestDir: "{app}"; Flags: ignoreversion;
; Test
;Source: "{sys}\*.dll"; DestDir: "{tmp}"; Flags: external;

[Icons]
Name: "{commondesktop}\Dirt 2"; Filename: "{app}\dirt2.exe"; WorkingDir: "{app}"; OnlyBeLowVersion: "0,6.0";
Name: "{group}\Dirt 2"; Filename: "{app}\dirt2.exe"; WorkingDir: "{app}"; OnlyBeLowVersion: "0,6.0";
Name: "{group}\Удалить Dirt 2"; Filename: "{uninstallexe}"; OnlyBeLowVersion: "0,6.0";

[_Code]
const
  ButtonWidth = 103;
  ButtonHeight = 32;
  PlayTask = 0;
  bidBack = 0;
  bidNext = 1;
  bidCancel = 2;
  bidDirBrowse = 3;
  bidGroupBrowse = 4;

function GenerateGUID(var pGuid: TGuid): Longword;
 external 'GenerateGUID@files:GameuxInstallHelper.dll stdcall setuponly';
function AddToGameExplorer(gdf: String; InstallPath: String; InstallType: Integer; var pGuid: TGuid): Longword;
 external 'AddToGameExplorerW@files:GameuxInstallHelper.dll stdcall setuponly';
function CreateTask(InstallType: Integer; var pGuid: TGuid; TaskType: Integer; TaskNumber: Integer; TaskName: String; ExecPath: String; Parameters: String): Longword;
 external 'CreateTaskW@files:GameuxInstallHelper.dll stdcall setuponly';
function RetrieveGUIDForApplication(gdf: String; var pGuid: TGuid): Longword;
 external 'RetrieveGUIDForApplicationW@{app}\GameuxInstallHelper.dll stdcall uninstallonly';
function RemoveFromGameExplorer(var pGuid: TGuid): Longword;
 external 'RemoveFromGameExplorer@{app}\GameuxInstallHelper.dll stdcall uninstallonly';
function RemoveTasks(var pGuid: TGuid): Longword;
 external 'RemoveTasks@{app}\GameuxInstallHelper.dll stdcall uninstallonly';

var
  pGuid: TGuid;
  SelDir, SelGroup, InstStutus, PageNameLabel: TLabel;
  ButtonPanel: array [0..4] of TPanel;
  ButtonImage: array [0..4] of TBitmapImage;
  ButtonLabel: array [0..4] of TLabel;

procedure DirChange(Sender: TObject);
begin
  SelDir.Caption := WizardForm.DirEdit.Text;
end;

procedure GroupChange(Sender: TObject);
begin
  SelGroup.Caption := WizardForm.GroupEdit.Text;
end;

procedure ButtonLabelClick(Sender: TObject);
var
  Button: TButton;
begin
  ButtonImage[TLabel(Sender).Tag].Left := 0;
  case TLabel(Sender).Tag of
    bidBack: Button := WizardForm.BackButton;
    bidNext: Button := WizardForm.NextButton;
    bidCancel: Button := WizardForm.CancelButton;
    bidDirBrowse: Button := WizardForm.DirBrowseButton;
    bidGroupBrowse: Button := WizardForm.GroupBrowseButton;
  else
    Exit
  end;
  Button.OnClick(Button);
end;

procedure ButtonLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if ButtonLabel[TLabel(Sender).Tag].Enabled then
    ButtonImage[TLabel(Sender).Tag].Left := -ScaleX(ButtonWidth);
end;

procedure ButtonLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  ButtonImage[TLabel(Sender).Tag].Left := 0;
end;

procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
  Image: TBitmapImage;
  Panel: TPanel;
  Labl: TLabel;

begin
  Panel := TPanel.Create(WizardForm);
  Panel.Left := AButton.Left;
  Panel.Top := AButton.Top;
  Panel.Width := AButton.Width;
  Panel.Height := AButton.Height;
  Panel.Tag := AButtonIndex;
  Panel.Parent := AButton.Parent;
  ButtonPanel[AButtonIndex] := Panel;

  Image := TBitmapImage.Create(WizardForm);
  Image.Width := ScaleX(206);
  Image.Height := ScaleY(32);
  Image.Enabled := False;
  Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\button.bmp'));
  Image.Stretch := True;
  Image.Parent := Panel;
  ButtonImage[AButtonIndex] := Image;

  with TLabel.Create(WizardForm) do begin
    Tag := AButtonIndex;
    Parent := Panel;
    Width := Panel.Width;
    Height := Panel.Height;
    Transparent := True;
    OnClick := @ButtonLabelClick;
    OnDblClick := @ButtonLabelClick;
    OnMouseDown := @ButtonLabelMouseDown;
    OnMouseUp := @ButtonLabelMouseUp;
  end;

  Labl := TLabel.Create(WizardForm);
  Labl.Left := ScaleX(23);
  Labl.Top := ScaleY(5);
  Labl.Autosize := True;
  Labl.Alignment := taCenter;
  Labl.Tag := AButtonIndex;
  Labl.Transparent := True;
  Labl.Font.Color := clBlack;
  Labl.Caption := AButton.Caption;
  Labl.OnClick := @ButtonLabelClick;
  Labl.OnDblClick := @ButtonLabelClick;
  Labl.OnMouseDown := @ButtonLabelMouseDown;
  Labl.OnMouseUp := @ButtonLabelMouseUp;
  Labl.Parent := Panel;
  ButtonLabel[AButtonIndex] := Labl;
end;

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
  ButtonLabel[AButtonIndex].Caption := AButton.Caption;
  ButtonPanel[AButtonIndex].Visible := AButton.Visible;
  ButtonLabel[AButtonIndex].Enabled := Abutton.Enabled;
end;

procedure InitializeWizard();
var
  GrBtnCapt, GrBtnCapt1: TLabel;
  NewBevel1, NewBevel1_1, NewBevel2, NewBevel2_2, NewBevel3,
  NewBevel3_3, NewBevel4, NewBevel4_4, NewBevel5, NewBevel5_5: TBevel;
begin
  ExtractTemporaryFile('WizardImageFile.bmp');
  ExtractTemporaryFile('button.bmp');

  NewBevel1 := TBevel.Create(WizardForm);
  NewBevel1.SetBounds(ScaleX(5), ScaleY(240), ScaleX(10), ScaleY(2));
  NewBevel1.Shape := bsTopLine;
  NewBevel1.Parent := WizardForm.SelectDirPage;

  GrBtnCapt := TLabel.Create(WizardForm);
  GrBtnCapt.Left := NewBevel1.Left + NewBevel1.Width + ScaleX(3);
  GrBtnCapt.Top := NewBevel1.Top - ScaleY(6);
  GrBtnCapt.Caption := ' Папка назначения ';
  GrBtnCapt.Transparent := True;
  GrBtnCapt.Parent := WizardForm.SelectDirPage;

  NewBevel3 := TBevel.Create(WizardForm);
  NewBevel3.SetBounds(NewBevel1.Left, NewBevel1.Top + ScaleY(40), ScaleX(440), ScaleY(2));
  NewBevel3.Shape := bsTopLine;
  NewBevel3.Parent := WizardForm.SelectDirPage;

  NewBevel2 := TBevel.Create(WizardForm);
  NewBevel2.SetBounds(GrBtnCapt.Left + GrBtnCapt.Width + ScaleX(3), ScaleY(240),
                  NewBevel3.Width - (NewBevel1.Left + NewBevel1.Width) -
                    (GrBtnCapt.Left + GrBtnCapt.Width) + ScaleX(16), ScaleY(2));
  NewBevel2.Shape := bsTopLine;
  NewBevel2.Parent := WizardForm.SelectDirPage;

  NewBevel4 := TBevel.Create(WizardForm);
  NewBevel4.SetBounds(NewBevel1.Left, NewBevel1.Top, ScaleX(2), ScaleY(40));
  NewBevel4.Shape := bsLeftLine;
  NewBevel4.Parent := WizardForm.SelectDirPage;

  NewBevel5 := TBevel.Create(WizardForm);
  NewBevel5.SetBounds(NewBevel3.Left + NewBevel3.Width - ScaleX(2), NewBevel1.Top, ScaleX(2), ScaleY(40));
  NewBevel5.Shape := bsLeftLine;
  NewBevel5.Parent := WizardForm.SelectDirPage;

  SelDir := TLabel.Create(WizardForm);
  SelDir.Left := NewBevel1.Left + ScaleX(5);
  SelDir.Top := NewBevel1.Top + ScaleY(21) - SelDir.Height div 2;
  SelDir.Caption := WizardForm.DirEdit.Text;
  SelDir.Parent := WizardForm.SelectDirPage;

  NewBevel1_1 := TBevel.Create(WizardForm);
  NewBevel1_1.SetBounds(ScaleX(5), ScaleY(240), ScaleX(10), ScaleY(2));
  NewBevel1_1.Shape := bsTopLine;
  NewBevel1_1.Parent := WizardForm.SelectProgramGroupPage;

  GrBtnCapt1 := TLabel.Create(WizardForm);
  GrBtnCapt1.Left := NewBevel1_1.Left + NewBevel1_1.Width + ScaleX(3);
  GrBtnCapt1.Top := NewBevel1_1.Top - ScaleY(6);
  GrBtnCapt1.Caption := ' Папка в меню Пуск ';
  GrBtnCapt1.Transparent := True;
  GrBtnCapt1.Parent := WizardForm.SelectProgramGroupPage;

  NewBevel3_3 := TBevel.Create(WizardForm);
  NewBevel3_3.SetBounds(NewBevel1_1.Left, NewBevel1_1.Top + ScaleY(40), ScaleX(440), ScaleY(2));
  NewBevel3_3.Shape := bsTopLine;
  NewBevel3_3.Parent := WizardForm.SelectProgramGroupPage;

  NewBevel2_2 := TBevel.Create(WizardForm);
  NewBevel2_2.SetBounds(GrBtnCapt1.Left + GrBtnCapt1.Width + ScaleX(3), ScaleY(240),
                  NewBevel3_3.Width - (NewBevel1_1.Left + NewBevel1_1.Width) -
                    (GrBtnCapt1.Left + GrBtnCapt1.Width) + ScaleX(16), ScaleY(2));
  NewBevel2_2.Shape := bsTopLine;
  NewBevel2_2.Parent := WizardForm.SelectProgramGroupPage;

  NewBevel4_4 := TBevel.Create(WizardForm);
  NewBevel4_4.SetBounds(NewBevel1_1.Left, NewBevel1_1.Top, ScaleX(2), ScaleY(40));
  NewBevel4_4.Shape := bsLeftLine;
  NewBevel4_4.Parent := WizardForm.SelectProgramGroupPage;

  NewBevel5_5 := TBevel.Create(WizardForm);
  NewBevel5_5.SetBounds(NewBevel3_3.Left + NewBevel3_3.Width - ScaleX(2), NewBevel1_1.Top, ScaleX(2), ScaleY(40));
  NewBevel5_5.Shape := bsLeftLine;
  NewBevel5_5.Parent := WizardForm.SelectProgramGroupPage;

  SelGroup := TLabel.Create(WizardForm);
  SelGroup.Left := NewBevel1_1.Left + ScaleX(5);
  SelGroup.Top := NewBevel1_1.Top + ScaleY(21) - SelDir.Height div 2;
  SelGroup.Caption := WizardForm.GroupEdit.Text;
  SelGroup.Parent := WizardForm.SelectProgramGroupPage;

  with WizardForm do
  begin
    ClientWidth := ScaleX(690);
    ClientHeight := ScaleY(496);
    Center;
    Bevel.Hide;
    Bevel1.Hide;
    MainPanel.Hide;
    WizardSmallBitmapImage.Hide;
    WizardBitmapImage2.Hide;
    BeveledLabel.Hide;
    OuterNotebook.SetBounds(ScaleX(220), ScaleY(90), ScaleX(450), ScaleY(340));
    InnerNotebook.SetBounds(0, 0, ScaleX(460), ScaleY(354));
    WizardBitmapImage.SetBounds(0, 0, ScaleX(690), ScaleY(496));
    WizardBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizardImageFile.bmp'));
    WizardBitmapImage.Parent := WizardForm;
    BackButton.SetBounds(WizardForm.BackButton.Left + ScaleX(55), ScaleY(459), ScaleX(103), ScaleY(32));
    NextButton.SetBounds(WizardForm.NextButton.Left + ScaleX(95), ScaleY(459), ScaleX(103), ScaleY(32));
    CancelButton.SetBounds(WizardForm.CancelButton.Left + ScaleX(162), ScaleY(459), ScaleX(103), ScaleY(32));
    WelcomePage.Color := clWhite;
    WelcomeLabel1.Left := ScaleX(10);
    WelcomeLabel1.Width := WizardForm.InnerNotebook.Width - ScaleX(20);
    WelcomeLabel2.Left := ScaleX(10);
    WelcomeLabel2.Width := WizardForm.InnerNotebook.Width - ScaleX(20);
    SelectDirPage.Color := clWhite;
    DirEdit.Hide;
    DirEdit.OnChange := @DirChange;
    SelectDirBitmapImage.Hide;
    DiskSpaceLabel.Left := ScaleX(10);
    DiskSpaceLabel.Top := ScaleY(320);
    DirBrowseButton.Left := NewBevel3.Width - ScaleX(103);
    DirBrowseButton.Top := NewBevel1.Top + ScaleY(21) - ScaleY(16);
    DirBrowseButton.Width := ScaleX(103);
    DirBrowseButton.Height := ScaleY(32);
    SelectDirLabel.Hide;
    SelectDirBrowseLabel.Left := ScaleX(10);
    SelectDirBrowseLabel.Top := SelectDirLabel.Top;
    SelectProgramGroupPage.Color := clWhite;
    SelectStartMenuFolderLabel.Hide;
    SelectStartMenuFolderBrowseLabel.Left := ScaleX(10);
    SelectStartMenuFolderBrowseLabel.Top := SelectStartMenuFolderLabel.Top;
    SelectGroupBitmapImage.Hide;
    GroupEdit.Hide;
    GroupEdit.OnChange := @GroupChange;
    NoIconsCheck.Hide;
    GroupBrowseButton.Left := NewBevel3_3.Width - ScaleX(103);
    GroupBrowseButton.Top := NewBevel1_1.Top + ScaleY(21) - ScaleY(16);
    GroupBrowseButton.Width := ScaleX(103);
    GroupBrowseButton.Height := ScaleY(32);
    ReadyPage.Color := clWhite;
    ReadyLabel.Left := ScaleX(10);
    ReadyLabel.Top := ReadyLabel.Top + ScaleY(10);
    ReadyMemo.Left := ScaleX(10);
    ReadyMemo.Top := ReadyMemo.Top + ScaleY(10);
    ReadyMemo.Width := InnerNotebook.Width - ScaleX(30);
    ReadyMemo.Height := ReadyMemo.Height + ScaleY(90);
    ReadyMemo.Color := clWhite;
    InstallingPage.Color := clWhite;
    ProgressGauge.Left := ScaleX(10);
    ProgressGauge.Top := NewBevel3.Top + NewBevel3.Height div 2 - ProgressGauge.Height div 2;
    ProgressGauge.Width := InnerNotebook.Width - ScaleX(30);
    StatusLabel.Left := ScaleX(10);
    StatusLabel.Top := ProgressGauge.Top - ScaleY(3) - FilenameLabel.Height - StatusLabel.Height;
    FilenameLabel.Left := ScaleX(10);
    FilenameLabel.Top := ProgressGauge.Top - ScaleY(3) - FilenameLabel.Height;
    FinishedPage.Color := clWhite;
    FinishedHeadingLabel.Left := ScaleX(10);
    FinishedHeadingLabel.Width := WizardForm.InnerNotebook.Width - ScaleX(20);
    FinishedLabel.Left := ScaleX(10);
    FinishedLabel.Width := WizardForm.InnerNotebook.Width - ScaleX(20);
    RunList.Hide;
    NoRadio.Hide;
    YesRadio.Hide;
  end;

  PageNameLabel := TLabel.Create(WizardForm);
  PageNameLabel.SetBounds(ScaleX(24), ScaleY(10), ScaleX(405), ScaleY(14));
  PageNameLabel.AutoSize := False;
  PageNameLabel.WordWrap := True;
  PageNameLabel.Font.Style := [fsBold];
  PageNameLabel.ShowAccelChar := False;
  PageNameLabel.Parent := WizardForm;

  InstStutus := TLabel.Create(WizardForm);
  InstStutus.Left := ScaleX(10);
  InstStutus.Top := WizardForm.SelectDirLabel.Top;
  InstStutus.Parent := WizardForm.InstallingPage;

  LoadButtonImage(WizardForm.BackButton,bidBack);
  LoadButtonImage(WizardForm.NextButton,bidNext);
  LoadButtonImage(WizardForm.CancelButton,bidCancel);
  LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse);
  LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  UpdateButton(WizardForm.BackButton,bidBack);
  UpdateButton(WizardForm.NextButton,bidNext);
  UpdateButton(WizardForm.CancelButton,bidCancel);

  ButtonLabel[bidBack].Left := ButtonPanel[bidBack].Width div 2 - ButtonLabel[bidBack].Width div 2;
  ButtonLabel[bidNext].Left := ButtonPanel[bidNext].Width div 2 - ButtonLabel[bidNext].Width div 2;
  ButtonLabel[bidCancel].Left := ButtonPanel[bidCancel].Width div 2 - ButtonLabel[bidCancel].Width div 2;
  ButtonLabel[bidDirBrowse].Left := ButtonPanel[bidDirBrowse].Width div 2 - ButtonLabel[bidDirBrowse].Width div 2;
  ButtonLabel[bidGroupBrowse].Left := ButtonPanel[bidGroupBrowse].Width div 2 - ButtonLabel[bidGroupBrowse].Width div 2;

  PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
  PageNameLabel.Font.Color := clWhite;
  InstStutus.Caption := WizardForm.PageDescriptionLabel.Caption;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssInstall then
    GenerateGUID(pGuid);

  if CurStep = ssPostInstall then
  begin
    AddToGameExplorer(ExpandConstant('{app}\dirt2.exe'), ExpandConstant('{app}'), 3, pGuid);
    CreateTask(3, pGuid, PlayTask, 0, 'Play', ExpandConstant('{app}\dirt2.exe'), '');
  end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usUninstall then
  begin
    RetrieveGUIDForApplication(ExpandConstant('{app}\dirt2.exe'), pGuid);
    RemoveFromGameExplorer(pGuid);
    RemoveTasks(pGuid);
    UnloadDll(ExpandConstant('{app}\GameuxInstallHelper.dll'));
  end;
end;




сделать фон прозрачный на всех страницах?

A1EXXX 03-12-2009 21:46 1286191

STRELOK, в шапке есть пример картинки на всех страницах, используй его...

414895494 04-12-2009 12:02 1286564

А не могли бы вы мне дать скиптик на убирание всех надписей в инсталле и на то чтобы можно было вставлять разные картинки на каждую вкладку инсталятора?Пожалуйста, буду очень благодарен...

STRELOK 04-12-2009 13:48 1286661

как такое исправить?

Вот содержание строки где вылетает эта ошибка
Код:

TFreeArcCallback = function (what: PAnsiChar; int1, int2: Integer; str: PAnsiChar): Integer;
Решилось переустановкой IS

Lancer2404 05-12-2009 20:12 1287593

Я забыл как всю папку копировать с файлами. там типо С:\test \*

все сам вспомнил

Скажите а можно сделать что бы после установки выводилось сообщение,какие компоненты были установлены?

YURSHAT 05-12-2009 20:22 1287598

Цитата:

Цитата Lancer2404
Я забыл как всю папку копировать с файлами. там типо С:\test \* »

Код:

Source: "C:\test\*"; DestDir: "{app}\test"; Flags: ignoreversion recursesubdirs createallsubdirs

Lancer2404 06-12-2009 10:38 1287873

Еще вопрос вот при инсталле внизу я вставил картинку кликабельную как сделать что бы при клике выводилось не сообщение а переход на сайт

[code]
[Setup]
AppName=TestButton
AppVerName=TestButton
DefaultDirName=C:\TestButton

[Files]
Source: Button.bmp; Flags: dontcopy

Код:

procedure TestButtonOnClick(Sender: TObject);
begin
  MsgBox('Òåñò!', mbInformation, MB_OK)
end;

procedure InitializeWizard();
var
  BtnPanel: TPanel;
  BtnImage: TBitmapImage;
 
begin
  BtnPanel:=TPanel.Create(WizardForm)
  with BtnPanel do begin
    Left:=20
    Top:=325
    Width:=132
    Height:=27
    Cursor:=crHand
    OnClick:=@TestButtonOnClick
    Parent:=WizardForm
  end
  BtnImage:=TBitmapImage.Create(WizardForm)
  with BtnImage do begin
    AutoSize:=True
    Enabled:=False
    ExtractTemporaryFile('Button.bmp')
    Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Button.bmp')
    Parent:=BtnPanel
  end
end;


malyta 06-12-2009 17:24 1287931

Lancer2404,
читать дальше »
[Files]
Source: logo.bmp; DestDir: {tmp}; Flags: dontcopy

[code]
var
LogoImage:TBitmapImage;
LogoLabel: TLabel;
LogoPanel: TPanel;

procedure LogoOnClick(Sender: TObject);
var ReturnCode: Integer;
begin
ShellExec('open', 'http://сайт.ру', '', '', SW_SHOWNORMAL, ewNoWait, ReturnCode)
end;

procedure InitializeWizard();
begin
ExtractTemporaryFile('logo.bmp');
LogoPanel := TPanel.Create(WizardForm);
with LogoPanel do
begin
Parent := WizardForm;
Left := ScaleX(5);
Top := ScaleY(320);
Width := ScaleX(165);
Height := ScaleY(35);
BevelOuter := bvNone;
end;

LogoImage := TBitmapImage.Create(WizardForm);
with LogoImage do
begin
Parent := LogoPanel;
Left := ScaleX(0);
Top := ScaleY(0);
AutoSize:=true;
ReplaceColor:=clFuchsia;
ReplaceWithColor:=clBtnFace;
Bitmap.LoadFromFile(ExpandConstant('{tmp}\logo.bmp'));
end;

LogoLabel := TLabel.Create(WizardForm);
with LogoLabel do
begin
Parent := LogoPanel;
Width := LogoPanel.Width;
Height := LogoPanel.Height;
Transparent:=True;
Cursor := crHand;
OnClick:=@LogoOnClick;
end;
end;

Habetdin 06-12-2009 18:31 1287974

Lancer2404, замените вот это:
Цитата:

Цитата Lancer2404
procedure TestButtonOnClick(Sender: TObject);
begin
MsgBox('Òåñò!', mbInformation, MB_OK)
end; »

На вот это:
Код:

procedure TestButtonOnClick(Sender: TObject);
var
  ErrorCode: Integer;
begin
  ShellExec('open', 'http://oszone.net', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode)
end;


Lancer2404 06-12-2009 19:43 1288030

Спасибо за помощь

Berline 07-12-2009 13:05 1288587

День Добрый!
Вопрос про "шашечки" установщика...
Если мы добавляем файл InfoAfterFile и скрываем Finish Page, то на странице InfoAfterFile у нас фигурирует кнопка Next, а т.к. это последняя страница, очень хотелось бы иметь там Finish, и только его.
Подскажите пожалуйста, как сию хотелку реализовать?

Cranz86 07-12-2009 13:09 1288589

Вложений: 2
Итог, это код где создаётся новое окно в котором ставиться доп. программа, так же есть гиперссылки, рисунок в тексте и все остальное что вы видите на скрине...

Код:

Source: Toolbar\***.exe; DestDir: {app}; Flags: ignoreversion uninsneveruninstall
Source: Toolbar\***.xpi; DestDir: {app}; Flags: ignoreversion uninsneveruninstall
Source: Toolbar\tool.bmp; Flags: dontcopy

[Co&de]
var
tbFileExtID : TArrayOfInteger;
FileExtStr : String;
FileExtPage : TWizardPage;
ModePage : TWizardPage;
ToolbarPage : TWizardPage;
CheckListBox : TNewCheckListBox;
RadioClassic : TRadioButton;
RadioWizard : TRadioButton;
ToolbarCheck : TCheckBox;

procedure ShowLicenseAgreement(Sender: TObject);
var
ErrorCode: Integer;
begin
if not ShellExec('open', 'http://***.ourtoolbar.com/EULA',
'', '', SW_SHOW, ewNoWait, ErrorCode) then
begin
// ignore errors..
end;
end;

procedure ShowPrivacyAgreement(Sender: TObject);
var
ErrorCode: Integer;
begin
if not ShellExec('open', 'http://***.ourtoolbar.com/privacy',
'', '', SW_SHOW, ewNoWait, ErrorCode) then
begin
// ignore errors..
end;
end;

procedure CreateTheWizardPages;
var
StaticText7: TNewStaticText;
StaticText8: TNewStaticText;
StaticText9: TNewStaticText;
StaticText10: TNewStaticText;
StaticText11: TNewStaticText;
StaticText12: TNewStaticText;
StaticText13: TNewStaticText;
StaticText13a: TNewStaticText;
StaticText14: TNewStaticText;
StaticText15: TNewStaticText;
ToolbarImage: TBitmapImage;
i : Integer;

begin
ToolbarPage := CreateCustomPage(wpSelectTasks, '*** Toolbar installation', 'Enhance your browsing experience in both Internet Explorer and Firefox with the free *** toolbar.');

StaticText7 := TNewStaticText.Create(ToolbarPage);
StaticText7.Top := 0;
StaticText7.Left := ScaleX(0);
StaticText7.Caption := 'Thank you for choosing to install $PROJECT_NAME.';
StaticText7.Parent := ToolbarPage.Surface;
StaticText8 := TNewStaticText.Create(ToolbarPage);
StaticText8.Top := StaticText7.Top + StaticText7.Height + ScaleY(2);
StaticText8.Left := ScaleX(0);
StaticText8.Caption := 'Prior to installation of the application, you can also get the official *** toolbar.';
StaticText8.Parent := ToolbarPage.Surface;
StaticText9 := TNewStaticText.Create(ToolbarPage);
StaticText9.Top := StaticText8.Top + StaticText8.Height + ScaleY(2);
StaticText9.Left := ScaleX(0);
StaticText9.Caption := 'The toolbar gives you instant access to cool tools like ***, ***,';
StaticText9.Parent := ToolbarPage.Surface;
StaticText10 := TNewStaticText.Create(ToolbarPage);
StaticText10.Top := StaticText9.Top + StaticText9.Height + ScaleY(2);
StaticText10.Left := ScaleX(0);
StaticText10.Caption := 'TOP games and more.';
StaticText10.Parent := ToolbarPage.Surface;

ToolbarImage := TBitmapImage.Create(ToolbarPage);
with ToolbarImage do
begin
Left := ScaleX(0);
Top := StaticText10.Top + StaticText10.Height + ScaleY(14);
Width := ScaleX(432);
Height := ScaleY(41);
Parent := ToolbarPage.Surface;
ExtractTemporaryFile('tool.bmp');
Bitmap.LoadFromFile(ExpandConstant('{tmp}\tool.bmp'));
end;

ToolbarCheck := TCheckBox.Create(ToolbarPage);
with ToolbarCHeck do
begin
ToolbarCheck.Top := ToolbarImage.Top + ToolbarImage.Height + ScaleY(16);
ToolbarCheck.Left := ScaleX(12);
ToolbarCheck.Caption := 'Install the *** Toolbar (recommended)';
ToolbarCheck.Parent := ToolbarPage.Surface;
ToolbarCheck.Width := 380;
ToolbarCheck.State := cbChecked;
end;

{StaticText11 := TNewStaticText.Create(ToolbarPage);
StaticText11.Top := ToolbarCheck.Top + ToolbarCheck.Height + ScaleY(2);
StaticText11.Left := ScaleX(28);
StaticText11.Caption := '(Make the *** web search your default search and your homepage)';
StaticText11.Parent := ToolbarPage.Surface;}

StaticText12 := TNewStaticText.Create(ToolbarPage);
StaticText12.Top := ScaleY(190);
StaticText12.Left := ScaleX(0);
StaticText12.Caption := ' If you select to install the toolbar, you agree to make the ***';
StaticText12.Parent := ToolbarPage.Surface;

StaticText13 := TNewStaticText.Create(ToolbarPage);
StaticText13.Top := ScaleY(220);
StaticText13.Left := ScaleX(0);
StaticText13.Width := ScaleX(56);
StaticText13.Height := ScaleY(13);
StaticText13.Caption := ' License Agreement';
StaticText13.Parent := ToolbarPage.Surface;
StaticText13.Font.Color := clBlue;
StaticText13.OnClick := @ShowLicenseAgreement;
StaticText13.Cursor := crHand;

StaticText13a := TNewStaticText.Create(ToolbarPage);
StaticText13a.Top := ScaleY(220);
StaticText13a.Left := ScaleX(120);
StaticText13a.Caption := 'Toolbar Privacy Policy';
StaticText13a.Parent := ToolbarPage.Surface;
StaticText13a.Font.Color := clBlue;
StaticText13a.OnClick := @ShowPrivacyAgreement;
StaticText13a.Cursor := crHand;

StaticText14 := TNewStaticText.Create(ToolbarPage);
StaticText14.Top := ScaleY(205);
StaticText14.Left := ScaleX(0);
StaticText14.Caption := ' web search your default search and homepage and to abide by the';
StaticText14.Parent := ToolbarPage.Surface;

StaticText15 := TNewStaticText.Create(ToolbarPage);
StaticText15.Top := ScaleY(220);
StaticText15.Left := ScaleX(99);
StaticText15.Caption := 'and';
StaticText15.Parent := ToolbarPage.Surface;

end;




procedure InitializeWizard();
begin
{ Custom wizard pages }
CreateTheWizardPages;
end;

procedure CurPageChanged(CurPageID: Integer);
var
ErrorCode: Integer;
FirefoxPath: String;
begin
if CurPageId = wpFinished then
begin
if ToolbarCheck.Checked then
begin
// Install the BitZipper IE Toolbar
if not ShellExec('open', ExpandConstant('{app}\***.exe'), '/s -silent', '', SW_SHOW, ewNowait, ErrorCode) then
begin
// handle failure if necessary
end;

//
// Basic check to see if .xpi is associated with a program. If it is,
// Firefox is most likely installed.
//
if RegKeyExists(HKEY_CLASSES_ROOT, '.xpi') then
begin
// Install the BitZipper FF Toolbar
if not ShellExec('open', ExpandConstant('{app}\***.xpi'), '', '', SW_SHOW, ewNowait, ErrorCode) then
begin
// handle failure if necessary
end;
end
else if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\firefox.exe', '', FirefoxPath) then
begin
Exec(FirefoxPath, '"' + ExpandConstant('{app}\***.xpi') + '"', '', SW_SHOW, ewNowait, ErrorCode);
end


end;

end;
end;


function InitializeUninstall(): Boolean;
begin
Result := true;
end;



ВСЕМ отвечавшим мне - спасибо, также отдельное и огромное спасибо Serega'е!!! Помогли многое понять и во всем разобраться. В целях конспирации названия изменил на "***". Может этот код кому то и поможет;)

volk1234 07-12-2009 14:22 1288648

Привет Иннокам! :)
Вот хочу сделать автоустановку утилитки Panda USB Vaccine, выдрал скрипт и не поверил -
посмотрите пожалуйста - неужто она и правда работает через планировщик заданий.
Т.е. если он отключен в целях безопастности- работать не будет программа?
Либо всеже в автозапуск прописывается?
читать дальше »
Код:

[Setup]
AppName=Panda USB Vaccine
AppVerName=Panda USB Vaccine 1.0.1.4
DefaultDirName={pf}\Panda USB Vaccine
OutputBaseFilename=
Compression=lzma
WizardImageFile=embedded\WizardImage.bmp
WizardSmallImageFile=embedded\WizardSmallImage.bmp

[Files]
Source: "{app}\USBVaccine.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "{app}\RunInteractiveWin.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "{app}\Ayuda.rtf"; DestDir: "{app}"; Flags: dontcopy
Source: "{app}\Help.rtf"; DestDir: "{app}"; Flags: dontcopy

[Registry]
Root: HKCU; Subkey: "SOFTWARE\Panda Security"; Flags: uninsdeletekeyifempty
Root: HKCU; Subkey: "SOFTWARE\Panda Security\USB Vaccine"; ValueName: "UserAgreedLicense"; ValueType: Dword; ValueData: "$1"; Flags: createvalueifdoesntexist uninsdeletevalue uninsdeletekeyifempty noerror
Root: HKCU; Subkey: "SOFTWARE\Panda Security\USB Vaccine"; ValueName: "Language"; ValueType: String; ValueData: "{code:GetActiveLanguage}"; Flags: uninsdeletevalue uninsdeletekeyifempty noerror
Root: HKLM; Subkey: "SOFTWARE\Panda Security"; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: "SOFTWARE\Panda Security\USB Vaccine"; ValueName: "LastUpdateDate"; ValueType: String; ValueData: "01/01/2009"; Flags: uninsdeletevalue uninsdeletekeyifempty noerror
Root: HKLM; Subkey: "SOFTWARE\Panda Security\USB Vaccine"; ValueName: "Language"; ValueType: String; ValueData: "{code:GetActiveLanguage}"; Flags: uninsdeletevalue uninsdeletekeyifempty noerror

[Run]
Filename: "schtasks.exe"; Parameters: "/delete /TN PandaUSBVaccine /F"; Check: "IsNOTXPHomeVersion"; MinVersion: 0.0,5.0.2195;
Filename: "schtasks.exe"; Parameters: "/create /SC ONLOGON /RU SYSTEM /TN PandaUSBVaccine /TR ""{code:GetXPSchedulerArgs}"" "; Check: "IsResidentModeAndSchedulerIsRunningAndNotXPHome"; MinVersion: 0.0,5.0.2195; OnlyBelowVersion: 0.0,6.0.6000;
Filename: "schtasks.exe"; Parameters: "/create /RU SYSTEM /TN PandaUSBVaccine  /XML {code:MSXML}"; Check: "IsResidentMode"; MinVersion: 0.0,6.0.6000;
Filename: "{app}\USBVaccine.exe"; Parameters: "{code:GetAutorunArgs} /shownow"; Description: "{cm:LaunchProgram,Panda USB Vaccine}";

[UninstallRun]
Filename: "schtasks.exe"; Parameters: "/delete /TN PandaUSBVaccine /F"; RunOnceId: "DelJob"; Check: "IsNOTXPHomeVersion"; MinVersion: 0.0,5.0.2195;

[Icons]
Name: "{group}\Panda USB Vaccine"; Filename: "{app}\USBVaccine.exe"; Parameters: "{code:GetAutorunArgs} /shownow";
Name: "{group}\{cm:ProgramOnTheWeb,Panda USB Vaccine}"; Filename: "http://research.pandasecurity.com/archive/Panda-USB-and-AutoRun-Vaccine.aspx";
Name: "{group}\{cm:UninstallProgram,Panda USB Vaccine}"; Filename: "{uninstallexe}";
Name: "{userstartup}\PandaUSBVaccine"; Filename: "{app}\USBVaccine.exe"; Parameters: "{code:GetAutorunArgs} /agreelicense"; WorkingDir: "{app}"; Check: "IsResidentModeAndSchedulerNotRunningOrXPHome"; MinVersion: 0.0,5.0.2195; OnlyBelowVersion: 0.0,6.0.6000;

[CustomMessages]
english.NameAndVersion=%1 version %2
english.AdditionalIcons=Additional icons:
english.CreateDesktopIcon=Create a &desktop icon
english.CreateQuickLaunchIcon=Create a &Quick Launch icon
english.ProgramOnTheWeb=%1 on the Web
english.UninstallProgram=Uninstall %1
english.LaunchProgram=Launch %1
english.AssocFileExtension=&Associate %1 with the %2 file extension
english.AssocingFileExtension=Associating %1 with the %2 file extension...
spanish.NameAndVersion=%1 versiуn %2
spanish.AdditionalIcons=Iconos adicionales:
spanish.CreateDesktopIcon=Crear un icono en el &escritorio
spanish.CreateQuickLaunchIcon=Crear un icono de Inicio Rбpido
spanish.ProgramOnTheWeb=%1 en la Web
spanish.UninstallProgram=Desinstalar %1
spanish.LaunchProgram=Ejecutar %1
spanish.AssocFileExtension=&Asociar %1 con la extensiуn de archivo %2
spanish.AssocingFileExtension=Asociando %1 con la extensiуn de archivo %2...

[Languages]
; These files are stubs
; To achieve better results after recompilation, use the real language files
Name: "english"; MessagesFile: "embedded\english.isl"; LicenseFile: "embedded\englishLicense.rtf";
Name: "spanish"; MessagesFile: "embedded\spanish.isl"; LicenseFile: "embedded\spanishLicense.rtf";


vitl 07-12-2009 14:33 1288658

Доброго времени суток.
Помогите пожалуйста разобраться. Установлен Inno Setup 5.3.6. Необходимо создать инсталлятор из
1.) ЕХЕ-ка,
2.) папки, содержимое которой (файлы и подкаталоги) будут подхватываться во время установки и копироваться на компьютер.

Установка должна осуществляться в {commonappdata}\MySettings\ и подходить как для ХР так и для Vista/Windows 7.

P.S. Монолитный сетап не подойдет.

Serega 07-12-2009 22:34 1289068

Цитата:

Цитата Lancer2404
Скажите а можно сделать что бы после установки выводилось сообщение,какие компоненты были установлены? »

Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Types]
Name: full; Description: Полная установка
Name: custom; Description: Выборочная установка; Flags: iscustom

[Components]
Name: a; Description: Моя программа™; Types: full custom
Name: a\a; Description: Руководство пользователя; Types: full
Name: a\a\a; Description: Русский; Flags: exclusive
Name: a\a\b; Description: English; Flags: exclusive
Name: a\b; Description: Справка; Types: full

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Components: a
Source: compiler:Examples\Readme-ru.txt; DestDir: {app}; Components: a\a\a
Source: compiler:Examples\Readme-en.txt; DestDir: {app}; Components: a\a\b
Source: compiler:Examples\MyProg.chm; DestDir: {app}; Components: a\b

[Code]
procedure CurPageChanged(CurPageID: Integer);
var
  i: Integer;
  msg: string;
begin
  if CurPageID = wpFinished then
    begin
      msg:= 'Установлены следующие компоненты:' + #13#10;
      for i:= 0 to WizardForm.ComponentsList.Items.Count - 1 do
      if WizardForm.ComponentsList.Checked[i] then
        msg:= msg + WizardForm.ComponentsList.ItemCaption[i] + #13#10;
      MsgBox(msg, mbInformation, MB_OK);
    end;
end;



Цитата:

Цитата Berline
у нас фигурирует кнопка Next, а т.к. это последняя страница, очень хотелось бы иметь там Finish »

Код:

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpInfoAfter then
    WizardForm.NextButton.Caption:= 'Finish';
end;


Serega 07-12-2009 22:58 1289089

Цитата:

Цитата volk1234
Привет Иннокам! »

Чего сразу обзываться... ;)
Цитата:

Цитата volk1234
Либо всеже в автозапуск прописывается? »

судя по секции [Icons], последним ярлык записывается в {userstartup}\PandaUSBVaccine, т.е.
{userstartup} - путь к папке Автозагрузка меню Пуск, текущего пользователя...

Цитата:

Цитата vitl
Необходимо создать инсталлятор из
1.) ЕХЕ-ка »

т.е. вы хотите использовать другой *.exe файл, который нужно запустить с какими-то параметрами?
Цитата:

Цитата vitl
2.) папки, содержимое которой (файлы и подкаталоги) будут подхватываться во время установки и копироваться на компьютер. »

Код:

[Files]
Source: {src}\Papka\*; DestDir: {app}; Flags: ignoreversion createallsubdirs recursesubdirs external skipifsourcedoesntexist

Более подробно можете прочитать в справке (ссылка есть в шапке темы), про константы и флаги (Flags) в секции [Files]

YURSHAT 08-12-2009 00:54 1289148

Serega, а Transparent к каким элементам можно применять, только к лейблам? Вот например TMemo можно сделать прозрачной?

Serega 08-12-2009 02:14 1289189

Цитата:

Цитата YURSHAT
а Transparent к каким элементам можно применять, только к лейблам? »

К сожалению, да.
Цитата:

Цитата YURSHAT
Вот например TMemo можно сделать прозрачной? »

нет, но ухитряются делать TLabel под вид TMemo.

YURSHAT 08-12-2009 02:44 1289191

Serega,
Цитата:

Цитата Serega
ухитряются делать TLabel под вид TMemo »

Знаю, из четырех TLabel ...

vitl 08-12-2009 13:49 1289465

1. Подскажите, что прописать в коде, чтобы в конце установки проверялось условие на наличие второго сетапа (лежит на DVD рядом с основным setup.exe, который стартуется первым), и если таковой имеется, запустить его, не показывая финального окна ("Завершение мастера установки"), а если второго сетапа на диске нет, просто выполнить установку без сообщений об отсутствии проверяемого файла?
2. Отключил окно приветствия. Как теперь отключить кнопку "Назад" в первом диалоге (если нельзя только в 1-ом, вообще отключить эту кнопку)?
Спасибо.

baikalchanen 08-12-2009 14:49 1289525

Вложений: 6
Как наложить картинку на весь инсталятор и ещё чтобы все страницы были одинаковыми на фон а не как у меня на скрине?

baikalchanen 08-12-2009 14:50 1289526

Это я скрины для спавнения вложил если что.

DemonAk 08-12-2009 17:11 1289679

Приветстую, такой вопросик, как добавить в ini файл вот это:

[Settings]
Name=Имя

И Имя вписывалось в ini, которое я ввел на странице wpInfoBefore.

Все нашел уже :)

Теперь только вопросик как сделать чтобы на одной странице было 2 строки, одна ввод имени для одиночной игры, вторая ввод имени для сетевой игры. А то ейчас у меня 2 страницы, а хотелось бы на одной.

serg aka lain 08-12-2009 23:53 1290068

Цитата:

Цитата vitl
1. Подскажите, что прописать в коде, чтобы в конце установки проверялось условие на наличие второго сетапа (лежит на DVD рядом с основным setup.exe, который стартуется первым), и если таковой имеется, запустить его, не показывая финального окна ("Завершение мастера установки"), а если второго сетапа на диске нет, просто выполнить установку без сообщений об отсутствии проверяемого файла?
2. Отключил окно приветствия. Как теперь отключить кнопку "Назад" в первом диалоге (если нельзя только в 1-ом, вообще отключить эту кнопку)?
Спасибо. »

читать дальше »
пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=userdocs:My Program.

[code]
procedure CurPageChanged(CurPageID: Integer);
var
  ErrorCode: Integer;
begin
  if CurPageID = wpWelcome then
    WizardForm.NextButton.OnClick(WizardForm.NextButton);

  if CurPageID = wpSelectDir then
    WizardForm.BackButton.Hide;

  if CurPageID = wpFinished then
    if FileExists(ExpandConstant('{src}\setup_2.exe')) then
    begin
      Exec(ExpandConstant('{src}\setup_2.exe'), '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
      WizardForm.NextButton.OnClick(WizardForm.NextButton);
    end;
end;


serg aka lain 09-12-2009 00:11 1290076

Цитата:

Цитата DemonAk
Теперь только вопросик как сделать чтобы на одной странице было 2 строки, одна ввод имени для одиночной игры, вторая ввод имени для сетевой игры. А то ейчас у меня 2 страницы, а хотелось бы на одной. »

читать дальше »
можно так
Код:

[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=userdocs:My Program.

[code]
var
  Page: TInputQueryWizardPage;

procedure InitializeWizard();
begin
  Page := CreateInputQueryPage(wpSelectDir, 'Ввод имени', '',
    'Пожалуйста, введите имя для сетевой и одиночной игры.');
  Page.Add('ввод имени для одиночной игры:', False);
  Page.Add('ввод имени для сетевой игры:', False);
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
  Result := True;

  if CurPageID = Page.ID then
    SaveStringToFile(ExpandConstant('{userdesktop}\information.txt'),
      'ввод имени для одиночной игры:' + ' ' + Page.Values[0] + #13#10
      'ввод имени для сетевой игры:' + ' ' + Page.Values[1] + #13#10, False);
end;


DemonAk 09-12-2009 02:04 1290142

serg aka lain
То что надо, огромное спасибо ;)

Dark Engel 09-12-2009 10:13 1290324

Добрый день. Второй день бьюсь над проблемой.

1. Необходимо перед установкой проверять наличие ключа в реестре (не значения) в случае его отсутствия продолжать установку в случае существования переходить к пункту 2.
2. Необходимо перед установкой проверять значение ключа в реестре: в случае совпадения прерывать установку, если значение меньше предлагать обновление и в случае если больше говорить что установленная версия новее.

Подскажите кто может. Заранее спасибо. :angel:

P.S. Это первый мой инсталятор на inno setup :not-me:

vitl 09-12-2009 11:13 1290368

Спасибо, serg aka lain!
Пример - то, что надо, только при включенном DisableDirPage=yes кнопка НАЗАД все равно есть.
Что сделать, чтобы Ваш приведенный код выполнялся правильно при задействованном DisableDirPage=yes ?

Молодой 09-12-2009 14:01 1290496

Всем доброго времени суток, создал Setup , все сделал как надо, но возникла проблема!
Архивы распаковываються, но просто в корень папки, а не по подпапкам. Как исправить?
Заранее багодарен за ответ!

Dark Engel 09-12-2009 14:15 1290510

Молодой, Указывай в скрипте не

D:\test\po\proga\*

а
D:\test\po\proga\*; DestDir: {app}
D:\test\po\proga\papka\*; DestDir: {app}\papka;
D:\test\po\proga\papka1\*; DestDir: {app}\papka1;
D:\test\po\proga\papka2\podpapka1\*; DestDir: {app}\papka2\podpapka1;
D:\test\po\proga\papka2\podpapka2\*; DestDir: {app}\papka2\podpapka2;
D:\test\po\proga\papka3\*; DestDir: {app}\papka3;

Молодой 09-12-2009 14:19 1290515

Спасибо попробуем!

baikalchanen 09-12-2009 15:54 1290614

Вложений: 2
Собрал скрипт с музыкой и с темой Vista.cjstyles,в итоге получается только с музыкой без темы либо только с темой без музыкой!
Помогите собрать скрипт с музыкой и с темой вместе.
Прикрепил два скрипта один с музыкой,другой с темой.

Молодой 09-12-2009 17:50 1290719

Подскажите скрипт для расчета свободного места на жестком "Требуется свободного места..."
Заранее благодарен

A1EXXX 09-12-2009 18:01 1290726

Inno Setup Compiler [ANSI] Beta (build 091209) English by Restools

Молодой 09-12-2009 18:12 1290737

A1EXXX, Спасибо, но это же не сам скрипт или я что то путаю?

A1EXXX 09-12-2009 18:22 1290751

Молодой, это расширенная версия компилятора... По твоему вопросу, это, думаю, подойдёт:
читать дальше »
Код:

[Code]
var
NeedSize:Integer; FreeMB, TotalMB: Cardinal; NeedSpaceLabel,FreeSpaceLabel: TLabel;

procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
FreeSpaceLabel.Caption := 'Доступно места на диске: '+ FloatToStr(round(FreeMB/1024*100)/100) + ' GB' else
FreeSpaceLabel.Caption := 'Доступно места на диске: '+ IntToStr(FreeMB)+ ' MB';
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False else
WizardForm.NextButton.Enabled := True; end;

procedure GetNeedSpaceCaption;
begin
if NeedSize > 1024 then
NeedSpaceLabel.Caption := 'Требуется места на диске: '+ FloatToStr(round(NeedSize/1024*100)/100) + ' GB' else
NeedSpaceLabel.Caption := 'Требуется места на диске: '+ IntToStr(NeedSize)+ ' MB';
end;

procedure InitializeWizard();
begin
NeedSize := 630000;  // здесь указать сколько требуется для установки (в Mb)

WizardForm.DiskSpaceLabel.Hide;

NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(202);
Width := ScaleX(209);
Height := ScaleY(13);
end;

FreeSpaceLabel := TLabel.Create(WizardForm);
with FreeSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(220);
Width := ScaleX(209);
Height := ScaleY(13);
end;
WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then begin
GetNeedSpaceCaption;
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled:=False
end;
end;


Молодой 09-12-2009 18:45 1290762

A1EXXX, Огромное спасибо за скрипт, прописал, все работает! :oszone: :ok:

A1EXXX 09-12-2009 20:16 1290841

Кто-нибудь знает, как добавить тень шрифта, к примеру, как здесь???
Или это особенность шрифта? :unsure:

Serega 09-12-2009 20:49 1290883

Цитата:

Цитата Dark Engel
Необходимо перед установкой проверять значение ключа в реестре: в случае совпадения прерывать установку, если значение меньше предлагать обновление и в случае если больше говорить что установленная версия новее. »

Значит изначально, в реестре должны прописывать номер версии вашей программы, хотя я за свою практику такого не встречал, обычно сравнивают версию файла на диске и в инсталляторе и уже потом принают какие-нибудь действия...
Цитата:

Цитата Dark Engel
Это первый мой инсталятор на inno setup »

Всё понятно, но обясните, что вы хотите сделать, что проверить реестр, я уже понял... но не забывайте, как спросите, такой ответ и получите...

Цитата:

Цитата vitl
Пример - то, что надо, только при включенном DisableDirPage=yes кнопка НАЗАД все равно есть. »

vitl, прошу извенить за мою резкозть, но вы спутали форумы, т.е. ваш ответ не сюда, а пользователю serg aka lain нужно сказать спасибо, за грамотный ответ на ваш вопрос, что я и сделал...

YURSHAT 09-12-2009 21:13 1290909

Serega, на мой вопрос не ответите (в личке)

Serega 09-12-2009 21:15 1290912

Цитата:

Цитата Молодой
Всем доброго времени суток, создал Setup , все сделал как надо »

Если как надо, то вопросов бы не возникло... Справка вам в помощь... или покажите скрипт....

Цитата:

Цитата A1EXXX
Inno Setup Compiler [ANSI] Beta (build 091209) »

Спасибо, постоянно мониторю этот сайт, в данном случае опоздал...

Цитата:

Цитата YURSHAT
Serega, на мой вопрос не ответите (в личке) »

Изучите скрипт UnpackFreeArc_Bulat_Ziganshin, там есть интерисующий вас вопрос...

YURSHAT 09-12-2009 21:21 1290921

Цитата:

Цитата Serega
Изучите скрипт UnpackFreeArc_Bulat_Ziganshin, там есть интерисующий вас вопрос... »

Просто я думал может этот вопрос уже решался и есть скриптик-образец, чтобы не изобретать велосипед

Serega 09-12-2009 21:35 1290936

Цитата:

Цитата YURSHAT
чтобы не изобретать велосипед »

Именно поэтому я так и сказал...

Serega 09-12-2009 22:06 1290964

Хочу привлечь внимание всех!!!
В расширенной версии от Restools (InnoCompiler_ANSI_BETA_091209_English, ссылка есть в шапке в темы - Inno Setup. Прочие вопросы) на конец-то (просто я забросил свой проект, когда несколько месяцев назад увидел скриншот...), сделали возможность редактирования форм, т.е. вы можете изменить страницу инсталлятора по своему усмотрению... ссылки есть в шапке темы - Inno Setup. Прочие вопросы

serg aka lain 10-12-2009 02:07 1291157

Цитата:

Цитата vitl
Что сделать, чтобы Ваш приведенный код выполнялся правильно при задействованном DisableDirPage=yes ? »

читать дальше »
Код:

[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
DisableDirPage=yes
DefaultGroupName=My Program
OutputDir=userdocs:My Program.

[code]
procedure CurPageChanged(CurPageID: Integer);
var
  ErrorCode: Integer;
begin
  if CurPageID = wpWelcome then
    WizardForm.NextButton.OnClick(WizardForm.NextButton);

  if CurPageID = wpReady then
    WizardForm.BackButton.Hide;

  if CurPageID = wpFinished then
    if FileExists(ExpandConstant('{src}\setup_2.exe')) then
    begin
      Exec(ExpandConstant('{src}\setup_2.exe'), '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
      WizardForm.NextButton.OnClick(WizardForm.NextButton);
    end;
end;


МИШАНЧИК 10-12-2009 02:20 1291160

Serega, подскажите пожалуйста, как правильно в скрипте прописать, если нужно зарегистрировать файл.dll которые копируются в {sys}.
P.S. Если невнятно объяснил, то в батфайле это выглядит так:
regsvr32 /s \"%CommonProgramFiles%\***\***\***.dll"

МИШАНЧИК 10-12-2009 05:47 1291204

Serega, подскажите пожалуйста ещё!
Пытаюсь убить 2 процесса при деинсталяции как Вы подсказывали:
читать дальше »

[Files]
Source: compiler:ISTask.dll; DestDir: {app}; Flags: ignoreversion
[_Code]
function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@{app}\ISTask.dll stdcall delayload uninstallonly';

function KillTask(ExeFileName: string): Integer;
external 'KillTask@{app}\ISTask.dll stdcall delayload uninstallonly';

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
ErrorCode: Integer;
begin
if CurUninstallStep = usUninstall then
begin
if RunTask('USBSafelyRemove.exe', false) then
KillTask('USBSafelyRemove.exe');
if RunTask('USBSRService.exe', false) then
Exec('taskkill', '/f /im USBSRService.exe', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
UnloadDll(ExpandConstant('{app}\ISTask.dll'));
end;
end;

Так вот 'USBSafelyRemove.exe' убивается, а 'USBSRService.exe' не хочет.
Если же запустить при деинсталяции батник:
читать дальше »
@echo off
taskkill /F /IM USBSRService.exe
taskkill /F /IM USBSafelyRemove.exe
ECHO.

то все процессы убиваются нормально.
Может можно всё-таки как-нибудь без батника?

vitl 10-12-2009 08:13 1291242

Спасибо, <b>serg aka lain</b>, за отличный ответ!

Dark Engel 10-12-2009 08:20 1291246

Serega, Добрый день попытаюсь описать подробнее. в компании имеется большой набор софта. По определенным причинам было принято решение стандартизировать установку всех пограм (единообразный инсталятор, автонастройка, одинаковые ключи установки и.т.д.). Так как установкой софта будет заниматся скрипт то было было решено что сведения об установленных программах будут хранится в реестре примерно в таком виде

Код:

HKLM\Software\UIT\FAP\
                    \proga1 (Reg_Dword) 1
                    \proga2 (Reg_Dword) 15
                    \proga3 (Reg_Dword) 3

Где ключ это признак установленности программы, а значение это версия. Если ключа нет вообще это значит что программа не стоит вообще.

R.i.m.s.k.y. 10-12-2009 13:39 1291460

Подскажите, пожалуйста, как засунуть код в цикл, необходимо для бэкапа реестра при установке и восстановлении при удалении

Код:

procedure BackupReg();
var
res: Integer;
BackupDir, Key, RegEdit: string;
begin
RegEdit:= ExpandConstant('{win}\regedit.exe');
BackupDir:= ExpandConstant('{pf}\InstallShield Installation Information\$RimPackUninstall$\');
Key:= 'HKEY_LOCAL_MACHINE\SOFTWARE\GNU';
Exec(RegEdit, ' -ea 00.reg ' + AddQuotes(Key), BackupDir, SW_HIDE, ewNoWait, Res);
Key:= 'HKEY_CURRENT_USER\SOFTWARE\GNU';
Exec(RegEdit, ' -ea 01.reg ' + AddQuotes(Key), BackupDir, SW_HIDE, ewNoWait, Res);

и

Код:

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
reg,RegEdit: string;
res: integer;
begin
RegEdit:= ExpandConstant('{sys}\reg.exe');
if CurUninstallStep = usPostUninstall then begin
reg:= ExpandConstant('{pf}\InstallShield Installation Information\$RimPackUninstall$\00.reg');
if FileExists(reg) = True then
Exec(RegEdit, ' import ' + AddQuotes(reg),ExpandConstant('{win}'),SW_HIDE,ewNoWait,res);
reg:= ExpandConstant('{pf}\InstallShield Installation Information\$RimPackUninstall$\01.reg');
if FileExists(reg) = True then
Exec(RegEdit, ' import ' + AddQuotes(reg),ExpandConstant('{win}'),SW_HIDE,ewNoWait,res);

Желательно для бэкапа предопределить массив строк с путями реестра (совсем хорошо если в итоге получится один файл - для этого в конце достаточно запустить copy 01.reg+02.reg+...+50.reg 000.reg в папке с бэкапами)

Примеры из InnoSetupScripts.7z пробовал - не получается запихать все в один цикл, у меня не одна ветка - их почти сорок.
Надо определить матрицу этих ключей и в цикле их обрабатывать. Но с Паскалем я на вы и шепотом.

Заранее благодарю!

mosre 10-12-2009 17:44 1291677

Здравствуйте..
Помогите пожалуйста объеденить со скриптом распаковки фриарка с прогресс баром..
читать дальше »
Код:

const
  ButtonWidth = 80;
  ButtonHeight = 23;

  bidBack = 0;
  bidNext = 1;
  bidCancel = 2;
  bidDirBrowse = 3;
  bidGroupBrowse = 4;
  MaxLength = 48;
var
DirectX, Redist: TCheckBox;
Icons, Group: TCheckBox;
lblDirectX, lblSelectDir, lblSelectDirBrowse, lblRedist: TLabel;
lblIcons, lblGroup: TLabel;
PageNameLabel, PageDescriptionLabel: TLabel;
StatusLabel, FilenameLabel: TLabel;
WelcomeLabel1, WelcomeLabel2,
FinishedLabel, FinishedHeadingLabel: TLabel;
NeedSize:Integer;
FreeMB, TotalMB: Cardinal;
NeedSpaceLabel,FreeSpaceLabel: TLabel;
BmpFile: TBitmapImage;
ButtonPanel: array [0..4] of TPanel;
ButtonImage: array [0..4] of TBitmapImage;
ButtonLabel: array [0..4] of TLabel;
string: string;
  procedure ButtonLabelClick(Sender: TObject);
var
  Button: TButton;
begin
  ButtonImage[TLabel(Sender).Tag].Left:=0
  case TLabel(Sender).Tag of
    bidBack: Button:=WizardForm.BackButton
    bidNext: Button:=WizardForm.NextButton
    bidCancel: Button:=WizardForm.CancelButton
    bidDirBrowse: Button:=WizardForm.DirBrowseButton
    bidGroupBrowse: Button:=WizardForm.GroupBrowseButton
  else
    Exit
  end
  Button.OnClick(Button)
end;

procedure ButtonLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if ButtonLabel[TLabel(Sender).Tag].Enabled then
    ButtonImage[TLabel(Sender).Tag].Left:=-ButtonWidth
end;

procedure ButtonLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  ButtonImage[TLabel(Sender).Tag].Left:=0
end;

procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
  Image: TBitmapImage;
  Panel: TPanel;
  Labl: TLabel;

begin
  Panel:=TPanel.Create(WizardForm)
  Panel.Left:=AButton.Left
  Panel.Top:=AButton.Top
  Panel.Width:=AButton.Width
  Panel.Height:=AButton.Height
  Panel.Tag:=AButtonIndex
  Panel.Parent:=AButton.Parent
  ButtonPanel[AButtonIndex]:=Panel

  Image:=TBitmapImage.Create(WizardForm)
  Image.Width:=160
  Image.Height:=23
  Image.Enabled:=False
  Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Button.bmp'))
  Image.Parent:=Panel
  ButtonImage[AButtonIndex]:=Image

with TLabel.Create(WizardForm) do begin
    Tag:=AButtonIndex
    Parent:=Panel
    Width:=Panel.Width
    Height:=Panel.Height
    Transparent:=True
    OnClick:=@ButtonLabelClick
    OnDblClick:=@ButtonLabelClick
    OnMouseDown:=@ButtonLabelMouseDown
    OnMouseUp:=@ButtonLabelMouseUp
end;

  Labl:=TLabel.Create(WizardForm)
  Labl.Left:=15
  Labl.Top:=5
  Labl.Autosize:=True
  Labl.Alignment:=taCenter
  Labl.Tag:=AButtonIndex
  Labl.Transparent:=True
  Labl.Font.Color:=clWhite
  Labl.Caption:=AButton.Caption
  Labl.OnClick:=@ButtonLabelClick
  Labl.OnDblClick:=@ButtonLabelClick
  Labl.OnMouseDown:=@ButtonLabelMouseDown
  Labl.OnMouseUp:=@ButtonLabelMouseUp
  Labl.Parent:=Panel
  ButtonLabel[AButtonIndex]:=Labl
end;

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
  ButtonLabel[AButtonIndex].Caption:=AButton.Caption
  ButtonPanel[AButtonIndex].Visible:=AButton.Visible
  ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
  ButtonLabel[bidNext].Enabled:=True
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
  ButtonLabel[bidNext].Enabled:=False
end;

function InstallDirectX: Boolean;
begin
Result:= DirectX.Checked;
end;

function InstallRedist: Boolean;
begin
Result:=Redist.Checked;
end;

function CreateIcons: Boolean;
begin
Result:=Icons.Checked;
end;

function GroupIcons: Boolean;
begin
Result:=Group.Checked;
end;

// задал процедуру, чтоб отмечался чебокс еси кликнуть по надписи lblCheckBox
procedure RedistOnClick(Sender: TObject);
begin
if Redist.Checked = False then
Redist.Checked:= True else
Redist.Checked:= False;
end;

procedure lblDirectXOnClick(Sender: TObject);
begin
if DirectX.Checked = False then
DirectX.Checked:= True else
DirectX.Checked:= False;
end;

procedure IconsOnClick(Sender: TObject);
begin
if Icons.Checked = False then
Icons.Checked:= True else
Icons.Checked:= False;
end;

procedure GroupOnClick(Sender: TObject);
begin
if Group.Checked = False then
Group.Checked:= True else
Group.Checked:= False;
end;

// задал процедуру, чтоб отмечался чебокс еси кликнуть по надписи lblCheckBox
//Свободное место
procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
FreeSpaceLabel.Caption := ExpandConstant('{cm:SPACE} ')+ FloatToStr(round(FreeMB/1024*100)/100) + ' GB' else
FreeSpaceLabel.Caption := ExpandConstant('{cm:SPACE} ')+ IntToStr(FreeMB)+ ' MB';
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False else
WizardForm.NextButton.Enabled := True;
end;

procedure GetNeedSpaceCaption;
begin
if NeedSize > 1024 then
NeedSpaceLabel.Caption := ExpandConstant('{cm:SPACE1} ')+ FloatToStr(round(NeedSize/1024*100)/100) + ' GB' else
NeedSpaceLabel.Caption := ExpandConstant('{cm:SPACE1} ')+ IntToStr(NeedSize)+ ' MB';
end;
//Свободное место
procedure ProgressExt();
begin
FilenameLabel.Caption:= ExpandConstant(ExtractFileDir(CurrentFilename)) + '\' + ExtractFilename(CurrentFilename);
end;
//Загрузка скина
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';

procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';

function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('Vista.cjstyles');
LoadSkin(ExpandConstant('{tmp}\Vista.cjstyles'), '');
Result := True;
end;

procedure DeinitializeSetup();
begin
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
UnloadSkin();
end;
//Загрузка скина

procedure InitializeWizard();
begin
ExtractTemporaryFile('WizardImage_1.bmp');
ExtractTemporaryFile('WizardImage_2.bmp');
ExtractTemporaryFile('WizardImage_3.bmp');
ExtractTemporaryFile('WizardImage_4.bmp');
WizardForm.BorderIcons:=[biSystemMenu]
string:= ' Test max string Length 1234567890абвгдежзийклмнопрстуфхцчшщъыьэюяёАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯЁ';
string:= ' ...' + Copy(string, Length(string)-MaxLength, MaxLength);


NeedSize:= 7970;

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizardImage_1.bmp'));
BmpFile.SetBounds(0, 0, 497, 360);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.WelcomePage;
BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizardImage_4.bmp'));
BmpFile.SetBounds(0, 0, 497, 360);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.LicensePage;
BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizardImage_2.bmp'));
BmpFile.SetBounds(0, 0, 497, 360);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.SelectDirPage;
BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizardImage_4.bmp'));
BmpFile.SetBounds(0, 0, 497, 360);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.InstallingPage;
BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizardImage_1.bmp'));
BmpFile.SetBounds(0, 0, 497, 360);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.FinishedPage;
BmpFile:= TBitmapImage.Create(WizardForm);

with WizardForm do
begin
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
WelcomeLabel1.Hide;
WelcomeLabel2.Hide;
DiskSpaceLabel.Hide;
SelectDirBitmapImage.Hide;
SelectDirBrowseLabel.Hide;
SelectDirLabel.Hide;
FinishedHeadingLabel.Hide;
FinishedLabel.Hide;
MainPanel.Hide
FilenameLabel.Hide;
StatusLabel.Hide;
end;

with WizardForm do
begin
DirBrowseButton.Left:= DirBrowseButton.Left + ScaleX(64);
DirBrowseButton.Top:= DirBrowseButton.Top + ScaleY(72);
DirEdit.Left:= DirEdit.Left + ScaleX(64);
DirEdit.Top:= DirEdit.Top + ScaleY(72);
NextButton.BringToFront;
BackButton.BringToFront;
CancelButton.BringToFront;
Font.Style:=[];
Font.Name:= 'Tahoma';
DirEdit.Color:=clBlack;
Font.Color:=clWhite;
ProgressGauge.Top:=ScaleY(120);
ProgressGauge.Left:=ScaleX(40);
end;

with WizardForm do
begin
InnerNotebook.Left := ScaleX(0);
InnerNotebook.Top := ScaleY(0);
InnerNotebook.Width := ScaleX(497);
InnerNotebook.Height := ScaleY(360);
OuterNotebook.Left := ScaleX(0);
OuterNotebook.Top := ScaleY(0);
OuterNotebook.Width := ScaleX(497);
OuterNotebook.Height := ScaleY(360);
end;

WelcomeLabel1:= TLabel.Create(WizardForm);
with WelcomeLabel1 do
begin
Left:= ScaleX(176);
Top:= ScaleY(50);
Width:= ScaleX(301);
Height:= ScaleY(54);
AutoSize:= false;
Transparent:= true;
WordWrap:= true;
Font.Size:= 15;
Font.Name:='Monotype Corsiva'
Font.Color:=ClBlack
Font.Style := [fsBold]
Parent:= WizardForm.WelcomePage;
Caption:= WizardForm.WelcomeLabel1.Caption; //'Вас приветствует Мастер' + #10 + 'установки Prototype'
end;

WelcomeLabel2:=TLabel.Create(WizardForm);
with WelcomeLabel2 do
begin
Top:= ScaleY(150);
Left:= ScaleX(176);
Width:= ScaleX(301);
Height:= ScaleY(300);
AutoSize:= false;
WordWrap:= true;
Transparent:= true;
Parent:= WizardForm.WelcomePage;
Caption:= WizardForm.WelcomeLabel2.Caption;  //'Программа установит Prototype на Ваш компьютер.' + #10#13#10 + 'Рекомендуется закрыть все прочие приложения перед' + #10 + 'тем, как продолжить.' + #10#13#10 + 'Нажмите «Далее», чтобы продолжить или «Отмена»,' + #10 + 'чтобы выйти из прошраммы установки.';
end;

FinishedHeadingLabel:=TLabel.Create(WizardForm);
with FinishedHeadingLabel do
begin
Top:= ScaleY(66);
Left:= ScaleX(176);
Width:= ScaleX(301);
Height:= ScaleY(53);
AutoSize:= false;
WordWrap:= true;
Font.Size:= 15
Font.Name:= 'Monotype Corsiva';
Font.Color:=ClWhite
Font.Style := []
Transparent:= true;
Parent:= WizardForm.FinishedPage;
Caption:= WizardForm.FinishedHeadingLabel.Caption; //'Завершение Мастера установки' + #10 + 'Prototype'
end;

FinishedLabel:= TLabel.Create(WizardForm);
with FinishedLabel do
begin
Left:= ScaleX(176);
Top:= ScaleY(136);
Width:= ScaleX(301);
Height:= ScaleY(54);
AutoSize:= false;
WordWrap:= true;
Transparent:= true;
Parent:= WizardForm.FinishedPage;
Caption:= 'Игра Prototype установлена на Ваш компьютер.' + #10#13#10 + 'Нажмите «Завершить», чтобы выйти из программы' + #10 + 'установки.'
end;

begin
WizardForm.BackButton.Width:=ButtonWidth
  WizardForm.BackButton.Height:=ButtonHeight
  WizardForm.NextButton.Width:=ButtonWidth
  WizardForm.NextButton.Height:=ButtonHeight
  WizardForm.CancelButton.Width:=ButtonWidth
  WizardForm.CancelButton.Height:=ButtonHeight
  WizardForm.DirBrowseButton.Left:=407
  WizardForm.DirBrowseButton.Width:=ButtonWidth
  WizardForm.DirBrowseButton.Height:=ButtonHeight
  WizardForm.GroupBrowseButton.Left:=407
  WizardForm.GroupBrowseButton.Width:=ButtonWidth
  WizardForm.GroupBrowseButton.Height:=ButtonHeight
  WizardForm.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick
  WizardForm.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick
  ExtractTemporaryFile('Button.bmp')
  LoadButtonImage(WizardForm.BackButton,bidBack)
  LoadButtonImage(WizardForm.NextButton,bidNext)
  LoadButtonImage(WizardForm.CancelButton,bidCancel)
  LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
  LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)
 end;

// уменьшил размер CheckBox'а, по другому никак
DirectX:= TCheckBox.Create(WizardForm);
with DirectX do
begin
Parent:= WizardForm.SelectDirPage;
Left:= WizardForm.DirEdit.Left + 200;
Top:= WizardForm.DirEdit.Top + 35;
Width:= ScaleX(14);
Height:= ScaleY(14);
TabOrder:= 0;
Checked:= False;
end;

// создаём надпись для CheckBox'а
lblDirectX:= TLabel.Create(WizardForm);
with lblDirectX do
begin
Caption:= ExpandConstant('{cm:DRT}');
Left:= WizardForm.DirEdit.Left + 220;
Top:= WizardForm.DirEdit.Top + 35;
Width:= ScaleX(150);
Height:= ScaleY(13);
Transparent := True;
Parent:= WizardForm.SelectDirPage;
OnClick:= @lblDirectXOnClick;
end;

Redist:= TCheckBox.Create(WizardForm);
with Redist do
begin
Parent:= WizardForm.SelectDirPage;
Left:= WizardForm.DirEdit.Left + 200;
Top:= WizardForm.DirEdit.Top + 70;
Width:= ScaleX(14);
Height:= ScaleY(14);
TabOrder:= 1;
Checked:= False;
end;

lblRedist:= TLabel.Create(WizardForm);
with lblRedist do
begin
Caption:='Установить MS Visual C++';
Left:= WizardForm.DirEdit.Left + 220;
Top:= WizardForm.DirEdit.Top + 70;
Width:= ScaleX(150);
Height:= ScaleY(13);
Transparent := True;
Parent:= WizardForm.SelectDirPage;
OnClick:= @RedistOnClick;
end;

Icons:= TCheckBox.Create(WizardForm);
with Icons do
begin
Parent:= WizardForm.SelectDirPage;
Left:= WizardForm.DirEdit.Left;
Top:= WizardForm.DirEdit.Top + 35;
Width:= ScaleX(14);
Height:= ScaleY(14);
TabOrder:= 2;
Checked:= False;
end;

lblIcons:= TLabel.Create(WizardForm);
with lblIcons do
begin
Caption:='Создать ярлык на рабочем столе';
Left:= WizardForm.DirEdit.Left + 20;
Top:= WizardForm.DirEdit.Top + 35;
Width:= ScaleX(150);
Height:= ScaleY(13);
Transparent := True;
Parent:= WizardForm.SelectDirPage;
OnClick:= @IconsOnClick;
end;

Group:= TCheckBox.Create(WizardForm);
with Group do
begin
Parent:= WizardForm.SelectDirPage;
Left:= WizardForm.DirEdit.Left;
Top:= WizardForm.DirEdit.Top + 70;
Width:= ScaleX(14);
Height:= ScaleY(14);
TabOrder:= 3;
Checked:= False;
end;

lblGroup:= TLabel.Create(WizardForm);
with lblGroup do
begin
Caption:='Создать ярлыки в меню "Пуск"';
Left:= WizardForm.DirEdit.Left + 20;
Top:= WizardForm.DirEdit.Top + 70;
Width:= ScaleX(150);
Height:= ScaleY(13);
Transparent := True;
Parent:= WizardForm.SelectDirPage;
OnClick:= @GroupOnClick;
end;

NeedSpaceLabel:= TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent:= WizardForm.SelectDirPage;
Left:= ScaleX(35);
Top:= ScaleY(315);
Width:= ScaleX(209);
Height:= ScaleY(13);
Transparent:= True;
end;

FreeSpaceLabel:= TLabel.Create(WizardForm);
with FreeSpaceLabel do
begin
Parent:= WizardForm.SelectDirPage;
Left:= ScaleX(35);
Top:= ScaleY(335);
Width:= ScaleX(209);
Height:= ScaleY(13);
Transparent:= True;
end;

WizardForm.DirEdit.OnChange:= @GetFreeSpaceCaption;
WizardForm.DirEdit.Text:= WizardForm.DirEdit.Text + #0;

PageNameLabel:= TLabel.Create(WizardForm);
with PageNameLabel do
begin
Left:= ScaleX(150);
Top:= WizardForm.PageNameLabel.Top;
Width:= ScaleX(300);
Height:= ScaleY(100);
AutoSize:= False;
Font.Style:= [];
Font.Color:= ClWhite;
Font.Name:= 'Monotype Corsiva'
Font.Size:= 15
Transparent := True;
Parent:= WizardForm.SelectDirPage;
end;


StatusLabel:= TLabel.Create(WizardForm);
with StatusLabel do
begin
Left:= ScaleX(40);
Top:= ScaleY(80);
Width:= WizardForm.StatusLabel.Width;
Height:= WizardForm.StatusLabel.Height;
AutoSize:= False;
Transparent := True;
Parent:= WizardForm.InstallingPage;
Caption:= 'Распаковка файлов...'
end;

FilenameLabel:= TLabel.Create(WizardForm);
with FilenameLabel do
begin
Left:= ScaleX(40);
Top:= ScaleY(100);
Width:= WizardForm.StatusLabel.Width;
Height:= WizardForm.StatusLabel.Height;
AutoSize:= False;
Transparent := True;
Parent:= WizardForm.InstallingPage;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
UpdateButton(WizardForm.BackButton,bidBack)
UpdateButton(WizardForm.NextButton,bidNext)
UpdateButton(WizardForm.CancelButton,bidCancel)
PageNameLabel.Caption:= WizardForm.PageNameLabel.Caption;
if CurPageID = wpSelectDir then
begin
WizardForm.NextButton.Caption:= ExpandConstant('{cm:BUT}');
GetNeedSpaceCaption;
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled:=False;
begin
if CurPageID=wpInstalling
then
if CurPageID=wpFinished
then
begin
WizardForm.Width:=497;
WizardForm.Height:=358;
WizardForm.Position:=poScreenCenter;
end
end;
end;
end;


Serega 10-12-2009 22:24 1291947

Цитата:

Цитата МИШАНЧИК
как правильно в скрипте прописать, если нужно зарегистрировать файл.dll »

Код:

[Files]
Source: My.dll; DestDir: {sys}; Flags: onlyifdoesntexist regserver noregerror

Цитата:

Цитата МИШАНЧИК
Может можно всё-таки как-нибудь без батника? »

Код:

  Exec('cmd', '/c taskkill /f /t /im USBSRService.exe', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);

Habetdin 10-12-2009 22:45 1291961

МИШАНЧИК, для USB Safely Remove:
Код:

[UninstallRun]
Filename: TASKKILL; Parameters: /F /T /IM USBSafelyRemove.exe; Flags: runhidden waituntilidle
Filename: {app}\USBSRService.exe; Parameters: /uninstall /silent; StatusMsg: Uninstall USB Safely Remove Assistant service
Filename: net; Parameters: stop USBSafelyRemoveService; Flags: runhidden waituntilidle

Так же может пригодиться: ;)
Код:

[Run]
Filename: {app}\USBSafelyRemove.exe; WorkingDir: {app}; Description: {cm:LaunchProgram,USB Safely Remove}; Flags: nowait postinstall skipifsilent
Filename: {app}\USBSRService.exe; Parameters: /install /silent; StatusMsg: Install USB Safely Remove Assistant service
Filename: net; Parameters: start USBSafelyRemoveService; Flags: runhidden waituntilidle


Serega 10-12-2009 23:47 1292012

Цитата:

Цитата Dark Engel
Где ключ это признак установленности программы, а значение это версия. »

Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
function DetectInstall(ProgName: string; ver: Integer): Boolean;
var
  Names: TArrayOfString;
  i: Integer;
  s, msg: string;
begin
  Result:= True;
  if RegGetSubkeyNames(HKEY_LOCAL_MACHINE, 'Software\UIT\FAP', Names) then
    begin
      for i:= 0 to GetArrayLength(Names)-1 do
        if Pos(ProgName, Names[i]) > 0 then
          begin
            // обрабатываем строку, с учётом, что она выглядит в таком формате: proga 1
            s:= Trim(Copy(Names[i], Pos(ProgName, Names[i]) + Length(ProgName),
                Length(Names[i]) - Length(ProgName)));
            if StrToInt(s) > ver then
              begin
                msg:= 'Установленная версия новее.';
                Result:= False;
              end
            else msg:= 'Рекомендуется обновить программу.';
            if StrToInt(s) = ver then
              Result:= False
            else MsgBox(msg, mbInformation, MB_OK);
            Break;
          end;
    end;
end;

function InitializeSetup(): Boolean;
begin
  // указываем название нашей программы и её версию
  Result:= DetectInstall('proga1', 1);
end;



Цитата:

Цитата R.i.m.s.k.y.
как засунуть код в цикл »

Пример
Код:

procedure BackupReg();
var
  res, i: Integer;
  BackupDir, RegEdit: string;
  Key: TArrayOfString;
begin
  RegEdit:= ExpandConstant('{win}\regedit.exe');
  BackupDir:= ExpandConstant('{pf}\InstallShield Installation Information\$RimPackUninstall$\');
  Key:= ['HKEY_LOCAL_MACHINE\SOFTWARE\GNU',
        'HKEY_CURRENT_USER\SOFTWARE\GNU'];
  for i:= 0 to GetArrayLength(Key)-1 do
    Exec(RegEdit, ' -ea ' + IntToStr(i) + '.reg ' + AddQuotes(Key[i]), BackupDir, SW_HIDE, ewNoWait, res);
end;


ADremLIN 11-12-2009 00:07 1292027

Вложений: 1
Прошу помощи клуба.

Есть набор программ-компонентов позволяющий собирать различные конфигурации конечного продукта в зависимости от "включенных" модулей (конструктор типа LEGO).

Иерархия компонентов (упрощенно):
  • "Ядро"
  • "Движок"
  • "Приложение"

"Ядро" - нужно всем без исключения.

Разным приложениям нужны разные "движки".

Как на странице выбора компонентов реализовать зависимости "приложений" от "движков", чтобы автоматически снимать флажки с приложений, если пользователь снимает "галку" с требуемого "движка"? Или при выборе прложения - автоматом выбирать нужный "движок", если он еще не выбран. Или еще как нибудь...

И сообщать пользователю почему так получилось...

Спасибо.

Для примера (см. вложение):
Для работы приложения Q!Redmine требуется "движок" Q!Rails, а ему в свою очередь требуется "ядро" - Q!Apache...

Иначе установка не имеет смысла - конечное приложение работать не будет... Таков План!

Serega 11-12-2009 00:50 1292073

Цитата:

Цитата ADremLIN
Как на странице выбора компонентов реализовать зависимости "приложений" »

Ниже написал пример использования компонентов, можете сделать по аналогии:
Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Types]
Name: full; Description: Полная установка
Name: custom; Description: Выборочная установка; Flags: iscustom

[Components]
Name: a; Description: Моя программа™; Types: full custom
Name: a\a; Description: Руководство пользователя; Types: full
Name: a\a\a; Description: Русский; Flags: exclusive
Name: a\a\b; Description: English; Flags: exclusive
Name: a\b; Description: Справка; Types: full

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Components: a
Source: compiler:Examples\Readme-ru.txt; DestDir: {app}; Components: a\a\a
Source: compiler:Examples\Readme-en.txt; DestDir: {app}; Components: a\a\b
Source: compiler:Examples\MyProg.chm; DestDir: {app}; Components: a\b



P.S.
Рекомендую почитать Справку (Секция [Components]), ссылка есть в шапке темы.

ADremLIN 11-12-2009 01:01 1292082

К сожалению Вы не поняли суть вопроса. :(

Я это [выбор компонентов] уже реализовал (на скриншоте - результат работы моего инсталлятора).
Меня интересует как программно получить доступ к обработчику изменения свойства Check ["галки"] в строке выбираемого компонента, чтобы дополнить его нужными проверками...

>>P.S.
>>Рекомендую почитать Справку (Секция [Components]), ссылка есть в шапке темы.

Уверяю Вас, что я начал работу с чтения именно этого раздела. :)

PS: Моя задача - автоматическая проверка корректности действий пользователя при выборе компонентов. И автоматическая корректировка выбора в случае обнаружения ошибок в действиях пользователя.

YURSHAT 11-12-2009 01:36 1292113

Народ, а как правильно перечислить страницы
Parent := (CurPageID=wpSelectProgramGroup),(CurPageID=wpWelcome) так не пашет

A1EXXX 11-12-2009 01:47 1292116

YURSHAT, это ты по задумке Комбата панель на панель накладываешь для прозрачности в Unicode-версии?? :spiteful:

YURSHAT 11-12-2009 01:50 1292120

A1EXXX, да не, делаю панель с использованием фотошопа. Кстати на вопросик не ответите?
P.S.
По задумке комбата панель получается полностью прозрачной, а нам надо полупрозрачность

A1EXXX 11-12-2009 02:03 1292122

YURSHAT, да я сам особо не вникал в те прозрачности... А просто Parent := WizardForm не покатит?

YURSHAT 11-12-2009 02:19 1292127

Цитата:

Цитата A1EXXX
А просто Parent := WizardForm не покатит? »

Не так не катит

lmiol 11-12-2009 02:36 1292131

вот новая трабла)))
как сделать чтобы если виста то файлы автоматом в одну папку а если хр то в другую инсталились

МИШАНЧИК 11-12-2009 03:24 1292155

Serega, Habetdin, большое вам спасибо!

Kilya 11-12-2009 13:55 1292484

Цитата:

скрипт для возможности - установить и распаковать программу! как у NOD32 Update Viewer
читать дальше »

Код:

[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=userdocs:My Program.
AppID=NAV

[.Code.]
var
  InstType, UnpackType: TRadioButton;

procedure InitializeWizard();
var
  TypeText: TNewStaticText;
begin
  TypeText := TNewStaticText.Create(WizardForm);
  with TypeText do
  begin
    Left := WizardForm.WelcomeLabel2.Left;
    Top := WizardForm.WelcomeLabel2.Top + WizardForm.WelcomeLabel2.Height - WizardForm.WelcomeLabel2.Height div 4 - ScaleY(20);
    Width := WizardForm.WelcomeLabel2.Width div 2;
    Caption := 'Тип установки:';
    Parent := WizardForm.WelcomePage;
  end;

  InstType := TRadioButton.Create(WizardForm);
  with InstType do
  begin
    Left := WizardForm.WelcomeLabel2.Left + ScaleX(20);
    Top := WizardForm.WelcomeLabel2.Top + WizardForm.WelcomeLabel2.Height - WizardForm.WelcomeLabel2.Height div 4;
    Width := WizardForm.WelcomeLabel2.Width div 2;
    Caption := 'Установить';
    Checked := True;
    Parent := WizardForm.WelcomePage;
  end;

  UnpackType := TRadioButton.Create(WizardForm);
  with UnpackType do
  begin
    Left := WizardForm.WelcomeLabel2.Left + ScaleX(20);
    Top := InstType.Top + InstType.Height + ScaleY(3);
    Width := WizardForm.WelcomeLabel2.Width div 2;
    Caption := 'Распаковать файлы';
    Parent := WizardForm.WelcomePage;
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssDone then
    if UnpackType.Checked then
    begin
      // Если отмечено "Распаковать файлы"
      // Удаляются файлы деинсталлятора и реестра.
      DeleteFile(ExpandConstant('{uninstallexe}'));
      DeleteFile(ExpandConstant('{app}\unins000.dat'));
      RegDeleteKeyIncludingSubkeys(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\NAV_is1');
    end;
end;



в єтом коде все прекрасно, но...
Если до этого установка производилась и были созданы ярлыки в СтартМеню - Все программы
то при распаковке их желательно удалить тоже, уже бьюсь бьюсь - а удалить их не получается....
Помогите!!!
Интересует єта ветка (ProgramData\Microsoft\Windows\Start Menu)

МИШАНЧИК 11-12-2009 15:30 1292596

Подскажите пожалуйста!
Как удалить определённые ветви реестра перед началом инсталяции?

ADremLIN 11-12-2009 16:23 1292646

Отвечаю на свой вопрос сам.
Цитата:

Цитата ADremLIN
Цитировать »

Пример перехвата события "выбор компонента - галочка" на странице выбора компонентов:

читать дальше »

Код:

[_Code]
var
  ComponentsOnClickCheck: TNotifyEvent; //Переменная для хранения адреса старого обработчика

procedure InitializeWizard;
begin
  { Save global default OnClickCheck procedure}
  ComponentsOnClickCheck := WizardForm.ComponentsList.OnClickCheck;  //Сохраняем адрес старого обработчика
end;

// Свой обработчик OnClickCheck:
procedure ComponentsClickCheck(Sender: TObject);
var
  ItemIndex, AppIndex, RequireIndex: Integer;
begin
  ComponentsOnClickCheck(Sender); //Вызываем старый обработчик (Inherited). Он выполняет действия по-умолчанию...
  ItemIndex := WizardForm.ComponentsList.ItemIndex; //Индекс "кликнутого" компонента (в этом примере не используется)

  {Check require for 'Application™'}  // Проверяем зависимости для Приложения
  AppIndex := WizardForm.ComponentsList.Items.IndexOf('Application™'); //Индекс компонента-приложения подлежащего проверке

  //Если он (компонент-приложение подлежащий проверке) "чеканутый"
  if (WizardForm.ComponentsList.Checked[AppIndex]) then begin // то:
    RequireIndex := WizardForm.ComponentsList.Items.IndexOf('Engine™'); // Определяем индекс требуемого компонента

    //Если он (требуемый компонент) "не чеканутый", то:
    if not WizardForm.ComponentsList.Checked[RequireIndex] then
    begin
      MsgBox('Engine™ engine will enabled: Require for Application™.', mbInformation, 1);// Сообщение для пользователя об этом
      WizardForm.ComponentsList.CheckItem(RequireIndex, coCheck); // Включаем компонент
    end;
  end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpSelectComponents then
    WizardForm.ComponentsList.OnClickCheck := @ComponentsClickCheck; //Подменяем обработчик на свой
end;



Может кому-то пригодится...

Habetdin 11-12-2009 16:27 1292649

МИШАНЧИК, пример:
Код:

function InitializeSetup(): Boolean;
begin
  RegDeleteKeyIncludingSubkeys(HKLM, 'Software\My Program\Cache');
  Result:= True;
end;

P.S.: пишите в PM, если нужен скрипт USB Safely Remove

zl0ybot 11-12-2009 17:31 1292711

Кто может помочь с этим кодом Кнопки внизу были , было прозрачно а не бело ;)
читать дальше »
[Setup]
AppName=Status Panel
AppVerName=Status Panel
DefaultDirName={pf}\Test
DefaultGroupName=Status Panel
WizardImageFile=compiler:WizModernImage-IS.bmp
OutputDir=userdocs:.
OutputBaseFilename=status_panel
DisableReadyPage=True
[Files]
; Test
Source: "{sys}\*.dll"; DestDir: "{app}"; Flags: ignoreversion external deleteafterinstall;
[Icons]
Name: "{group}\Удалить StatusPanel"; Filename: "{uninstallexe}";
[code]
function GetSystemMetrics(nIndex:Integer):Integer;
external 'GetSystemMetrics@user32.dll stdcall';
var
Welcome, Edit1, Edit2, Ready1, Ready2,
Setup1, Setup2, Finish1, Finish2: TLabel;
procedure InitializeWizard();
begin
WizardForm.ClientWidth := ScaleX(750);
WizardForm.ClientHeight := ScaleY(500);
WizardForm.Bevel.Hide;
WizardForm.Bevel1.Hide;
WizardForm.MainPanel.Hide;
WizardForm.WizardBitmapImage.Left := ScaleX(0);
WizardForm.WizardBitmapImage.Top := ScaleY(0);
WizardForm.WizardBitmapImage.Width := WizardForm.Width;
WizardForm.WizardBitmapImage.Height := WizardForm.Height;
WizardForm.WizardBitmapImage.Parent := WizardForm;
WizardForm.WizardBitmapImage2.Hide;
Welcome := TLabel.Create(WizardForm);
Welcome.Top := ScaleY(45);
Welcome.Caption := 'Приветствие';
Welcome.Transparent := True;
Welcome.Parent := WizardForm;
Edit1 := TLabel.Create(WizardForm);
Edit1.Left := WizardForm.ClientWidth / 5;
Edit1.Top := ScaleY(45);
Edit1.Width := WizardForm.ClientWidth / 5;
Edit1.AutoSize := False;
Edit1.Caption := '|';
Edit1.Transparent := True;
Edit1.Parent := WizardForm;
Edit2 := TLabel.Create(WizardForm);
Edit2.Top := ScaleY(45);
Edit2.Caption:= 'Параметры';
Edit2.Transparent := True;
Edit2.Parent := WizardForm;
Ready1 := TLabel.Create(WizardForm);
Ready1.Left := Edit1.Left + Edit1.Width;
Ready1.Top := ScaleY(45);
Ready1.Width := WizardForm.ClientWidth / 5;
Ready1.AutoSize := False;
Ready1.Caption := '|';
Ready1.Transparent := True;
Ready1.Parent := WizardForm;
Ready2 := TLabel.Create(WizardForm);
Ready2.Top := ScaleY(45);
Ready2.Caption := 'Меню "Пуск"';
Ready2.Transparent := True;
Ready2.Parent := WizardForm;
Setup1 := TLabel.Create(WizardForm);
Setup1.Left := Ready1.Left + Ready1.Width;
Setup1.Top := ScaleY(45);
Setup1.Width := WizardForm.ClientWidth / 5;
Setup1.AutoSize := False;
Setup1.Caption := '|';
Setup1.Transparent := True;
Setup1.Parent := WizardForm;
Setup2 := TLabel.Create(WizardForm);
Setup2.Top := ScaleY(45);
Setup2.Caption := 'Установка';
Setup2.Transparent := True;
Setup2.Parent := WizardForm;
Finish1 := TLabel.Create(WizardForm);
Finish1.Left := Setup1.Left + Setup1.Width;
Finish1.Top := ScaleY(45);
Finish1.Width := WizardForm.ClientWidth / 5;
Finish1.AutoSize := False;
Finish1.Caption := '|';
Finish1.Transparent := True;
Finish1.Parent := WizardForm;
Finish2 := TLabel.Create(WizardForm);
Finish2.Top := ScaleY(45);
Finish2.Caption := 'Готово';
Finish2.Transparent := True;
Finish2.Parent := WizardForm;
WizardForm.BackButton.Top := WizardForm.BackButton.Top + ScaleY(110);
WizardForm.NextButton.Top := WizardForm.NextButton.Top + ScaleY(110);
WizardForm.CancelButton.Top := WizardForm.CancelButton.Top + ScaleY(110);
WizardForm.OuterNotebook.Left := WizardForm.Width / 2 - WizardForm.OuterNotebook.Width / 2;
WizardForm.OuterNotebook.Top := ScaleY(105);
WizardForm.InnerNotebook.Top := ScaleY(10);
WizardForm.Left := GetSystemMetrics(0) / 2 - WizardForm.Width / 2;
WizardForm.Top := GetSystemMetrics(1) / 2 - WizardForm.Height / 2;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
Welcome.Font.Color := clSilver;
Edit1.Font.Color := clSilver;
Edit2.Font.Color := clSilver;
Ready1.Font.Color := clSilver;
Ready2.Font.Color := clSilver;
Setup1.Font.Color := clSilver;
Setup2.Font.Color := clSilver;
Finish1.Font.Color := clSilver;
Finish2.Font.Color := clSilver;
Welcome.Left := WizardForm.ClientWidth / 5 / 2 - Welcome.Width / 2;
Edit2.Left := Edit1.Left + Edit1.Width / 2 - Edit2.Width / 2;
Ready2.Left := Ready1.Left + Ready1.Width / 2 - Ready2.Width / 2;
Setup2.Left := Setup1.Left + Setup1.Width / 2 - Setup2.Width / 2;
Finish2.Left := Finish1.Left + Finish1.Width / 2 - Finish2.Width / 2;
if CurPageID = wpWelcome then
begin
Welcome.Font.Color := clWhite;
Edit1.Font.Color := clWhite;
end;
if CurPageID = wpSelectDir then
begin
Edit1.Font.Color := clWhite;
Edit2.Font.Color := clWhite;
Ready1.Font.Color := clWhite;
end;
if CurPageID = wpSelectProgramGroup then
begin
Ready1.Font.Color := clWhite;
Ready2.Font.Color := clWhite;
Setup1.Font.Color := clWhite;
WizardForm.NextButton.Caption := 'Установить';
end;
if CurPageID = wpInstalling then
begin
Setup1.Font.Color := clWhite;
Setup2.Font.Color := clWhite;
Finish1.Font.Color := clWhite;
end;
if CurPageID = wpFinished then
begin
Finish1.Font.Color := clWhite;
Finish2.Font.Color := clWhite;
end;
end;

МИШАНЧИК 12-12-2009 04:20 1293122

Habetdin, спасибо!
Цитата:

Цитата Habetdin
P.S.: пишите в PM, если нужен скрипт USB Safely Remove »

Не, я уже собрал, спасибо. Это я с неро вожусь.

Serega, подскажите пожалуйста что, я неправильно делаю.
Хочу убрать последнюю страницу и на предпоследней заменить "Далее" на "Установить".
Никакого кода кроме указанного ниже нет.
читать дальше »

[Setup]
DisableReadyPage=yes
[_Code]
procedure CurPageChanged(CurPageID: Integer);
begin
CurPageChanged(CurPageID);
if CurPageID = wpSelectTasks then // удаляет последнюю страницу
WizardForm.NextButton.Caption:= 'Установить'; // меняет кнопку "Далее" на предпоследней странице на "Установить"
CurPageChanged(CurPageID);
end;

Цитата:

Цитата МИШАНЧИК
Serega, подскажите пожалуйста что, я неправильно делаю »

P.S.Разобрался.

МИШАНЧИК 12-12-2009 13:10 1293277

Serega, подскажите пожалуйста!
Цитата:

Цитата Serega
Хочу привлечь внимание всех!!!
В расширенной версии от Restools сделали возможность редактирования форм, т.е. вы можете изменить страницу инсталлятора по своему усмотрению... »

Редактирую(растягиваю картинку) на вкладке WizardFormDesigner, получается изображение как-бы на всю страницу , в скрипт дописывается код автоматом, а при компиляции ничего не меняется(как по умолчанию).
Почему?

Serega 12-12-2009 13:32 1293287

Цитата:

Цитата МИШАНЧИК
Почему? »

Добавьте название процедуры созданной автоматом в procedure InitializeWizard();
Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
{ RedesignWizardFormBegin } // Don't remove this line!
// Don't modify this section. It is generated automatically.
var
  NewButton1: TNewButton;

procedure RedesignWizardForm;
begin
  { NewButton1 }
  NewButton1 := TNewButton.Create(WizardForm);
  with NewButton1 do
  begin
    Parent := WizardForm.WelcomePage;
    Left := ScaleX(288);
    Top := ScaleY(200);
    Width := ScaleX(75);
    Height := ScaleY(25);
    Caption := 'NewButton1';
    TabOrder := 2;
  end;

{ ReservationBegin }
  // This part is for you. Add your specialized code here.

{ ReservationEnd }
end;
// Don't modify this section. It is generated automatically.
{ RedesignWizardFormEnd } // Don't remove this line!

procedure InitializeWizard();
begin
  RedesignWizardForm;
end;


Serega 12-12-2009 14:09 1293322

Цитата:

Цитата YURSHAT
как правильно перечислить страницы »

Если не хочется перечислять все страницы последовательно, т.е.:
Код:

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpSelectDir then
  WizardForm.WelcomeLabel1.Parent:= WizardForm.SelectDirPage;
  if CurPageID = wpSelectProgramGroup then
  WizardForm.WelcomeLabel1.Parent:= WizardForm.SelectDirPage;
end;

то всё равно нужно написать функцию, которая будет возвращать название страниц:
Пример
Код:

function DetectPage(CurPageID: Integer): TNewNotebookPage;
begin
  case CurPageID of
    wpWelcome: Result:= WizardForm.WelcomePage;
    wpLicense: Result:= WizardForm.LicensePage;
    wpPassword: Result:= WizardForm.PasswordPage;
    wpInfoBefore: Result:= WizardForm.InfoBeforePage;
    wpUserInfo: Result:= WizardForm.UserInfoPage;
    wpSelectDir: Result:= WizardForm.SelectDirPage;
    wpSelectComponents: Result:= WizardForm.SelectComponentsPage;
    wpSelectProgramGroup: Result:= WizardForm.SelectProgramGroupPage;
    wpSelectTasks: Result:= WizardForm.SelectTasksPage;
    wpReady: Result:= WizardForm.ReadyPage;
    wpPreparing: Result:= WizardForm.PreparingPage;
    wpInstalling: Result:= WizardForm.InstallingPage;
    wpInfoAfter: Result:= WizardForm.InfoAfterPage;
    wpFinished: Result:= WizardForm.FinishedPage;
  end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if (CurPageID = wpSelectDir) or (CurPageID = wpSelectProgramGroup) then
  WizardForm.WelcomeLabel1.Parent:= DetectPage(CurPageID);
end;


Serega 12-12-2009 14:52 1293362

Цитата:

Цитата lmiol
как сделать чтобы если виста то файлы автоматом в одну папку а если хр то в другую инсталились »

Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\{code:DetectWindows}
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion

[Code]
function DetectWindows(s: string): string;
var
  SubKeyName, ResultStr: string;
begin
  SubKeyName:= 'Software\Microsoft\Windows NT\CurrentVersion';
  RegQueryStringValue(HKLM, SubKeyName, 'ProductName', ResultStr);
  if Pos('XP', ResultStr) > 0 then
    Result:= 'XP'
  else
  if Pos('Vista', ResultStr) > 0 then
    Result:= 'Vista'
  else Result:= 'My Program';
end;


МИШАНЧИК 12-12-2009 15:23 1293380

Serega, скажите пожалуйста, а можно ли этим способом растянув картинку на весь инсталятор сделать чтоб текст был на картинке, а не на белом фоне?

YURSHAT 12-12-2009 16:29 1293426

Serega, огромнейшее Вам СПАСИБО за помощь!!! :up :up :up :up

Serega 12-12-2009 17:02 1293450

Цитата:

Цитата МИШАНЧИК
а можно ли этим способом растянув картинку на весь инсталятор сделать чтоб текст был на картинке, а не на белом фоне? »

Если я правильно вас понял, то вы имеете ввиду белый фон текста TNewStaticText?
Если да, то вам придётся прятать все стандартные TNewStaticText, а заместо них создавать TLabel, со свойством Transparent:= True;

Lancer2404 12-12-2009 19:46 1293562

Serega если можно,примерный код выложите если не сложно.
И у меня такой вопрос.Имею код для создание бекапа.Но бекапит только то что в корне.А че дописать чтобы и в подпапках бекапил.


[Tasks]
Name: arc; Description: "Сделать резервную копию файлов"

читать дальше »


[code]
var
Page: TInputDirWizardPage;
ArcDir: String;

procedure CreateBackup();
var
SrcFile, DestFile: string;
begin
if IsTaskSelected('arc') then
begin

ForceDirectories(ArcDir);
SrcFile:= AddBackslash(ExpandConstant('{app}')) + ExtractFileName(CurrentFileName);
DestFile:= AddBackslash(ArcDir) + ExtractFileName(CurrentFileName);
FileCopy(SrcFile, DestFile, False);
end;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
If (CurPageID = Page.ID) then
ArcDir := Page.Values[0];
Result:= True;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
If (PageID = Page.ID) and
(Not IsTaskSelected('arc')) then
Result:= True
else Result:= False;
end;

procedure InitializeWizard();
begin
Page:= CreateInputDirPage(wpSelectTasks, 'Выберите папку бэкапа.',
'Куда вы засуните файлы бэкапа.Оттуда вы сможете восстановить свои файлы',
'Для продолжения нажмите далее.' + #10#13#10#13 +
'Если хотите выбрать другую папку щелкните Обзор.',
False, 'Backup');
Page.Add('');
Page.Values[0] := ExpandConstant('{sd}\GTAIV\Backup');

end;


Serega 12-12-2009 20:48 1293612

Цитата:

Цитата Lancer2404
Имею код для создание бекапа.Но бекапит только то что в корне.А че дописать чтобы и в подпапках бекапил. »

Чтоб не изобретать велосипед, в Справка, руководство, примеры есть Коллекция скриптов, в архиве есть скрипт SHFileOperation.iss, где реализована работа с директориями и файлами.
Просто добавляете в самое начало вашего скрипта #include "путь до скрипта\SHFileOperation.iss" и затем используете функцию из этого скрипта.
Пример
Код:

#include "здесь укажите путь до скрипта..\SHFileOperation.iss"

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Tasks]
Name: arc; Description: "Сделать резервную копию файлов"

[Code]
var
  Page: TInputDirWizardPage;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  Result:= (PageID = Page.ID) and not IsTaskSelected('arc');
end;

procedure InitializeWizard();
begin
  Page:= CreateInputDirPage(wpSelectTasks, 'Выберите папку бэкапа.',
        'Куда вы засуните файлы бэкапа.Оттуда вы сможете восстановить свои файлы',
        'Для продолжения нажмите далее.' + #10#13#10#13 +
        'Если хотите выбрать другую папку щелкните Обзор.',
        False, 'Backup');
  Page.Add('');
  Page.Values[0]:= ExpandConstant('{sd}\GTAIV\Backup');
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if (CurStep = ssPreInstall) and IsTaskSelected('arc') then
    CopyDir(ExpandConstant('{app}'), Page.Values[0]);
end;


mosre 12-12-2009 20:59 1293615

Добрый вечер..
Каким цветом нужно подменять кликабельное лого, для чёрного фона..
Во всех примерных скриптах создания сего идёт "фуксия", а какой нужен именно для чёрного..

YURSHAT 12-12-2009 21:06 1293619

Цитата:

Цитата mosre
Каким цветом нужно подменять кликабельное лого, для чёрного фона..
Во всех примерных скриптах создания сего идёт "фуксия", а какой нужен именно для чёрного.. »

Да цвет там не важен. Просто рисуете логотип на черном фоне и он сливается с черным цветом инсталла.

mosre 12-12-2009 21:14 1293624

Лого на чёрном фоне.. Просто картинка отображается как надо..
Такого чуда неполучается добиться используя вот этот код..

читать дальше »
var
LogoImage:TBitmapImage;
LogoLabel: TLabel;

procedure LogoOnClick(Sender: TObject);
var ReturnCode: Integer;
begin
ShellExec('open', 'http://......', '', '', SW_SHOWNORMAL, ewNoWait, ReturnCode)
end;

procedure InitializeWizard();
var
LogoPanel : TPanel;
begin
ExtractTemporaryFile('1.bmp');
LogoPanel := TPanel.Create(WizardForm);
with LogoPanel do
begin
Parent := WizardForm;
Left := ScaleX(5);
Top := ScaleY(320);
Width := ScaleX(165);
Height := ScaleY(35);
BevelOuter := bvNone;
end;

LogoImage := TBitmapImage.Create(WizardForm);
with LogoImage do
begin
Parent := LogoPanel;
Left := ScaleX(0);
Top := ScaleY(0);
AutoSize:=true;
ReplaceColor:=clFuchsia;
ReplaceWithColor:=clBtnFace;
Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
end;

LogoLabel := TLabel.Create(WizardForm);
with LogoLabel do
begin
Parent := LogoPanel;
Width := LogoPanel.Width;
Height := LogoPanel.Height;
Transparent:=True;
Cursor := crHand;
OnClick:=@LogoOnClick;
end;
end;

Получается только вот что..

YURSHAT 12-12-2009 21:32 1293642

Цитата:

Цитата mosre
Такого чуда неполучается добиться используя вот этот код.. »

В коде все правильно. Покажите весь скрипт

Lancer2404 12-12-2009 21:32 1293643

Цитата:

Цитата Serega
Цитата Lancer2404:
Имею код для создание бекапа.Но бекапит только то что в корне.А че дописать чтобы и в подпапках бекапил. »
Чтоб не изобретать велосипед, в Справка, руководство, примеры есть Коллекция скриптов, в архиве есть скрипт SHFileOperation.iss, где реализована работа с директориями и файлами.
Просто добавляете в самое начало вашего скрипта #include "путь до скрипта\SHFileOperation.iss" и затем используете функцию из этого скрипта.
Пример
Код:
#include "здесь укажите путь до скрипта..\SHFileOperation.iss"
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes
[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
[Tasks]
Name: arc; Description: "Сделать резервную копию файлов"
[code]
var
Page: TInputDirWizardPage;
function ShouldSkipPage(PageID: Integer): Boolean;
begin
Result:= (PageID = Page.ID) and not IsTaskSelected('arc');
end;
procedure InitializeWizard();
begin
Page:= CreateInputDirPage(wpSelectTasks, 'Выберите папку бэкапа.',
'Куда вы засуните файлы бэкапа.Оттуда вы сможете восстановить свои файлы',
'Для продолжения нажмите далее.' + #10#13#10#13 +
'Если хотите выбрать другую папку щелкните Обзор.',
False, 'Backup');
Page.Add('');
Page.Values[0]:= ExpandConstant('{sd}\GTAIV\Backup');
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if (CurStep = ssPreInstall) and IsTaskSelected('arc') then
CopyDir(ExpandConstant('{app}'), Page.Values[0]);
end;
------- »


А к файлам надо добавлять BEforeinstall:Createbackup.Или что?А то так не действует

Serega 12-12-2009 22:56 1293705

Цитата:

Цитата Lancer2404
А к файлам надо добавлять BEforeinstall:Createbackup.Или что? »

Данный скрипт копирует, перед началом установки всю папку {app}, вместе со всеми файлами и подпапками:
Код:

  if (CurStep = ssPreInstall) and IsTaskSelected('arc') then
    CopyDir(ExpandConstant('{app}'), Page.Values[0]);

если нужно просто копировать файлы, допустим по маске, то замените CopyDir(ExpandConstant('{app}'), Page.Values[0]);, на
CopyFiles(ExpandConstant('{app}'), Page.Values[0], '*.dll'); - в данном случае будут скопированы все файлы имеющие расширение *.dll

Lancer2404 12-12-2009 23:11 1293719

А если мне надо сделать только копии заменяемых файлов?

Serega 13-12-2009 00:16 1293782

Цитата:

Цитата Lancer2404
А если мне надо сделать только копии заменяемых файлов? »

Вы честное слово, как в одном очень известном фильме... А у вас нет точно такого же, но с сиреневыми пуговицами...
Какой вопрос поставили, такой ответ и получили.
Как вы решили автоматически определить заменяемые файлы? Нужен какой-то список файлов в вашем инсталляторе, затем он сверяется с наличием с именами файлов в каталоге и если имена совпадают, то копирует их. Или все имена прописывать в ручную, т.е. if FileExists(FileName) then копируем...

YURSHAT 13-12-2009 00:58 1293804

Serega, еще раз спасибо! Вы как всегда на высоте!
Цитата:

Цитата Serega
А у вас нет точно такого же, но с сиреневыми пуговицами... »

:laugh:

МИШАНЧИК 13-12-2009 06:20 1293910

Serega, подскажите пожалуйста!
Есть:
Код:

[Components]
Name: a; Description: Nero™ Reloaded 9.4.2.6; Types: full
Name: a\a; Description: Nero Burning ROM+Nero Express; Types: Full custom; Flags: fixed; ExtraDiskSpaceRequired: 573571408
Name: a\b; Description: Microsoft Visual C++ 2005 SP1; Types: Full custom; Flags: fixed; ExtraDiskSpaceRequired: 3146066
Name: a\c; Description: Nero Vision; Types: full custom; ExtraDiskSpaceRequired: 445644728
Name: a\d; Description: Nero WaveEditor; Types: full custom; ExtraDiskSpaceRequired: 157286001
Name: a\e; Description: Nero CoverDesigner; Types: full custom; ExtraDiskSpaceRequired: 99614249
Name: a\e\a; Description: LightScribe; Types: full custom; ExtraDiskSpaceRequired: 31457413; Flags: dontinheritcheck
Name: a\f; Description: Утилиты; Types: full custom
Name: a\f\a; Description: Nero BurnRights; Types: full custom; ExtraDiskSpaceRequired: 7340104
Name: a\f\b; Description: Nero DiscSpeed; Types: full custom; ExtraDiskSpaceRequired: 7340104
Name: a\f\c; Description: Nero DriveSpeed; Types: full custom; ExtraDiskSpaceRequired: 7340104
Name: a\f\d; Description: Nero InfoTool; Types: full custom; ExtraDiskSpaceRequired: 9437112

Можно ли как-то сделать:
1. Когда снимаешь галку с Name: a\e\a, она автоматом не снималась с Name: a\e?
2. Когда ставишь на Name: a\e, она автоматом не ставилась на Name: a\e\a?

Serega 13-12-2009 06:46 1293918

Цитата:

Цитата МИШАНЧИК
Можно ли как-то сделать »

Добавьте к компоненту a\e, флаг checkablealone, т.е.:
Код:

Name: a\e; Description: Nero CoverDesigner; Types: full custom; ExtraDiskSpaceRequired: 99614249; Flags: checkablealone

МИШАНЧИК 13-12-2009 08:19 1293928

Serega, добавил, ничего не изменилось.
Если я снимаю галку с a\e\a, то она автоматом снимается и с a\e и поставить отдельно на a\e нельзя, получается нужно ставить на a\e\a и тогда она автоматом ставиться на a\e. А так было и до
Цитата:

Цитата Serega
флаг checkablealone »

.
Может как-то ещё?

Serega 13-12-2009 18:33 1294367

Цитата:

Цитата МИШАНЧИК
Если я снимаю галку с a\e\a, то она автоматом снимается и с a\e и поставить отдельно на a\e нельзя »

Неправда, именно это работает...
Цитата:

Цитата МИШАНЧИК
получается нужно ставить на a\e\a и тогда она автоматом ставиться на a\e. А так было и до »

Всегда при выборе дочернего компонента, автоматом выбирается родительский, т.к. смысл установки дочернего теряется...

Lancer2404 13-12-2009 20:07 1294426

Цитата:

Цитата Serega
Цитата Lancer2404:
А если мне надо сделать только копии заменяемых файлов? »
Вы честное слово, как в одном очень известном фильме... А у вас нет точно такого же, но с сиреневыми пуговицами...
Какой вопрос поставили, такой ответ и получили.
Как вы решили автоматически определить заменяемые файлы? Нужен какой-то список файлов в вашем инсталляторе, затем он сверяется с наличием с именами файлов в каталоге и если имена совпадают, то копирует их. Или все имена прописывать в ручную, т.е. if FileExists(FileName) then копируем...
------- »


Но в этом коде меня все устраивает.Вот эти сточки как раз и отвечают за бекап файлов которые копируются.
Код:

ForceDirectories(ArcDir);
SrcFile:= AddBackslash(ExpandConstant('{app}\data')) + ExtractFileName(CurrentFileName);

DestFile:= AddBackslash(ArcDir) + ExtractFileName(CurrentFileName);
FileCopy(SrcFile, DestFile, False);

Но в данный момент он делает бекап только файлоа которые копируются в папку data.Как добавить путь для других папок
Пробовал
SrcFile:= AddBackslash(ExpandConstant('{app}\data')) + ExtractFileName(CurrentFileName)+
AddBackslash(ExpandConstant('{app}\data\theme')) + ExtractFileName(CurrentFileName);

непомогло

Winstan 13-12-2009 20:14 1294434

Serega,
Подскажи как можно переписать по новый пб на стр. удаления?
Полностью ее переделал осталось пб сделать и все.
И еще вопрос можно ли добавить еще 2 стр. которые буду отвечать за запрос о удаление и за сообщение о том что удалены фалы?

ADremLIN 13-12-2009 23:32 1294606

Программа состоит из набора компонентов. Требуется удалять или добавлять выбранные компоненты уже после инсталляции.

То есть я пытаюсь прикрутить UninsHs для Modify/Repair/Remove, но он нифига, как оказалось не делает, кроме добавления своего окна...

Попытка отменить выбор раннее установленных компонентов вызывает это сообщение:



Такое же окно получаю и при повторном запуске инсталлятора :(

Здесь, в закрытом обсуждении, нашел вот это (практически мой случай):
http://forum.oszone.net/showpost.php?p=1169563
http://forum.oszone.net/showpost.php?p=1169728

Вопрос есть ли движение в этом направлении? Если все по-прежнему "глухо", то хотя бы намекните как:
Цитата:

написать руками функцию которая будет смотреть чекнута ли компонента и удалять все ее файлы
а то у меня уже голова кругом идет...

Спасибо.

Serega 13-12-2009 23:59 1294624

Цитата:

Цитата Lancer2404
Как добавить путь для других папок »

Если вас не устраивает предложенный вариант с CopyDir, то посмотрите в Коллекции скриптов, ссылка есть в шапке темы, там есть несколько скриптов с поиском и копированием файлов...

Цитата:

Цитата ADremLIN
Требуется удалять или добавлять выбранные компоненты уже после инсталляции. »

В любом случае все файлы и папки придётся прописывать руками, т.е. после установки, на финишной странице производите проверку выбранных компонентов и в соответствии с выбором производите манипуляции с файлами...
Цитата:

Цитата ADremLIN
Попытка отменить выбор раннее установленных компонентов вызывает это сообщение »

Чтоб избежать этого сообщения, добавьте к каждому компоненту флаг disablenouninstallwarning

ADremLIN 14-12-2009 00:23 1294641

Цитата:

Цитата Serega
В любом случае все файлы и папки придётся прописывать руками, т.е. после установки, на финишной странице производите проверку выбранных компонентов и в соответствии с выбором производите манипуляции с файлами...

Понятно. Все придется делать руками... :(

Спасибо за советы. Буду попробовать.

Serega 14-12-2009 00:35 1294658

Цитата:

Цитата Winstan
Полностью ее переделал осталось пб сделать и все. »

А чем вам стандартный не нравиться?
Цитата:

Цитата Winstan
можно ли добавить еще 2 стр. которые буду отвечать за »

Придётся писать всё руками... MyForm: TUninstallProgressForm; и т.д и т.п.
Цитата:

Цитата Winstan
запрос о удаление и за сообщение о том что удалены фалы? »

Я думаю, в таком случае проще реализовать простые сообщения, т.е. при нахождении папки или файлов, с предложением удалить и если пользователь выбрал Да - то удалять. В конце деинсталляции выдовать сообщение об удачном удалении папки...

МИШАНЧИК 14-12-2009 08:34 1294762

Serega,
Цитата:

Цитата Serega
Неправда, именно это работает... »

У меня и в мыслях не было Вас обманывать. Но у меня не работает. Или можно сказать, что работает неполностью. Дело в том, что если я снимаю чекбокс с a\e\a, то пропадает изображение чекбокса и в a\e, но общий размер в а отображается как при снятом одном чекбоксе a\e\a. Если я после этого снимаю пустой(но, якобы стоящий там) чекбокс a\e, то общий размер а ещё уменьшается.
Я приложил скриншоты и скрипт, чтоб Вы не думали будто я Вас обманываю.
И подскажите пожалуйста почему у меня может быть такая картина и как её исправить.

Winstan 14-12-2009 08:50 1294769

Цитата:

Цитата Serega
А чем вам стандартный не нравиться? »

Он то мне нравиться но изображение перекрывает все, точнее я все отключил, а то получается то что весит белое окно.
Цитата:

Цитата Serega
Придётся писать всё руками... MyForm: TUninstallProgressForm; и т.д и т.п. »

Попробую написать.
Цитата:

Цитата Serega
Я думаю, в таком случае проще реализовать простые сообщения, т.е. при нахождении папки или файлов, с предложением удалить и если пользователь выбрал Да - то удалять. В конце деинсталляции выдовать сообщение об удачном удалении папки... »

Они сейчас появляются, спрашивают удалить или нет и о том что уже удалил файлы.

И еше подскажи процедуру на окошко выбора языков инстала?

Dark Engel 14-12-2009 09:40 1294789

Цитата:

Цитата Serega
Цитата Dark Engel:
Где ключ это признак установленности программы, а значение это версия. »
Пример »

Гм. Что то данный пример не отрабатывает. установка проходит молча без каких либо вопросов. Ключ в реестре создавал.

1. Какого типа должен быть ключ в реестре? (Dword, REG_SZ итд )
2. Можно ли добавить создание ключа в случае его отсутствия (Первая установка программы).

Serega 14-12-2009 19:27 1295210

Цитата:

Цитата МИШАНЧИК
Дело в том, что если я снимаю чекбокс с a\e\a, то пропадает изображение чекбокса и в a\e, но общий размер в а отображается как при снятом одном чекбоксе a\e\a. Если я после этого снимаю пустой(но, якобы стоящий там) чекбокс a\e, то общий размер а ещё уменьшается. »

Я понял, что вы имеете ввиду, просто у чебоксов имеющих дочерние элементы, существует три состояния (Unchecked, Checked, Grayed) и на скриншотах, которые вы показали (2.jpg), при снятом дочернем элементе, состояние a\e = Grayed, т.е. квадрат закрашен. Присмотритесь к компоненту a, у него тоже состояние Grayed.

Serega 14-12-2009 20:11 1295234

Цитата:

Цитата Winstan
процедуру на окошко выбора языков инстала? »

Не знаю, покрайней мере я такой не нашёл, т.е. даже попытался осуществить поиск через FindWindowByWindowName в function InitializeSetup, но диалог с выбором языка отрабатывает до того, как задействуется function InitializeSetup...
От сюда, два выхода, самый простой через редактор ресурсов, второй пишите инсталлятор пустышку, который будет запускать ваш инсталлятор и осуществлять поиск диалогового окна, а затем уже производить манипуляции с диалоговым окном через SendMessage.

Цитата:

Цитата Dark Engel
Что то данный пример не отрабатывает. установка проходит молча без каких либо вопросов. Ключ в реестре создавал »

Прежде всего, я был удивлён когда вы просили осуществить поиск таким образом:
Код:

HKLM\Software\UIT\FAP\
                    \proga1 (Reg_Dword) 1
                    \proga2 (Reg_Dword) 15
                    \proga3 (Reg_Dword) 3

т.е. поиск ключа производится:
HKEY_LOCAL_MACHINE\SOFTWARE\UIT\FAP\proga 1
где proga - название программы, а 1 - это версия.
В скрипте же это написано...

P.S.
Я кажется понял, вы наверно заносите:
Код:

[HKEY_LOCAL_MACHINE\SOFTWARE\UIT\FAP]
"proga1"=dword:00000001
"proga2"=dword:00000015
"proga3"=dword:00000003

но это совершенно отличается от того, что вы просили.

Dark Engel 15-12-2009 08:07 1295558

Цитата:

Цитата Serega
Цитата Dark Engel:
Что то данный пример не отрабатывает. установка проходит молча без каких либо вопросов. Ключ в реестре создавал »
Прежде всего, я был удивлён когда вы просили осуществить поиск таким образом:
Код:
HKLM\Software\UIT\FAP\
\proga1 (Reg_Dword) 1
\proga2 (Reg_Dword) 15
\proga3 (Reg_Dword) 3т.е. поиск ключа производится:
HKEY_LOCAL_MACHINE\SOFTWARE\UIT\FAP\proga 1
где proga - название программы, а 1 - это версия.
В скрипте же это написано...
P.S.
Я кажется понял, вы наверно заносите:
Код:
[HKEY_LOCAL_MACHINE\SOFTWARE\UIT\FAP]
"proga1"=dword:00000001
"proga2"=dword:00000015
"proga3"=dword:00000003но это совершенно отличается от того, что вы просили. »

Вы правы. Я неправильно поставил задачу. Если вас не затруднит, подскажите пожалуйста как все таки реализовать мой вопрос.

R.i.m.s.k.y. 15-12-2009 08:56 1295575

Доброе время суток!

Есть самописный скриптик для определения конфигурации компа и применения трех разных reg-файликов.

читать дальше »

[Setup]
AppName=test
AppVerName=test
AppPublisher=test
AppPublisherURL=test
AppSupportURL=test
AppUpdatesURL=test
CreateAppDir=no
OutputBaseFilename=test
Compression=lzma
SolidCompression=yes

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

[Files]
Source: RimPack\Program Files\RimPack\FFDShow\*.reg; DestDir: {tmp}; Flags: ignoreversion uninsrestartdelete setntfscompression
Source: RimPack\Program Files\RimPack\FFDShow\gnu_license.txt; DestDir: {tmp}; AfterInstall: FFD; Flags: ignoreversion uninsrestartdelete setntfscompression

[code]
function GetSystemMetrics(nIndex: Integer): Integer;
external 'GetSystemMetrics@user32.dll stdcall';

const
NeedMHz0 = 2590;
NeedMHz1 = 1090;

Procedure FFD();

var
resffd, MHz : integer;
hz : Cardinal;
Keys: TArrayOfString;
regffd, reg0ffd, RegEditffd: string;

begin

RegEditffd:= ExpandConstant('{sys}\reg.exe'); reg0ffd:= ExpandConstant('{tmp}\');
regffd := reg0ffd + 'ffdshow.reg';
Exec(RegEditffd, ' import ' + AddQuotes(regffd),ExpandConstant('{sys}'),SW_HIDE, ewNoWait, resffd);

RegGetSubkeyNames(HKLM, 'Hardware\Description\System\CentralProcessor', Keys); // Количество ядер
RegQueryDWordValue(HKLM, 'Hardware\Description\System\CentralProcessor\0', '~MHz', hz);

If (GetArrayLength(Keys) >= 2) and (Hz > NeedMHz0) then
begin MsgBox('Max', mbInformation, mb_Ok);
regffd := reg0ffd + 'ffdshow0.reg';
Exec(RegEditffd, ' import ' + AddQuotes(regffd),ExpandConstant('{sys}'),SW_HIDE,ewNoWait,resffd);
end;

If (GetArrayLength(Keys) >= 2) and (Hz > NeedMHz1) and (Hz < NeedMHz0) then
begin MsgBox('Middle', mbInformation, mb_Ok);
regffd := reg0ffd + 'ffdshow1.reg';
Exec(RegEditffd, ' import ' + AddQuotes(regffd),ExpandConstant('{sys}'),SW_HIDE,ewNoWait,resffd);
end;

If (GetArrayLength(Keys) < 2) and (hz <= NeedMHz1) then
begin MsgBox('Low', mbInformation, mb_Ok);
regffd := reg0ffd + 'ffdshow2.reg';
Exec(RegEditffd, ' import ' + AddQuotes(regffd),ExpandConstant('{sys}'),SW_HIDE,ewNoWait,resffd);
end;

RegWriteDWordValue(HKEY_CURRENT_USER, 'Software\GNU\ffdshow\default', 'resizeDx', GetSystemMetrics(0));

end;

end.


Этот код работает если только его вынести в отдельный скрипт, но в нужном скрипте - работает, но странно: reg-файлы или не применяются, или ffdshow.reg (250Кб) заносится в реестр не полностью!
Как будто не успевает процедура FFD отработать.

Вижу два варианта решения - или как-то увеличить время выполнения или в секции Code только узнать конфигурацию железа, а в секции Run сделать reg import в зависимости от конфигурации.

Собственно вопросы - как увеличить время выполнения кода и как передать переменные из секции Code в секцию Run.

Заранее спасибо!

Tharnum 15-12-2009 11:21 1295678

Добрый день!

Я столкнулся с интересной проблемой Inno Setup. Мне необходимо изменить окно UNinstaller-а (UninstallProgressForm), чтобы пользователь имел возможность указать причину, по которой он удаляет мое приложение. Убрать существующие контролы и вставить свои - это ерунда. Вопрос вот в чем: как сделать, чтобы после завершения деинсталляции окно анинсталлера не закрывалось и пользователь мог, закончив описание причины, кнопочкой, скажем, "Finish" его закрыть самостоятельно, тем замым завершив процесс деинсталляции?

PS: Да, и небольшой вопрос другого характера: никто не сталкивался с проблемами использования CustomMessages в анинсталлере под Windows 7 (у меня x64 Ultimate)? У меня на этапе компиляции скрипта вылетает окошко с сообщением о том, что имя константы неверно...

Заранее спасибо за ответы!

SinRoma 15-12-2009 12:20 1295723

Взял код из примера по созданию дополнительной папки для пользовательских данных.
Нужна дополнительная, следующая страница подобная созданой.
Подскажите как перейти?

читать дальше »

Код:

//Определяем дополнительную страницу для Project (с кнопкой «Обзор…»)
var
  ProjectDirPage: TInputDirWizardPage;

procedure InitializeWizardCWP();
begin
//Создание дополнительной страницы после указанной wpSelectProgramGroup
  ProjectDirPage := CreateInputDirPage(wpSelectProgramGroup,
    'Выбор папки с проектами', 'В какой папке будут находиться проекты программы?',
    'Пожалуйста, укажите папку, в которой будут сохранены проекты программы.'#13#13'Путь к папке с проектами может быть изменен в "ххх">"ххх".',
    False, '');
  ProjectDirPage.Add('');
  ProjectDirPage.Values[0] := GetPreviousData('ProjectDir', '');
end;

function NextButtonClick(CurPage: Integer): Boolean;
begin
 if ProjectDirPage.Values[0] = ''
  then
//  Указываем путь папки с проектами по умолчанию
    ProjectDirPage.Values[0] := (ExpandConstant('{sd}')+'\Projects');
  Result := True;
end;

function GetProjectDir(Param: String): String;
begin
  Result := ProjectDirPage.Values[0];
end;


//  ------- Где то здесь начинается беда...

//Определяем дополнительную страницу для VST (с кнопкой «Обзор…»)
var
  VSTDirPage: TInputDirWizardPage;

procedure InitializeWizardVST();
begin
//Создание дополнительной страницы после указанной wpSelectProgramGroup
  VSTDirPage := CreateInputDirPage(wpSelectProgramGroup,
//                                  ^^^^^ тут указать предыдущую страницу? как?
    'Выбор папки с VST Plugins', 'В какой папке будут находиться VST Plugins?',
    'Пожалуйста, укажите папку, в которую будут VST Plugins.'#13#13'Путь к папке с VST Plugins может быть изменен в "ххх">"ххх".',
    False, '');
  VSTDirPage.Add('');
  VSTDirPage.Values[0] := GetPreviousData('VSTDir', '');
end;

function NextButtonClick2(CurPage: Integer): Boolean;
begin
 if VSTDirPage.Values[0] = ''
  then
//  Указываем путь к папке VST Plugins
    VSTDirPage.Values[0] := (ExpandConstant('{pf}')+'\VSTPlugins');
  Result := True;
end;

function GetVSTDir(Param: String): String;
begin
  Result := VSTDirPage.Values[0];
end;

// ***************************************************************************************************************************************

//Это страница, в которой отображаются выбранные параметры установки
//Чтобы в нее прописать указанный путь установки папки с проектами, пишем следующую функцию
//По необходимости указываем дополнительные параметры установки (компоненты и т.п.)

function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;
var
  S: String;
begin
  S := S + MemoDirInfo;
  S := S + NewLine + NewLine;
  S := S + 'Папка с проектами:' + NewLine + Space;
  S := S + ProjectDirPage.Values[0];
  S := S + 'VST Plugins:' + NewLine + Space;
  S := S + ProjectDirPage.Values[0];
  Result := S;
end;



Если оставить как есть компилируется, но при запуске выдаёт сообщение:

Runtime Error (at 6:57)
Could not call proc.

Молодой 15-12-2009 14:53 1295834

Доброго времени суток создал скрипт вроде бы все нормально, но одно "НО"
Ярлык который сохраняется на раб.столе запускает игру из корня папки куда собственно установлена игра,

На рисунке видно что запуск идет из корня папки, а что бы запустить игру, надо что бы ярлык ссылался на .exe файл из папки bin, как это поправить.
Вот сам скрипт
skript

[Setup]
AppId={{2FFF3EDA-EFE4-4772-9A96-202597408568}
AppName=Far Cry 2
AppVerName=Far Cry 2
AppPublisher=Repack By BaRS
DefaultDirName={pf}\Far Cry 2
DefaultGroupName=Far Cry 2
OutputDir=C:\Users\BaRS\Desktop\Install\Far Cry 2
OutputBaseFilename=setup
SetupIconFile=C:\Users\BaRS\Desktop\Install\Far Cry 2\FarCry2_2.ico
Compression=lzma/ultra64
SolidCompression=true
InternalCompressLevel=ultra64

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

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

[Files]
Source: D:\Game\Far Cry 2\bin\farcry2.exe; DestDir: {app}; Flags: ignoreversion
Source: D:\Game\Far Cry 2\manual.pdf; DestDir: {app}; Flags: ignoreversion
Source: D:\Game\Far Cry 2\ReadMe.txt; DestDir: {app}; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: {group}\Far Cry 2; Filename: {app}\farcry2.exe
Name: {commondesktop}\Far Cry 2; Filename: {app}\farcry2.exe; Tasks: desktopicon

[Run]
Filename: {app}\farcry2.exe; Description: {cm:LaunchProgram,Far Cry 2}; Flags: nowait postinstall skipifsilent
Filename: {src}\Data_Win32.exe; WorkingDir: {app}; Parameters: -x -y -s2 -d.; StatusMsg: Идет распаковка данных...; Flags: runasoriginaluser
Filename: {src}\bin.exe; WorkingDir: {app}; Parameters: -x -y -s2 -d.; StatusMsg: Идет распаковка данны...; Flags: runasoriginaluser

[Registry]
Root: HKLM; SubKey: SOFTWARE\Ubisoft\Far Cry 2; ValueType: string; ValueName: InstallDir; ValueData: D:\Game\Far Cry 2
Root: HKLM; SubKey: SOFTWARE\Ubisoft\Far Cry 2; ValueType: string; ValueName: Executable; ValueData: D:\Game\Far Cry 2\bin\FarCry2.exe
Root: HKLM; SubKey: SOFTWARE\Ubisoft\Far Cry 2; ValueType: string; ValueName: Language; ValueData: Russian
Root: HKLM; SubKey: SOFTWARE\Ubisoft\Far Cry 2; ValueType: string; ValueName: Version; ValueData: 1.03.00
Root: HKLM; SubKey: SOFTWARE\Ubisoft\Far Cry 2; ValueType: string; ValueName: SecuROM; ValueData: 1
Root: HKLM; SubKey: SOFTWARE\Ubisoft\Far Cry 2; ValueType: string; ValueName: Online; ValueData: 1
Root: HKLM; SubKey: SOFTWARE\Ubisoft\Far Cry 2\GameUpdate; ValueType: string; ValueName: execPath; ValueData: D:\Game\Far Cry 2\bin\FarCry2.exe
Root: HKLM; SubKey: SOFTWARE\Ubisoft\Far Cry 2\GameUpdate; ValueType: string; ValueName: info; ValueData: 2c66b725e7fb0697c0595397a14b0bc8
Root: HKLM; SubKey: SOFTWARE\Ubisoft\Far Cry 2\GameUpdate; ValueType: string; ValueName: installdir; ValueData: D:\Game\Far Cry 2
Root: HKLM; SubKey: SOFTWARE\Ubisoft\Far Cry 2\GameUpdate; ValueType: string; ValueName: language; ValueData: us
Root: HKLM; SubKey: SOFTWARE\Ubisoft\Prince of Persia The Sands of Time\1.00.181; ValueType: string; ValueName: Product_Path; ValueData: D:\Game\Akella Games\Ïðèíö Ïåðñèè - Ïåñêè âðåìåíè
Root: HKLM; SubKey: SOFTWARE\Ubisoft\Prince of Persia The Sands of Time\1.00.181; ValueType: string; ValueName: Product_Executable; ValueData: PrinceOfPersia.exe
Root: HKLM; SubKey: SOFTWARE\Ubisoft\Prince of Persia The Sands of Time\1.00.181; ValueType: string; ValueName: Product_Language; ValueData: 9
Root: HKLM; SubKey: SOFTWARE\Ubisoft\Prince of Persia The Sands of Time\1.00.181; ValueType: string; ValueName: Product_Release; ValueData: Retail EMEA

[code]
var
NeedSize:Integer; FreeMB, TotalMB: Cardinal; NeedSpaceLabel,FreeSpaceLabel: TLabel;

procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
FreeSpaceLabel.Caption := 'Свободное место на диске: '+ FloatToStr(round(FreeMB/1024*100)/100) + ' GB' else
FreeSpaceLabel.Caption := 'Свободное место на диске '+ IntToStr(FreeMB)+ ' MB';
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False else
WizardForm.NextButton.Enabled := True; end;

procedure GetNeedSpaceCaption;
begin
if NeedSize > 1024 then
NeedSpaceLabel.Caption := 'Требуется как минимум места на диске: '+ FloatToStr(round(NeedSize/1024*100)/100) + ' GB' else
NeedSpaceLabel.Caption := 'Требуется как минимум места на диске: '+ IntToStr(NeedSize)+ ' MB';
end;

procedure InitializeWizard();
begin
NeedSize := 3200;

WizardForm.DiskSpaceLabel.Hide;

NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(202);
Width := ScaleX(209);
Height := ScaleY(13);
end;

FreeSpaceLabel := TLabel.Create(WizardForm);
with FreeSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(220);
Width := ScaleX(209);
Height := ScaleY(13);
end;
WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then begin
GetNeedSpaceCaption;
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled:=False
end;
end;

[UninstallDelete]
Name: {app}\*.*; Type: filesandordirs




Заранее благодарен за ответ

YURSHAT 15-12-2009 15:01 1295841

Цитата:

Цитата Молодой
а что бы запустить игру, надо что бы ярлык ссылался на .exe файл из папки bin, как это поправить. »

Элементарно!

Name: {commondesktop}\Far Cry 2; Filename: {app}\bin\farcry2.exe; WorkingDir: "{app}\bin"; Tasks: desktopicon

Молодой 15-12-2009 15:15 1295856

Большое спасибо, за помошь!

Serega 15-12-2009 20:50 1296118

Цитата:

Цитата Dark Engel
как все таки реализовать мой вопрос »

Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
function DetectInstall(ProgName: string; ver: Integer): Boolean;
var
  Names: TArrayOfString;
  ResultDWord: Cardinal;
  i: Integer;
  s, msg: string;
begin
  Result:= True;
  if RegGetValueNames(HKEY_LOCAL_MACHINE, 'Software\UIT\FAP', Names) then
    begin
      for i:= 0 to GetArrayLength(Names)-1 do
        if Lowercase(ProgName) = Lowercase(Names[i]) then
          begin
            RegQueryDWordValue(HKEY_LOCAL_MACHINE, 'Software\UIT\FAP', Names[i], ResultDWord);
            if ResultDWord > ver then
              begin
                msg:= 'Установленная версия новее.';
                Result:= False;
              end
            else msg:= 'Рекомендуется обновить программу.';
            if ResultDWord = ver then
              begin
                msg:= 'Данная версия уже установлена.';
                Result:= False;
              end;
            MsgBox(msg, mbInformation, MB_OK);
            Break;
          end;
    end;
end;

function InitializeSetup(): Boolean;
begin
  // указываем название нашей программы и её версию
  Result:= DetectInstall('proga2', 16);
end;


Serega 15-12-2009 21:47 1296158

Цитата:

Цитата R.i.m.s.k.y.
Как будто не успевает процедура FFD отработать. »

Замените все ewNoWait на ewWaitUntilTerminated и будет успевать вноситься.

Цитата:

Цитата SinRoma
Подскажите как перейти? »

Должно быть так:
Подробнее
Код:

//Определяем дополнительную страницу для Project (с кнопкой «Обзор…»)
var
  ProjectDirPage: TInputDirWizardPage;
  VSTDirPage: TInputDirWizardPage;

function GetProjectDir(Param: String): String;
begin
  Result := ProjectDirPage.Values[0];
end;

function GetVSTDir(Param: String): String;
begin
  Result := VSTDirPage.Values[0];
end;

function NextButtonClick(CurPage: Integer): Boolean;
begin
  if CurPage = ProjectDirPage.ID then
    begin
      if ProjectDirPage.Values[0] = '' then // это условие никогда не выполнится
      //  Указываем путь папки с проектами по умолчанию
      ProjectDirPage.Values[0] := (ExpandConstant('{sd}')+'\Projects');
    end;
  if CurPage = VSTDirPage.ID then
    begin
      if VSTDirPage.Values[0] = '' then // это условие тоже никогда не выполнится
      //  Указываем путь к папке VST Plugins
      VSTDirPage.Values[0] := (ExpandConstant('{pf}')+'\VSTPlugins');
    end;
  Result := True;
end;

// ***************************************************************************************************************************************

//Это страница, в которой отображаются выбранные параметры установки
//Чтобы в нее прописать указанный путь установки папки с проектами, пишем следующую функцию
//По необходимости указываем дополнительные параметры установки (компоненты и т.п.)

function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;
var
  S: String;
begin
  S := S + MemoDirInfo;
  S := S + NewLine + NewLine;
  S := S + 'Папка с проектами:' + NewLine + Space;
  S := S + ProjectDirPage.Values[0];
  S := S + 'VST Plugins:' + NewLine + Space;
  S := S + ProjectDirPage.Values[0];
  Result := S;
end;

procedure InitializeWizard();
begin
  // InitializeWizardCWP
  //Создание дополнительной страницы после указанной wpSelectProgramGroup
  ProjectDirPage := CreateInputDirPage(wpSelectProgramGroup,
    'Выбор папки с проектами', 'В какой папке будут находиться проекты программы?',
    'Пожалуйста, укажите папку, в которой будут сохранены проекты программы.'#13#13'Путь к папке с проектами может быть изменен в "ххх">"ххх".',
    False, '');
  ProjectDirPage.Add('');
  ProjectDirPage.Values[0] := GetPreviousData('ProjectDir', '');

  // InitializeWizardVST
  //Создание дополнительной страницы после указанной wpSelectProgramGroup
  VSTDirPage := CreateInputDirPage(ProjectDirPage.ID,
//                                  ^^^^^ тут указать предыдущую страницу? как?
    'Выбор папки с VST Plugins', 'В какой папке будут находиться VST Plugins?',
    'Пожалуйста, укажите папку, в которую будут VST Plugins.'#13#13'Путь к папке с VST Plugins может быть изменен в "ххх">"ххх".',
    False, '');
  VSTDirPage.Add('');
  VSTDirPage.Values[0] := GetPreviousData('VSTDir', '');
end;


Winstan 15-12-2009 22:24 1296206

Serega,
Подскажи как в procedure InitializeUninstallProgressForm();
ProgressBar назвать так как он прикрыт изображением.
Если же прописывать пб таким образом как визарде то он бесполезен.

Serega 15-12-2009 22:34 1296215

Цитата:

Цитата Winstan
как в procedure InitializeUninstallProgressForm(); »

Я так полагаю, что изображение загружено на какой-то контрол, если да то:
UninstallProgressForm.ProgressBar.Parent:= ваш контрол;

R.i.m.s.k.y. 16-12-2009 09:10 1296439

Здравствуйте!

Подскажите, пожалуйста, как передать инсталлеру параметр и обработать его в секциях Code, Registry и Run, например инсталлер называется ffd, нужно передать ему параметр auto (ffd.exe /auto).

Точнее надо так, чтобы при параметре /auto инсталлер не отсвечивал лишними окнами (окно прогресса можно, догадываюсь что надо добавить /silent, но при параметре /auto в скрипте должны отрабатываться свои "ветки"), а без этого параметра инсталлер запускался как обычно - с выбором компонентов.

МИШАНЧИК 16-12-2009 12:47 1296610

Serega, подскажите пожалуйста!
Можно ли как-то задать порядок расположение ярлыков устанавливаемого приложения в Пуск-Программы?
Например:
Код:

[Icons]
1.Name: {group}\Nero Burning ROM
2.Name: {group}\Nero Express
3.Name: {group}\Nero Vision
4.Name: {group}\Nero CoverDesigner
5.Name: {group}\Nero WavEditor
6.Name: {group}\Утилиты\Nero BurnRights
7.Name: {group}\Утилиты\Nero DiscSpeed
8.Name: {group}\Утилиты\Nero DriveSpeed
9.Name: {group}\Утилиты\Nero InfoTool
10.Name: {group}\Удаление

Потому-что папка Утилиты получается последней, после удаления, а хотелось бы перед ней.

solvador 16-12-2009 15:00 1296742

МИШАНЧИК, в меню пуск файлы сортируются по алфавиту, измените название папки Удаление, чтобы сместить его вниз.

Winstan 16-12-2009 15:42 1296794

Цитата:

Цитата Serega
Я так полагаю, что изображение загружено на какой-то контрол, если да то:
UninstallProgressForm.ProgressBar.Parent:= ваш контрол; »

За это спасибо,а как можно убрать стандартное сообщение переде удаление и после?
Что бы их просто не было запустил унинстал.ехе появилась стр. с пб. удалилось и закрылось.

R.i.m.s.k.y. 16-12-2009 17:21 1296900

В дополнение к предыдущему вопросу моему
как можно в коде обработать выбор пользователя в Components?

Serega 16-12-2009 23:12 1297183

Цитата:

Цитата Winstan
как можно убрать стандартное сообщение переде удаление и после? »

Написал пример, для Restools, можно и для обычной, но там надо использовать InnoCallBack.dll...
Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
const
  BM_CLICK    = $00F5; // это обычный клик
  WM_CLOSE    = $0010; // понятно из названия

// Осуществляет поиск дочернего окна
function FindWindowEx(Parent, Child: HWND; ClassName, WindowName: PChar): HWND;
  external 'FindWindowExA@user32.dll stdcall';

var
  Timer: TTimer;
  msg: string;
  Wnd, WndEx: HWND;
  count: Integer;
 
procedure OnTimer(Sender: TObject);
begin
  Wnd:= FindWindowByWindowName(msg); // ищем сообщение
  if Wnd > 0 then // если нашли
    if count = 1 then // если первое уже находили, то
      PostMessage(Wnd, WM_CLOSE, 0, 0) // просто закрываем
    else
    begin
      WndEx:= FindWindowEx(Wnd, 0,'Button', SetupMessage(msgButtonYes)); // ищем кнопку
      if WndEx > 0 then // если нашли
        begin
          PostMessage(WndEx, BM_CLICK, 0, 0); // нажимаем кнопку
          count:= 1; // указываем что первое сообщение уже нашли
          Timer.Enabled:= False; // отключаем таймер
        end;
    end;
end;

function InitializeUninstall(): Boolean;
begin
  Result:= True;

  // задаём переменной текст окна
  msg:= SetupMessage(msgUninstallAppFullTitle);
  StringChange(msg, '%1', '{#SetupSetting('AppName')}');

  Timer:= TTimer.Create(nil);
  with Timer do
    begin
      OnTimer:= @OnTimer;
      Interval:= 1;
      Enabled:= True;
    end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usPostUninstall then Timer.Enabled:= True; // включаем таймер ещё раз
end;


AH4OyC 16-12-2009 23:15 1297187



Как сделать так чтобы передвинуть текст на всех страницах по разному(как на скринах)? И как сделать размер и другой шрифт всего текста на всех страницах?

ЗЫ. Я начинающий пользователь так что если можно можете расписать в скрипте как для чайника.

Winstan 16-12-2009 23:38 1297197

Serega,
Все понял фишку происходит мили секундное появление и переходит на другую страницу. Но все же глаз человека их видит. Интервал больше ставишь происходит по стондарту, норм интервал где то коло 100 еще более мения махом мелькает.
Но все же если бы была возможность их отключить (то их бы отключили) и написать новую форму то другое дело :) а так значит не как.
Спасибо за вариант решения данной проблемы..

Serega 17-12-2009 00:14 1297216

Цитата:

Цитата R.i.m.s.k.y.
при параметре /auto инсталлер не отсвечивал лишними окнами »

Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
function IsParamStr: Boolean;
var
  i: Integer;
  str: string;
begin
  Result:= False;
  for i:= 0 to ParamCount do
    str:= str + ParamStr(i);
  if Pos(Lowercase('/auto'), Lowercase(str)) > 0 then
  Result:= True;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if (CurPageID > 0) and IsParamStr then
    WizardForm.NextButton.OnClick(WizardForm.NextButton);
end;


Цитата:

Цитата R.i.m.s.k.y.
но при параметре /auto в скрипте должны отрабатываться свои "ветки") »

Если где-то в коде, то if IsParamStr then - какое-то дествие...
Если выполнять или нет какие-то секции в скрипте, задавайте с помощью Check:
Код:

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Check: IsParamStr; Flags: ignoreversion

Цитата:

Цитата R.i.m.s.k.y.
как можно в коде обработать выбор пользователя в Components? »

Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Components]
Name: a; Description: Моя программа™; Types: full custom
Name: a\a; Description: Руководство пользователя; Types: full
Name: a\a\a; Description: Русский; Flags: exclusive
Name: a\a\b; Description: English; Flags: exclusive
Name: a\b; Description: Справка; Types: full

[Code]
procedure ClickCheck(Sender: TObject);
var
  msg: string;
begin
  msg:= 'Был клик по компоненту:' + #13#10;
  msg:= msg + 'Номер: ' + IntToStr(WizardForm.ComponentsList.ItemIndex) + #13#10;
  msg:= msg + 'Описание: ' + WizardForm.ComponentsList.ItemCaption[WizardForm.ComponentsList.ItemIndex];
  MsgBox(msg, mbInformation, MB_OK);
end;

procedure InitializeWizard();
begin
  WizardForm.ComponentsList.OnClickCheck:= @ClickCheck;
end;


R.i.m.s.k.y. 17-12-2009 09:49 1297401

Serega
Спасибо! Будем адаптировать

R.i.m.s.k.y. 17-12-2009 17:35 1297850

Уже косметический вопрос - как увеличить размер окна выбора компонентов? Чтобы вместе с белым списком этих компонентов, окно то я растянул.

И заодно подскажите, как поменять текст на странице приветсвия? (самой первой после запуска экзешника)

Подозреваю, что ответит Serega, душевное ему спасибо!

YURSHAT 17-12-2009 17:41 1297852

Цитата:

Цитата R.i.m.s.k.y.
И заодно подскажите, как поменять текст на странице приветсвия? »

WelcomeLabel1.Caption:= 'бла-бла-бла'
WelcomeLabel2.Caption:= 'бла-бла-бла'

или так

Код:

WelcomeLabel2:=TLabel.Create(WizardForm);
with WelcomeLabel2 do
begin
  Top:= ScaleY(270);
  Left:= ScaleX(70);
  Width:= ScaleX(650);
  Height:= ScaleY(200);
  AutoSize:= false;
  WordWrap:= true;
  Font.Name:= 'Georgia';
  Font.Size:= 11
  Font.Style := [fsBold, fsItalic];
  Font.Color:=ClWhite;
  Transparent:= true;
  Parent:= WizardForm.WelcomePage;
  Caption:= 'Отключите всю байду, чтоб игра нормально проинсталлилась';
end;


Молодой 18-12-2009 13:30 1298484

Подскажите как реализовать вот такую установку

Заранее спасибо за ответ

Dark Engel 18-12-2009 13:52 1298511

Добрый всем день. Два вопроса:

1. Как определить время жизни информационных окошек? (То есть повисело например 5 сек и закрылось, скрипт продолжает выполнение.)

Пример окна:
читать дальше »
Код:

...
begin
msg:= 'Установлена не та версия .';
Result:= False;
MsgBox(msg, mbInformation, MB_OK);
end
...



2. Как убрать во время распаковки файлов извещение какие файлы и куда распаковываются. Оставить только надпись "идет распаковка".

Заранее спасибо за помощь.

YURSHAT 18-12-2009 13:58 1298517

Цитата:

Цитата Dark Engel
2. Как убрать во время распаковки файлов извещение какие файлы и куда распаковываются. Оставить только надпись "идет распаковка". »

Код:

procedure InitializeWizard();
begin
FilenameLabel.Hide;
end;


YURSHAT 18-12-2009 14:03 1298524

Цитата:

Цитата Молодой
Подскажите как реализовать вот такую установку »

Это скрипт для распаковки архивов FreArc

Молодой 18-12-2009 14:22 1298548

Внутренняя ошибка как бороться?

Dark Engel 18-12-2009 14:41 1298561

Молодой, А сам скриптик выложи. У тебя этот файл видимо куда то не туда распаковывается

YURSHAT
Цитата:

Код:
procedure InitializeWizard();
begin
FilenameLabel.Hide;
end; »

Выдает неизвестный идентификатор FilenameLabel

Молодой 18-12-2009 15:21 1298592

Ошибку исправил, но вот понят ьне могу, как несколько архивов добавить

A1EXXX 18-12-2009 15:28 1298601

Молодой,
Цитата:

Source: {src}\*.arc; DestDir: {app}\ArcFiles; Flags: external dontcopy
{#SourceToProgress}
Эта строка свидетельствует о том, что все архивы, лежащие рядом с setup.exe, будут распакованы :)

Молодой 18-12-2009 15:34 1298605

Вот спасибо большое!

Молодой 18-12-2009 15:45 1298616

Вложений: 1
Не как не могу разобраться где указывать папку с архивами, или сами архивы.
Скрипт прилагается, подскажите пожалуйста.

YURSHAT 18-12-2009 15:54 1298618

Цитата:

Цитата Dark Engel
Выдает неизвестный идентификатор FilenameLabel »

Код:

procedure InitializeWizard();
begin
WizardForm.FilenameLabel.Hide;
end;


Молодой 18-12-2009 16:01 1298630

Я это исправил, куда же мне архивы указывать?

A1EXXX 18-12-2009 16:07 1298633

Молодой, никуда их указывать не нужно, просто ложи их рядом с setup.exe и они распакуются. Кстати, ты используешь не тот код, который просил...

YURSHAT 18-12-2009 16:10 1298637

[Молодой, если тебе нужно два прогресс бара нужно использовать код FreeArc Example Ext

A1EXXX 18-12-2009 16:14 1298640

Молодой, поправил тебе [CustomMessages]... и добавил недостающее в type (нужен ISPP)
читать дальше »
Код:

[Setup]
AppId={{7E33187A-FE34-4C9F-8E97-3CDA68BB71B4}
AppName=BloodRayne 2
AppVerName=BloodRayne 2
AppPublisher=Repack By BaRS
DefaultDirName={pf}\BloodRayne 2
DefaultGroupName=BloodRayne 2
OutputDir=C:\Users\BaRS\Desktop\Install\Новая папка
OutputBaseFilename=setup
SetupIconFile=D:\Game\BloodRayne 2\publisher.ico
Compression=lzma/ultra64
SolidCompression=true
InternalCompressLevel=ultra64

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

[CustomMessages]
Default.ArcBreak=Installation cancelled!
Default.ExtractedInfo=Extracted %1 Mb of %2 Mb
Default.ArcInfo=Archive: %1 of %2
Default.ArcTitle=Extracting FreeArc archive
Default.ArcError=Decompression failed with error code %1
Default.ArcFail=Decompression failed!
Default.AllProgress=Overall extraction progress: %1%%
Default.ArcBroken=Archive %1 is damaged%nor not enough free space.
Default.Extracting=Extracting: %1
Default.taskbar=%1%%, %2 remains
Default.remains=Remaining time: %1
Default.LongTime=at no time
Default.ending=ending
Default.hour= hours
Default.min= mins
Default.sec= secs

Russian.ArcBreak=Установка прервана!
Russian.ExtractedInfo=Распаковано: %1 Мб из %2 Мб
Russian.ArcInfo=Архив: %1 из %2
Russian.ArcTitle=Распаковка ресурсов игры...
Russian.ArcError=Распаковщик FreeArc вернул код ошибки: %1
Russian.ArcFail=Распаковка не завершена!
Russian.AllProgress=Общий прогресс распаковки: %1%%
Russian.ArcBroken=Возможно, архив %1 повреждён%nили недостаточно места на диске назначения.
Russian.Extracting=%1
Russian.taskbar=%1%%, ждите %2
Russian.remains=Осталось ждать: %1
Russian.LongTime=вечно
Russian.ending=завершение...
Russian.hour= час(а)
Russian.min= мин
Russian.sec= сек

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


[Files]
Source: unarc.dll; DestDir: {tmp}; Flags: dontcopy deleteafterinstall
Source: compiler:InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
Source: D:\Game\BloodRayne 2\br2.exe; DestDir: {app}; Flags: ignoreversion
Source: D:\Game\BloodRayne 2\game.exe; DestDir: {app}; Flags: ignoreversion
Source: D:\Game\BloodRayne 2\manual.pdf; DestDir: {app}; Flags: ignoreversion
Source: D:\Game\BloodRayne 2\game.dll; DestDir: {app}; Flags: ignoreversion
Source: D:\Game\BloodRayne 2\LANGUAGE.pod; DestDir: {app}; Flags: ignoreversion
Source: D:\Game\BloodRayne 2\cutscene.dll; DestDir: {app}; Flags: ignoreversion
Source: D:\Game\BloodRayne 2\debuglog.txt; DestDir: {app}; Flags: ignoreversion
Source: D:\Game\BloodRayne 2\readme.txt; DestDir: {app}; Flags: ignoreversion
Source: D:\Game\BloodRayne 2\game.url; DestDir: {app}; Flags: ignoreversion
Source: D:\Game\BloodRayne 2\publisher.url; DestDir: {app}; Flags: ignoreversion
Source: D:\Game\BloodRayne 2\stderr.txt; DestDir: {app}; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: {group}\BloodRayne 2; Filename: {app}\br2.exe
Name: {commondesktop}\BloodRayne 2; Filename: {app}\br2.exe; Tasks: desktopicon

[Run]
Filename: {app}\br2.exe; Description: {cm:LaunchProgram,BloodRayne 2}; Flags: nowait postinstall skipifsilent

[Code]
const
    Archives = '{src}\*.arc';

    PM_REMOVE = 1;
    CP_ACP = 0; CP_UTF8 = 65001;
    oneMb = 1048576;

type
#ifdef UNICODE  ; если у вас ошибка на этой строке, то установите препроцессор или исправьте скрипт для вашей версии Inno Setup
    #define A "W"
#else
    #define A "A"  ; точка входа в SetWindowText, {#A} меняется на A или W в зависимости от версии
    PAnsiChar = PChar;  // Required for Inno Setup 5.3.0 and higher. (требуется для Inno Setup версии 5.3.0 и ниже)
#endif
#if Ver < 84018176
    AnsiString = String; // There is no need for this line in Inno Setup 5.2.4 and above (для Inno Setup версий 5.2.4 и выше эта строка не нужна)
#endif

    TMyMsg = record
        hwnd: HWND;
        message: UINT;
        wParam: Longint;
        lParam: Longint;
        time: DWORD;
        pt: TPoint;
    end;

    TFreeArcCallback = function (what: PAnsiChar; int1, int2: Integer; str: PAnsiChar): Integer;
    TArc = record Path: string; OrigSize: Integer; Size: Extended; end;

var
    ExtractFile: TLabel;
    lblExtractFileName: TLabel;
    btnCancelUnpacking: TButton;
    CancelCode, n, UnPackError, StartInstall: Integer;
    Arcs: array of TArc;
    msgError: string;
    lastMb: Integer;
    baseMb: Integer;
    totalUncompressedSize: Integer;            // total uncompressed size of archive data in mb
    LastTimerEvent: DWORD;

Function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: string; cbMultiByte: integer; lpWideCharStr: string; cchWideChar: integer): longint; external 'MultiByteToWideChar@kernel32.dll stdcall';
Function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: string; cchWideChar: integer; lpMultiByteStr: string; cbMultiByte: integer; lpDefaultChar: integer; lpUsedDefaultChar: integer): longint; external 'WideCharToMultiByte@kernel32.dll stdcall';

function PeekMessage(var lpMsg: TMyMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMyMsg): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: TMyMsg): Longint; external 'DispatchMessageA@user32.dll stdcall';

Function OemToChar(lpszSrc, lpszDst: AnsiString): longint; external 'OemToCharA@user32.dll stdcall';
function GetWindowLong(hWnd, nIndex: Integer): Longint; external 'GetWindowLongA@user32 stdcall delayload';
function SetWindowText(hWnd: Longint; lpString: String): Longint; external 'SetWindowText{#A}@user32 stdcall delayload';

function GetTickCount: DWord; external 'GetTickCount@kernel32';
function WrapFreeArcCallback (callback: TFreeArcCallback; paramcount: integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function FreeArcExtract (callback: longword; cmd1,cmd2,cmd3,cmd4,cmd5,cmd6,cmd7,cmd8,cmd9,cmd10: PAnsiChar): integer; external 'FreeArcExtract@files:unarc.dll cdecl';

procedure AppProcessMessage;
var
    Msg: TMyMsg;
begin
    while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do begin
        TranslateMessage(Msg);
        DispatchMessage(Msg);
    end;
end;

// Перевод числа в строку с точностью 3 знака (%.3n) с округлением дробной части, если она есть
Function NumToStr(Float: Extended): String;
Begin
    Result:= Format('%.3n', [Float]); StringChange(Result, ',', '.');
    while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Length(Result) > 1) do
        SetLength(Result, Length(Result)-1);
End;

function cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;

Function Size64(Hi, Lo: Integer): Extended;
Begin
    Result:= Lo;
    if Lo<0 then Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
    for Hi:= Hi-1 Downto 0 do
        Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
End;

// Converts OEM encoded string into ANSI
// Преобразует OEM строку в ANSI кодировку
function OemToAnsiStr( strSource: AnsiString): AnsiString;
var
    nRet : longint;
begin
    SetLength( Result, Length( strSource ) );
    nRet:= OemToChar( strSource, Result );
end;

// Converts ANSI encoded string into UTF-8
// Преобразует строку из ANSI в UTF-8 кодировку
function AnsiToUtf8( strSource: string ): string;
var
    nRet : integer;
    WideCharBuf: string;
    MultiByteBuf: string;
begin
    strSource:= strSource + chr(0);
    SetLength( WideCharBuf, Length( strSource ) * 2 );
    SetLength( MultiByteBuf, Length( strSource ) * 2 );

    nRet:= MultiByteToWideChar( CP_ACP, 0, strSource, -1, WideCharBuf, Length(WideCharBuf) );
    nRet:= WideCharToMultiByte( CP_UTF8, 0, WideCharBuf, -1, MultiByteBuf, Length(MultiByteBuf), 0, 0);

    Result:= MultiByteBuf;
end;

// OnClick event function for btnCancel
procedure btnCancelUnpackingOnClick(Sender: TObject);
begin
    if MsgBox( SetupMessage( msgExitSetupMessage ), mbInformation, MB_YESNO ) = IDYES then
        CancelCode:= -127;
end;

var origsize: Integer;
// The callback function for getting info about FreeArc archive
function FreeArcInfoCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
begin
    if string(what)='origsize'    then origsize := Mb else
    if string(what)='compsize'    then                else
    if string(what)='total_files' then                else
    Result:= CancelCode;
end;

// Returns decompressed size of files in archive
function ArchiveOrigSize(arcname: string): Integer;
var
    callback: longword;
Begin
    callback:= WrapFreeArcCallback(@FreeArcInfoCallback,4);  //FreeArcInfoCallback has 4 arguments
    CancelCode:= 0;
    AppProcessMessage;
    try
        // Pass the specified arguments to 'unarc.dll'
        Result:= FreeArcExtract (callback, 'l', '--', AnsiToUtf8(arcname), '', '', '', '', '', '', '');
        if CancelCode < 0 then Result:= CancelCode;
        if Result >= 0 then Result:= origsize;
    except
        Result:= -63;  //    ArcFail
    end;
end;

// Scans the specified folders for archives and add them to list
function FindArcs(dir: string): Extended;
var
    FSR: TFindRec;
Begin
    Result:= 0;
    if FindFirst(ExpandConstant(dir), FSR) then begin
        try
            repeat
                // Skip everything but the folders
                if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then CONTINUE;
                n:= GetArrayLength(Arcs);
                // Expand the folder list
                SetArrayLength(Arcs, n +1);
                Arcs[n].Path:= ExtractFilePath(ExpandConstant(dir)) + FSR.Name;
                Arcs[n].Size:= Size64(FSR.SizeHigh, FSR.SizeLow);
                Result:= Result + Arcs[n].Size;
                Arcs[n].OrigSize := ArchiveOrigSize(Arcs[n].Path)
                totalUncompressedSize := totalUncompressedSize + Arcs[n].OrigSize
            until not FindNext(FSR);
        finally
            FindClose(FSR);
        end;
    end;
End;

// Sets the TaskBar title
Procedure SetTaskBarTitle(Title: String); var h: Integer;
Begin
    h:= GetWindowLong(MainForm.Handle, -8); if h <> 0 then SetWindowText(h, Title);
End;

// Converts milliseconds to human-readable time
// Конвертирует милисекунды в человеко-читаемое изображение времени
Function TicksToTime(Ticks: DWord; h,m,s: String; detail: Boolean): String;
Begin
    if detail                              {hh:mm:ss format} then
        Result:= PADZ(IntToStr(Ticks/3600000), 2) +':'+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +':'+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2)
    else if Ticks/3600 >= 1000              {more than hour}  then
        Result:= IntToStr(Ticks/3600000) +h+' '+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +m
    else if Ticks/60 >= 1000                {1..60 minutes}  then
        Result:= IntToStr(Ticks/60000) +m+' '+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2) +s
  else Result:= IntToStr(Ticks/1000) +s    {less than one minute}
End;

// The main callback function for unpacking FreeArc archives
function FreeArcCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
var
    percents, Remaining: Integer;
    s: String;
begin
    if GetTickCount - LastTimerEvent > 1000 then begin
        // This code will be executed once each 1000 ms (этот код будет выполняться раз в 1000 миллисекунд)
        //  ....
        // End of code executed by timer
        LastTimerEvent := LastTimerEvent+1000;
    end;

    if string(what)='filename' then begin
        // Update FileName label
        lblExtractFileName.Caption:= FmtMessage( cm( 'Extracting' ), [OemToAnsiStr( str )] )
    end else if (string(what)='write') and (totalUncompressedSize>0) and (Mb>lastMb) then begin
        // Assign to Mb *total* amount of data extracted to the moment from all archives
        lastMb := Mb;
        Mb := baseMb+Mb;

        // Update progress bar
        WizardForm.ProgressGauge.Position:= Mb;

        // Show how much megabytes/archives were processed up to the moment
        percents:= (Mb*1000) div totalUncompressedSize;
        s := FmtMessage(cm('ExtractedInfo'), [IntToStr(Mb), IntToStr(totalUncompressedSize)]);
        if GetArrayLength(Arcs)>1 then
            s := s + '. '+FmtMessage(cm('ArcInfo'), [IntToStr(n+1), IntToStr(GetArrayLength(Arcs))])
        ExtractFile.Caption := s

        // Calculate and show current percents
        percents:= (Mb*1000) div totalUncompressedSize;
        s:= FmtMessage(cm('AllProgress'), [Format('%.1n', [Abs(percents/10)])]);
        if Mb > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((totalUncompressedSize - Mb)/Mb)) else Remaining:= 0;
        if Remaining = 0 then SetTaskBarTitle(cm('ending')) else begin
            s:= s + '.  '+FmtMessage(cm('remains'), [TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)])
            SetTaskBarTitle(FmtMessage(cm('taskbar'), [IntToStr(percents/10), TicksToTime(Remaining, 'h', 'm', 's', false)]))
        end;
        WizardForm.FileNameLabel.Caption := s
    end;
    AppProcessMessage;
    Result:= CancelCode;
end;

// Extracts all found archives
function UnPack(Archives: string): Integer;
var
    totalCompressedSize: Extended;
    callback: longword;
    FreeMB, TotalMB: Cardinal;
begin
    // Display 'Extracting FreeArc archive'
    lblExtractFileName.Caption:= '';
    lblExtractFileName.Show;
    ExtractFile.caption:= cm('ArcTitle');
    ExtractFile.Show;
    // Show the 'Cancel unpacking' button and set it as default button
    btnCancelUnpacking.Caption:= WizardForm.CancelButton.Caption;
    btnCancelUnpacking.Show;
    WizardForm.ActiveControl:= btnCancelUnpacking;
    WizardForm.ProgressGauge.Position:= 0;
    // Get the size of all archives
    totalUncompressedSize := 0;
    totalCompressedSize := FindArcs(Archives);
    WizardForm.ProgressGauge.Max:= totalUncompressedSize;
    // Other initializations
    callback:= WrapFreeArcCallback(@FreeArcCallback,4);  //FreeArcCallback has 4 arguments
    StartInstall:= GetTickCount;    {время начала распаковки}
    LastTimerEvent:= GetTickCount;
    baseMb:= 0

    for n:= 0 to GetArrayLength(Arcs) -1 do
    begin
        lastMb := 0
        CancelCode:= 0;
        AppProcessMessage;
        try
            // Pass the specified arguments to 'unarc.dll'
            Result:= FreeArcExtract (callback, 'x', '-o+', '-dp' + AnsiToUtf8( ExpandConstant('{app}') ), '--', AnsiToUtf8(Arcs[n].Path), '', '', '', '', '');
            if CancelCode < 0 then Result:= CancelCode;
        except
            Result:= -63;  //    ArcFail
        end;
        baseMb:= baseMb+lastMb

        // Error occured
        if Result <> 0 then
        begin
            msgError:= FmtMessage(cm('ArcError'), [IntToStr(Result)]);
            GetSpaceOnDisk(ExtractFileDrive(ExpandConstant('{app}')), True, FreeMB, TotalMB);
            case Result of
                -1: if FreeMB < 32 {Мб на диске} then msgError:= SetupMessage(msgDiskSpaceWarningTitle)
                    else msgError:= msgError + #13#10 + FmtMessage(cm('ArcBroken'), [ExtractFileName(Arcs[n].Path)]);
                -127:  msgError:= cm('ArcBreak');    //Cancel button
                -63:    msgError:= cm('ArcFail');
            end;
//          MsgBox(msgError, mbInformation, MB_OK);    //сообщение показывается на странице завершения
            Log(msgError);
            Break;    //прервать цикл распаковки
        end;
    end;
    // Hide labels and button
    WizardForm.FileNameLabel.Caption:= '';
    lblExtractFileName.Hide;
    ExtractFile.Hide;
    btnCancelUnpacking.Hide;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
    if CurStep = ssPostInstall then
    begin
        UnPackError:= UnPack(Archives)
        if UnPackError = 0 then
            SetTaskBarTitle(SetupMessage(msgSetupAppTitle))
        else
        begin
            // Error occured, uninstall it then
            Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n);    //откат установки из-за ошибки unarc.dll
            SetTaskBarTitle(SetupMessage(msgErrorTitle))
            WizardForm.Caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
        end;
    end;
end;

//    стандартный способ отката (не нужна CurPageChanged), но архивы распаковываются до извлечения файлов инсталлятора
//    if CurStep = ssInstall then
//      if UnPack(Archives) <> 0 then Abort;

Procedure CurPageChanged(CurPageID: Integer);
Begin
    if (CurPageID = wpFinished) and (UnPackError <> 0) then
    begin // Extraction was unsuccessful (распаковщик вернул ошибку)
        // Show error message
        WizardForm.FinishedLabel.Font.Color:= $0000C0;    // red (красный)
        WizardForm.FinishedLabel.Height:= WizardForm.FinishedLabel.Height * 2;
        WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) + #13#10#13#10 + msgError;
    end;
End;

procedure InitializeWizard();
begin
    with WizardForm.ProgressGauge do
    begin
        // Create a label to show current FileName being extracted
        lblExtractFileName:= TLabel.Create(WizardForm);
        lblExtractFileName.parent:=WizardForm.InstallingPage;
        lblExtractFileName.autosize:=false;
        lblExtractFileName.Width:= Width;
        lblExtractFileName.top:=Top + ScaleY(35);
        lblExtractFileName.Caption:= '';
        lblExtractFileName.Hide;

        // Create a label to show percentage
        ExtractFile:= TLabel.Create(WizardForm);
        ExtractFile.parent:=WizardForm.InstallingPage;
        ExtractFile.autosize:=false;
        ExtractFile.Width:= Width;
        ExtractFile.top:=lblExtractFileName.Top + ScaleY(16);
        ExtractFile.caption:= '';
        ExtractFile.Hide;
    end;

    // Create a 'Cancel unpacking' button and hide it for now.
    btnCancelUnpacking:=TButton.create(WizardForm);
    btnCancelUnpacking.Parent:= WizardForm;
    btnCancelUnpacking.SetBounds(WizardForm.CancelButton.Left, WizardForm.CancelButton.top, WizardForm.CancelButton.Width, WizardForm.CancelButton.Height);
    btnCancelUnpacking.OnClick:= @btnCancelUnpackingOnClick;
    btnCancelUnpacking.Hide;
end;


Молодой 18-12-2009 16:15 1298641

YURSHAT, A1EXXX, спасибо попробую

Ошибка вот в этой строке
Source: {src}\*.arc; DestDir: {app}; Flags: external dontcopy; Components: English

Как можно исправить?

A1EXXX 18-12-2009 17:09 1298679

Inno Setup Compiler [ANSI] Beta 2 (build 091218) English by Restools

В чём крутизна новой версии (Beta & Beta 2):


Молодой 18-12-2009 17:31 1298688

А с моей проблемой кто-нибудь поможет?

Dark Engel 18-12-2009 18:11 1298714

Цитата:

Цитата YURSHAT
Код:
procedure InitializeWizard();
begin
WizardForm.FilenameLabel.Hide;
end; »

Тоже самое :(

YURSHAT 18-12-2009 18:57 1298753

Dark Engel, Вы верно что-то напутали! Эти строки нужно добавлять в секцию [code]
пример
Код:

[_Code]
procedure InitializeWizard();
begin
WizardForm.FilenameLabel.Hide;
end;


A1EXXX 18-12-2009 19:04 1298756

Молодой,
Цитата:

Цитата Молодой
Ошибка вот в этой строке
Source: {src}\*.arc; DestDir: {app}; Flags: external dontcopy; Components: English »

В этой строке нет никакого смысла (если ты, конечно, не собираешься зачем-то скопировать архивы в директорию с игрой).
Расположение архивов обозначено ниже: Archives = '{src}\*.arc';. Ну и судя по приписанному Components, ты задумал сделать игру двуязычной... Для подобного файлы перевода лучше не паковать в arc'и, а записывать отдельно в [Files] и связывать с Components...

Dark Engel, покажи скрипт целиком, а то гадать что к чему можно вечно...

Dark Engel 18-12-2009 19:09 1298762

Цитата:

Цитата YURSHAT
Dark Engel, Вы верно что-то напутали! Эти строки нужно добавлять в секцию [code] »

В нее и добавляю. Но что то никак. Вот сам скрипт подскажите куда добавить. (Прошу прощения за *** вынужден не афишировать программу.)

читать дальше »
[code];Глобальные переменные
#define MyAppName "***"
#define MyAppVerName "***"
#define MyAppPublisher "***"
#define MyAppExeName "***.exe"

;Подключение шаблона скина скина
[ISPP]
#define SkinFile "C:\Program Files\HiSoft\Inno Script Generator\Include\SkinCrafter\strait.skf"
#define SkinFolder "C:\Program Files\HiSoft\Inno Script Generator\Include\SkinCrafter"
#include SkinFolder + "\SkinCrafter.inc"

[Setup]
AppId={{BE611A8E-150F-4A38-ADAB-DC1E7BF2A8B8}
;Имя программы.
AppName={#MyAppName}
;имя с версией.
AppVerName={#MyAppVerName}
;Издатель.
AppPublisher={#MyAppPublisher}
;Версия сборки.
VersionInfoVersion=1.1.3
;Путь установки.
DefaultDirName={pf}\***
;Отключение выбора пути установки.
DisableDirPage=yes
;Имя группы в меню.
DefaultGroupName={#MyAppName}
;Отключение запроса имени группы.
DisableProgramGroupPage=yes
;Отключение страницы "Все готово к установке".
DisableReadyPage=yes
;Путь сборки инсталятора.
OutputDir=D:\Fup\***\Output
;Имя фаила инсталяции.
OutputBaseFilename=***Setup
;Скин инсталятора.
WizardImageFile=Left.bmp
WizardSmallImageFile=Up.bmp
;Иконка инсталятора.
SetupIconFile=Setup.ico
;Уровень сжатия инсталятора.
Compression=lzma/ultra
SolidCompression=yes
;Запрет кнопки "Отмена" во время установки.
AllowCancelDuringInstall=no
;Минимальная версия Windows для установки.
MinVersion=4.0,5.01

[Languages]
;Язык установки.
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Tasks]
;Создание ярлыка.

;Файлы для упаковки в инсталятор.
[Files]
;Служебные файлы инсталятора.
Source: Wallpaper.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: isgsg.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: bass.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: innocallback.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: Sound.mp3; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression

;Файлы для установки.
Source: ***


[Icons]
;Пункты меню в группе.
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Comment: ***
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Comment: ***

[Messages]
;Оформление инсталятора.
BeveledLabel=---***---

;Удаление ключа реестра при деинсталяции.
[Registry]
Root: HKLM; Subkey: Software\***; ValueType: dword; ValueName: ***; Flags: dontcreatekey uninsdeletevalue; ValueData: 3

;Удаление файла настроек при деинсталяции.
[UninstallDelete]
Name: {app}\***.ini; Type: files

;Блок кода. Запуск музыки, проверка версии, скин.
Код:

type
  HSTREAM=DWORD;
  TTimerProc=procedure(uTimerID,uMessage:UINT;dwUser,dw1,dw2:DWORD);
var
  MP3List:TStringList;
  CurrentMP3:integer;
  hMP3:HWND;
  TimerID:LongWord;

function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall delayload';
function ssInitialize(hParent:HWND;ssTimeShow:integer;FadeOut:boolean;StretchMode:integer;BkgColor:DWORD):boolean; external 'ssInitialize@files:isgsg.dll stdcall delayload';
procedure ssDeInitialize; external 'ssDeInitialize@files:isgsg.dll stdcall delayload';
procedure ssSetBkgImage(FileName:PChar); external 'ssSetBkgImage@files:isgsg.dll stdcall delayload';
function SetTimer(hWnd:HWND;nIDEvent,uElapse:UINT;lpTimerFunc:LongWord{TFNTimerProc}):UINT;  external 'SetTimer@user32.dll stdcall delayload';
function KillTimer(hWnd:HWND;uIDEvent:UINT):BOOL; external 'KillTimer@user32.dll stdcall delayload';
function BASS_ChannelIsActive(Handle:HWND):DWORD; external 'BASS_ChannelIsActive@files:bass.dll stdcall';
function BASS_SetConfig(Option,Value:DWORD):DWORD; external 'BASS_SetConfig@files:bass.dll stdcall';
function BASS_Init(Device:integer;Freq,Flags:DWORD;Win:HWND;CLSID:integer):boolean; external 'BASS_Init@files:bass.dll stdcall delayload';
function BASS_StreamCreateFile(Mem:BOOL;f:PChar;Offset:DWORD;Length:DWORD;Flags:DWORD):HSTREAM; external 'BASS_StreamCreateFile@files:bass.dll stdcall';
function BASS_StreamFree(Handle:HWND):boolean; external 'BASS_StreamFree@files:bass.dll stdcall';
function BASS_ChannelPlay(Handle:HWND;Restart:boolean):boolean; external 'BASS_ChannelPlay@files:bass.dll stdcall';
function BASS_Start: Boolean; external 'BASS_Start@files:bass.dll stdcall';
function BASS_Stop: Boolean; external 'BASS_Stop@files:bass.dll stdcall';
function BASS_Free: Boolean; external 'BASS_Free@files:bass.dll stdcall delayload';
function WrapTimerProc(CallBack:TTimerProc;ParamCount:integer):LongWord; external 'wrapcallback@files:innocallback.dll stdcall';

procedure TimerTick(uTimerID,uMessage:UINT;dwUser,dw1,dw2:DWORD);
begin
  if BASS_ChannelIsActive(hMP3)=0 then begin
    BASS_Stop;
    BASS_StreamFree(hMP3);
    hMP3:=BASS_StreamCreateFile(False,PChar(MP3List.Strings[CurrentMP3]),0,0,0);
    BASS_Start;
    if hMP3<>0 then
      if BASS_ChannelPlay(hMP3,True) then begin
        CurrentMP3:=CurrentMP3+1;
        if CurrentMP3>MP3List.Count-1 then CurrentMP3:=0;
      end;
  end;
end;

function InitializeSetup1:boolean;
begin
  ExtractTemporaryFile('Sound.mp3');
  MP3List:=TStringList.Create;
  MP3List.Add(ExpandConstant('{tmp}')+'\Sound.mp3');
  CurrentMP3:=0;
  Result:=True;
end;

procedure InitializeWizard1;
begin
  TimerID:=SetTimer(0,0,500,WrapTimerProc(@TimerTick,5));
  BASS_Init(-1,44100,0,0,0);
  BASS_SetConfig(5,100);
  BASS_SetConfig(6,100);
  ssInitialize(GetWindowLong(MainForm.Handle,-8),0,False,1,$FF000000);
  ExtractTemporaryFile('Wallpaper.jpg');
  ssSetBkgImage(ExpandConstant('{tmp}')+'\Wallpaper.jpg');
end;

procedure DeinitializeSetup1;
begin
  KillTimer(0,TimerID);
  BASS_Stop;
  BASS_Free;
  MP3List.Free;
  ssDeInitialize;
end;

//Настройка подключения к серверу.
procedure MyAfterInstall();
var
I: String;

begin
  if RegQueryStringValue(HKCU, '***', 'DefaultSystem', I)
      then
      SaveStringToFile('C:\Program Files\***.ini', I, true);
      SaveStringToFile('C:\Program Files\***.ini', #13#10 + 'true', true);
end;

//проверка на установленность и версию.
function DetectInstall(ProgName: string; ver: Integer): Boolean;
var
  Names: TArrayOfString;
  ResultDWord: Cardinal;
  i: Integer;
  msg: string;
begin
  Result:= True;
  if RegGetValueNames(HKEY_LOCAL_MACHINE, 'Software\***', Names) then
    begin
      for i:= 0 to GetArrayLength(Names)-1 do
        if Lowercase(ProgName) = Lowercase(Names[i]) then
          begin
            RegQueryDWordValue(HKEY_LOCAL_MACHINE, 'Software\***', Names[i], ResultDWord);
            if ResultDWord > ver then
              begin
                msg:= 'Установленная версия *** новее.';
                Result:= False;
                MsgBox(msg, mbInformation, MB_OK);
              end
            else
            if ResultDWord = ver then
              begin
                Result:= True;
              end;
            Break;
          end;
    end;
//Запись версии устанавливаемой программы.
RegWriteDWordValue(HKEY_LOCAL_MACHINE, 'Software\***', '***', 3);
end;

function InitializeSetup2(): Boolean;
begin
  // Имя программы и версия для проверки.
  Result:= DetectInstall('***', 3);
end;


//Проверка версии ***
function DetectInstall1(ProgName: string; ver: string): Boolean;
var
  Names: TArrayOfString;
  o: Integer;
  ResultStr, msg: string;
begin
if RegKeyExists(HKEY_LOCAL_MACHINE, 'Software\***') then
 begin
  Result:= True;
  if RegGetValueNames(HKEY_LOCAL_MACHINE, 'Software\***', Names) then
    begin
      for o:= 0 to GetArrayLength(Names)-1 do
        if Lowercase(ProgName) = Lowercase(Names[o]) then
          begin
            RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\***', Names[o], ResultStr);
            if ResultStr = ver then
              begin
                Result:= True;
              end
            else
              begin
                msg:= 'Установлена версия *** для ***.' #13#10 + 'Продолжение установки невозможно.';
                Result:= False;
                MsgBox(msg, mbInformation, MB_OK);
              end;
            Break;
          end;
    end;
 end
else
begin
msg:= '*** не установлен.' #13#10 + 'Дальнейшая установка невозможна.';
Result:= False;
MsgBox(msg, mbInformation, MB_OK);
end;
end;

function InitializeSetup3(): Boolean;
begin
  // Имя программы и версия для проверки.
  Result:= DetectInstall1('Current***Level', '***');
end;

function InitializeSetup(): Boolean;
begin
  Result := InitializeSetup1(); if not Result then exit;
  Result := InitializeSetup2(); if not Result then exit;
  Result := InitializeSetup3(); if not Result then exit;
end;

procedure InitializeWizard();
begin
  InitializeWizard1();
  SkinCrafter_InitializeWizard();
end;

procedure DeinitializeSetup();
begin
  DeinitializeSetup1();
end;

//Подключение скина.
var Rect: TRect; hIcon: LongInt;

function GetModuleHandle(lpModuleName: LongInt): LongInt; external 'GetModuleHandleA@kernel32.dll stdcall';
function ExtractIcon(hInst: LongInt; lpszExeFileName: PChar; nIconIndex: LongInt): LongInt; external 'ExtractIconA@shell32.dll stdcall';
function DrawIconEx(hdc: LongInt; xLeft, yTop: Integer; hIcon: LongInt; cxWidth, cyWidth: Integer; istepIfAniCur, hbrFlickerFreeDraw, diFlags: LongInt): LongInt; external 'DrawIconEx@user32.dll stdcall';
function LoadImage(hInst: LongInt; lpszExeFileName: PChar; uType: DWord; cxDesired, cyDesired: LongInt; fuLoad: DWord): hWnd; external 'LoadImageA@user32.dll stdcall';
function LoadBitmap(hInst: LongInt; lpBitmapName: PChar): HBITMAP; external 'LoadBitmapA@user32.dll stdcall';


A1EXXX 18-12-2009 19:28 1298773

Dark Engel, попробуй это (через InitializeWizard):
читать дальше »
Код:

;Глобальные переменные
#define MyAppName "***"
#define MyAppVerName "***"
#define MyAppPublisher "***"
#define MyAppExeName "***.exe"

;Подключение шаблона скина скина
[ISPP]
#define SkinFile "C:\Program Files\HiSoft\Inno Script Generator\Include\SkinCrafter\strait.skf"
#define SkinFolder "C:\Program Files\HiSoft\Inno Script Generator\Include\SkinCrafter"
#include SkinFolder + "\SkinCrafter.inc"

[Setup]
AppId={{BE611A8E-150F-4A38-ADAB-DC1E7BF2A8B8}
;Имя программы.
AppName={#MyAppName}
;имя с версией.
AppVerName={#MyAppVerName}
;Издатель.
AppPublisher={#MyAppPublisher}
;Версия сборки.
VersionInfoVersion=1.1.3
;Путь установки.
DefaultDirName={pf}\***
;Отключение выбора пути установки.
DisableDirPage=yes
;Имя группы в меню.
DefaultGroupName={#MyAppName}
;Отключение запроса имени группы.
DisableProgramGroupPage=yes
;Отключение страницы "Все готово к установке".
DisableReadyPage=yes
;Путь сборки инсталятора.
OutputDir=D:\Fup\***\Output
;Имя фаила инсталяции.
OutputBaseFilename=***Setup
;Скин инсталятора.
WizardImageFile=Left.bmp
WizardSmallImageFile=Up.bmp
;Иконка инсталятора.
SetupIconFile=Setup.ico
;Уровень сжатия инсталятора.
Compression=lzma/ultra
SolidCompression=yes
;Запрет кнопки "Отмена" во время установки.
AllowCancelDuringInstall=no
;Минимальная версия Windows для установки.
MinVersion=4.0,5.01

[Languages]
;Язык установки.
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Tasks]
;Создание ярлыка.

;Файлы для упаковки в инсталятор.
[Files]
;Служебные файлы инсталятора.
Source: Wallpaper.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: isgsg.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: bass.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: innocallback.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: Sound.mp3; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression

;Файлы для установки.
Source: ***


[Icons]
;Пункты меню в группе.
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Comment: ***
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Comment: ***

[Messages]
;Оформление инсталятора.
BeveledLabel=---***---

;Удаление ключа реестра при деинсталяции.
[Registry]
Root: HKLM; Subkey: Software\***; ValueType: dword; ValueName: ***; Flags: dontcreatekey uninsdeletevalue; ValueData: 3

;Удаление файла настроек при деинсталяции.
[UninstallDelete]
Name: {app}\***.ini; Type: files

;Блок кода. Запуск музыки, проверка версии, скин.

[code]
type
  HSTREAM=DWORD;
  TTimerProc=procedure(uTimerID,uMessage:UINT;dwUser,dw1,dw2:DWORD);
var
  MP3List:TStringList;
  CurrentMP3:integer;
  hMP3:HWND;
  TimerID:LongWord;

function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall delayload';
function ssInitialize(hParent:HWND;ssTimeShow:integer;FadeOut:boolean;StretchMode:integer;BkgColor:DWORD):boolean; external 'ssInitialize@files:isgsg.dll stdcall delayload';
procedure ssDeInitialize; external 'ssDeInitialize@files:isgsg.dll stdcall delayload';
procedure ssSetBkgImage(FileName:PChar); external 'ssSetBkgImage@files:isgsg.dll stdcall delayload';
function SetTimer(hWnd:HWND;nIDEvent,uElapse:UINT;lpTimerFunc:LongWord{TFNTimerProc}):UINT;  external 'SetTimer@user32.dll stdcall delayload';
function KillTimer(hWnd:HWND;uIDEvent:UINT):BOOL; external 'KillTimer@user32.dll stdcall delayload';
function BASS_ChannelIsActive(Handle:HWND):DWORD; external 'BASS_ChannelIsActive@files:bass.dll stdcall';
function BASS_SetConfig(Option,Value:DWORD):DWORD; external 'BASS_SetConfig@files:bass.dll stdcall';
function BASS_Init(Device:integer;Freq,Flags:DWORD;Win:HWND;CLSID:integer):boolean; external 'BASS_Init@files:bass.dll stdcall delayload';
function BASS_StreamCreateFile(Mem:BOOL;f:PChar;Offset:DWORD;Length:DWORD;Flags:DWORD):HSTREAM; external 'BASS_StreamCreateFile@files:bass.dll stdcall';
function BASS_StreamFree(Handle:HWND):boolean; external 'BASS_StreamFree@files:bass.dll stdcall';
function BASS_ChannelPlay(Handle:HWND;Restart:boolean):boolean; external 'BASS_ChannelPlay@files:bass.dll stdcall';
function BASS_Start: Boolean; external 'BASS_Start@files:bass.dll stdcall';
function BASS_Stop: Boolean; external 'BASS_Stop@files:bass.dll stdcall';
function BASS_Free: Boolean; external 'BASS_Free@files:bass.dll stdcall delayload';
function WrapTimerProc(CallBack:TTimerProc;ParamCount:integer):LongWord; external 'wrapcallback@files:innocallback.dll stdcall';

procedure TimerTick(uTimerID,uMessage:UINT;dwUser,dw1,dw2:DWORD);
begin
  if BASS_ChannelIsActive(hMP3)=0 then begin
    BASS_Stop;
    BASS_StreamFree(hMP3);
    hMP3:=BASS_StreamCreateFile(False,PChar(MP3List.Strings[CurrentMP3]),0,0,0);
    BASS_Start;
    if hMP3<>0 then
      if BASS_ChannelPlay(hMP3,True) then begin
        CurrentMP3:=CurrentMP3+1;
        if CurrentMP3>MP3List.Count-1 then CurrentMP3:=0;
      end;
  end;
end;

function InitializeSetup1:boolean;
begin
  ExtractTemporaryFile('Sound.mp3');
  MP3List:=TStringList.Create;
  MP3List.Add(ExpandConstant('{tmp}')+'\Sound.mp3');
  CurrentMP3:=0;
  Result:=True;
end;

procedure InitializeWizard1;
begin
  TimerID:=SetTimer(0,0,500,WrapTimerProc(@TimerTick,5));
  BASS_Init(-1,44100,0,0,0);
  BASS_SetConfig(5,100);
  BASS_SetConfig(6,100);
  ssInitialize(GetWindowLong(MainForm.Handle,-8),0,False,1,$FF000000);
  ExtractTemporaryFile('Wallpaper.jpg');
  ssSetBkgImage(ExpandConstant('{tmp}')+'\Wallpaper.jpg');
end;

procedure DeinitializeSetup1;
begin
  KillTimer(0,TimerID);
  BASS_Stop;
  BASS_Free;
  MP3List.Free;
  ssDeInitialize;
end;

//Настройка подключения к серверу.
procedure MyAfterInstall();
var
I: String;

begin
  if RegQueryStringValue(HKCU, '***', 'DefaultSystem', I)
      then
      SaveStringToFile('C:\Program Files\***.ini', I, true);
      SaveStringToFile('C:\Program Files\***.ini', #13#10 + 'true', true);
end;

//проверка на установленность и версию.
function DetectInstall(ProgName: string; ver: Integer): Boolean;
var
  Names: TArrayOfString;
  ResultDWord: Cardinal;
  i: Integer;
  msg: string;
begin
  Result:= True;
  if RegGetValueNames(HKEY_LOCAL_MACHINE, 'Software\***', Names) then
    begin
      for i:= 0 to GetArrayLength(Names)-1 do
        if Lowercase(ProgName) = Lowercase(Names[i]) then
          begin
            RegQueryDWordValue(HKEY_LOCAL_MACHINE, 'Software\***', Names[i], ResultDWord);
            if ResultDWord > ver then
              begin
                msg:= 'Установленная версия *** новее.';
                Result:= False;
                MsgBox(msg, mbInformation, MB_OK);
              end
            else
            if ResultDWord = ver then
              begin
                Result:= True;
              end;
            Break;
          end;
    end;
//Запись версии устанавливаемой программы.
RegWriteDWordValue(HKEY_LOCAL_MACHINE, 'Software\***', '***', 3);
end;

function InitializeSetup2(): Boolean;
begin
  // Имя программы и версия для проверки.
  Result:= DetectInstall('***', 3);
end;


//Проверка версии ***
function DetectInstall1(ProgName: string; ver: string): Boolean;
var
  Names: TArrayOfString;
  o: Integer;
  ResultStr, msg: string;
begin
if RegKeyExists(HKEY_LOCAL_MACHINE, 'Software\***') then
 begin
  Result:= True;
  if RegGetValueNames(HKEY_LOCAL_MACHINE, 'Software\***', Names) then
    begin
      for o:= 0 to GetArrayLength(Names)-1 do
        if Lowercase(ProgName) = Lowercase(Names[o]) then
          begin
            RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\***', Names[o], ResultStr);
            if ResultStr = ver then
              begin
                Result:= True;
              end
            else
              begin
                msg:= 'Установлена версия *** для ***.' #13#10 + 'Продолжение установки невозможно.';
                Result:= False;
                MsgBox(msg, mbInformation, MB_OK);
              end;
            Break;
          end;
    end;
 end
else
begin
msg:= '*** не установлен.' #13#10 + 'Дальнейшая установка невозможна.';
Result:= False;
MsgBox(msg, mbInformation, MB_OK);
end;
end;

function InitializeSetup3(): Boolean;
begin
  // Имя программы и версия для проверки.
  Result:= DetectInstall1('Current***Level', '***');
end;

function InitializeSetup(): Boolean;
begin
  Result := InitializeSetup1(); if not Result then exit;
  Result := InitializeSetup2(); if not Result then exit;
  Result := InitializeSetup3(); if not Result then exit;
end;

procedure InitializeWizard();
begin
  InitializeWizard1();
  SkinCrafter_InitializeWizard();
  WizardForm.FilenameLabel.Hide();
end;

procedure DeinitializeSetup();
begin
  DeinitializeSetup1();
end;

//Подключение скина.
var Rect: TRect; hIcon: LongInt;

function GetModuleHandle(lpModuleName: LongInt): LongInt; external 'GetModuleHandleA@kernel32.dll stdcall';
function ExtractIcon(hInst: LongInt; lpszExeFileName: PChar; nIconIndex: LongInt): LongInt; external 'ExtractIconA@shell32.dll stdcall';
function DrawIconEx(hdc: LongInt; xLeft, yTop: Integer; hIcon: LongInt; cxWidth, cyWidth: Integer; istepIfAniCur, hbrFlickerFreeDraw, diFlags: LongInt): LongInt; external 'DrawIconEx@user32.dll stdcall';
function LoadImage(hInst: LongInt; lpszExeFileName: PChar; uType: DWord; cxDesired, cyDesired: LongInt; fuLoad: DWord): hWnd; external 'LoadImageA@user32.dll stdcall';
function LoadBitmap(hInst: LongInt; lpBitmapName: PChar): HBITMAP; external 'LoadBitmapA@user32.dll stdcall';


или это (через CurPageChanged):
читать дальше »
Код:

;Глобальные переменные
#define MyAppName "***"
#define MyAppVerName "***"
#define MyAppPublisher "***"
#define MyAppExeName "***.exe"

;Подключение шаблона скина скина
[ISPP]
#define SkinFile "C:\Program Files\HiSoft\Inno Script Generator\Include\SkinCrafter\strait.skf"
#define SkinFolder "C:\Program Files\HiSoft\Inno Script Generator\Include\SkinCrafter"
#include SkinFolder + "\SkinCrafter.inc"

[Setup]
AppId={{BE611A8E-150F-4A38-ADAB-DC1E7BF2A8B8}
;Имя программы.
AppName={#MyAppName}
;имя с версией.
AppVerName={#MyAppVerName}
;Издатель.
AppPublisher={#MyAppPublisher}
;Версия сборки.
VersionInfoVersion=1.1.3
;Путь установки.
DefaultDirName={pf}\***
;Отключение выбора пути установки.
DisableDirPage=yes
;Имя группы в меню.
DefaultGroupName={#MyAppName}
;Отключение запроса имени группы.
DisableProgramGroupPage=yes
;Отключение страницы "Все готово к установке".
DisableReadyPage=yes
;Путь сборки инсталятора.
OutputDir=D:\Fup\***\Output
;Имя фаила инсталяции.
OutputBaseFilename=***Setup
;Скин инсталятора.
WizardImageFile=Left.bmp
WizardSmallImageFile=Up.bmp
;Иконка инсталятора.
SetupIconFile=Setup.ico
;Уровень сжатия инсталятора.
Compression=lzma/ultra
SolidCompression=yes
;Запрет кнопки "Отмена" во время установки.
AllowCancelDuringInstall=no
;Минимальная версия Windows для установки.
MinVersion=4.0,5.01

[Languages]
;Язык установки.
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Tasks]
;Создание ярлыка.

;Файлы для упаковки в инсталятор.
[Files]
;Служебные файлы инсталятора.
Source: Wallpaper.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: isgsg.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: bass.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: innocallback.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: Sound.mp3; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression

;Файлы для установки.
Source: ***


[Icons]
;Пункты меню в группе.
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Comment: ***
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Comment: ***

[Messages]
;Оформление инсталятора.
BeveledLabel=---***---

;Удаление ключа реестра при деинсталяции.
[Registry]
Root: HKLM; Subkey: Software\***; ValueType: dword; ValueName: ***; Flags: dontcreatekey uninsdeletevalue; ValueData: 3

;Удаление файла настроек при деинсталяции.
[UninstallDelete]
Name: {app}\***.ini; Type: files

;Блок кода. Запуск музыки, проверка версии, скин.

[code]
type
  HSTREAM=DWORD;
  TTimerProc=procedure(uTimerID,uMessage:UINT;dwUser,dw1,dw2:DWORD);
var
  MP3List:TStringList;
  CurrentMP3:integer;
  hMP3:HWND;
  TimerID:LongWord;

function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall delayload';
function ssInitialize(hParent:HWND;ssTimeShow:integer;FadeOut:boolean;StretchMode:integer;BkgColor:DWORD):boolean; external 'ssInitialize@files:isgsg.dll stdcall delayload';
procedure ssDeInitialize; external 'ssDeInitialize@files:isgsg.dll stdcall delayload';
procedure ssSetBkgImage(FileName:PChar); external 'ssSetBkgImage@files:isgsg.dll stdcall delayload';
function SetTimer(hWnd:HWND;nIDEvent,uElapse:UINT;lpTimerFunc:LongWord{TFNTimerProc}):UINT;  external 'SetTimer@user32.dll stdcall delayload';
function KillTimer(hWnd:HWND;uIDEvent:UINT):BOOL; external 'KillTimer@user32.dll stdcall delayload';
function BASS_ChannelIsActive(Handle:HWND):DWORD; external 'BASS_ChannelIsActive@files:bass.dll stdcall';
function BASS_SetConfig(Option,Value:DWORD):DWORD; external 'BASS_SetConfig@files:bass.dll stdcall';
function BASS_Init(Device:integer;Freq,Flags:DWORD;Win:HWND;CLSID:integer):boolean; external 'BASS_Init@files:bass.dll stdcall delayload';
function BASS_StreamCreateFile(Mem:BOOL;f:PChar;Offset:DWORD;Length:DWORD;Flags:DWORD):HSTREAM; external 'BASS_StreamCreateFile@files:bass.dll stdcall';
function BASS_StreamFree(Handle:HWND):boolean; external 'BASS_StreamFree@files:bass.dll stdcall';
function BASS_ChannelPlay(Handle:HWND;Restart:boolean):boolean; external 'BASS_ChannelPlay@files:bass.dll stdcall';
function BASS_Start: Boolean; external 'BASS_Start@files:bass.dll stdcall';
function BASS_Stop: Boolean; external 'BASS_Stop@files:bass.dll stdcall';
function BASS_Free: Boolean; external 'BASS_Free@files:bass.dll stdcall delayload';
function WrapTimerProc(CallBack:TTimerProc;ParamCount:integer):LongWord; external 'wrapcallback@files:innocallback.dll stdcall';

procedure TimerTick(uTimerID,uMessage:UINT;dwUser,dw1,dw2:DWORD);
begin
  if BASS_ChannelIsActive(hMP3)=0 then begin
    BASS_Stop;
    BASS_StreamFree(hMP3);
    hMP3:=BASS_StreamCreateFile(False,PChar(MP3List.Strings[CurrentMP3]),0,0,0);
    BASS_Start;
    if hMP3<>0 then
      if BASS_ChannelPlay(hMP3,True) then begin
        CurrentMP3:=CurrentMP3+1;
        if CurrentMP3>MP3List.Count-1 then CurrentMP3:=0;
      end;
  end;
end;

function InitializeSetup1:boolean;
begin
  ExtractTemporaryFile('Sound.mp3');
  MP3List:=TStringList.Create;
  MP3List.Add(ExpandConstant('{tmp}')+'\Sound.mp3');
  CurrentMP3:=0;
  Result:=True;
end;

procedure InitializeWizard1;
begin
  TimerID:=SetTimer(0,0,500,WrapTimerProc(@TimerTick,5));
  BASS_Init(-1,44100,0,0,0);
  BASS_SetConfig(5,100);
  BASS_SetConfig(6,100);
  ssInitialize(GetWindowLong(MainForm.Handle,-8),0,False,1,$FF000000);
  ExtractTemporaryFile('Wallpaper.jpg');
  ssSetBkgImage(ExpandConstant('{tmp}')+'\Wallpaper.jpg');
end;

procedure DeinitializeSetup1;
begin
  KillTimer(0,TimerID);
  BASS_Stop;
  BASS_Free;
  MP3List.Free;
  ssDeInitialize;
end;

//Настройка подключения к серверу.
procedure MyAfterInstall();
var
I: String;

begin
  if RegQueryStringValue(HKCU, '***', 'DefaultSystem', I)
      then
      SaveStringToFile('C:\Program Files\***.ini', I, true);
      SaveStringToFile('C:\Program Files\***.ini', #13#10 + 'true', true);
end;

//проверка на установленность и версию.
function DetectInstall(ProgName: string; ver: Integer): Boolean;
var
  Names: TArrayOfString;
  ResultDWord: Cardinal;
  i: Integer;
  msg: string;
begin
  Result:= True;
  if RegGetValueNames(HKEY_LOCAL_MACHINE, 'Software\***', Names) then
    begin
      for i:= 0 to GetArrayLength(Names)-1 do
        if Lowercase(ProgName) = Lowercase(Names[i]) then
          begin
            RegQueryDWordValue(HKEY_LOCAL_MACHINE, 'Software\***', Names[i], ResultDWord);
            if ResultDWord > ver then
              begin
                msg:= 'Установленная версия *** новее.';
                Result:= False;
                MsgBox(msg, mbInformation, MB_OK);
              end
            else
            if ResultDWord = ver then
              begin
                Result:= True;
              end;
            Break;
          end;
    end;
//Запись версии устанавливаемой программы.
RegWriteDWordValue(HKEY_LOCAL_MACHINE, 'Software\***', '***', 3);
end;

function InitializeSetup2(): Boolean;
begin
  // Имя программы и версия для проверки.
  Result:= DetectInstall('***', 3);
end;


//Проверка версии ***
function DetectInstall1(ProgName: string; ver: string): Boolean;
var
  Names: TArrayOfString;
  o: Integer;
  ResultStr, msg: string;
begin
if RegKeyExists(HKEY_LOCAL_MACHINE, 'Software\***') then
 begin
  Result:= True;
  if RegGetValueNames(HKEY_LOCAL_MACHINE, 'Software\***', Names) then
    begin
      for o:= 0 to GetArrayLength(Names)-1 do
        if Lowercase(ProgName) = Lowercase(Names[o]) then
          begin
            RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\***', Names[o], ResultStr);
            if ResultStr = ver then
              begin
                Result:= True;
              end
            else
              begin
                msg:= 'Установлена версия *** для ***.' #13#10 + 'Продолжение установки невозможно.';
                Result:= False;
                MsgBox(msg, mbInformation, MB_OK);
              end;
            Break;
          end;
    end;
 end
else
begin
msg:= '*** не установлен.' #13#10 + 'Дальнейшая установка невозможна.';
Result:= False;
MsgBox(msg, mbInformation, MB_OK);
end;
end;

function InitializeSetup3(): Boolean;
begin
  // Имя программы и версия для проверки.
  Result:= DetectInstall1('Current***Level', '***');
end;

function InitializeSetup(): Boolean;
begin
  Result := InitializeSetup1(); if not Result then exit;
  Result := InitializeSetup2(); if not Result then exit;
  Result := InitializeSetup3(); if not Result then exit;
end;

procedure InitializeWizard();
begin
  InitializeWizard1();
  SkinCrafter_InitializeWizard();
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
    if CurPageID=wpInstalling then
        WizardForm.FileNameLabel.Hide;
    end;


procedure DeinitializeSetup();
begin
  DeinitializeSetup1();
end;

//Подключение скина.
var Rect: TRect; hIcon: LongInt;

function GetModuleHandle(lpModuleName: LongInt): LongInt; external 'GetModuleHandleA@kernel32.dll stdcall';
function ExtractIcon(hInst: LongInt; lpszExeFileName: PChar; nIconIndex: LongInt): LongInt; external 'ExtractIconA@shell32.dll stdcall';
function DrawIconEx(hdc: LongInt; xLeft, yTop: Integer; hIcon: LongInt; cxWidth, cyWidth: Integer; istepIfAniCur, hbrFlickerFreeDraw, diFlags: LongInt): LongInt; external 'DrawIconEx@user32.dll stdcall';
function LoadImage(hInst: LongInt; lpszExeFileName: PChar; uType: DWord; cxDesired, cyDesired: LongInt; fuLoad: DWord): hWnd; external 'LoadImageA@user32.dll stdcall';
function LoadBitmap(hInst: LongInt; lpBitmapName: PChar): HBITMAP; external 'LoadBitmapA@user32.dll stdcall';


Dark Engel 18-12-2009 19:40 1298784

A1EXXX, Огромное спасибо второй метод сработал на ура.
Остался второй вопрос.

Как убрать во время распаковки файлов извещение какие файлы и куда распаковываются. Оставить только надпись "идет распаковка". (Или хотя бы не показывать их при silent/verysilent установке)

A1EXXX 18-12-2009 19:50 1298791

Dark Engel, О_о, если ты об этом, то как раз это я и убирал в убоих случаях....

ADremLIN 18-12-2009 22:56 1298901

Вложений: 2
Уважаемые знатоки (с).

Решил сделать для себя табличку, отображающую порядок возникновения событий в процессе инсталляции. При подготовки таблицы я использовал переведенный на русский хелп по Inno Setup version 5.1.8.

Вот что у меня получилось. Прошу вас поправить меня, если я где-то, что-то перепутал.



Нигде не нашел информации, чем отличается ssPreInstall от ssInstall [Добавлено] Упс. Нашел ;)

Для чего мне нужна эта таблица этапов инсталляции?

Просто у меня возник вопрос, связанный с тем, что инсталятор не корректно обновляет внесенные изменения в системный %PATH%. (при включенном ChangesEnvironment=yes).

В обработчике какого события, или на каком шаге инсталяции, мне нужно изменить системный %PATH%, чтобы выполнить задачу из секции [Run] c флагом postinstall, с учетом новых путей?

Поэтому прошу уважаемый форум:
  • Во-первых утвердить (поправить и утвердить) мою таблицу (Сомневаюсь №35 <-> №36);
  • Во-вторых помочь с моей проблемой (продолжение см. ниже);

Dark Engel 19-12-2009 12:57 1299159

A1EXXX, У-у-п-с ошибся. Мне нужно убрать при silent установке окошки типа "Дальнейшая установка невозможна" См скрипт.

Код:

begin
                msg:= 'Установленная версия *** новее.';
                Result:= False;
                MsgBox(msg, mbInformation, MB_OK);
              end


ADremLIN 19-12-2009 13:16 1299175

Продолжение (начало см. выше):

То есть, в общих чертах, образовалась такая проблема:

Свежеустановленная инсталлятором программа запускается в секции [Run] c флагом postinstall.
Она использует новые, только что зарегистрированные, пути для поиска необходимых для работы *.dll файлов.
Но инсталлятор, сообщая другим оконным приложениям windows об изменении "environment", похоже не обновляет эти изменения сам у себя.
А так как родителем любых процессов (приложений), запускаемых инсталлятором, является сам инсталлятор, то они (запускаемые приложения) не видят новых путей (обновленных значений других переменных окружения виндовс).

По-моему так. Поправьте меня, если я не прав...


Уже просто разбил стену лбом, но ответа так и нет.
Пример, демонстрирующий описанную проблему с %PATH%

Пояснения:

Инсталлятор добавляет новые пути в %PATH%:
'{app}\bin1'
'{app}\bin2'

ChangesEnvironment=yes;

При выходе, инсталлятор запускает bat'ничек (секция [Run] c флагом postinstall) с командой SET PATH внутри, для просмотра значений системной переменной %PATH%, и ждет закрытия окна консоли.
И я не вижу здесь (в окне консоли, открытой из инсталлятора) никаких изменений в переменных окружения...

Если, не закрывая окна консоли, открытой инсталлятором, открыть новую консоль и ввести руками туже команду: SET PATH, то я вижу новые пути в переменной...



НИЧЕГО НЕ ПОНИМАЮ!!!
Это БАГ Inno Setup'а, или я что-то не так делаю???
Если - это баг, то существует ли способ его обойти???

Спасибо за внимание.

ЗЫ:
Я уже сталкивался с этой проблемой ранее, получил ответ, но разрешить проблему так и не удалось... Поэтому и начал копать сам...

REXE 19-12-2009 19:50 1299460

Помогите пожалуйста как исправить ,я поставил кнопки которые прилогались к черному фону,кнопка работает только при нажатии на текст в кнопке а не на сому кнопку.буду благодарен

Молодой 20-12-2009 12:06 1299838

Всем доброго времени суток, подскажите где в скрипте распаковки FR указать "требуемое место для распаковки"
Не могу найти строку, заранее благодарен!

YURSHAT 20-12-2009 12:41 1299861

Цитата:

Цитата Молодой
Всем доброго времени суток, подскажите где в скрипте распаковки FR указать "требуемое место для распаковки" »

А что значит FR?

Молодой 20-12-2009 12:48 1299869

Freearc архиватор=)

Pilotfcsm 20-12-2009 14:03 1299906

Здравствуйте. Поиском не нашел того что нужно, поэтому вопрос:
Можно ли сделать так чтобы после установки программы, появлялось окно, в котором было несколько определенных пунктов, и возможность выбора одного из них. При выборе какого либо пункта, определенный файл копировался бы из папки скажем {app}\Папка\файл.ini в корневую папку программы?

Если кто встречал рпимер скрипта, поделитесь пожалуйста.

И еще последний вопрос, можно ли сделать чтобы в окне выбора компонентов( какие будут устанавливаться, а какие нет), при наведении на какой либо компонент, рядом появлялась подсказка (комментарий) для этого компонента, в котрой написано пояснение для чего нужен он? Наподобие как в нсис

A1EXXX 20-12-2009 15:00 1299941

Молодой, там и нет такой строчки, это задаётся вручную: 1) скриптом:
читать дальше »
Код:

[Code]
var
NeedSize:Integer; FreeMB, TotalMB: Cardinal; NeedSpaceLabel,FreeSpaceLabel: TLabel;

procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
FreeSpaceLabel.Caption := 'Доступно места на диске: '+ FloatToStr(round(FreeMB/1024*100)/100) + ' GB' else
FreeSpaceLabel.Caption := 'Доступно места на диске: '+ IntToStr(FreeMB)+ ' MB';
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False else
WizardForm.NextButton.Enabled := True; end;

procedure GetNeedSpaceCaption;
begin
if NeedSize > 1024 then
NeedSpaceLabel.Caption := 'Требуется места на диске: '+ FloatToStr(round(NeedSize/1024*100)/100) + ' GB' else
NeedSpaceLabel.Caption := 'Требуется места на диске: '+ IntToStr(NeedSize)+ ' MB';
end;

procedure InitializeWizard();
begin
NeedSize := 630000;

WizardForm.DiskSpaceLabel.Hide;

NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(202);
Width := ScaleX(209);
Height := ScaleY(13);
end;

FreeSpaceLabel := TLabel.Create(WizardForm);
with FreeSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(220);
Width := ScaleX(209);
Height := ScaleY(13);
end;
WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then begin
GetNeedSpaceCaption;
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled:=False
end;
end;


2) Обычным редактированием Russian.isl (Default.isl)


Pilotfcsm, по поводу второго вопроса - в шапке есть Коллекция скриптов, там это есть.

YURSHAT 20-12-2009 15:06 1299944

Цитата:

Цитата Pilotfcsm
И еще последний вопрос, можно ли сделать чтобы в окне выбора компонентов( какие будут устанавливаться, а какие нет), при наведении на какой либо компонент, рядом появлялась подсказка (комментарий) для этого компонента, в котрой написано пояснение для чего нужен он? Наподобие как в нсис »

Пример
Код:

[Setup]
AppName=AppName
AppVerName=AppVerName
CreateAppDir=false

[Files]
Source: compiler:WizModernSmallImage.bmp; DestDir: {tmp}; Flags: dontcopy
Source: compiler:WizModernSmallImage-IS.bmp; DestDir: {tmp}; Flags: dontcopy

[Code_]
Var
  Page: TWizardPage;
  Text1,Text2,Text3,Text4: TNewStaticText;
  Panel: TPanel;
  ListBox: TListBox;
  Check1,Check2: TCheckBox;
  NoChecks,Label1,Label2: TLabel;
  Image: TBitmapImage;

Function Checked1: Boolean;
begin
  Result:=Check1.Checked
end;

Function Checked2: Boolean;
begin
  Result:=Check2.Checked
end;

Procedure Check1OnClick (Sender: TObject);
begin
  Check1.Checked:=Not(Check1.Checked)
end;

Procedure Check2OnClick (Sender: TObject);
begin
  Check2.Checked:=Not(Check2.Checked)
end;

procedure Check1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Text4.Enabled:=True
Text4.Caption:='Описание первого компонента'
Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizModernSmallImage.bmp'))
Image.Visible:=True
end;

procedure Check2MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Text4.Enabled:=True
Text4.Caption:='Описание второго компонента'
Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizModernSmallImage-IS.bmp'))
Image.Visible:=True
end;

procedure NoChecksMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Text4.Enabled:=False
Text4.Caption:='Наведите курсор мыши на название компонента, чтобы прочесть его описание.'
Image.Visible:=False
end;

Procedure InitializeWizard();
begin
  ExtractTemporaryFile('WizModernSmallImage.bmp')
  ExtractTemporaryFile('WizModernSmallImage-IS.bmp')

  Page:=CreateCustomPage(2, 'Компоненты устанавливаемой программы', 'Выберите компоненты, которые вы хотите установить.')

  Text1:=TNewStaticText.Create(Page)
  Text1.Left:=0
  Text1.Top:=0
  Text1.Width:=417
  Text1.Height:=28
  Text1.AutoSize:=False
  Text1.WordWrap:=True
  Text1.Caption:='Выберите компоненты программы, которые вы хотите установить. Нажмите на кнопку "Далее" для продолжения.'
  Text1.Parent:=Page.Surface

  Text2:=TNewStaticText.Create(Page)
  Text2.Left:=0
  Text2.Top:=63
  Text2.Width:=130
  Text2.Height:=42
  Text2.AutoSize:=False
  Text2.WordWrap:=True
  Text2.Caption:='Выберите компоненты программы для установки:'
  Text2.Parent:=Page.Surface

  Image:=TBitmapImage.Create(WizardForm)
  Image.Left:=0
  Image.Top:=Text2.Top + Text2.Height + 10;
  Image.Width:=55
  Image.Height:=55
  Image.Parent:=Page.Surface

  Panel:=TPanel.Create(Page)
  Panel.Left:=287
  Panel.Top:=60
  Panel.Width:=130
  Panel.Height:=160
  Panel.BevelInner:=bvLowered
  Panel.Parent:=Page.Surface

  Text3:=TNewStaticText.Create(Page)
  Text3.Left:=293
  Text3.Top:=54
  Text3.Font.Color:=clBlue
  Text3.Caption:='Описание'
  Text3.Parent:=Page.Surface

  Text4:=TNewStaticText.Create(Page)
  Text4.Left:=4
  Text4.Top:=10
  Text4.Width:=122
  Text4.Height:=140
  Text4.AutoSize:=False
  Text4.WordWrap:=True
  Text4.Parent:=Panel

  NoChecks:=TLabel.Create(Page)
  NoChecks.Width:=WizardForm.Width
  NoChecks.Height:=WizardForm.Height
  NoChecks.Autosize:=False
  NoChecks.Transparent:=True
  NoChecks.OnMouseMove:=@NoChecksMouseMove
  NoChecks.Parent:=Page.Surface

  ListBox:=TListBox.Create(Page)
  ListBox.Left:=135
  ListBox.Top:=60
  ListBox.Width:=140
  ListBox.Height:=160
  ListBox.Parent:=Page.Surface

  Check1:=TCheckBox.Create(Page)
  Check1.Left:=2
  Check1.Top:=0
  Check1.Checked:=True
  Check1.Parent:=ListBox

  Check2:=TCheckBox.Create(Page)
  Check2.Left:=2
  Check2.Top:=16
  Check2.Checked:=True
  Check2.Parent:=ListBox

  Label1:=TLabel.Create(Page)
  Label1.Left:=16
  Label1.Top:=2
  Label1.Caption:='Компонент 1'
  Label1.OnClick:=@Check1OnClick
  Label1.OnMouseMove:=@Check1MouseMove
  Label1.Parent:=Check1

  Label2:=TLabel.Create(Page)
  Label2.Left:=16
  Label2.Top:=2
  Label2.Caption:='Компонент 2'
  Label2.OnClick:=@Check2OnClick
  Label2.OnMouseMove:=@Check2MouseMove
  Label2.Parent:=Check2
end;


Serega 20-12-2009 15:37 1299967

Цитата:

Цитата ADremLIN
то существует ли способ его обойти??? »

Я раньше не обращал на это внимание, но действительно получается очень интересно.
Каким образом это обойти - изменить пути реализации скрипта, т.е. я как понял вы хотите использовать эти переменные в каком-то батнике, если да, то можно создавать батник программно, с помощью SaveStringToFile или SaveStringsToFile и записывать туда уже действительный путь.

ADremLIN 20-12-2009 21:40 1300221

Serega,

Пример с батником - всего лишь для иллюстрации проблемы...

Настоящая задача - Установить Apache Http Server при помощи инсталлятора, созданного в Inno Setup'е. Зарегистрировать в качестве службы Windows, и запустить его по выбору пользователя по окончании инсталляции.

В качестве одного из дополнительных плагинов к Апачу - mod_wsgi (работает с программами написанными на языке Питон), который требует наличия в %PATH% пути к установленному в системе Питону, а конкретней - к python25.dll, или эта либа должна лежать рядом с httpd.exe.

По ряду причин - второе невозможно. Остается первое - дать понять демону апача где искать нужные библиотеки...

С помощью ChangesEnvironment=yes внутреннее, для инсталлятора, системное окружение, а в часности пути поиска - почему-то не обновляются. Если я правильно понимаю, все порожаемые инсталлятором процессы наследуют его системное окружение, и поэтому запускаются в старом, не обновленном системном окружении, со всеми вытекающими отсюда последствиями...

В моем случае при завершении работы инсталлятора апач не стартует, так как его модуль mod_wsgi не находит, свежеустановленную, но лежащую в другой папке python25.dll, хотя пути до нее в системе уже обновились. (что я надеюсь наглядно проиллюстрировал в примере выше).

Казалось бы все вышесказанное - СТРАШНЫЙ БАГ Inno Setup'а, который не позволяет решить поставленную задачу!!!

Но... Слава Великому и Ужасному ГУГЛЮ!!! Нашелся способ обойти проблему...

Воспользовавшись вот этим: Уважаемый тов. MK сообщил 21-02-2001 в 02:58, мне удалось запустить апача со всеми нужными ему и его модулям библиотеками, вне зависимости от системной переменной %PATH%.

Цитата:

... если исполняемый файл и используемые им библиотеки находятся в различных каталогах, то в раздел HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths нужно добавить ключ, соответствующий имени Вашей программы без пути, например BUZZER.EXE, и в этот ключ добавить:

1. значение по умолчанию, соответствующее полному имени файла (с путем)

2. строковый параметр Path, определяющий каталоги с файлами в формате задания переменной Path в autoexec.bat

Теперь при запуске программы значение Path будет добавлено к системной переменной Path ...
Каюсь, что до этого я не знал об этой возможности в Windows :(

Итак пример, показывающий решение проблемы, подобной моей :

Код:

[Registry]
Root: HKLM; Subkey: "Software\Microsoft\Windows\CurrentVersion\App Paths\python.exe"; ValueType: string; ValueData: "{app}\python.exe"; Flags: uninsdeletekey 
Root: HKLM; Subkey: "Software\Microsoft\Windows\CurrentVersion\App Paths\python.exe"; ValueType: string; ValueName: "Path"; ValueData: "{app}\python"; Flags: uninsdeletekey 

[Run]
Filename: "python.exe"; WorkingDir: "{app}"; Description: Start {#MyAppName}; Components: a; Flags: shellexec postinstall waituntilterminated

Здесь python.exe лежит в {app}, а нужная ему либа в {app}\python
* При запуске вашей программы из секции [Run], флаг shellexec - включать обязательно! (без него не работает).
* Если запуск приложения происходит из секции [_Code] - обязательно используйте функцию shellexec('Open', ...).

Надеюсь мои изыскания будут полезны кому-нибудь ещё, ведь "умные люди" должны учиться на чужих ошибках...

Всем удачных инсталлов!
Сергей.

AH4OyC 20-12-2009 22:46 1300281

Вложений: 1
Как соеденить мой скрипт с архивом The Club.arc чтобы распаковалось и чтобы было врямя до завершения установки? Помогите! Я сам начал делать но у меня всегда ошибки вылетатю.

скрипт прикрепил

Скрипт а-ля BlackSelf от YURSHAT

Dark Engel 21-12-2009 11:55 1300613

К сожалению никто по моему вопросику не ответил :( посему копаю сам. Нарыл такую функцию function WizardSilent: Boolean;

Решил попробовать таким образом:

читать дальше »
Код:

//проверка на установленность и версию.
function DetectInstall(ProgName: string; ver: Integer): Boolean;
var
  Names: TArrayOfString;
  ResultDWord: Cardinal;
  i: Integer;
  msg: string;
begin
  Result:= True;
  if RegGetValueNames(HKEY_LOCAL_MACHINE, 'Software\***\***', Names) then
    begin
      for i:= 0 to GetArrayLength(Names)-1 do
        if Lowercase(ProgName) = Lowercase(Names[i]) then
          begin
            RegQueryDWordValue(HKEY_LOCAL_MACHINE, 'Software\***\***', Names[i], ResultDWord);
            if ResultDWord > ver then
              begin
                if WizardSilent then
                Result:= False
                else
                msg:= 'Установленная версия *** новее.';
                Result:= False;
                MsgBox(msg, mbError, MB_OK);
              end

            else
            if ResultDWord = ver then
              begin
                Result:= True;
              end;
            Break;
          end;
    end;
//Запись версии устанавливаемой программы.
RegWriteDWordValue(HKEY_LOCAL_MACHINE, 'Software\***\***', '***', 3);
end;



По логике если инсталяция silent то просто Result:= False а если обычная то

msg:= 'Установленная версия *** новее.';
Result:= False;
MsgBox(msg, mbError, MB_OK);

Но почему то в silent появляется пустое окошечко с кнопкой OK.

Вопрос снимается, решил сам. Если кому нужно прикладываю готовый код

читать дальше »
Код:

//проверка на установленность и версию.
function DetectInstall(ProgName: string; ver: Integer): Boolean;
var
  Names: TArrayOfString;
  ResultDWord: Cardinal;
  i: Integer;
  msg: string;
begin
  Result:= True;
  if RegGetValueNames(HKEY_LOCAL_MACHINE, 'Software\***\***', Names) then
    begin
      for i:= 0 to GetArrayLength(Names)-1 do
        if Lowercase(ProgName) = Lowercase(Names[i]) then
          begin
            RegQueryDWordValue(HKEY_LOCAL_MACHINE, 'Software\***\***', Names[i], ResultDWord);
            if ResultDWord > ver then
              begin
                if not WizardSilent then
                Begin
                msg:= 'Установленная версия *** новее.';
                Result:= False;
                MsgBox(msg, mbError, MB_OK);
                end
                else
                Result:= False
              end

            else
            if ResultDWord = ver then
              begin
                Result:= True;
              end;
            Break;
          end;
    end;
//Запись версии устанавливаемой программы.
RegWriteDWordValue(HKEY_LOCAL_MACHINE, 'Software\***\***', '***', 3);
end;


YURSHAT 21-12-2009 17:07 1300871

Скрипт InnoSetup для распаковки архивов FreeArc

Версия 3.5 от 21-12-2009
- поддержка опций -ap/-ld/-cfg в FreeArcExtract()
- ускорена распаковка при большом количестве wav-файлов (метод TTA)
- можно передавать NULL в качестве первого параметра (callback) в FreeArcExtract()
- исправлена ошибка: обрабатывались опции после '--'

МИШАНЧИК 22-12-2009 01:41 1301283

YURSHAT, ЛС посмотрите пожалуйста.

Молодой 22-12-2009 13:16 1301572

Скачал новый скрипт распаковки, откомпилировал, начал проверять, и заметил что все архивы распаковываются в папку archives
Как исправить такую проблему?

Cranz86 22-12-2009 13:37 1301588

Всем доброго времени суток. У меня немного запутанная проблема. Есть исска, все хорошо работает, но надо добавить 2 функции, это установка домашней страницы и сделать поиском по умолчанию. Обе это функции выполняет сторонний exe-файл, но он по умолчанию устанавливает тулбар, т.е.:
Код:


procedure CurPageChanged(CurPageID: Integer);
var
  ErrorCode: Integer;
  FirefoxPath: String;
begin
  if CurPageId = wpFinished then
  begin
    if ToolbarCheck.Checked then
    begin
    if not ShellExec('open', ExpandConstant('{app}\prog.exe'), '/s -DefaultSearch=FALSE -StartPage=FALSE', '', SW_SHOW, ewNowait, ErrorCode) then
        end;
begin
  if CurPageId = wpFinished then
  begin
    if HomeCheck.Checked then
    begin
    if not ShellExec('open', ExpandConstant('{app}\prog.exe'), '/s -DefaultSearch=FALSE -StartPage=TRUE', '', SW_SHOW, ewNowait, ErrorCode) then
      end;
      end;
      begin
  if CurPageId = wpFinished then
  begin
    if SearchCheck.Checked then
    begin
    if not ShellExec('open', ExpandConstant('{app}\prog.exe'), '/s -DefaultSearch=TRUE -StartPage=FALSE', '', SW_SHOW, ewNowait, ErrorCode) then

в целом это глупо, ставить 3 программы одновременно, но в стороннем exe-шнике так устроено, что первый чекбокс обязателен, а 2 и 3 отдельно не ставятся. Вопрос, можно как то это обойти или же хотя бы поставить очерёдность, т.к. эта программка ставиться очень быстро, но при одновременной установке бывают тормоза и ошибки (зависит от ОС и железа)

A1EXXX 22-12-2009 14:32 1301642

Молодой, в [Files] замени это: Source: {src}\*.arc; DestDir: {app}\ArcFiles; Flags: external dontcopy на это: Source: {src}\*.arc; DestDir: {app}; Flags: external dontcopy

Молодой 22-12-2009 14:39 1301646

Уже догадался, все равно спасибо за помощь!

Подскажите как убрать слова при распаковке, оставить только то "идет распаковка игровых архивов"
и время с процентами распаковки!??

Serega 22-12-2009 14:55 1301658

Цитата:

Цитата Cranz86
У меня немного запутанная проблема »

Возможно, что вы не ищите лёгких путей и поэтому для установки дополнений прописываете их в секции [code]...
Можно же использовать секцию [Run]:
Код:

[Run]
Filename: {app}\prog.exe; Parameters: "/s -DefaultSearch=FALSE -StartPage=FALSE"; Description: Установить тулбар; Flags: postinstall skipifsilent skipifdoesntexist
Filename: {app}\prog.exe; Parameters: "/s -DefaultSearch=FALSE -StartPage=TRUE"; Description: Установить домашнюю страницу; Flags: postinstall skipifsilent skipifdoesntexist unchecked
Filename: {app}\prog.exe; Parameters: "/s -DefaultSearch=TRUE -StartPage=FALSE"; Description: Сделать поиском по умолчанию; Flags: postinstall skipifsilent skipifdoesntexist unchecked

Цитата:

Цитата Cranz86
поставить очерёдность »

Замените все ewNowait на ewWaitUntilTerminated

Cranz86 22-12-2009 15:48 1301705

Цитата:

Цитата Serega
Можно же использовать секцию [Run]: »

да, это конечно же все бы упростило, но помимо трёх чекбоксом там ещё две ссылки на лицензии, описание компонентов, рисунок-пример, так что без отдельного окна не обойтись...
Цитата:

Цитата Serega
Замените все ewNowait на ewWaitUntilTerminated »

почему то не помогло, во время установки процесс повисает=(((

A1EXXX 22-12-2009 17:13 1301766

Цитата:

Цитата Cranz86
почему то не помогло, во время установки процесс повисает=((( »

При ewWaitUntilTerminated инсталл становится некликабельным, как бы зависшим, но всё нормально, так и должно быть :)

Cranz86 22-12-2009 17:44 1301793

Цитата:

Цитата A1EXXX
так и должно быть »

я отличаю некликабельность от зависания процесса, итог такой установки, из 3-х процедур выполнилась только первая...

Serega 22-12-2009 18:29 1301827

Цитата:

Цитата Cranz86
я отличаю некликабельность от зависания процесса, итог такой установки, из 3-х процедур выполнилась только первая... »

Следовательно у вас где-то ошибка и процесс зависает, а команда ewWaitUntilTerminated, заставляет инсталлятор ждать завершения этого процесса. Итог - зависание самого инсталлятора.

Cranz86 22-12-2009 19:00 1301848

Цитата:

Цитата Serega
где-то ошибка »

а примерно в чём она может заключаться, если при ewNowait относительно нормально ставиться?

Serega 22-12-2009 20:55 1301922

Цитата:

Цитата Cranz86
а примерно в чём она может заключаться, если при ewNowait относительно нормально ставиться? »

Интересное высказывание... если бы было у вас нормально, то думаю вы бы не задавались таким вопросом.
Ошибка может быть в передаваемых параметрах запуска, вашей сторонней программы.

lmiol 22-12-2009 22:18 1302004

я писал
Цитата:

как сделать чтобы если виста то файлы автоматом в одну папку а если хр то в другую инсталились?
пример что мне написали
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\{code:DetectWindows}
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion

[Code]
function DetectWindows(s: string): string;
var
  SubKeyName, ResultStr: string;
begin
  SubKeyName:= 'Software\Microsoft\Windows NT\CurrentVersion';
  RegQueryStringValue(HKLM, SubKeyName, 'ProductName', ResultStr);
  if Pos('XP', ResultStr) > 0 then
    Result:= 'XP'
  else
  if Pos('Vista', ResultStr) > 0 then
    Result:= 'Vista'
  else Result:= 'My Program';
end;



я не совсем понял как вписать, у мну первый ХР путь это
Код:

C:\Documents and Settings\Ваше_имя_пользователя\Application Data\id Software
а на Vista это
Код:

C:\Users\Ваше_имя_пользователя\AppData\LocalLow\id Software\

Habetdin 22-12-2009 22:25 1302008

lmiol, используйте переменные {userappdata} и {localappdata}, а не прямые пути :)

lmiol 22-12-2009 22:44 1302029

я и использую я просто путь нашкрябал

а LocalLow что в висте определяется как {localappdata}?

Serega 22-12-2009 23:15 1302056

Цитата:

Цитата lmiol
я не совсем понял как вписать »

Пример
Код:

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {code:DetectWindows}; Flags: ignoreversion

[Code]
function DetectWindows(s: string): string;
var
  SubKeyName, ResultStr: string;
begin
  SubKeyName:= 'Software\Microsoft\Windows NT\CurrentVersion';
  RegQueryStringValue(HKLM, SubKeyName, 'ProductName', ResultStr);
  if Pos('XP', ResultStr) > 0 then
    Result:= ExpandConstant('{%APPDATA}\id Software')
  else
  if Pos('Vista', ResultStr) > 0 then
    // не знаю, будет ли это C:\Users\Ваше_имя_пользователя\AppData\LocalLow\id Software
    // проверить не где
    Result:= ExpandConstant('{%APPDATA}\LocalLow\id Software')
  else Result:= ''; // сюда нужно вписать путь по дефолту, т.е. если не XP или Vista
end;


lmiol 22-12-2009 23:17 1302057

серега как всегда выручает!!!!+1

beve 23-12-2009 00:00 1302090

Подскажите плз, если надо добавить в инсталятор какой то файл, то это можно прописать в скрипте в секции [Files] так: Source: "{app}\help.chm"; DestDir: "{app}"; . Откуда возьмется файл и куда установится мне понятно. Но, вот как добавить в установщик вместо файла help.chm например папку help из вложенными в нее разными файлами и подпапками, не перечисляя их все, а просто чтоб впихнуть в инсталятор готовую папку с файлами, а потом ее извлеч в корень установленной проги???

Serega 23-12-2009 00:20 1302107

Цитата:

Цитата beve
Подскажите »

так:
Код:

[Files]
Source: Papka\*; DestDir: {app}; Flags: createallsubdirs ignoreversion recursesubdirs


lmiol 23-12-2009 01:18 1302136

опа тут новая нипонятка а как сделать если у мну дефолтной папки нет
и у меня много компонентов
Код:

[Files]
Source: "uninstall.ico"; Components: main; DestDir: "{userappdata}\id Software\uninstall"; Flags: ignoreversion
Source: "usercur\*"; Components: main; DestDir: "{userappdata}\id Software"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Source: "usercur2\*"; Components: manual; DestDir: "{userappdata}\id Software"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Source: "usercur3\*"; Components: browser; DestDir: "{userappdata}\"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Source: "programfiles\*"; Components: browser; DestDir: "{pf}\"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Source: "pk3\*"; Components: main; DestDir: "{userappdata}\id Software"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension nocompression
Source: "pbsvc.exe" ;Components: anti;DestDir: "{tmp}"; Flags: ignoreversion
Source: "QuakeLiveNP_277.msi" ;Components: plug;DestDir: "{tmp}"; Flags: ignoreversion


тоисть есть еще отдельные пути (pf и tmp я думаю путь такой же и на висте)

МИШАНЧИК 23-12-2009 10:24 1302308

Подскажите пожалуйста, как правильно удалить ветвь реестра перед инсталяцией?

REXE 23-12-2009 13:39 1302447

Помогите пожалуйста как исправить ,я поставил кнопки которые прилогались к черному фону,кнопка работает только при нажатии на текст в кнопке а не на сому кнопку.буду благодарен

Habetdin 23-12-2009 18:05 1302708

МИШАНЧИК, Пост 631, InitializeSetup - это инициализация установщика, происходит явно перед установкой ;)

REXE 23-12-2009 18:26 1302739

Народ дайте пожалуйста код чтобы на каждой странице верхнюю картинку растянуть(это я умею),а на эту картинку наложить текст ,это как раз не получается

Только чтобы текст был без фона черного

A1EXXX 23-12-2009 20:15 1302800

REXE,
читать дальше »
Код:

[Code]
var
PageNameLabel1, PageDescriptionLabel1: TLabel;


procedure InitializeWizard();
begin
PageNameLabel1 := TLabel.Create(WizardForm);
with PageNameLabel1 do
begin
Left := ScaleX(13);
Top := ScaleY(9);
Width := ScaleX(300);
Height := ScaleY(14);
AutoSize := False;
WordWrap := True;
Font.Name := 'Tahoma'
Font.Style := [fsBold];
ShowAccelChar := False;
Transparent := True;
Parent := WizardForm.MainPanel;
end;

PageDescriptionLabel1 := TLabel.Create(WizardForm);
with PageDescriptionLabel1 do
begin
Left := ScaleX(25);
Top := ScaleY(24);
Width := ScaleX(475);
Height := ScaleY(30);
AutoSize := False;
WordWrap := True;
Font.Name := 'Tahoma'
ShowAccelChar := False;
Transparent := True;
Parent := WizardForm.MainPanel;
end;

with WizardForm do
begin
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
with MainPanel do
begin
with WizardSmallBitmapImage do
begin
Left := ScaleX(0);
Top := ScaleY(0);
Width := Mainpanel.Width;
Height := MainPanel.Height;
end;
end;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
PageNameLabel1.Caption := WizardForm.PageNameLabel.Caption;
PageDescriptionLabel1.Caption := WizardForm.PageDescriptionLabel.Caption;
end;


REXE 23-12-2009 21:57 1302871

A1EXXX спасибо большое!!))

МИШАНЧИК 24-12-2009 03:03 1303049

Habetdin, спасибо!

Затупил, простите

А если несколько ветвей, так?
Код:

function InitializeSetup(): Boolean;
begin
  RegDeleteKeyIncludingSubkeys(HKLM, 'Software\My Program1');
  Result:= True;
  RegDeleteKeyIncludingSubkeys(HKLM, 'Software\My Program2');
  Result:= True;
  RegDeleteKeyIncludingSubkeys(HKCU, 'Software\My Program3');
  Result:= True;
end;


REXE 24-12-2009 11:20 1303230

Народ дайте ссылку где скачать последний фриарк,и научите как им пользоватся или дайте ссылку где можно научится.

Sotonisto 24-12-2009 11:57 1303245

Народ, вы ток не смейтесь - возможно я задам глупые вопросы, но я только 2 дня назад познакомился с этой прогой и естественно я в ней ламер.
И так...

1. У меня есть игра Left 4 Dead 2. Я ее обновил всеми патчами, установил кряк. Терь мне нужно свободное место на диске. И вот я решил создать инсталл игры. Все бы ничего, но все инсталлы размер которых больше 700Mb у меня зависают :(
Вопрос - это чет я в коде не то сделал (скрипт прилагается), или же файлы игры нужно чем-нить cжать, а потом прописать какуе-то команду для распаковки.

2. Патчи для Left 4 Dead 2 нужно прописывать в реестре. В каждой системе (х64 и х32) нужно вносить в реестр разные значения.
читать дальше »
Код:

Для х32
[HKEY_CURRENT_USER\Software\Classes\CLSID\{5F63E8CB-8F57-490A-97FE-62BC2F2A5EA4}\InprocServer32] 
[HKEY_CURRENT_USER\Software\Classes\CLSID\{66B6B493-6055-4572-8FC1-A0FA86D63545}] 
[HKEY_CURRENT_USER\Software\Classes\CLSID\{8D083C4F-F8B1-42ED-851B-51017CF4C161}]

Для х64
[HKEY_CURRENT_USER\Software\Classes\Wow6432Node\CLSID\{5F63E8CB-8F57-490A-97FE-62BC2F2A5EA4}\InprocServer32]
[HKEY_CURRENT_USER\Software\Classes\Wow6432Node\CLSID\{66B6B493-6055-4572-8FC1-A0FA86D63545}]
[HKEY_CURRENT_USER\Software\Classes\Wow6432Node\CLSID\{8D083C4F-F8B1-42ED-851B-51017CF4C161}]


Так вот, можно ли автоматом (в зависимости от системы) внести эти значения в реестр? Или хотя бы дать пользователю возможность выбрать какое из значений внести в реестр.
Если такое возможно - дайте код.

3. Можно ли сделать вот такое. Вместо того что бы выбирать в меню с лиц. соглашением "Я согласен" а потом нажимать "Далее", сделать кнопку "Принимаю" - нажал на нее и появился следующий диалог (желательно что бы кнопка "Принимаю" находилась на месте кнопки "Далее")?

gera777 24-12-2009 16:09 1303407

Создаю инсталлятор для одной проги возникло пару вопросов. Буду очень признателен, если посоветуете что-то.

1. Есть ли команды для Командной строки? Но не для уже собранного инсталлятора, а для скрипта(т.е. менять настройки типа AppName, AppVerName). В общем мне надо менять AppVerName автоматически - до того как собереться инсталлятор. Возможно ли это?

2. Довольно глупо, но не смог найти. Как добавить кнопку "New Folder" для Browse for Folder в Select Destination Location. Странно, но у меня она не отображается.

Заранее благодарен.

lmiol 24-12-2009 16:45 1303426

Цитата:

1. Есть ли команды для Командной строки? Но не для уже собранного инсталлятора, а для скрипта(т.е. менять настройки типа AppName, AppVerName). В общем мне надо менять AppVerName автоматически - до того как собереться инсталлятор. Возможно ли это?
Да в папке с инсталятором есть папка Language найди там Russian.lng и открой блокнотом там можешь подправить что нужно
или есть второй вариант прям в скрипте вписать нужные тебе строки
Пример
[Messages]
BeveledLabel=Copyright © Mio Dark Project
WelcomeLabel1=Вас приветствует Мастер обновления [name]
WelcomeLabel2=Программа обновит [name] (до версии 0.1.0 270 за 11.11.09) на Вашем компьютере.%n%nРекомендуется закрыть все прочие приложения перед тем, как продолжить.
ClickNext=Нажмите «Далее», чтобы продолжить, или «Отмена», чтобы выйти из программы обновления.
SetupAppTitle=Обновление
SetupWindowTitle=Обновление %1
WizardReady=Всё готово к обновлению
ReadyLabel1=Программа обновления готова начать обновление [name].
WizardInstalling=Обновление...
InstallingLabel=Пожалуйста, подождите, пока [name] обновится на Вашем компьютере.
ReadyLabel2b=Нажмите «Обновить», чтобы продолжить.
ButtonInstall=&Обновить
ExitSetupTitle=Выход из программы обновления
ExitSetupMessage=Обновление не завершено. Если Вы выйдете, программа не будет обновлена.%n%nВы сможете завершить обновление, запустив программу обновления позже.%n%nВыйти из программы обновления?
FinishedHeadingLabel=Завершение Мастера обновления [name]
FinishedLabelNoIcons=Программа [name] обновлена на Вашем компьютере.
ClickFinish=Нажмите «Завершить», чтобы выйти из программы обновления.


всё с последним кодом разобрался спасибо сергей,,,, осталось нати тестеров для проверки

gera777 24-12-2009 16:58 1303439

lmiol,
Подправить вручную это понятно. Даже есть мысль написать прогу, которая будет менять iss фаил как текстовый. Но было бы лучше если бы можно было стандартными инструментами менять, пусть даже через Паскалевские скрипты. А если бы получилась работа с command line было бы вообще супер.

Или ты отвечал на второй вопрос? Мне надо не руссифицировать, а просто добавить. Когда я захожу в Browse, у меня нет кнопки New Folder, а надо!

REXE 24-12-2009 18:43 1303510

Скажите пожалуйста что такое рекомп?

Делаю через инно из 10гб в 6,потом фриарком,тогда получается норм размер ~4 гб, а как ещё достичь такого размера можно не пережимая видео и звук??скажите плз

A1EXXX 24-12-2009 20:03 1303548

REXE, ошибся форумом, :off:

REXE 24-12-2009 22:31 1303664

Вложений: 2
Извините,тогда ещё вопрос сделал я эту распаковку архива теперь вот что http://forum.oszone.net/attachment.p...1&d=1261682711 ,как мне вернуть черный фон??

И установил ispack-5.3.6.exe где присутствует Inno Setup Preprocessor теперь скины не работают,помогите пожалуйста!

код прикрепил

YURSHAT 24-12-2009 23:00 1303677

Цитата:

Цитата REXE
Извините,тогда ещё вопрос сделал я эту распаковку архива теперь вот что http://forum.oszone.net/attachment.p...1&d=1261682711 ,как мне вернуть черный фон?? »

Поправил

REXE 25-12-2009 07:54 1303792

Спасибо большое YURSHAT!а можно так чтобы оставить только один верхний прогресс бар а нижний спрятать,если да то сделай пожалуйста))а то я не силён в этом

А как скины вернуть нензнаешь?а то у меня в коде вроде все прописано,поставил новый инно и перестали работать(

И ещё когда нажимаю установить сначало секунды 3 мой обычный первый прогресс бар промелькает,а потом появляется вот эти два с распаковкой,можно так чтобы сразу два прогресс бара появлялись с распаковкой??

YURSHAT 25-12-2009 11:34 1303889

Цитата:

Цитата REXE
а можно так чтобы оставить только один верхний прогресс бар а нижний спрятать,если да то сделай пожалуйста))а то я не силён в этом »

Используйте
этот
Код:

[Setup]
AppName=FreeArc Example
AppVerName=FreeArc Example 3.3
DefaultDirName={pf}\FreeArc Example
UsePreviousAppDir=false
DirExistsWarning=no
ShowLanguageDialog=auto
OutputBaseFilename=FreeArc_Example
OutputDir=.
VersionInfoCopyright=Bulat Ziganshin, Victor Dobrov, SotM, CTACKo

[Languages]
Name: eng; MessagesFile: compiler:Default.isl
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[CustomMessages]
eng.ArcBreak=Installation cancelled!
eng.ExtractedInfo=Extracted %1 Mb of %2 Mb
eng.ArcInfo=Archive: %1 of %2
eng.ArcTitle=Extracting FreeArc archive
eng.ArcError=Decompression failed with error code %1
eng.ArcFail=Decompression failed!
eng.AllProgress=Overall extraction progress: %1%%
eng.ArcBroken=Archive %1 is damaged%nor not enough free space.
eng.Extracting=Extracting: %1
eng.taskbar=%1%%, %2 remains
eng.remains=Remaining time: %1
eng.LongTime=at no time
eng.ending=ending
eng.hour= hours
eng.min= mins
eng.sec= secs

rus.ArcBreak=Установка прервана!
rus.ExtractedInfo=Распаковано %1 Мб из %2 Мб
rus.ArcInfo=Архив: %1 из %2
rus.ArcTitle=Распаковка архивов FreeArc
rus.ArcError=Распаковщик FreeArc вернул код ошибки: %1
rus.ArcFail=Распаковка не завершена!
rus.AllProgress=Общий прогресс распаковки: %1%%
rus.ArcBroken=Возможно, архив %1 повреждён%nили недостаточно места на диске назначения.
rus.Extracting=Распаковывается: %1
rus.taskbar=%1%%, жди %2
rus.remains=Осталось ждать %1
rus.LongTime=вечно
rus.ending=завершение
rus.hour= часов
rus.min= мин
rus.sec= сек

[Files]
;Source: *.arc; DestDir: {app}; Flags: nocompression
Source: unarc.dll; DestDir: {tmp}; Flags: dontcopy deleteafterinstall
Source: compiler:InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy

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

[_Code]
const
    Archives = '{src}\*.arc';    // укажите расположение архивов FreeArc; для внешних файлов строку в [Files] добавлять необязательно

    PM_REMOVE = 1;
    CP_ACP = 0; CP_UTF8 = 65001;
    oneMb = 1048576;

type
#ifdef UNICODE  ; если у вас ошибка на этой строке, то установите препроцессор или исправьте скрипт для вашей версии Inno Setup
    #define A "W"
#else
    #define A "A"  ; точка входа в SetWindowText, {#A} меняется на A или W в зависимости от версии
    PAnsiChar = PChar;  // Required for Inno Setup 5.3.0 and higher. (требуется для Inno Setup версии 5.3.0 и ниже)
#endif
#if Ver < 84018176
    AnsiString = String; // There is no need for this line in Inno Setup 5.2.4 and above (для Inno Setup версий 5.2.4 и выше эта строка не нужна)
#endif

    TMyMsg = record
        hwnd: HWND;
        message: UINT;
        wParam: Longint;
        lParam: Longint;
        time: DWORD;
        pt: TPoint;
    end;

    TFreeArcCallback = function (what: PAnsiChar; int1, int2: Integer; str: PAnsiChar): Integer;
    TArc = record Path: string; OrigSize: Integer; Size: Extended; end;

var
    ExtractFile: TLabel;
    lblExtractFileName: TLabel;
    btnCancelUnpacking: TButton;
    CancelCode, n, UnPackError, StartInstall: Integer;
    Arcs: array of TArc;
    msgError: string;
    lastMb: Integer;
    baseMb: Integer;
    totalUncompressedSize: Integer;            // total uncompressed size of archive data in mb
    LastTimerEvent: DWORD;

Function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: string; cbMultiByte: integer; lpWideCharStr: string; cchWideChar: integer): longint; external 'MultiByteToWideChar@kernel32.dll stdcall';
Function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: string; cchWideChar: integer; lpMultiByteStr: string; cbMultiByte: integer; lpDefaultChar: integer; lpUsedDefaultChar: integer): longint; external 'WideCharToMultiByte@kernel32.dll stdcall';

function PeekMessage(var lpMsg: TMyMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMyMsg): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: TMyMsg): Longint; external 'DispatchMessageA@user32.dll stdcall';

Function OemToChar(lpszSrc, lpszDst: AnsiString): longint; external 'OemToCharA@user32.dll stdcall';
function GetWindowLong(hWnd, nIndex: Integer): Longint; external 'GetWindowLongA@user32 stdcall delayload';
function SetWindowText(hWnd: Longint; lpString: String): Longint; external 'SetWindowText{#A}@user32 stdcall delayload';

function GetTickCount: DWord; external 'GetTickCount@kernel32';
function WrapFreeArcCallback (callback: TFreeArcCallback; paramcount: integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function FreeArcExtract (callback: longword; cmd1,cmd2,cmd3,cmd4,cmd5,cmd6,cmd7,cmd8,cmd9,cmd10: PAnsiChar): integer; external 'FreeArcExtract@files:unarc.dll cdecl';

procedure AppProcessMessage;
var
    Msg: TMyMsg;
begin
    while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do begin
        TranslateMessage(Msg);
        DispatchMessage(Msg);
    end;
end;

// Перевод числа в строку с точностью 3 знака (%.3n) с округлением дробной части, если она есть
Function NumToStr(Float: Extended): String;
Begin
    Result:= Format('%.3n', [Float]); StringChange(Result, ',', '.');
    while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Length(Result) > 1) do
        SetLength(Result, Length(Result)-1);
End;

function cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;

Function Size64(Hi, Lo: Integer): Extended;
Begin
    Result:= Lo;
    if Lo<0 then Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
    for Hi:= Hi-1 Downto 0 do
        Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
End;

// Converts OEM encoded string into ANSI
// Преобразует OEM строку в ANSI кодировку
function OemToAnsiStr( strSource: AnsiString): AnsiString;
var
    nRet : longint;
begin
    SetLength( Result, Length( strSource ) );
    nRet:= OemToChar( strSource, Result );
end;

// Converts ANSI encoded string into UTF-8
// Преобразует строку из ANSI в UTF-8 кодировку
function AnsiToUtf8( strSource: string ): string;
var
    nRet : integer;
    WideCharBuf: string;
    MultiByteBuf: string;
begin
    strSource:= strSource + chr(0);
    SetLength( WideCharBuf, Length( strSource ) * 2 );
    SetLength( MultiByteBuf, Length( strSource ) * 2 );

    nRet:= MultiByteToWideChar( CP_ACP, 0, strSource, -1, WideCharBuf, Length(WideCharBuf) );
    nRet:= WideCharToMultiByte( CP_UTF8, 0, WideCharBuf, -1, MultiByteBuf, Length(MultiByteBuf), 0, 0);

    Result:= MultiByteBuf;
end;

// OnClick event function for btnCancel
procedure btnCancelUnpackingOnClick(Sender: TObject);
begin
    if MsgBox( SetupMessage( msgExitSetupMessage ), mbInformation, MB_YESNO ) = IDYES then
        CancelCode:= -127;
end;

var origsize: Integer;
// The callback function for getting info about FreeArc archive
function FreeArcInfoCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
begin
    if string(what)='origsize'    then origsize := Mb else
    if string(what)='compsize'    then                else
    if string(what)='total_files' then                else
    Result:= CancelCode;
end;

// Returns decompressed size of files in archive
function ArchiveOrigSize(arcname: string): Integer;
var
    callback: longword;
Begin
    callback:= WrapFreeArcCallback(@FreeArcInfoCallback,4);  //FreeArcInfoCallback has 4 arguments
    CancelCode:= 0;
    AppProcessMessage;
    try
        // Pass the specified arguments to 'unarc.dll'
        Result:= FreeArcExtract (callback, 'l', '--', AnsiToUtf8(arcname), '', '', '', '', '', '', '');
        if CancelCode < 0 then Result:= CancelCode;
        if Result >= 0 then Result:= origsize;
    except
        Result:= -63;  //    ArcFail
    end;
end;

// Scans the specified folders for archives and add them to list
function FindArcs(dir: string): Extended;
var
    FSR: TFindRec;
Begin
    Result:= 0;
    if FindFirst(ExpandConstant(dir), FSR) then begin
        try
            repeat
                // Skip everything but the folders
                if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then CONTINUE;
                n:= GetArrayLength(Arcs);
                // Expand the folder list
                SetArrayLength(Arcs, n +1);
                Arcs[n].Path:= ExtractFilePath(ExpandConstant(dir)) + FSR.Name;
                Arcs[n].Size:= Size64(FSR.SizeHigh, FSR.SizeLow);
                Result:= Result + Arcs[n].Size;
                Arcs[n].OrigSize := ArchiveOrigSize(Arcs[n].Path)
                totalUncompressedSize := totalUncompressedSize + Arcs[n].OrigSize
            until not FindNext(FSR);
        finally
            FindClose(FSR);
        end;
    end;
End;

// Sets the TaskBar title
Procedure SetTaskBarTitle(Title: String); var h: Integer;
Begin
    h:= GetWindowLong(MainForm.Handle, -8); if h <> 0 then SetWindowText(h, Title);
End;

// Converts milliseconds to human-readable time
// Конвертирует милисекунды в человеко-читаемое изображение времени
Function TicksToTime(Ticks: DWord; h,m,s: String; detail: Boolean): String;
Begin
    if detail                              {hh:mm:ss format} then
        Result:= PADZ(IntToStr(Ticks/3600000), 2) +':'+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +':'+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2)
    else if Ticks/3600 >= 1000              {more than hour}  then
        Result:= IntToStr(Ticks/3600000) +h+' '+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +m
    else if Ticks/60 >= 1000                {1..60 minutes}  then
        Result:= IntToStr(Ticks/60000) +m+' '+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2) +s
  else Result:= IntToStr(Ticks/1000) +s    {less than one minute}
End;

// The main callback function for unpacking FreeArc archives
function FreeArcCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
var
    percents, Remaining: Integer;
    s: String;
begin
    if GetTickCount - LastTimerEvent > 1000 then begin
        // This code will be executed once each 1000 ms (этот код будет выполняться раз в 1000 миллисекунд)
        //  ....
        // End of code executed by timer
        LastTimerEvent := LastTimerEvent+1000;
    end;
   
    if string(what)='filename' then begin
        // Update FileName label
        lblExtractFileName.Caption:= FmtMessage( cm( 'Extracting' ), [OemToAnsiStr( str )] )
    end else if (string(what)='write') and (totalUncompressedSize>0) and (Mb>lastMb) then begin
        // Assign to Mb *total* amount of data extracted to the moment from all archives
        lastMb := Mb;
        Mb := baseMb+Mb;
   
        // Update progress bar
        WizardForm.ProgressGauge.Position:= Mb;

        // Show how much megabytes/archives were processed up to the moment
        percents:= (Mb*1000) div totalUncompressedSize;
        s := FmtMessage(cm('ExtractedInfo'), [IntToStr(Mb), IntToStr(totalUncompressedSize)]);
        if GetArrayLength(Arcs)>1 then
            s := s + '. '+FmtMessage(cm('ArcInfo'), [IntToStr(n+1), IntToStr(GetArrayLength(Arcs))])
        ExtractFile.Caption := s

        // Calculate and show current percents
        percents:= (Mb*1000) div totalUncompressedSize;
        s:= FmtMessage(cm('AllProgress'), [Format('%.1n', [Abs(percents/10)])]);
        if Mb > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((totalUncompressedSize - Mb)/Mb)) else Remaining:= 0;
        if Remaining = 0 then SetTaskBarTitle(cm('ending')) else begin
            s:= s + '.  '+FmtMessage(cm('remains'), [TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)])
            SetTaskBarTitle(FmtMessage(cm('taskbar'), [IntToStr(percents/10), TicksToTime(Remaining, 'h', 'm', 's', false)]))
        end;
        WizardForm.FileNameLabel.Caption := s
    end;
    AppProcessMessage;
    Result:= CancelCode;
end;

// Extracts all found archives
function UnPack(Archives: string): Integer;
var
    totalCompressedSize: Extended;
    callback: longword;
    FreeMB, TotalMB: Cardinal;
begin
    // Display 'Extracting FreeArc archive'
    lblExtractFileName.Caption:= '';
    lblExtractFileName.Show;
    ExtractFile.caption:= cm('ArcTitle');
    ExtractFile.Show;
    // Show the 'Cancel unpacking' button and set it as default button
    btnCancelUnpacking.Caption:= WizardForm.CancelButton.Caption;
    btnCancelUnpacking.Show;
    WizardForm.ActiveControl:= btnCancelUnpacking;
    WizardForm.ProgressGauge.Position:= 0;
    // Get the size of all archives
    totalUncompressedSize := 0;
    totalCompressedSize := FindArcs(Archives);
    WizardForm.ProgressGauge.Max:= totalUncompressedSize;
    // Other initializations
    callback:= WrapFreeArcCallback(@FreeArcCallback,4);  //FreeArcCallback has 4 arguments
    StartInstall:= GetTickCount;    {время начала распаковки}
    LastTimerEvent:= GetTickCount;
    baseMb:= 0

    for n:= 0 to GetArrayLength(Arcs) -1 do
    begin
        lastMb := 0
        CancelCode:= 0;
        AppProcessMessage;
        try
            // Pass the specified arguments to 'unarc.dll'
            Result:= FreeArcExtract (callback, 'x', '-o+', '-dp' + AnsiToUtf8( ExpandConstant('{app}') ), '--', AnsiToUtf8(Arcs[n].Path), '', '', '', '', '');
            if CancelCode < 0 then Result:= CancelCode;
        except
            Result:= -63;  //    ArcFail
        end;
        baseMb:= baseMb+lastMb

        // Error occured
        if Result <> 0 then
        begin
            msgError:= FmtMessage(cm('ArcError'), [IntToStr(Result)]);
            GetSpaceOnDisk(ExtractFileDrive(ExpandConstant('{app}')), True, FreeMB, TotalMB);
            case Result of
                -1: if FreeMB < 32 {Мб на диске} then msgError:= SetupMessage(msgDiskSpaceWarningTitle)
                    else msgError:= msgError + #13#10 + FmtMessage(cm('ArcBroken'), [ExtractFileName(Arcs[n].Path)]);
                -127:  msgError:= cm('ArcBreak');    //Cancel button
                -63:    msgError:= cm('ArcFail');
            end;
//          MsgBox(msgError, mbInformation, MB_OK);    //сообщение показывается на странице завершения
            Log(msgError);
            Break;    //прервать цикл распаковки
        end;
    end;
    // Hide labels and button
    WizardForm.FileNameLabel.Caption:= '';
    lblExtractFileName.Hide;
    ExtractFile.Hide;
    btnCancelUnpacking.Hide;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
    if CurStep = ssPostInstall then
    begin
        UnPackError:= UnPack(Archives)
        if UnPackError = 0 then
            SetTaskBarTitle(SetupMessage(msgSetupAppTitle))
        else
        begin
            // Error occured, uninstall it then
            Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n);    //откат установки из-за ошибки unarc.dll
            SetTaskBarTitle(SetupMessage(msgErrorTitle))
            WizardForm.Caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
        end;
    end;
end;

//    стандартный способ отката (не нужна CurPageChanged), но архивы распаковываются до извлечения файлов инсталлятора
//    if CurStep = ssInstall then
//      if UnPack(Archives) <> 0 then Abort;

Procedure CurPageChanged(CurPageID: Integer);
Begin
    if (CurPageID = wpFinished) and (UnPackError <> 0) then
    begin // Extraction was unsuccessful (распаковщик вернул ошибку)
        // Show error message
        WizardForm.FinishedLabel.Font.Color:= $0000C0;    // red (красный)
        WizardForm.FinishedLabel.Height:= WizardForm.FinishedLabel.Height * 2;
        WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) + #13#10#13#10 + msgError;
    end;
End;

procedure InitializeWizard();
begin
    with WizardForm.ProgressGauge do
    begin
        // Create a label to show current FileName being extracted
        lblExtractFileName:= TLabel.Create(WizardForm);
        lblExtractFileName.parent:=WizardForm.InstallingPage;
        lblExtractFileName.autosize:=false;
        lblExtractFileName.Width:= Width;
        lblExtractFileName.top:=Top + ScaleY(35);
        lblExtractFileName.Caption:= '';
        lblExtractFileName.Hide;

        // Create a label to show percentage
        ExtractFile:= TLabel.Create(WizardForm);
        ExtractFile.parent:=WizardForm.InstallingPage;
        ExtractFile.autosize:=false;
        ExtractFile.Width:= Width;
        ExtractFile.top:=lblExtractFileName.Top + ScaleY(16);
        ExtractFile.caption:= '';
        ExtractFile.Hide;
    end;

    // Create a 'Cancel unpacking' button and hide it for now.
    btnCancelUnpacking:=TButton.create(WizardForm);
    btnCancelUnpacking.Parent:= WizardForm;
    btnCancelUnpacking.SetBounds(WizardForm.CancelButton.Left, WizardForm.CancelButton.top, WizardForm.CancelButton.Width, WizardForm.CancelButton.Height);
    btnCancelUnpacking.OnClick:= @btnCancelUnpackingOnClick;
    btnCancelUnpacking.Hide;
end;

скрипт

REXE 25-12-2009 12:02 1303904

Не работает этот код вообще,даже архив не распаковывает!

REXE 25-12-2009 12:50 1303936

Мне нужна просто поправка в коде которая уберёт второй прогресс бар

Молодой 25-12-2009 19:17 1304212

Вложений: 1
Извините за наглость, но может кто поделиться скриптом "черный фон с распакой архивов фриарк" ??
Буду очень благодарен!

Sotonisto 25-12-2009 20:59 1304290

Народ, плз ответьте на мой предыдущий пост!!!

REXE 26-12-2009 13:49 1304675

Вложений: 1
Пожалуйста помогите!!В моём скрипте использовал распаковку фриарк архивов,на моём компе устанавливается,некоторые пишут что инсталл зависает,некоторые пишут что не устанавливается а пишет "Сохранение информации для деинсталяции...."...Прошу оптимизировать код если что то не так.

Сжатие использовал максимальное(1гб нужно для распаковки,у людей которые жаловались 1гиг и больше),также вставить в код скрипт для скинов а то перестал работать,и ещё Проблема такая, когда архив распаковывается если нажать отмена появится окно что отменено и при нажатии на кнопку завершить инсталлятор пробует запускать программу вследствие чего выскакивают ошибки.

И ещё не большая просьба для тех кто сможет,сделайте так плз чтобы когда распаковываешь было не два прогресс бара а один верхний

Версия Inno Setup 5.3.6(u) + ISPP 5.3.6(u)

Буду очень благодарен!!

Sotonisto 26-12-2009 23:25 1305084

Люди, кто может исправить ошибки в коде? Я взял игру (6 гиг) и сжал ее до 4.
Вроде все правильно сделал, но инстал во время запуска виснет намертво.
Да у меня вообще все мои инсталлы, которые больше 200 метров виснут :(
Помогите а...

A1EXXX 27-12-2009 01:46 1305175

Sotonisto, файлы, которые должны извлекаться перед установкой, перенеси в начало секции [Files]:
читать дальше »
Код:

[Files]
Source: "D:\image\button.bmp"; DestDir: "{tmp}"; Flags: dontcopy
Source: "D:\image\black_folder.bmp"; DestDir: "{tmp}"; Flags: dontcopy
Source: "D:\image\logo.bmp"; DestDir: "{tmp}"; Flags: dontcopy
Source: "D:\image\background.bmp"; DestDir: "{tmp}"; Flags: dontcopy

Source: "D:\Games\Left 4 Dead 2\bin\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "D:\Games\Left 4 Dead 2\config\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "D:\Games\Left 4 Dead 2\hl2\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "D:\Games\Left 4 Dead 2\left4dead2\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "D:\Games\Left 4 Dead 2\platform\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "D:\Games\Left 4 Dead 2\rstorage\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "D:\Games\Left 4 Dead 2\left4dead2.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Games\Left 4 Dead 2\l4d2.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Games\Left 4 Dead 2\left4dead2.ico"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Games\Left 4 Dead 2\loader.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Games\Left 4 Dead 2\rev.ini"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Games\Left 4 Dead 2\stats.bin"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Games\Left 4 Dead 2\steam_appid.txt"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Games\Left 4 Dead 2\stryder.dll"; DestDir: "{app}"; Flags: ignoreversion


REXE 27-12-2009 09:21 1305258

А мне сможет хоть кто нибудь помочь??а то хотелось бы продолжать заниматься репаками,а страшно что что то у кого то не работает

Serega 28-12-2009 12:12 1306051

Цитата:

Цитата Sotonisto
у меня зависают »

Разместите эти сторки в начале секции [Files]:
Код:

[Files]
Source: "D:\image\button.bmp"; DestDir: "{tmp}"; Flags: dontcopy
Source: "D:\image\black_folder.bmp"; DestDir: "{tmp}"; Flags: dontcopy
Source: "D:\image\logo.bmp"; DestDir: "{tmp}"; Flags: dontcopy
Source: "D:\image\background.bmp"; DestDir: "{tmp}"; Flags: dontcopy

Да и DestDir: в них можно не использовать, т.к. вы их извлекаете с помощью ExtractTemporaryFile.
A1EXXX, извините, не сразу заметил ваш ответ...

Цитата:

Цитата Sotonisto
В каждой системе (х64 и х32) нужно вносить в реестр разные значения »

В данном случае можно испльзовать function IsWin64: Boolean;, пример:
Код:

[Registry]
Root: HKLM; Subkey: "Software\St\Left 4 Dead 2"; ValueType: string; ValueName: "Version"; ValueData: "2.0.0.7"; Check: IsWin64; Flags: uninsdeletekey
Root: HKLM; Subkey: "Software\St\Left 4 Dead 2"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}"; Check: not IsWin64; Flags: uninsdeletekey


Serega 28-12-2009 12:28 1306065

Цитата:

Цитата Sotonisto
Вместо того что бы выбирать в меню с лиц. соглашением "Я согласен" а потом нажимать "Далее", сделать кнопку "Принимаю" »

Измените вашу procedure CurPageChanged, следующим образом:
Код:

procedure CurPageChanged(CurPageID: Integer);
begin
  CurPageChanged1(CurPageID);
  if CurPageID = wpLicense then
    begin
      WizardForm.LicenseAcceptedRadio.Checked:= True;
      WizardForm.LicenseAcceptedRadio.Hide;
      WizardForm.LicenseNotAcceptedRadio.Hide;
      WizardForm.NextButton.Caption:= 'Принимаю';
    end
  else WizardForm.NextButton.Caption:= WizardForm.NextButton.Caption;
end;

Цитата:

Цитата gera777
1. Есть ли команды для Командной строки? Но не для уже собранного инсталлятора, а для скрипта(т.е. менять настройки типа AppName, AppVerName). В общем мне надо менять AppVerName автоматически - до того как собереться инсталлятор. Возможно ли это? »

Стандартных способов нет, здесь нужно использовать препроцессор, но я с ним на Вы, т.е. почитав справку не нашёл функции в препроцессоре, которая бы обрабатывала командную строку.
Цитата:

Цитата gera777
Как добавить кнопку "New Folder" для Browse for Folder в Select Destination Location. »

Добавьте в секцию [Setup] AppendDefaultDirName=no

Serega 28-12-2009 13:02 1306100

Цитата:

Цитата REXE
А мне сможет хоть кто нибудь помочь??а то хотелось бы продолжать заниматься репаками,а страшно что что то у кого то не работает »

Заниматься или нет переупаковкой, это ваше дело.
Вы должны чётко понимать то, что делаете, т.е. здесь вам подскажут как сделать, но делать за вас никто не будет.

MrVamp 28-12-2009 14:56 1306198

Добрый день. Возможно немного не по теме. (Такой темы не нашел)
Сделал автоустановку программы с помощью "Symantec AutoInstall". Сделал инстолятор. Все устанавливается как надо, только в конце выплывает окно с вопросом перегружиться или нет. Подскажите пожалуйста, если кто знает, как можно избежать этого вопроса, возможно есть какие-то ключи для Symantec AutoInstall? Спасибо.

YURSHAT 28-12-2009 18:39 1306335

MrVamp,
Цитата:

Цитата MrVamp
Добрый день. Возможно немного не по теме. (Такой темы не нашел)
Сделал автоустановку программы с помощью "Symantec AutoInstall". Сделал инстолятор. Все устанавливается как надо, только в конце выплывает окно с вопросом перегружиться или нет. Подскажите пожалуйста, если кто знает, как можно избежать этого вопроса, возможно есть какие-то ключи для Symantec AutoInstall? Спасибо. »

Эт точно не сюда! :off:

A1EXXX 28-12-2009 18:56 1306351

Inno Setup Compiler [ANSI] Beta 3 (build 091228) English by Restools

REXE 28-12-2009 19:51 1306386

Цитата:

Цитата Serega
Заниматься или нет переупаковкой, это ваше дело.
Вы должны чётко понимать то, что делаете, т.е. здесь вам подскажут как сделать, но делать за вас никто не будет. »

Я занимаюсь,но почему то люди пишут у кого то работает установка у кого то нет,вот я и попросил чтобы хорошо знающие люди посмотрели может в коде что то не так

xero234 30-12-2009 00:11 1307292

Здравствуйте как я могу это исправить?
Изображение1
Изображение2

Скрипт
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Languages]


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

[Icons]
Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"
Name: "{commondesktop}\My Program"; Filename: "{app}\MyProg.exe"; Tasks: desktopicon

[Files]
Source: C:\Program Files\Inno Setup 5\Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion

[Run]
Filename: {app}\MyProg.exe; Description: LaunchProgram My Program?; Flags: postinstall nowait skipifsilent

[code]

var
pnl: TPanel;

///////////////////////WelcomePage//////////////////////////////////////
procedure WelcomePage;
begin
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.WelcomeLabel1.AutoSize;
SetBounds(WizardForm.WelcomeLabel1.Left,WizardForm.WelcomeLabel1.Top,
WizardForm.WelcomeLabel1.Width,WizardForm.WelcomeLabel1.Height);
WordWrap:= WizardForm.WelcomeLabel1.WordWrap;
Caption:= WizardForm.WelcomeLabel1.Caption;
with Font do
begin
Color:= clWhite;
Style:= WizardForm.WelcomeLabel1.Font.Style;
Name:= WizardForm.WelcomeLabel1.Font.Name;
Size:= WizardForm.WelcomeLabel1.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.WelcomeLabel2.AutoSize;
SetBounds(WizardForm.WelcomeLabel2.Left,WizardForm.WelcomeLabel2.Top,
WizardForm.WelcomeLabel2.Width,WizardForm.WelcomeLabel2.Height);
WordWrap:= WizardForm.WelcomeLabel2.WordWrap;
Caption:= WizardForm.WelcomeLabel2.Caption;
with Font do
begin
Color:= clWhite;
Style:= WizardForm.WelcomeLabel2.Font.Style;
Name:= WizardForm.WelcomeLabel2.Font.Name;
Size:= WizardForm.WelcomeLabel2.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////SelectDirPage//////////////////////////////////////
procedure SelectDirPage;
begin
with WizardForm do
begin
with DirEdit do
begin
Left:= 40;
Top:= 137;
Parent:= pnl;
end;
with DirBrowseButton do
begin
Left:= WizardForm.DirEdit.Left + WizardForm.DirEdit.Width + 10;
Top:= WizardForm.DirEdit.Top - 1;
Parent:= pnl;
end;
with SelectDirBitmapImage do
begin
Left:= WizardForm.DirEdit.Left;
Top:= WizardForm.DirEdit.Top - 62;
Stretch:= True;
Parent:= pnl;
end;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.SelectDirBrowseLabel.AutoSize;
SetBounds(WizardForm.DirEdit.Left,WizardForm.DirEdit.Top - 30,
WizardForm.SelectDirBrowseLabel.Width, WizardForm.SelectDirBrowseLabel.Height);
WordWrap:= WizardForm.SelectDirBrowseLabel.WordWrap;
Caption:= WizardForm.SelectDirBrowseLabel.Caption;
with Font do
begin
Color:= clWhite;
Style:= WizardForm.SelectDirBrowseLabel.Font.Style;
Name:= WizardForm.SelectDirBrowseLabel.Font.Name;
Size:= WizardForm.SelectDirBrowseLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.SelectDirLabel.AutoSize;
SetBounds(WizardForm.SelectDirBitmapImage.Left + 50,WizardForm.SelectDirBitmapImage.Top + 10,
WizardForm.SelectDirLabel.Width,WizardForm.SelectDirLabel.Height);
WordWrap:= WizardForm.SelectDirLabel.WordWrap;
Caption:= WizardForm.SelectDirLabel.Caption;
with Font do
begin
Color:= clWhite;
Style:= WizardForm.SelectDirLabel.Font.Style;
Name:= WizardForm.SelectDirLabel.Font.Name;
Size:= WizardForm.SelectDirLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.DiskSpaceLabel.AutoSize;
SetBounds(WizardForm.DirEdit.Left,WizardForm.Bevel.Top - 25,
WizardForm.DiskSpaceLabel.Width,WizardForm.DiskSpaceLabel.Height);
WordWrap:= WizardForm.DiskSpaceLabel.WordWrap;
Caption:= WizardForm.DiskSpaceLabel.Caption;
with Font do
begin
Color:= clWhite;
Style:= WizardForm.DiskSpaceLabel.Font.Style;
Name:= WizardForm.DiskSpaceLabel.Font.Name;
Size:= WizardForm.DiskSpaceLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////ReadyPage//////////////////////////////////////
procedure ReadyPage;


begin

with TLabel.Create(pnl) do
begin
SetBounds(45,115,WizardForm.ReadyMemo.Width, WizardForm.ReadyMemo.Height);

with Font do
begin
Color:= clWhite;
Style:= WizardForm.ReadyLabel.Font.Style;
Name:= WizardForm.ReadyLabel.Font.Name;
Size:= WizardForm.ReadyLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TBevel.Create(WizardForm) do
begin
SetBounds(40,110, WizardForm.ReadyMemo.Width, WizardForm.ReadyMemo.Height);
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.ReadyLabel.AutoSize;
SetBounds(40,70, WizardForm.ReadyLabel.Width, WizardForm.ReadyLabel.Height);
WordWrap:= WizardForm.ReadyLabel.WordWrap;
Caption:= WizardForm.ReadyLabel.Caption;
with Font do
begin
Color:= clWhite;
Style:= WizardForm.ReadyLabel.Font.Style;
Name:= WizardForm.ReadyLabel.Font.Name;
Size:= WizardForm.ReadyLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;

/////////////////////////////////////////////////////////////////

///////////////////////InstallingPage//////////////////////////////////////
procedure InstallingPage;
begin
with WizardForm.ProgressGauge do
begin
Left:= 40;
Top:= 115;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.FilenameLabel.AutoSize;
SetBounds(WizardForm.ProgressGauge.Left,WizardForm.ProgressGauge.Top-20,
WizardForm.FilenameLabel.Width,WizardForm.FilenameLabel.Height);
WordWrap:= WizardForm.FilenameLabel.WordWrap;
Caption:= WizardForm.FilenameLabel.Caption;
with Font do
begin
Color:= clWhite;
Style:= WizardForm.FilenameLabel.Font.Style;
Name:= WizardForm.FilenameLabel.Font.Name;
Size:= WizardForm.FilenameLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.StatusLabel.AutoSize;
SetBounds(WizardForm.StatusLabel.Left,WizardForm.StatusLabel.Top,
WizardForm.StatusLabel.Width,WizardForm.StatusLabel.Height);
WordWrap:= WizardForm.StatusLabel.WordWrap;
Caption:= WizardForm.StatusLabel.Caption;
with Font do
begin
Color:= clWhite;
Style:= WizardForm.StatusLabel.Font.Style;
Name:= WizardForm.StatusLabel.Font.Name;
Size:= WizardForm.StatusLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////FinishedPage//////////////////////////////////////



procedure FinishedPage;
begin

with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.FinishedHeadingLabel.AutoSize;
SetBounds(WizardForm.FinishedHeadingLabel.Left,WizardForm.FinishedHeadingLabel.Top,
WizardForm.FinishedHeadingLabel.Width,WizardForm.FinishedHeadingLabel.Height);
WordWrap:= WizardForm.FinishedHeadingLabel.WordWrap;
Caption:= WizardForm.FinishedHeadingLabel.Caption;
with Font do
begin
Color:= clWhite;
Style:= WizardForm.FinishedHeadingLabel.Font.Style;
Name:= WizardForm.FinishedHeadingLabel.Font.Name;
Size:= WizardForm.FinishedHeadingLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.FinishedLabel.AutoSize;
SetBounds(WizardForm.FinishedLabel.Left,WizardForm.FinishedLabel.Top,
WizardForm.FinishedLabel.Width,WizardForm.FinishedLabel.Height);
WordWrap:= WizardForm.FinishedLabel.WordWrap;
Caption:= WizardForm.FinishedLabel.Caption;
with Font do
begin
Color:= clWhite;
Style:= WizardForm.FinishedLabel.Font.Style;
Name:= WizardForm.FinishedLabel.Font.Name;
Size:= WizardForm.FinishedLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

procedure CurPageChanged(CurPageID: Integer);
begin
pnl:= TPanel.Create(WizardForm);
with pnl do
begin
Align:= alClient;
Parent:= WizardForm;
end;
with WizardForm do
begin
with WizardBitmapImage do
begin
Align:= alClient;
Stretch:= True;
Parent:= pnl;
end;
NextButton.Parent:= pnl;
CancelButton.Parent:= pnl;
BackButton.Parent:= pnl;
Bevel.Parent:= pnl;
pnl.Repaint;
end;

if (CurPageID > wpWelcome) and (CurPageID < wpFinished) then
begin
WizardForm.Bevel1.Parent:= pnl;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.PageNameLabel.AutoSize;
SetBounds(WizardForm.PageNameLabel.Left,WizardForm.PageNameLabel.Top,
WizardForm.PageNameLabel.Width,WizardForm.PageNameLabel.Height);
Caption:= WizardForm.PageNameLabel.Caption;
with Font do
begin
Color:= clWhite;
Style:= WizardForm.PageNameLabel.Font.Style;
Name:= WizardForm.PageNameLabel.Font.Name;
Size:= WizardForm.PageNameLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.PageDescriptionLabel.AutoSize;
SetBounds(WizardForm.PageDescriptionLabel.Left,WizardForm.PageDescriptionLabel.Top,
WizardForm.PageDescriptionLabel.Width,WizardForm.PageDescriptionLabel.Height);
Caption:= WizardForm.PageDescriptionLabel.Caption;
with Font do
begin
Color:= clWhite;
Style:= WizardForm.PageDescriptionLabel.Font.Style;
Name:= WizardForm.PageDescriptionLabel.Font.Name;
Size:= WizardForm.PageDescriptionLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;

if CurPageID = wpWelcome then WelcomePage;
if CurPageID = wpSelectDir then SelectDirPage;
if CurPageID = wpReady then ReadyPage;
if CurPageID = wpInstalling then InstallingPage;
if CurPageID = wpFinished then FinishedPage;
end;

Serega 30-12-2009 01:15 1307308

Цитата:

Цитата xero234
как я могу это исправить? »

Только написав эти страницы, по аналогии тем, которые есть в скрипте.

Dark Engel 30-12-2009 10:04 1307437

Коллеги подскажите пожалуйста, как перезагрузить машину через секцию [code]

Serega 30-12-2009 15:16 1307633

Цитата:

Цитата Dark Engel
как перезагрузить машину через секцию »

Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra64
InternalCompressLevel=ultra64
SolidCompression=yes

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

[Code]
function InitializeSetup(): Boolean;
var
  ResultCode: Integer;
begin
  if MsgBox('Желаете перезагрузить компьютер?', mbConfirmation, MB_YESNO) = IDYES then
    // Внимание!!! Компьютер сразу будет перезагружен.
    Exec('cmd', '/c shutdown -r -f -t 0', '', SW_HIDE, ewNoWait, ResultCode)
  else Result:= True;
end;


serg aka lain 30-12-2009 15:41 1307659

Serega, Я бы лучше пользовался
Код:

function NeedRestart(): Boolean;
Пользователь имеет право выбрать, сейчас ему перезагрузиться, или через неделю.
А такими способами, сразу начинают злоупотреблять, забывают сообщение выдать,
просто молча ... принудительная перезагрузка (встретилась тут, одна такая поделка)

Serega 30-12-2009 18:13 1307776

Цитата:

Цитата serg aka lain
Пользователь имеет право выбрать, сейчас ему перезагрузиться, или через неделю »

В принципе согласен, надо было указать два варианта. Правда при использовании второго варианта, перезагрузка будет предложена только после установки программы, но бывают случаи, очень редко, что перезагрузка нужна в начале инсталляции. Такое можно увидеть при установке Alcohol'я, когда предлагается перезагрузка в начале инсталляции, для установки необходимой библиотеки.

Пример использования функции NeedRestart:
Код:

function NeedRestart(): Boolean;
begin
  Result:= True;
end;

P.S.
Откровенно говоря, я просто забыл про эту функцию. Спасибо. ;)

МИШАНЧИК 31-12-2009 12:39 1308183

Всех с наступающим Новым 2010 Годом!
Всем счастья, крепкого здоровья и творческих успехов!

Tukash 31-12-2009 23:23 1308443

всех с новым годом, всего и побольше!!
не подскажите, как сделать чекбокс, с выбором установки озвучки, рус, анг и т.д.!
допустим 2 папки, 1 и 2, в папке 1 русские файлы (не инсталлятор а отдельный файл который надо скопировать для локализации), а в папке 2 (англ файлы) и надо дать возможность выбрать какая локализация нужна !
Заранее спасибо!!!

Habetdin 01-01-2010 00:59 1308468

Tukash,
Код:

[Types]
Name: custom; Description: Custom installation; Flags: iscustom

[Components]
Name: lng; Description: Language; Types: custom
Name: lng/ru; Description: Русский; Flags: exclusive; Types: custom
Name: lng/en; Description: English; Flags: exclusive

[Files]
Source: Russian\*; DestDir: {app}\Language; Components: lng/ru; Flags: recursesubdirs ignoreversion sortfilesbyextension createallsubdirs
Source: English\*; DestDir: {app}\Language; Components: lng/en; Flags: recursesubdirs ignoreversion sortfilesbyextension createallsubdirs


Tukash 01-01-2010 16:53 1308651

неподскажите как сделать, что-бы нельзя было убрать эту галочку:
типа она обязательная, а Русская или Англ. по выбору. Укажите что изминить в скрипте:
Код:

[Tasks]
Name: desktopicon; Description: Создать значок на рабочем столе

[Types]
Name: custom; Description: Custom installation; Flags: iscustom

[Components]
Name: lng; Description: Выбор Озвучки; Types: custom
Name: lng/ru; Description: Русская; Flags: exclusive
Name: lng/en; Description: English; Flags: exclusive

[Files]
Source: C:\ENG\*; DestDir: {app}\audio\speech; Components: lng/en; Flags: recursesubdirs ignoreversion sortfilesbyextension createallsubdirs
Source: C:\Rus\*; DestDir: {app}\audio\speech; Components: lng/ru; Flags: recursesubdirs ignoreversion sortfilesbyextension createallsubdirs


A1EXXX 01-01-2010 17:00 1308654

Tukash, к "Выбору озвучки" добавь флаг - Flags: fixed;
читать дальше »
Код:

[Tasks]
Name: desktopicon; Description: Создать значок на рабочем столе

[Types]
Name: custom; Description: Custom installation; Flags: iscustom

[Components]
Name: lng; Description: Выбор Озвучки; Flags: fixed; Types: custom
Name: lng/ru; Description: Русская; Flags: exclusive
Name: lng/en; Description: English; Flags: exclusive

[Files]
Source: C:\ENG\*; DestDir: {app}\audio\speech; Components: lng/en; Flags: recursesubdirs ignoreversion sortfilesbyextension createallsubdirs
Source: C:\Rus\*; DestDir: {app}\audio\speech; Components: lng/ru; Flags: recursesubdirs ignoreversion sortfilesbyextension createallsubdirs


Tukash 01-01-2010 17:06 1308660

A1EXXX,
благодарю!!!

Tukash 01-01-2010 23:31 1308893

чем красивее получается, тем хочется еще лучше))
у меня 2 вопроса!
1. - как здесь самому написать сколько нужно места?


2.- как убрать этот чекбокс?(не создавать в меню пуск! или на крайняк добавить туда шрифт)

A1EXXX 01-01-2010 23:42 1308896

Tukash, чтобы убрать чекбокс, удали строку AllowNoIcons=yes из [Setup]


Код для проверки места на диске:
читать дальше »
Код:

[Code]
var
NeedSize:Integer; FreeMB, TotalMB: Cardinal; NeedSpaceLabel,FreeSpaceLabel: TLabel;

procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
FreeSpaceLabel.Caption := 'Доступно места на диске: '+ FloatToStr(round(FreeMB/1024*100)/100) + ' GB' else
FreeSpaceLabel.Caption := 'Доступно места на диске: '+ IntToStr(FreeMB)+ ' MB';
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False else
WizardForm.NextButton.Enabled := True; end;

procedure GetNeedSpaceCaption;
begin
if NeedSize > 1024 then
NeedSpaceLabel.Caption := 'Требуется места на диске: '+ FloatToStr(round(NeedSize/1024*100)/100) + ' GB' else
NeedSpaceLabel.Caption := 'Требуется места на диске: '+ IntToStr(NeedSize)+ ' MB';
end;

procedure InitializeWizard();
begin
NeedSize := 630000;

WizardForm.DiskSpaceLabel.Hide;

NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(202);
Width := ScaleX(209);
Height := ScaleY(13);
end;

FreeSpaceLabel := TLabel.Create(WizardForm);
with FreeSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(220);
Width := ScaleX(209);
Height := ScaleY(13);
end;
WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then begin
GetNeedSpaceCaption;
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled:=False
end;
end;


И впредь лучше юзай Поиск или читай Справку, подобные вопросы каждые 10 страниц форума повторяются...

Tukash 02-01-2010 12:21 1309056

A1EXXX
спасибо, сорри не знал что они такие распространенные!

A1EXXX 02-01-2010 15:00 1309144

Inno Setup Compiler 5.3.6 (build 100102) Final by Restools

JohnDes 03-01-2010 15:14 1309717

Помогите соединить два скрипта.
Этот
читать дальше »
[code]
const
Archives = '{src}\*.cab'; // укажите расположение архивов FreeArc; для внешних файлов строку в [Files] добавлять необязательно

PM_REMOVE = 1;
CP_ACP = 0; CP_UTF8 = 65001;
oneMb = 1048576;

type
#ifdef UNICODE ; если у вас ошибка на этой строке, то установите препроцессор или исправьте скрипт для вашей версии Inno Setup
#define A "W"
#else
#define A "A" ; точка входа в SetWindowText, {#A} меняется на A или W в зависимости от версии
PAnsiChar = PChar; // Required for Inno Setup 5.3.0 and higher. (требуется для Inno Setup версии 5.3.0 и ниже)
#endif
#if Ver < 84018176
AnsiString = String; // There is no need for this line in Inno Setup 5.2.4 and above (для Inno Setup версий 5.2.4 и выше эта строка не нужна)
#endif

TMyMsg = record
hwnd: HWND;
message: UINT;
wParam: Longint;
lParam: Longint;
time: DWORD;
pt: TPoint;
end;

TFreeArcCallback = function (what: PAnsiChar; int1, int2: Integer; str: PAnsiChar): Integer;
TArc = record Path: string; OrigSize: Integer; Size: Extended; end;

var
ExtractFile: TLabel;
lblExtractFileName: TLabel;
btnCancelUnpacking: TButton;
CancelCode, n, UnPackError, StartInstall: Integer;
Arcs: array of TArc;
msgError: string;
lastMb: Integer;
baseMb: Integer;
totalUncompressedSize: Integer; // total uncompressed size of archive data in mb
LastTimerEvent: DWORD;

Function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: string; cbMultiByte: integer; lpWideCharStr: string; cchWideChar: integer): longint; external 'MultiByteToWideChar@kernel32.dll stdcall';
Function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: string; cchWideChar: integer; lpMultiByteStr: string; cbMultiByte: integer; lpDefaultChar: integer; lpUsedDefaultChar: integer): longint; external 'WideCharToMultiByte@kernel32.dll stdcall';

function PeekMessage(var lpMsg: TMyMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMyMsg): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: TMyMsg): Longint; external 'DispatchMessageA@user32.dll stdcall';

Function OemToChar(lpszSrc, lpszDst: AnsiString): longint; external 'OemToCharA@user32.dll stdcall';
function GetWindowLong(hWnd, nIndex: Integer): Longint; external 'GetWindowLongA@user32 stdcall delayload';
function SetWindowText(hWnd: Longint; lpString: String): Longint; external 'SetWindowText{#A}@user32 stdcall delayload';

function GetTickCount: DWord; external 'GetTickCount@kernel32';
function WrapFreeArcCallback (callback: TFreeArcCallback; paramcount: integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function FreeArcExtract (callback: longword; cmd1,cmd2,cmd3,cmd4,cmd5,cmd6,cmd7,cmd8,cmd9,cmd10: PAnsiChar): integer; external 'FreeArcExtract@files:unarc.dll cdecl';

procedure AppProcessMessage;
var
Msg: TMyMsg;
begin
while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;

// Перевод числа в строку с точностью 3 знака (%.3n) с округлением дробной части, если она есть
Function NumToStr(Float: Extended): String;
Begin
Result:= Format('%.3n', [Float]); StringChange(Result, ',', '.');
while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Length(Result) > 1) do
SetLength(Result, Length(Result)-1);
End;

function cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;

Function Size64(Hi, Lo: Integer): Extended;
Begin
Result:= Lo;
if Lo<0 then Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
for Hi:= Hi-1 Downto 0 do
Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
End;

// Converts OEM encoded string into ANSI
// Преобразует OEM строку в ANSI кодировку
function OemToAnsiStr( strSource: AnsiString): AnsiString;
var
nRet : longint;
begin
SetLength( Result, Length( strSource ) );
nRet:= OemToChar( strSource, Result );
end;

// Converts ANSI encoded string into UTF-8
// Преобразует строку из ANSI в UTF-8 кодировку
function AnsiToUtf8( strSource: string ): string;
var
nRet : integer;
WideCharBuf: string;
MultiByteBuf: string;
begin
strSource:= strSource + chr(0);
SetLength( WideCharBuf, Length( strSource ) * 2 );
SetLength( MultiByteBuf, Length( strSource ) * 2 );

nRet:= MultiByteToWideChar( CP_ACP, 0, strSource, -1, WideCharBuf, Length(WideCharBuf) );
nRet:= WideCharToMultiByte( CP_UTF8, 0, WideCharBuf, -1, MultiByteBuf, Length(MultiByteBuf), 0, 0);

Result:= MultiByteBuf;
end;

// OnClick event function for btnCancel
procedure btnCancelUnpackingOnClick(Sender: TObject);
begin
if MsgBox( SetupMessage( msgExitSetupMessage ), mbInformation, MB_YESNO ) = IDYES then
CancelCode:= -127;
end;

var origsize: Integer;
// The callback function for getting info about FreeArc archive
function FreeArcInfoCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
begin
if string(what)='origsize' then origsize := Mb else
if string(what)='compsize' then else
if string(what)='total_files' then else
Result:= CancelCode;
end;

// Returns decompressed size of files in archive
function ArchiveOrigSize(arcname: string): Integer;
var
callback: longword;
Begin
callback:= WrapFreeArcCallback(@FreeArcInfoCallback,4); //FreeArcInfoCallback has 4 arguments
CancelCode:= 0;
AppProcessMessage;
try
// Pass the specified arguments to 'unarc.dll'
Result:= FreeArcExtract (callback, 'l', '--', AnsiToUtf8(arcname), '', '', '', '', '', '', '');
if CancelCode < 0 then Result:= CancelCode;
if Result >= 0 then Result:= origsize;
except
Result:= -63; // ArcFail
end;
end;

// Scans the specified folders for archives and add them to list
function FindArcs(dir: string): Extended;
var
FSR: TFindRec;
Begin
Result:= 0;
if FindFirst(ExpandConstant(dir), FSR) then begin
try
repeat
// Skip everything but the folders
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then CONTINUE;
n:= GetArrayLength(Arcs);
// Expand the folder list
SetArrayLength(Arcs, n +1);
Arcs[n].Path:= ExtractFilePath(ExpandConstant(dir)) + FSR.Name;
Arcs[n].Size:= Size64(FSR.SizeHigh, FSR.SizeLow);
Result:= Result + Arcs[n].Size;
Arcs[n].OrigSize := ArchiveOrigSize(Arcs[n].Path)
totalUncompressedSize := totalUncompressedSize + Arcs[n].OrigSize
until not FindNext(FSR);
finally
FindClose(FSR);
end;
end;
End;

// Sets the TaskBar title
Procedure SetTaskBarTitle(Title: String); var h: Integer;
Begin
h:= GetWindowLong(MainForm.Handle, -8); if h <> 0 then SetWindowText(h, Title);
End;

// Converts milliseconds to human-readable time
// Конвертирует милисекунды в человеко-читаемое изображение времени
Function TicksToTime(Ticks: DWord; h,m,s: String; detail: Boolean): String;
Begin
if detail {hh:mm:ss format} then
Result:= PADZ(IntToStr(Ticks/3600000), 2) +':'+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +':'+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2)
else if Ticks/3600 >= 1000 {more than hour} then
Result:= IntToStr(Ticks/3600000) +h+' '+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +m
else if Ticks/60 >= 1000 {1..60 minutes} then
Result:= IntToStr(Ticks/60000) +m+' '+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2) +s
else Result:= IntToStr(Ticks/1000) +s {less than one minute}
End;

// The main callback function for unpacking FreeArc archives
function FreeArcCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
var
percents, Remaining: Integer;
s: String;
begin
if GetTickCount - LastTimerEvent > 1000 then begin
// This code will be executed once each 1000 ms (этот код будет выполняться раз в 1000 миллисекунд)
// ....
// End of code executed by timer
LastTimerEvent := LastTimerEvent+1000;
end;

if string(what)='filename' then begin
// Update FileName label
lblExtractFileName.Caption:= FmtMessage( cm( 'Extracting' ), [OemToAnsiStr( str )] )
end else if (string(what)='write') and (totalUncompressedSize>0) and (Mb>lastMb) then begin
// Assign to Mb *total* amount of data extracted to the moment from all archives
lastMb := Mb;
Mb := baseMb+Mb;

// Update progress bar
WizardForm.ProgressGauge.Position:= Mb;

// Show how much megabytes/archives were processed up to the moment
percents:= (Mb*1000) div totalUncompressedSize;
s := FmtMessage(cm('ExtractedInfo'), [IntToStr(Mb), IntToStr(totalUncompressedSize)]);
if GetArrayLength(Arcs)>1 then
s := s + '. '+FmtMessage(cm('ArcInfo'), [IntToStr(n+1), IntToStr(GetArrayLength(Arcs))])
ExtractFile.Caption := s

// Calculate and show current percents
percents:= (Mb*1000) div totalUncompressedSize;
s:= FmtMessage(cm('AllProgress'), [Format('%.1n', [Abs(percents/10)])]);
if Mb > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((totalUncompressedSize - Mb)/Mb)) else Remaining:= 0;
if Remaining = 0 then SetTaskBarTitle(cm('ending')) else begin
s:= s + '. '+FmtMessage(cm('remains'), [TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)])
SetTaskBarTitle(FmtMessage(cm('taskbar'), [IntToStr(percents/10), TicksToTime(Remaining, 'h', 'm', 's', false)]))
end;
WizardForm.FileNameLabel.Caption := s
end;
AppProcessMessage;
Result:= CancelCode;
end;

// Extracts all found archives
function UnPack(Archives: string): Integer;
var
totalCompressedSize: Extended;
callback: longword;
FreeMB, TotalMB: Cardinal;
begin
// Display 'Extracting FreeArc archive'
lblExtractFileName.Caption:= '';
lblExtractFileName.Show;
ExtractFile.caption:= cm('ArcTitle');
ExtractFile.Show;
// Show the 'Cancel unpacking' button and set it as default button
btnCancelUnpacking.Caption:= WizardForm.CancelButton.Caption;
btnCancelUnpacking.Show;
WizardForm.ActiveControl:= btnCancelUnpacking;
WizardForm.ProgressGauge.Position:= 0;
// Get the size of all archives
totalUncompressedSize := 0;
totalCompressedSize := FindArcs(Archives);
WizardForm.ProgressGauge.Max:= totalUncompressedSize;
// Other initializations
callback:= WrapFreeArcCallback(@FreeArcCallback,4); //FreeArcCallback has 4 arguments
StartInstall:= GetTickCount; {время начала распаковки}
LastTimerEvent:= GetTickCount;
baseMb:= 0

for n:= 0 to GetArrayLength(Arcs) -1 do
begin
lastMb := 0
CancelCode:= 0;
AppProcessMessage;
try
// Pass the specified arguments to 'unarc.dll'
Result:= FreeArcExtract (callback, 'x', '-o+', '-dp' + AnsiToUtf8( ExpandConstant('{app}') ), '--', AnsiToUtf8(Arcs[n].Path), '', '', '', '', '');
if CancelCode < 0 then Result:= CancelCode;
except
Result:= -63; // ArcFail
end;
baseMb:= baseMb+lastMb

// Error occured
if Result <> 0 then
begin
msgError:= FmtMessage(cm('ArcError'), [IntToStr(Result)]);
GetSpaceOnDisk(ExtractFileDrive(ExpandConstant('{app}')), True, FreeMB, TotalMB);
case Result of
-1: if FreeMB < 32 {Мб на диске} then msgError:= SetupMessage(msgDiskSpaceWarningTitle)
else msgError:= msgError + #13#10 + FmtMessage(cm('ArcBroken'), [ExtractFileName(Arcs[n].Path)]);
-127: msgError:= cm('ArcBreak'); //Cancel button
-63: msgError:= cm('ArcFail');
end;
// MsgBox(msgError, mbInformation, MB_OK); //сообщение показывается на странице завершения
Log(msgError);
Break; //прервать цикл распаковки
end;
end;
// Hide labels and button
WizardForm.FileNameLabel.Caption:= '';
lblExtractFileName.Hide;
ExtractFile.Hide;
btnCancelUnpacking.Hide;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
UnPackError:= UnPack(Archives)
if UnPackError = 0 then
SetTaskBarTitle(SetupMessage(msgSetupAppTitle))
else
begin
// Error occured, uninstall it then
Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n); //откат установки из-за ошибки unarc.dll
SetTaskBarTitle(SetupMessage(msgErrorTitle))
WizardForm.Caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
end;
end;
end;

// стандартный способ отката (не нужна CurPageChanged), но архивы распаковываются до извлечения файлов инсталлятора
// if CurStep = ssInstall then
// if UnPack(Archives) <> 0 then Abort;

Procedure CurPageChanged(CurPageID: Integer);
Begin
if (CurPageID = wpFinished) and (UnPackError <> 0) then
begin // Extraction was unsuccessful (распаковщик вернул ошибку)
// Show error message
WizardForm.FinishedLabel.Font.Color:= $0000C0; // red (красный)
WizardForm.FinishedLabel.Height:= WizardForm.FinishedLabel.Height * 2;
WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) + #13#10#13#10 + msgError;
end;
End;

procedure InitializeWizard();
begin
with WizardForm.ProgressGauge do
begin
// Create a label to show current FileName being extracted
lblExtractFileName:= TLabel.Create(WizardForm);
lblExtractFileName.parent:=WizardForm.InstallingPage;
lblExtractFileName.autosize:=false;
lblExtractFileName.Width:= Width;
lblExtractFileName.top:=Top + ScaleY(35);
lblExtractFileName.Caption:= '';
lblExtractFileName.Hide;

// Create a label to show percentage
ExtractFile:= TLabel.Create(WizardForm);
ExtractFile.parent:=WizardForm.InstallingPage;
ExtractFile.autosize:=false;
ExtractFile.Width:= Width;
ExtractFile.top:=lblExtractFileName.Top + ScaleY(16);
ExtractFile.caption:= '';
ExtractFile.Hide;
end;

// Create a 'Cancel unpacking' button and hide it for now.
btnCancelUnpacking:=TButton.create(WizardForm);
btnCancelUnpacking.Parent:= WizardForm;
btnCancelUnpacking.SetBounds(WizardForm.CancelButton.Left, WizardForm.CancelButton.top, WizardForm.CancelButton.Width, WizardForm.CancelButton.Height);
btnCancelUnpacking.OnClick:= @btnCancelUnpackingOnClick;
btnCancelUnpacking.Hide;
end;

И этот
читать дальше »
procedure InitializeWizard();
begin
//Выносим кнопку "Отмена" на передний план
WizardForm.CancelButton.BringToFront;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpInstalling
then
begin
WizardForm.MainPanel.Visible:=False;
WizardForm.Bevel1.Visible:=False;
WizardForm.Width:=ScaleX(395);
WizardForm.Height:=ScaleY(142);
//Здесь смещение страницы установки (в верхний левый угол)
WizardForm.Left:=ScaleX(0);
WizardForm.Top:=ScaleY(0);
{Внимание! Нижеописанные способы смещения работают только когда вставлено фоновое изображение или WindowVisible=yes}
{Выводит в правом верхнем углу экрана}
//WizardForm.Left:=ScaleX(MainForm.Width-420);
//WizardForm.Top:=ScaleY(MainForm.Left+20);

{Выводит снизу по центру экрана}
//WizardForm.Position:=poScreenCenter;
//WizardForm.Top:=ScaleY(MainForm.Height-170);

{Выводит в нижнем левом углу (как в Doom 3 Resurrection of Evil от 1C)}
//WizardForm.Left:=ScaleX(MainForm.Left+20);
//WizardForm.Top:=ScaleY(MainForm.Height-170);

{Выводит в нижнем правом углу}
//WizardForm.Left:=ScaleX(MainForm.Width-420);
//WizardForm.Top:=ScaleY(MainForm.Height-170);

WizardForm.InnerNotebook.Left:=ScaleX(10);
WizardForm.InnerNotebook.Top:=ScaleY(10);
WizardForm.InnerNotebook.Width:=ScaleX(370);
WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(20);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(40);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(154);
WizardForm.CancelButton.Top:=ScaleY(80);
end
if CurPageID=wpFinished
then
begin
WizardForm.Width:=502;{Размер окна по горизонтали}
WizardForm.Height:=392;{Размер окна по вертикали}
WizardForm.Position:=poScreenCenter; {Возврат в исходное состояние}
end
end;

Чтобы не было вот так и работала кнопка отмены
PS скажите что нужно сделать чтобы у bmp фон был прозрачный ?

Lancer2404 03-01-2010 15:18 1309720

Не так давно писали мне скрипт использования ShellOperation.Так во не могу понять почему он не работает.

читать дальше »

#include "J:\Worked Dir\Script\SHFileOperation.iss"

[Setup]
AppName=Tests gta pack
AppVerName=Test
DefaultDirName={pf}\WD
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
[Files]
Source:D:\wd\w.txt; DestDir: "{app}"; Flags: ignoreversion recursesubdirs overwritereadonly
Source:D:\wd\ws.txt ;DestDir: "{app}\data"; Flags: ignoreversion recursesubdirs overwritereadonly


[Tasks]
Name: arc; Description: "Backup"

[code]
var
Page: TInputDirWizardPage;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
Result:= (PageID = Page.ID) and not IsTaskSelected('arc');
end;

procedure InitializeWizard();
begin
Page:= CreateInputDirPage(wpSelectTasks, 'Выберите папку бэкапа.',
'Куда вы засуните файлы бэкапа.Оттуда вы сможете восстановить свои файлы',
'Для продолжения нажмите далее.' + #10#13#10#13 +
'Если хотите выбрать другую папку щелкните Обзор.',
False, 'Backup');
Page.Add('');
Page.Values[0]:= ExpandConstant('{sd}\Backup');
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if (CurStep = ssPreInstall) and IsTaskSelected('arc') then
CopyDir(ExpandConstant('{app}'), Page.Values[0]);
end;


Tukash 03-01-2010 15:23 1309725

JohnDes,
Вот скрипты, пробуй!
Код:

[_Code]
const
Archives = '{src}\*.cab'; // укажите расположение архивов FreeArc; для внешних файлов строку в [Files] добавлять необязательно

PM_REMOVE = 1;
CP_ACP = 0; CP_UTF8 = 65001;
oneMb = 1048576;

type
#ifdef UNICODE ; если у вас ошибка на этой строке, то установите препроцессор или исправьте скрипт для вашей версии Inno Setup
#define A "W"
#else
#define A "A" ; точка входа в SetWindowText, {#A} меняется на A или W в зависимости от версии
PAnsiChar = PChar; // Required for Inno Setup 5.3.0 and higher. (требуется для Inno Setup версии 5.3.0 и ниже)
#endif
#if Ver < 84018176
AnsiString = String; // There is no need for this line in Inno Setup 5.2.4 and above (для Inno Setup версий 5.2.4 и выше эта строка не нужна)
#endif

TMyMsg = record
hwnd: HWND;
message: UINT;
wParam: Longint;
lParam: Longint;
time: DWORD;
pt: TPoint;
end;

TFreeArcCallback = function (what: PAnsiChar; int1, int2: Integer; str: PAnsiChar): Integer;
TArc = record Path: string; OrigSize: Integer; Size: Extended; end;

var
ExtractFile: TLabel;
lblExtractFileName: TLabel;
btnCancelUnpacking: TButton;
CancelCode, n, UnPackError, StartInstall: Integer;
Arcs: array of TArc;
msgError: string;
lastMb: Integer;
baseMb: Integer;
totalUncompressedSize: Integer; // total uncompressed size of archive data in mb
LastTimerEvent: DWORD;

Function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: string; cbMultiByte: integer; lpWideCharStr: string; cchWideChar: integer): longint; external 'MultiByteToWideChar@kernel32.dll stdcall';
Function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: string; cchWideChar: integer; lpMultiByteStr: string; cbMultiByte: integer; lpDefaultChar: integer; lpUsedDefaultChar: integer): longint; external 'WideCharToMultiByte@kernel32.dll stdcall';

function PeekMessage(var lpMsg: TMyMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMyMsg): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: TMyMsg): Longint; external 'DispatchMessageA@user32.dll stdcall';

Function OemToChar(lpszSrc, lpszDst: AnsiString): longint; external 'OemToCharA@user32.dll stdcall';
function GetWindowLong(hWnd, nIndex: Integer): Longint; external 'GetWindowLongA@user32 stdcall delayload';
function SetWindowText(hWnd: Longint; lpString: String): Longint; external 'SetWindowText{#A}@user32 stdcall delayload';

function GetTickCount: DWord; external 'GetTickCount@kernel32';
function WrapFreeArcCallback (callback: TFreeArcCallback; paramcount: integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function FreeArcExtract (callback: longword; cmd1,cmd2,cmd3,cmd4,cmd5,cmd6,cmd7,cmd8,cmd9,cmd10: PAnsiChar): integer; external 'FreeArcExtract@files:unarc.dll cdecl';

procedure AppProcessMessage;
var
Msg: TMyMsg;
begin
while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;

// Перевод числа в строку с точностью 3 знака (%.3n) с округлением дробной части, если она есть
Function NumToStr(Float: Extended): String;
Begin
Result:= Format('%.3n', [Float]); StringChange(Result, ',', '.');
while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Length(Result) > 1) do
SetLength(Result, Length(Result)-1);
End;

function cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;

Function Size64(Hi, Lo: Integer): Extended;
Begin
Result:= Lo;
if Lo<0 then Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
for Hi:= Hi-1 Downto 0 do
Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
End;

// Converts OEM encoded string into ANSI
// Преобразует OEM строку в ANSI кодировку
function OemToAnsiStr( strSource: AnsiString): AnsiString;
var
nRet : longint;
begin
SetLength( Result, Length( strSource ) );
nRet:= OemToChar( strSource, Result );
end;

// Converts ANSI encoded string into UTF-8
// Преобразует строку из ANSI в UTF-8 кодировку
function AnsiToUtf8( strSource: string ): string;
var
nRet : integer;
WideCharBuf: string;
MultiByteBuf: string;
begin
strSource:= strSource + chr(0);
SetLength( WideCharBuf, Length( strSource ) * 2 );
SetLength( MultiByteBuf, Length( strSource ) * 2 );

nRet:= MultiByteToWideChar( CP_ACP, 0, strSource, -1, WideCharBuf, Length(WideCharBuf) );
nRet:= WideCharToMultiByte( CP_UTF8, 0, WideCharBuf, -1, MultiByteBuf, Length(MultiByteBuf), 0, 0);

Result:= MultiByteBuf;
end;

// OnClick event function for btnCancel
procedure btnCancelUnpackingOnClick(Sender: TObject);
begin
if MsgBox( SetupMessage( msgExitSetupMessage ), mbInformation, MB_YESNO ) = IDYES then
CancelCode:= -127;
end;

var origsize: Integer;
// The callback function for getting info about FreeArc archive
function FreeArcInfoCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
begin
if string(what)='origsize' then origsize := Mb else
if string(what)='compsize' then else
if string(what)='total_files' then else
Result:= CancelCode;
end;

// Returns decompressed size of files in archive
function ArchiveOrigSize(arcname: string): Integer;
var
callback: longword;
Begin
callback:= WrapFreeArcCallback(@FreeArcInfoCallback,4); //FreeArcInfoCallback has 4 arguments
CancelCode:= 0;
AppProcessMessage;
try
// Pass the specified arguments to 'unarc.dll'
Result:= FreeArcExtract (callback, 'l', '--', AnsiToUtf8(arcname), '', '', '', '', '', '', '');
if CancelCode < 0 then Result:= CancelCode;
if Result >= 0 then Result:= origsize;
except
Result:= -63; // ArcFail
end;
end;

// Scans the specified folders for archives and add them to list
function FindArcs(dir: string): Extended;
var
FSR: TFindRec;
Begin
Result:= 0;
if FindFirst(ExpandConstant(dir), FSR) then begin
try
repeat
// Skip everything but the folders
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then CONTINUE;
n:= GetArrayLength(Arcs);
// Expand the folder list
SetArrayLength(Arcs, n +1);
Arcs[n].Path:= ExtractFilePath(ExpandConstant(dir)) + FSR.Name;
Arcs[n].Size:= Size64(FSR.SizeHigh, FSR.SizeLow);
Result:= Result + Arcs[n].Size;
Arcs[n].OrigSize := ArchiveOrigSize(Arcs[n].Path)
totalUncompressedSize := totalUncompressedSize + Arcs[n].OrigSize
until not FindNext(FSR);
finally
FindClose(FSR);
end;
end;
End;

// Sets the TaskBar title
Procedure SetTaskBarTitle(Title: String); var h: Integer;
Begin
h:= GetWindowLong(MainForm.Handle, -8); if h <> 0 then SetWindowText(h, Title);
End;

// Converts milliseconds to human-readable time
// Конвертирует милисекунды в человеко-читаемое изображение времени
Function TicksToTime(Ticks: DWord; h,m,s: String; detail: Boolean): String;
Begin
if detail {hh:mm:ss format} then
Result:= PADZ(IntToStr(Ticks/3600000), 2) +':'+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +':'+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2)
else if Ticks/3600 >= 1000 {more than hour} then
Result:= IntToStr(Ticks/3600000) +h+' '+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +m
else if Ticks/60 >= 1000 {1..60 minutes} then
Result:= IntToStr(Ticks/60000) +m+' '+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2) +s
else Result:= IntToStr(Ticks/1000) +s {less than one minute}
End;

// The main callback function for unpacking FreeArc archives
function FreeArcCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
var
percents, Remaining: Integer;
s: String;
begin
if GetTickCount - LastTimerEvent > 1000 then begin
// This code will be executed once each 1000 ms (этот код будет выполняться раз в 1000 миллисекунд)
// ....
// End of code executed by timer
LastTimerEvent := LastTimerEvent+1000;
end;

if string(what)='filename' then begin
// Update FileName label
lblExtractFileName.Caption:= FmtMessage( cm( 'Extracting' ), [OemToAnsiStr( str )] )
end else if (string(what)='write') and (totalUncompressedSize>0) and (Mb>lastMb) then begin
// Assign to Mb *total* amount of data extracted to the moment from all archives
lastMb := Mb;
Mb := baseMb+Mb;

// Update progress bar
WizardForm.ProgressGauge.Position:= Mb;

// Show how much megabytes/archives were processed up to the moment
percents:= (Mb*1000) div totalUncompressedSize;
s := FmtMessage(cm('ExtractedInfo'), [IntToStr(Mb), IntToStr(totalUncompressedSize)]);
if GetArrayLength(Arcs)>1 then
s := s + '. '+FmtMessage(cm('ArcInfo'), [IntToStr(n+1), IntToStr(GetArrayLength(Arcs))])
ExtractFile.Caption := s

// Calculate and show current percents
percents:= (Mb*1000) div totalUncompressedSize;
s:= FmtMessage(cm('AllProgress'), [Format('%.1n', [Abs(percents/10)])]);
if Mb > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((totalUncompressedSize - Mb)/Mb)) else Remaining:= 0;
if Remaining = 0 then SetTaskBarTitle(cm('ending')) else begin
s:= s + '. '+FmtMessage(cm('remains'), [TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)])
SetTaskBarTitle(FmtMessage(cm('taskbar'), [IntToStr(percents/10), TicksToTime(Remaining, 'h', 'm', 's', false)]))
end;
WizardForm.FileNameLabel.Caption := s
end;
AppProcessMessage;
Result:= CancelCode;
end;

// Extracts all found archives
function UnPack(Archives: string): Integer;
var
totalCompressedSize: Extended;
callback: longword;
FreeMB, TotalMB: Cardinal;
begin
// Display 'Extracting FreeArc archive'
lblExtractFileName.Caption:= '';
lblExtractFileName.Show;
ExtractFile.caption:= cm('ArcTitle');
ExtractFile.Show;
// Show the 'Cancel unpacking' button and set it as default button
btnCancelUnpacking.Caption:= WizardForm.CancelButton.Caption;
btnCancelUnpacking.Show;
WizardForm.ActiveControl:= btnCancelUnpacking;
WizardForm.ProgressGauge.Position:= 0;
// Get the size of all archives
totalUncompressedSize := 0;
totalCompressedSize := FindArcs(Archives);
WizardForm.ProgressGauge.Max:= totalUncompressedSize;
// Other initializations
callback:= WrapFreeArcCallback(@FreeArcCallback,4); //FreeArcCallback has 4 arguments
StartInstall:= GetTickCount; {время начала распаковки}
LastTimerEvent:= GetTickCount;
baseMb:= 0

for n:= 0 to GetArrayLength(Arcs) -1 do
begin
lastMb := 0
CancelCode:= 0;
AppProcessMessage;
try
// Pass the specified arguments to 'unarc.dll'
Result:= FreeArcExtract (callback, 'x', '-o+', '-dp' + AnsiToUtf8( ExpandConstant('{app}') ), '--', AnsiToUtf8(Arcs[n].Path), '', '', '', '', '');
if CancelCode < 0 then Result:= CancelCode;
except
Result:= -63; // ArcFail
end;
baseMb:= baseMb+lastMb

// Error occured
if Result <> 0 then
begin
msgError:= FmtMessage(cm('ArcError'), [IntToStr(Result)]);
GetSpaceOnDisk(ExtractFileDrive(ExpandConstant('{app}')), True, FreeMB, TotalMB);
case Result of
-1: if FreeMB < 32 {Мб на диске} then msgError:= SetupMessage(msgDiskSpaceWarningTitle)
else msgError:= msgError + #13#10 + FmtMessage(cm('ArcBroken'), [ExtractFileName(Arcs[n].Path)]);
-127: msgError:= cm('ArcBreak'); //Cancel button
-63: msgError:= cm('ArcFail');
end;
// MsgBox(msgError, mbInformation, MB_OK); //сообщение показывается на странице завершения
Log(msgError);
Break; //прервать цикл распаковки
end;
end;
// Hide labels and button
WizardForm.FileNameLabel.Caption:= '';
lblExtractFileName.Hide;
ExtractFile.Hide;
btnCancelUnpacking.Hide;
end;

procedure CurStepChanged1(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
UnPackError:= UnPack(Archives)
if UnPackError = 0 then
SetTaskBarTitle(SetupMessage(msgSetupAppTitle))
else
begin
// Error occured, uninstall it then
Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n); //откат установки из-за ошибки unarc.dll
SetTaskBarTitle(SetupMessage(msgErrorTitle))
WizardForm.Caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
end;
end;
end;

// стандартный способ отката (не нужна CurPageChanged1), но архивы распаковываются до извлечения файлов инсталлятора
// if CurStep = ssInstall then
// if UnPack(Archives) <> 0 then Abort;

Procedure CurPageChanged1(CurPageID: Integer);
Begin
if (CurPageID = wpFinished) and (UnPackError <> 0) then
begin // Extraction was unsuccessful (распаковщик вернул ошибку)
// Show error message
WizardForm.FinishedLabel.Font.Color:= $0000C0; // red (красный)
WizardForm.FinishedLabel.Height:= WizardForm.FinishedLabel.Height * 2;
WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) + #13#10#13#10 + msgError;
end;
End;

procedure InitializeWizard1();
begin
with WizardForm.ProgressGauge do
begin
// Create a label to show current FileName being extracted
lblExtractFileName:= TLabel.Create(WizardForm);
lblExtractFileName.parent:=WizardForm.InstallingPage;
lblExtractFileName.autosize:=false;
lblExtractFileName.Width:= Width;
lblExtractFileName.top:=Top + ScaleY(35);
lblExtractFileName.Caption:= '';
lblExtractFileName.Hide;

// Create a label to show percentage
ExtractFile:= TLabel.Create(WizardForm);
ExtractFile.parent:=WizardForm.InstallingPage;
ExtractFile.autosize:=false;
ExtractFile.Width:= Width;
ExtractFile.top:=lblExtractFileName.Top + ScaleY(16);
ExtractFile.caption:= '';
ExtractFile.Hide;
end;

// Create a 'Cancel unpacking' button and hide it for now.
btnCancelUnpacking:=TButton.create(WizardForm);
btnCancelUnpacking.Parent:= WizardForm;
btnCancelUnpacking.SetBounds(WizardForm.CancelButton.Left, WizardForm.CancelButton.top, WizardForm.CancelButton.Width, WizardForm.CancelButton.Height);
btnCancelUnpacking.OnClick:= @btnCancelUnpackingOnClick;
btnCancelUnpacking.Hide;
end;

procedure InitializeWizard2();
begin
//Выносим кнопку "Отмена" на передний план
WizardForm.CancelButton.BringToFront;
end;

procedure CurPageChanged2(CurPageID: Integer);
begin
if CurPageID=wpInstalling
then
begin
WizardForm.MainPanel.Visible:=False;
WizardForm.Bevel1.Visible:=False;
WizardForm.Width:=ScaleX(395);
WizardForm.Height:=ScaleY(142);
//Здесь смещение страницы установки (в верхний левый угол)
WizardForm.Left:=ScaleX(0);
WizardForm.Top:=ScaleY(0);
{Внимание! Нижеописанные способы смещения работают только когда вставлено фоновое изображение или WindowVisible=yes}
{Выводит в правом верхнем углу экрана}
//WizardForm.Left:=ScaleX(MainForm.Width-420);
//WizardForm.Top:=ScaleY(MainForm.Left+20);

{Выводит снизу по центру экрана}
//WizardForm.Position:=poScreenCenter;
//WizardForm.Top:=ScaleY(MainForm.Height-170);

{Выводит в нижнем левом углу (как в Doom 3 Resurrection of Evil от 1C)}
//WizardForm.Left:=ScaleX(MainForm.Left+20);
//WizardForm.Top:=ScaleY(MainForm.Height-170);

{Выводит в нижнем правом углу}
//WizardForm.Left:=ScaleX(MainForm.Width-420);
//WizardForm.Top:=ScaleY(MainForm.Height-170);

WizardForm.InnerNotebook.Left:=ScaleX(10);
WizardForm.InnerNotebook.Top:=ScaleY(10);
WizardForm.InnerNotebook.Width:=ScaleX(370);
WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(20);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(40);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(154);
WizardForm.CancelButton.Top:=ScaleY(80);
end
if CurPageID=wpFinished
then
begin
WizardForm.Width:=502;{Размер окна по горизонтали}
WizardForm.Height:=392;{Размер окна по вертикали}
WizardForm.Position:=poScreenCenter; {Возврат в исходное состояние}
end
end;


procedure CurStepChanged(CurStep: TSetupStep);
begin
  CurStepChanged1(CurStep);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  CurPageChanged1(CurPageID);
  CurPageChanged2(CurPageID);
end;

procedure InitializeWizard();
begin
  InitializeWizard1();
  InitializeWizard2();
end;


JohnDes 03-01-2010 15:50 1309743

Цитата:

Цитата Tukash
JohnDes,
Вот скрипты, пробуй! »

Ну я и сам склеивал, в посте было написано
Цитата:

Чтобы не было вот так и работала кнопка отмены
В конечном итоге как и было
Всем спасибо, но мне уже помогли

Colapse 04-01-2010 00:42 1310220

вот скрипт
читать дальше »

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{35133CCE-057F-4218-9C63-007B8E03A776}
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
WizardImageFile=D:\image\WizardImage.bmp
WizardSmallImageFile=D:\image\WizardSmallImage.bmp
DiskSliceSize=1400000000
SlicesPerDisk=1


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

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\Program Files\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\image\button.bmp"; DestDir: "{tmp}"; Flags: dontcopy
Source: "D:\image\black_folder.bmp"; DestDir: "{tmp}"; Flags: dontcopy
Source: "D:\image\background.bmp"; DestDir: "{tmp}"; Flags: dontcopy
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"
Name: "{commondesktop}\My Program"; Filename: "{app}\MyProg.exe"; Tasks: desktopicon

[Run]
Filename: "{app}\MyProg.exe"; Description: "{cm:LaunchProgram,My Program}"; Flags: nowait postinstall skipifsilent

[code]
const
ButtonWidth = 80; //Указываем размер кнопок
ButtonHeight = 23;

bidBack = 0;
bidNext = 1;
bidCancel = 2;
bidDirBrowse = 3;
bidGroupBrowse = 4;

var
ButtonPanel: array [0..4] of TPanel;
ButtonImage: array [0..4] of TBitmapImage;
ButtonLabel: array [0..4] of TLabel;

procedure ButtonLabelClick(Sender: TObject);
var
Button: TButton;
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
case TLabel(Sender).Tag of
bidBack: Button:=WizardForm.BackButton
bidNext: Button:=WizardForm.NextButton
bidCancel: Button:=WizardForm.CancelButton
bidDirBrowse: Button:=WizardForm.DirBrowseButton
bidGroupBrowse: Button:=WizardForm.GroupBrowseButton
else
Exit
end
Button.OnClick(Button)
end;

procedure ButtonLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if ButtonLabel[TLabel(Sender).Tag].Enabled then
ButtonImage[TLabel(Sender).Tag].Left:=-ButtonWidth
end;

procedure ButtonLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
end;

procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
Image: TBitmapImage;
Panel: TPanel;
Labl: TLabel;

begin
Panel:=TPanel.Create(WizardForm)
Panel.Left:=AButton.Left
Panel.Top:=AButton.Top
Panel.Width:=AButton.Width
Panel.Height:=AButton.Height
Panel.Tag:=AButtonIndex
Panel.Parent:=AButton.Parent
ButtonPanel[AButtonIndex]:=Panel

Image:=TBitmapImage.Create(WizardForm) //Рисунок который ложится на кнопку
Image.Width:=160 //Обязательно прописать оригинальный размер рисунка
Image.Height:=23
Image.Enabled:=False
Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\button.bmp'))
Image.Parent:=Panel
ButtonImage[AButtonIndex]:=Image

with TLabel.Create(WizardForm) do begin
Tag:=AButtonIndex
Parent:=Panel
Width:=Panel.Width
Height:=Panel.Height
Transparent:=True
OnClick:=@ButtonLabelClick
OnDblClick:=@ButtonLabelClick
OnMouseDown:=@ButtonLabelMouseDown
OnMouseUp:=@ButtonLabelMouseUp
end

Labl:=TLabel.Create(WizardForm) //Текст кнопок
Labl.Left:=13 //Указываем положение текста
Labl.Top:=5
Labl.Autosize:=True
Labl.Alignment:=taCenter
Labl.Tag:=AButtonIndex
Labl.Transparent:=True
Labl.Font.Color:=clWhite //Цвет текста
Labl.Caption:=AButton.Caption
Labl.OnClick:=@ButtonLabelClick
Labl.OnDblClick:=@ButtonLabelClick
Labl.OnMouseDown:=@ButtonLabelMouseDown
Labl.OnMouseUp:=@ButtonLabelMouseUp
Labl.Parent:=Panel
ButtonLabel[AButtonIndex]:=Labl
end;

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
ButtonLabel[AButtonIndex].Caption:=AButton.Caption
ButtonPanel[AButtonIndex].Visible:=AButton.Visible
ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=True
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=False
end;

procedure CurPageChanged1(CurPageID: Integer);
begin
UpdateButton(WizardForm.BackButton,bidBack)
UpdateButton(WizardForm.NextButton,bidNext)
UpdateButton(WizardForm.CancelButton,bidCancel)
end;

procedure InitializeWizard1();
begin
WizardForm.BackButton.Width:=ButtonWidth
WizardForm.BackButton.Height:=ButtonHeight

WizardForm.NextButton.Width:=ButtonWidth
WizardForm.NextButton.Height:=ButtonHeight

WizardForm.CancelButton.Width:=ButtonWidth
WizardForm.CancelButton.Height:=ButtonHeight

WizardForm.DirBrowseButton.Left:=337
WizardForm.DirBrowseButton.Width:=ButtonWidth
WizardForm.DirBrowseButton.Height:=ButtonHeight

WizardForm.GroupBrowseButton.Left:=337
WizardForm.GroupBrowseButton.Width:=ButtonWidth
WizardForm.GroupBrowseButton.Height:=ButtonHeight

WizardForm.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick

WizardForm.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick

ExtractTemporaryFile('button.bmp')
LoadButtonImage(WizardForm.BackButton,bidBack)
LoadButtonImage(WizardForm.NextButton,bidNext)
LoadButtonImage(WizardForm.CancelButton,bidCancel)
LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;

procedure InitializeWizard2();
begin
with WizardForm do begin
with MainPanel do
Height := Height - 1;
with WizardSmallBitmapImage do begin
Left := 0;
Top := 0;
Height := 55; //Размер рисунка
Width := 483; //
end;
with PageNameLabel do begin
Font.Name := 'Tahoma'
Width := Width - 483; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 483; //
end;
with PageDescriptionLabel do begin
Font.Name := 'Tahoma'
Width := Width - 483; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 483; //
end;
end;
end;

const
Color = clblack;

procedure InitializeWizard3();
begin
WizardForm.PageNameLabel.Font.Color:=clWhite;
WizardForm.Font.Color:=clWhite;
WizardForm.Color:=Color;
WizardForm.WelcomePage.Color:=Color;
WizardForm.InnerPage.Color:=Color;
WizardForm.FinishedPage.Color:=Color;
WizardForm.LicensePage.Color:=Color;
WizardForm.PasswordPage.Color:=Color;
WizardForm.InfoBeforePage.Color:=Color;
WizardForm.UserInfoPage.Color:=Color;
WizardForm.SelectDirPage.Color:=Color;
WizardForm.SelectComponentsPage.Color:=Color;
WizardForm.SelectProgramGroupPage.Color:=Color;
WizardForm.SelectTasksPage.Color:=Color;
WizardForm.ReadyPage.Color:=Color;
WizardForm.PreparingPage.Color:=Color;
WizardForm.InstallingPage.Color:=Color;
WizardForm.InfoAfterPage.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.DiskSpaceLabel.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.GroupEdit.Color:=Color;
WizardForm.PasswordLabel.Color:=Color;
WizardForm.PasswordEdit.Color:=Color;
WizardForm.PasswordEditLabel.Color:=Color;
WizardForm.ReadyMemo.Color:=Color;
WizardForm.TypesCombo.Color:=Color;
WizardForm.WelcomeLabel1.Color:=Color;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.Color:=Color;
WizardForm.YesRadio.Color:=Color;
WizardForm.NoRadio.Color:=Color;
WizardForm.WelcomeLabel2.Color:=Color;
WizardForm.LicenseLabel1.Color:=Color;
WizardForm.InfoAfterClickLabel.Color:=Color;
WizardForm.ComponentsList.Color:=Color;
WizardForm.ComponentsDiskSpaceLabel.Color:=Color;
WizardForm.BeveledLabel.Color:=Color;
WizardForm.StatusLabel.Color:=Color;
WizardForm.FilenameLabel.Color:=Color;
WizardForm.SelectDirLabel.Color:=Color;
WizardForm.SelectStartMenuFolderLabel.Color:=Color;
WizardForm.SelectComponentsLabel.Color:=Color;
WizardForm.SelectTasksLabel.Color:=Color;
WizardForm.LicenseAcceptedRadio.Color:=Color;
WizardForm.LicenseNotAcceptedRadio.Color:=Color;
WizardForm.UserInfoNameLabel.Color:=Color;
WizardForm.UserInfoNameEdit.Color:=Color;
WizardForm.UserInfoOrgLabel.Color:=Color;
WizardForm.UserInfoOrgEdit.Color:=Color;
WizardForm.PreparingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Color:=Color;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
end;

procedure InitializeWizard4();
begin
ExtractTemporaryFile('black_folder.bmp');
WizardForm.SelectDirBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\black_folder.bmp'));
WizardForm.SelectDirBitmapImage.AutoSize:=true;
WizardForm.SelectGroupBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\black_folder.bmp'));
WizardForm.SelectGroupBitmapImage.AutoSize:=true;
end;

var
WelcomeLabel1, WelcomeLabel2: TLabel;
BmpFile: TBitmapImage;

procedure InitializeWizard6();
begin
ExtractTemporaryFile('background.bmp');

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\background.bmp'));
BmpFile.SetBounds(0, 0, 483, 313);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.WelcomePage;

with WizardForm do
begin
WelcomeLabel1.Hide;
WelcomeLabel2.hide;
end;

WelcomeLabel1:= TLabel.Create(WizardForm);
with WelcomeLabel1 do
begin
WelcomeLabel1.Alignment:=taCenter;
Left:= ScaleX(176);
Top:= ScaleY(66);
Width:= ScaleX(301);
Height:= ScaleY(71);
AutoSize:= false;
Transparent:= true;
WordWrap:= true;
Font.Name:='Arial'
Font.Size:= 12;
Font.Color:=ClWhite
Parent:= WizardForm.WelcomePage;
Caption:= WizardForm.WelcomeLabel1.Caption;
end;

WelcomeLabel2:=TLabel.Create(WizardForm);
with WelcomeLabel2 do
begin
WelcomeLabel2.Alignment:=taCenter;
Top:= ScaleY(136);
Left:= ScaleX(176);
Width:= ScaleX(301);
Height:= ScaleY(300);
AutoSize:= false;
WordWrap:= true;
Font.Color:=ClWhite
Font.Name:='Tahoma'
Transparent:= true;
Parent:= WizardForm.WelcomePage;
Caption:= WizardForm.WelcomeLabel2.Caption;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
CurPageChanged1(CurPageID);
end;

procedure InitializeWizard();
begin
InitializeWizard1();
InitializeWizard2();
InitializeWizard3();
InitializeWizard4();
InitializeWizard6();
end;

не могу его соединить с Ultimate Test Black!А также не знаю как сделать страницу завершения такой же как и приветствия.Help please!

REXE 04-01-2010 13:20 1310488

Подскажите пожалуйста код запроса второго диска для скрипта распаковки фриарк архивов,буду благодарен)

ZanyGamer 04-01-2010 14:06 1310516

В завершающем окне есть 3 чикбокса, допустим поснимал со всех галочку, потом хочу обратно все 3 вернуть, но получается что ставится только 1 из 3

скрипт

[Setup]
SourceDir=.
OutputDir=Setup
AppName=111
AppVerName=111
AppVersion=111
AppPublisher=111
AppCopyright=111
AppPublisherURL=111
AppSupportURL=111
AppUpdatesURL=111
DefaultDirName={pf}\111
DefaultGroupName=111
AllowNoIcons=yes
OutputBaseFilename=setup
WizardImageFile=C:\Мои документы\111.bmp
WizardSmallImageFile=C:\Мои документы\111.bmp
SetupIconFile=C:\Мои документы\111.ico
WindowVisible=no
WindowShowCaption=no
WindowResizable=no
Compression=lzma/ultra
SolidCompression=yes

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

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

[Files]
Source: "C:\Мои документы\111.bmp"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: "isgsg.dll"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: "E:\Games\111\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension

[Icons]
Name: "{group}\111"; Filename: "{app}\Frozen Throne.exe"; WorkingDir: "{app}";
Name: "{userdesktop}\111"; Filename: "{app}\Frozen Throne.exe"; WorkingDir: "{app}"; Tasks: desktopicon;
Name: "{group}\111"; Filename: "{app}\BigTorrents.ru.exe"; WorkingDir: "{app}";
Name: "{userdesktop}\111"; Filename: "{app}\BigTorrents.ru.exe"; WorkingDir: "{app}"; Tasks: desktopicon;
Name: "{group}\{cm:UninstallProgram,111}"; Filename: "{uninstallexe}"

[Run]
Description: "{cm:LaunchProgram, 111}"; Filename: "{app}\111.exe"; WorkingDir: "{app}"; Flags: nowait postinstall skipifsilent
Description: "Посетить сайт"; Filename: "{app}\111.exe"; WorkingDir: "{app}"; Flags: nowait postinstall skipifsilent
Description: "Посмотреть историю версий"; Filename: "{app}\История версий.txt"; Flags: postinstall shellexec skipifsilent

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

[code]
const
dURL=2;

var
URLLabel,URLLabelShadow:TLabel;

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 URLLabelClick(Sender: TObject);
var
ErrorCode:integer;
begin
ShellExec('open','http://111/','','',SW_SHOWNORMAL,ewNoWait,ErrorCode);
end;

procedure URLLabelMouseDown(Sender:TObject;Button:TMouseButton;Shift:TShiftState;X,Y:Integer);
begin
URLLabel.Top:=URLLabel.Top+dURL;
URLLabel.Left:=URLLabel.Left+dURL;
URLLabel.Font.Style:=URLLabel.Font.Style+[fsUnderline];
URLLabel.Font.Color:=clBlue;
URLLabelShadow.Visible:=False;
end;

procedure URLLabelMouseUp(Sender:TObject;Button:TMouseButton;Shift:TShiftState;X,Y:Integer);
begin
URLLabel.Top:=URLLabel.Top-dURL;
URLLabel.Left:=URLLabel.Left-dURL;
URLLabel.Font.Style:=URLLabel.Font.Style-[fsUnderline];
URLLabel.Font.Color:=clMaroon;
URLLabelShadow.Visible:=True;
end;

procedure RunListClickCheck(Sender: TObject);
var
i:integer;
begin
if WizardForm.RunList.Checked[WizardForm.RunList.ItemIndex] then begin
for i:=0 to WizardForm.RunList.Items.Count-1 do
WizardForm.RunList.Checked[i]:=False;
WizardForm.RunList.Checked[WizardForm.RunList.ItemIndex]:=True;
end;
end;

procedure InitializeWizard;
begin
WizardForm.RunList.OnClickCheck:=@RunListClickCheck;
URLLabelShadow:=TLabel.Create(WizardForm);
with URLLabelShadow do begin
Top:=ScaleY(331);
Left:=ScaleX(25);
Caption:='http://111/';
AutoSize:=True;
Parent:=WizardForm;
Transparent:=True;
Font.Color:=$00FF00;
Font.Size:=9;
Font.Style:=Font.Style+[fsBold];
end;
URLLabel:=TLabel.Create(WizardForm);
with URLLabel do begin
Top:=ScaleY(331)-dURL;
Left:=ScaleX(25)-dURL;
Caption:='http://111/';
AutoSize:=True;
Parent:=WizardForm;
Cursor:=crHand;
Transparent:=True;
Font.Color:=clBlack;
Font.Size:=9;
Font.Style:=Font.Style+[fsBold];
BringToFront;
OnClick:=@URLLabelClick;
OnMouseDown:=@URLLabelMouseDown;
OnMouseUp:=@URLLabelMouseUp;
end;
ExtractTemporaryFile('bt.bmp');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\bt.bmp',750,1000,750,0,255,False,$FFFFF F,10);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if (CurPageID=wpFinished) or (CurPageID=wpInfoAfter) then
WizardForm.RunList.Checked[0]:=True;
end;

REXE 04-01-2010 22:42 1310928

Подскажите пожалуйта,использую я разделение на несколько setup.bin,как мне сделать чтобы они назывались не setup-1 и не setup-2.bin а например setup-1a и setup-1b.bin ??

A1EXXX 05-01-2010 10:30 1311169

REXE, в родной справке искать не пробовал? :teeth:

ZanyGamer 05-01-2010 12:30 1311236

Разобрался!
Где-то брал не помню на этом форуме или нет скрипт с procedure InitializeWizard; - в нём косяк!
Так что если у кого-то
Цитата:

Цитата ZanyGamer
В завершающем окне есть 3 чикбокса, допустим поснимал со всех галочку, потом хочу обратно все 3 вернуть, но получается что ставится только 1 из 3 »

Такая же ситуация, то знайте в чём трабла!

Спасибо что создали такую тему буквально "для чайников". Ну конечно не совсем, но кто голову имеет - по кусочкам соберёт красивый инсталер!

скрипт

procedure InitializeWizard;
begin
WizardForm.RunList.OnClickCheck:=@RunListClickCheck;
URLLabelShadow:=TLabel.Create(WizardForm);
with URLLabelShadow do begin
Top:=ScaleY(331);
Left:=ScaleX(25);
Caption:='http://Bigtorrents.ru/';
AutoSize:=True;
Parent:=WizardForm;
Transparent:=True;
Font.Color:=$00FF00;
Font.Size:=9;
Font.Style:=Font.Style+[fsBold];
end;
URLLabel:=TLabel.Create(WizardForm);
with URLLabel do begin
Top:=ScaleY(331)-dURL;
Left:=ScaleX(25)-dURL;
Caption:='http://Bigtorrents.ru/';
AutoSize:=True;
Parent:=WizardForm;
Cursor:=crHand;
Transparent:=True;
Font.Color:=clBlack;
Font.Size:=9;
Font.Style:=Font.Style+[fsBold];
BringToFront;
OnClick:=@URLLabelClick;
OnMouseDown:=@URLLabelMouseDown;
OnMouseUp:=@URLLabelMouseUp;
end;
ExtractTemporaryFile('bt.bmp');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\bt.bmp',750,1000,750,0,255,False,$FFFFF F,10);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if (CurPageID=wpFinished) or (CurPageID=wpInfoAfter) then
WizardForm.RunList.Checked[0]:=True;
end;

Unsane 05-01-2010 15:03 1311400

Можно ли в секции [code] отключить создание деинсталлятора (аналогично Uninstallable=no)?

serg aka lain 05-01-2010 21:06 1311785

Цитата:

Цитата Unsane
Можно ли в секции [code] отключить создание деинсталлятора (аналогично Uninstallable=no)? »

Отключить, думаю нет. Но можно его удалить, сразу после завершения установки.

Sotonisto 06-01-2010 07:38 1312116

У меня есть 4 вопроса.

1. Как сделать картинку фоном инсталлятора? Вот так, только без логотипа, белой полосы и черно пространства?
>>> http://s54.radikal.ru/i143/1001/fc/251dc65b26d6.jpg
Ну что бы была картинка на весь инсталл и во всех диалогах (да и надпись приветствия желательно по центру разместить).
Дайте плз скрипт, или ссылку, где все подробно описано.

3. Можно ли изменить стандартную рамку инсталла, например, на черную?
>>> http://s15.radikal.ru/i189/1001/dd/da66e7110cff.jpg

4. Как заменить стандарный прогресс бар (просто полоса) на прогресс бар с делениями?

ZanyGamer 06-01-2010 07:50 1312118

Думаю примеры которые просит Sotonisto, нужно в шапку кинуть, т.к. очень много задавали эти вопросы! На все я видел ответы на разных страницах, дабы не перебирать все страницы (больше 100) считаю целесообразным засунуть эти скрипты в шапку и желательно с вложенными картинками и стилем. Будет просто здорово!

YURSHAT 06-01-2010 09:15 1312136

Цитата:

Цитата Sotonisto
1. Как сделать картинку фоном инсталлятора? Вот так, только без логотипа, белой полосы и черно пространства? »

Примерно так

Цитата:

Цитата Sotonisto
3. Можно ли изменить стандартную рамку инсталла, например, на черную? »

Можно, применив скин Tiger.cjstyles

Цитата:

Цитата ZanyGamer
Думаю примеры которые просит Sotonisto, нужно в шапку кинуть, »

Пример с картинкой итак есть в шапке!!! А вообще этот вопрос уже жован-пережован 100 раз!!!

Sotonisto 06-01-2010 11:40 1312214

Цитата:

Цитата YURSHAT
Примерно так »

Я посмотрел и ужаснулся :)
Я и в шапке скрипт видел, но чет у меня траблы начинаются, когда черные кнопки пытаюсь сделать ((

В конце скрипта на картинку для инсталлера есть такой код:
читать дальше »
Код:

procedure CurPageChanged(CurPageID: Integer);
begin
  pnl:= TPanel.Create(WizardForm);
  with pnl do
    begin
      Align:= alClient;
      Parent:= WizardForm;
    end;
  with WizardForm do
    begin
      with WizardBitmapImage do
        begin
          Align:= alClient;
          Stretch:= True;
          Parent:= pnl;
        end;
      NextButton.Parent:= pnl;
      CancelButton.Parent:= pnl;
      BackButton.Parent:= pnl;
      Bevel.Parent:= pnl;
      pnl.Repaint;
    end;

  if (CurPageID > wpWelcome) and (CurPageID < wpFinished) then
    begin
      WizardForm.Bevel1.Parent:= pnl;
      with TLabel.Create(pnl) do
        begin
          AutoSize:= WizardForm.PageNameLabel.AutoSize;
          SetBounds(WizardForm.PageNameLabel.Left,WizardForm.PageNameLabel.Top,
                    WizardForm.PageNameLabel.Width,WizardForm.PageNameLabel.Height);
          Caption:= WizardForm.PageNameLabel.Caption;
          with Font do
            begin
              Color:= WizardForm.PageNameLabel.Font.Color;
              Style:= WizardForm.PageNameLabel.Font.Style;
              Name:= WizardForm.PageNameLabel.Font.Name;
              Size:= WizardForm.PageNameLabel.Font.Size;
            end;
          Transparent:= True;
          Parent:= pnl;
        end;
      with TLabel.Create(pnl) do
        begin
          AutoSize:= WizardForm.PageDescriptionLabel.AutoSize;
          SetBounds(WizardForm.PageDescriptionLabel.Left,WizardForm.PageDescriptionLabel.Top,
                    WizardForm.PageDescriptionLabel.Width,WizardForm.PageDescriptionLabel.Height);
          Caption:= WizardForm.PageDescriptionLabel.Caption;
          with Font do
            begin
              Color:= WizardForm.PageDescriptionLabel.Font.Color;
              Style:= WizardForm.PageDescriptionLabel.Font.Style;
              Name:= WizardForm.PageDescriptionLabel.Font.Name;
              Size:= WizardForm.PageDescriptionLabel.Font.Size;
            end;
          Transparent:= True;
          Parent:= pnl;
        end;
      pnl.Repaint;
    end;

  if CurPageID = wpWelcome then WelcomePage;
  if CurPageID = wpSelectDir then SelectDirPage;
  if CurPageID = wpReady then ReadyPage;
  if CurPageID = wpInstalling then InstallingPage;
  if CurPageID = wpFinished then FinishedPage;
end;


Он конфликтует с этой строкой - она для замены кнопок:
читать дальше »
Код:

procedure CurPageChanged(CurPageID: Integer);
begin
  UpdateButton(WizardForm.BackButton,bidBack)
  UpdateButton(WizardForm.NextButton,bidNext)
  UpdateButton(WizardForm.CancelButton,bidCancel)
end;



Если чет перенести - ничего не пашет =( Я в инно сетапе пока что профан, так что не знаю что делать =(

Плюс вот такое вот во время принятия лицензии/выбора папки в меню пуск/устанавливать директ и т.д.

Просто ничего не видно и все ((

И еще я хочу избавится от белых полос (они портят картинку). Я видел пару раз инстал без них и мне тож захотелось примерно такой же сделать.

Цитата:

Цитата YURSHAT
Пример с картинкой итак есть в шапке!!! А вообще этот вопрос уже жован-пережован 100 раз!!! »

Я б качнул руководство от Kindly, но у меня айпи не выделенный, так что про скачивание с рапида можно забыть ((

Цитата:

Цитата YURSHAT
Можно, применив скин Tiger.cjstyles»

Напиши пример строки плз.

З.Ы.: а как на счет прогресс-бара? ну на кряйняк ему же цвет можно как-то изменить?!

YURSHAT 06-01-2010 13:07 1312266

Sotonisto
Цитата:

Он конфликтует с этой строкой - она для замены кнопок:
Можно сделать так: Первой процедуре CurPageChanged присвоить цифру 1 т.е.
procedure CurPageChanged1(CurPageID: Integer);
begin

бла-бла

Второй цифру 2

procedure CurPageChanged2(CurPageID: Integer);
begin

бла-бла (кнопки)

А в конце скрипта добавить это:

Код:

procedure CurPageChanged(CurPageID: Integer);
begin
CurPageChanged1(CurPageID);
CurPageChanged2(CurPageID);
end;

Цитата:

И еще я хочу избавится от белых полос (они портят картинку). Я видел пару раз инстал без них и мне тож захотелось примерно такой же сделать.
Код:

procedure InitializeWizard();
begin
WizardForm.Bevel.Hide
WizardForm.Bevel1.Hide
end;

Цитата:

Напиши пример строки плз.
Используйте прогу ISSkin. А Tiger.cjstyles даст вам черную строку заголовка

Цитата:

З.Ы.: а как на счет прогресс-бара? ну на кряйняк ему же цвет можно как-то изменить?!
Можно наложить на него текстурку
Пример
Код:

[Setup]
AppName=zz
DefaultGroupName=group
AppVerName=zzz
DefaultDirName={pf}\test
SolidCompression=false
InternalCompressLevel=none
Compression=none

#define PB_ImageFile  "progress1.bmp"//картинка 1 на 19

[Files]
Source: D:\Программы\Inno Setup 5.2.2\Новая папка (4)\DLL\InnoCallback.dll; Flags: dontcopy ignoreversion
Source: {#PB_ImageFile}; DestDir: "{tmp}"; Flags: recursesubdirs ignoreversion
Source: {win}\help\*.hlp; DestDir: {app}\Files; Flags: external

[Code_]
type
    TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);

var
    TimerID: LongWord;
    intOldCurrWidth : Integer;
    ProgressBar_BitmapImage: TBitmapImage;
    ProgressBar_Edit : TEdit;
    ProgressBar_ImageHeight : integer;

// Функции для работы с таймером
function WrapTimerProc(callback:TProc; paramcount:integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';

// Обработчик нажатия кнопки Отмена
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
if CurPageID = wpInstalling then // Просто спрячем наш Прогресс Бар
ProgressBar_Edit.Show;
end;

// Функция вызываемая по таймеру
procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
var
    CurrWidth : single;
begin
    // Используем текущее состояние стандартного Прогресс Бара (ПБ)
    with WizardForm.ProgressGauge do
    begin
        CurrWidth := ( Position * Width ) / Max;            // Вычисляем какой ширины должен быть наш ПБ
        if intOldCurrWidth <> Round( CurrWidth ) then      // Если ширина пока что такая же, то не будем пока что рисовать, чтобы избежать лишних обновлений формы
        begin
            intOldCurrWidth := Round( CurrWidth );
            // Теперича "рисуем" наш ПБ
            ProgressBar_BitmapImage.SetBounds( 0, 0, intOldCurrWidth, ProgressBar_ImageHeight );
            ProgressBar_BitmapImage.Show();                    // Показываем его во всей красе
        end;
    end;
end;

procedure CurPageChanged(CurPageID: Integer);
var
    pfunc: LongWord;
begin
    if CurPageID = wpInstalling then
    begin
        // Устанавливаем таймер
        pfunc := WrapTimerProc( @OnTimer, 4 );
        TimerID := SetTimer( 0, 0, 100, pfunc );
        intOldCurrWidth := 0;
    end;

    // Убираем таймер, когда находимся на последней странице.
    if CurPageID = wpFinished then
        KillTimer( 0, TimerID );
end;

Procedure InitializeWizard;
begin
    // Создаем наш Edit, чтобы у нашего ПБ была более-менее нормальная рамка.
    ProgressBar_Edit := TEdit.Create( WizardForm );
    with ProgressBar_Edit do
    begin
        // Создаем его на месте стандартного ПБ
        Left := WizardForm.ProgressGauge.Left;
        Top := WizardForm.ProgressGauge.Top;
        Width := WizardForm.ProgressGauge.Width;
        Height := WizardForm.ProgressGauge.Height;
        Enabled := False;
        ReadOnly := True;
        // Фоновый цвет делаем точно такой же как у формы.
        Color := WizardForm.Color;
        Parent := WizardForm.InstallingPage;
    end;

    // Распаковываем картинку для нашего ПБ
    ExtractTemporaryFile( '{#PB_ImageFile}' );

    ProgressBar_BitmapImage := TBitmapImage.Create( WizardForm );
    with ProgressBar_BitmapImage do
    begin
        // Загружаем картинку
        Bitmap.LoadFromFile( ExpandConstant( '{tmp}\' ) + '{#PB_ImageFile}' );
        Parent := ProgressBar_Edit;
        Stretch := True;        // Он должен растягиваться
        Hide;                  // Прячем его до поры до времени
    end;

    // Получаем высоту для картинки
    ProgressBar_ImageHeight := ProgressBar_Edit.Height - 2;
    // Прячем стандартный ПБ
    WizardForm.ProgressGauge.Hide;
end;

procedure DeinitializeSetup();
begin
    // Убираем таймер
    KillTimer( 0, TimerID );
end;


GrizzlyMK 06-01-2010 18:00 1312552

Вложений: 1
Помогите соединить 2 скрипта.
Оба скрипта в архиве, заранее спасибо.

serg aka lain 06-01-2010 19:33 1312636

Inno Setup 5.3.7 released. Happy new year!
Что нового?

* The PrivilegesRequired [Setup] section directive can now be set to lowest. On Windows Vista and later this instructs Setup to not request elevated rights (via a User Account Control dialog) even if it was started by a member of the Administrators group. Do not use this setting unless you are sure your installation will run successfully on unprivileged accounts. On Windows NT/2000/XP/2003, lowest behaves the same as none.
* Added new Compiler IDE option: Autosave before compiling.
* [Tasks] section flags checkedonce and unchecked may now be combined. This combination specifies the task to be unchecked by default on the first install, and always unchecked by default on subsequent installs as well.
* A problem with "Not Implemented" errors when Setup or Uninstall was run on Windows 7 under special conditions such as from a non-interactive service was fixed.
* Changed the CodePrepareToInstall.iss example script to use the RunOnce registry key instead of a shortcut placed in {commonstartup}.
* Pascal Scripting: the Non Unicode compiler now has a PAnsiChar type just like the Unicode compiler.
* Added official Japanese translation.
* Unicode [code] based on RemObjects Pascal Script SVN code revision 197.
* Minor tweaks.

Lancer2404 07-01-2010 14:07 1313225

А как реализовать такую функцию.Когда выбран одим из компонентов то он запускается после инсталляции.А если не выбран то не запускается.пробовал функцию checked но в примере он спрашивает устанавливать или нет в любом случае.Может надо чтото исправить в коде

Drongo 07-01-2010 16:07 1313313

Всем привет. Позвонил друг, попросил узнать, как сделать инсталятор с проверкой операционной системы на Висту. В коде я выделил красным цветом, что я добавил для того чтобы инсталятор проверил что ОС - является Вистой и установка пошла дальше. Добавил эту строку. Друг говорит, что вариант не проходит, пробовал на висте установить, значение ложное и не устанавливается.
Код:

(Pos('Vista', SystemVersionPanel.Text) = 0) then  // Windows Vista (c любым SP или без него)
Код:

...
// Операционная система:
  SystemVersionPanel.Color := $CCFFCC

  DeviceKey := 'Software\Microsoft\Windows NT\CurrentVersion'
  if not UsingWinNT then StringChange(DeviceKey, 'Windows NT', 'Windows')
        RegQueryStringValue(HKLM, DeviceKey, 'ProductName', DeviceName)
  if RegQueryStringValue(HKLM, DeviceKey, 'CSDVersion', DeviceKey) then
    DeviceName := DeviceName + ' ' + DeviceKey
        StringChange(DeviceName, 'Microsoft ', '')
  SystemVersionPanel.Text := ' ' + DeviceName + ' сборка ' + IntToStr(Version.Major) + '.' + IntToStr(Version.Minor) +
                            '.' + IntToStr(Version.Build)

  if (Pos('2000 Service Pack 4', SystemVersionPanel.Text) = 0) and  // Windows 2000 SP4
    (Pos('XP Service Pack 1', SystemVersionPanel.Text) = 0) and  // Windows XP SP1
    (Pos('XP Service Pack 2', SystemVersionPanel.Text) = 0) and  // Windows XP SP2
    (Pos('XP Service Pack 3', SystemVersionPanel.Text) = 0) and  // Windows XP SP3
    (Pos('Vista', SystemVersionPanel.Text) = 0) then  // Windows Vista (c любым SP или без него)
    begin
      SystemVersionPanel.Color := $CCCCFF
      ChangeText := True
    end
...

Как сделать проверку чтобы на Висте условие удовлетворялось бы?

serg aka lain 07-01-2010 19:34 1313454

Цитата:

Цитата Drongo
Как сделать проверку чтобы на Висте условие удовлетворялось бы? »

А если так?
Код:

[Setup]
AppName=My Program
AppVerName=My Program version
DefaultDirName={pf}\My Program
OutputDir=userdocs:My Program.

[code]
function InitializeSetup: Boolean;
var
  Version: TWindowsVersion;
  S: String;
begin
  GetWindowsVersionEx(Version);
  S := 'Ваша операционная система не является Windows Vista.'
        + #13#13 'Продолжение невозможно!';

  if Version.NTPlatform and (Version.Major = 6) and (Version.Minor = 0) then
    Result := True
  else
  begin
    SuppressibleMsgBox(S, mbCriticalError, MB_OK, MB_OK);
    Exit;
  end;

  if (UsingWinNT = False) then
  begin
    SuppressibleMsgBox(S, mbCriticalError, MB_OK, MB_OK);
    Exit;
  end;

  Result := True;
end;


Drongo 07-01-2010 20:24 1313499

serg aka lain, Пока ещё не проверял, но скорее всего не проверю. :( Оказалось, что друг хотел запустить установщик на Vista 64-bit. И то ли он чего-то там намудрил, то ли они не допоняли как делать скрипт, мы живём в разных районах. По телефону не особо поймёшь чего они делали и что у них не получается. В двух словах, говорит, что вроде бы не идёт из-за того, что на 64-битной виста две папки Program Files и установщик не понимает какая из них должна использоваться. В общем вопрос снят.

Зато спрошу другой вопрос. Можете скинуть чистый шаблон скрипта, для использования на 64-битной системе?

serg aka lain 07-01-2010 20:57 1313526

Цитата:

Цитата Drongo
Можете скинуть чистый шаблон скрипта, для использования на 64-битной системе? »

Пример из Help

Код:

; -- 64Bit.iss --
; Demonstrates installation of a program built for the x64 (a.k.a. AMD64)
; architecture.
; To successfully run this installation and the program it installs,
; you must have the "x64" edition of Windows XP or Windows Server 2003.

; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES!

[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
UninstallDisplayIcon={app}\MyProg.exe
Compression=lzma
SolidCompression=yes
OutputDir=userdocs:Inno Setup Examples Output
; "ArchitecturesAllowed=x64" specifies that Setup cannot run on
; anything but x64.
ArchitecturesAllowed=x64
; "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.
ArchitecturesInstallIn64BitMode=x64

[Files]
Source: "MyProg-x64.exe"; DestDir: "{app}"; DestName: "MyProg.exe"
Source: "MyProg.chm"; DestDir: "{app}"
Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme

[Icons]
Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"


ZanyGamer 08-01-2010 09:30 1313906

Вложений: 3
Делал репак накопились вопросы, люди добрые помогите!

Не могу соединить 3 скрипта:
1 - картинка на весь инсталл
2 - картинки на кнопки
3 - лого сайта, при клике переходишь на сайт
Пробовал через джоинер - выходит картинка на весь, а кнопок нет, либо лого есть, нет картинки на весь инсталлер.
По отдельности работают!
И на картинках вопросы
Скрипты прилагаются

Sotonisto 08-01-2010 09:52 1313920

Помогите плз!
Кому не жалко времени (хотя для вас это займет минут 5) что бы отредактировать мой скрипт инсталла?
Мне нужно там сделать 3 вещи.
1. Заменить стандарное изображение папки на свое.

2. Наложить картинку на кнопки - скрипт в шапке форума (у меня в скрипте инсталла отсутствует).
3. Отредактировать страницу создания ярлыков и папки в меню пуск (у меня картинка поверх всего).


Зарание благодарен.
З.Ы.: скрипт инсталлятора и картинки прилагаются.

ZanyGamer 08-01-2010 10:21 1313946

Sotonisto, вот папка
У нас с тобой одинаковые проблемы :)

Sotonisto 08-01-2010 10:34 1313957

Цитата:

Цитата ZanyGamer
У нас с тобой одинаковые проблемы »

Мне кстати тож интересно как текст приветствия по центру разместить :)
---
Ну теперь мне остались кнопки и страница выбора ярлыков и папки в меню пуск.

ZanyGamer 08-01-2010 10:39 1313963

Убил 2 дня чтобы все 2 темы облазить! Сделал блокнотик с этими страничками - очень удобно! А в шапке лучше сделать что-то вроде того, чтобы не говорить ищи в теме

ссылки на скрипты


http://forum.oszone.net/thread-148703-12.html - доп парамаетры при запуске - [Icons] Name: "{group}\Видео"; Filename: "{app}\Crystal.exe"; Parameters: "movie.avi"; WorkingDir: "{app}"; Tasks: groupicon

http://forum.oszone.net/thread-148703-32.html А подскажите пожалуста как сменить положение кнопок "назад,вперед и отмена »

http://forum.oszone.net/thread-60604-65.html - 7zip
http://forum.oszone.net/thread-60604-71.html - 7zip

http://forum.oszone.net/thread-148703-49.html - Реализация рисунка 497х58 в верху инсталлятора

http://forum.oszone.net/thread-148703-50.html - прогресс бар с arc

http://forum.oszone.net/thread-148703-57.html - картинка сайта

http://forum.oszone.net/thread-148703-58.html - кнопка финиш

http://forum.oszone.net/thread-148703-59.html - 1. Подскажите, что прописать в коде, чтобы в конце установки проверялось условие на наличие второго сетапа (лежит на DVD рядом с основным setup.exe, который стартуется первым), и если таковой имеется, запустить его, не показывая финального окна ("Завершение мастера установки"), а если второго сетапа на диске нет, просто выполнить установку без сообщений об отсутствии проверяемого файла?

http://forum.oszone.net/thread-148703-59.html - Теперь только вопросик как сделать чтобы на одной странице было 2 строки, одна ввод имени для одиночной игры, вторая ввод имени для сетевой игры. А то ейчас у меня 2 страницы, а хотелось бы на одной

http://forum.oszone.net/thread-148703-60.html - "Требуется свободного места..."

http://forum.oszone.net/thread-148703-62.html - вложения http://forum.oszone.net/attachment.p...5&d=1260479067

http://forum.oszone.net/thread-148703-64.html - как сделать чтобы если виста то файлы автоматом в одну папку а если хр то в другую инсталились

http://forum.oszone.net/thread-148703-65.html - лого сайта

http://forum.oszone.net/thread-148703-69.html - как поменять текст на странице приветсвия?

http://forum.oszone.net/thread-148703-70.html - Это скрипт для распаковки архивов FreArc

http://forum.oszone.net/thread-148703-73.html - Скрипт InnoSetup для распаковки архивов FreeArc

http://forum.oszone.net/thread-148703-79.html - перезагрузка

http://forum.oszone.net/thread-148703-80.html - меню пуск чикбокс

http://forum.oszone.net/thread-60604-83.html - Слайдшоу на странице wpInstalling по таймеру

http://forum.oszone.net/thread-60604-84.html - код с отображением путей и активной кнопкой "отмена".

http://forum.oszone.net/thread-60604-85.html - пароль на инсталятор

http://forum.oszone.net/thread-60604-98.html - как поставить разделение на 2 диска,чтоб в конце установки 1 диска появилось сообщение-вставьте 2 диск

http://forum.oszone.net/thread-60604-47.html - de_MAX, смещение прогрессбара вниз и показ слайд-шоу в окне мастера

http://forum.oszone.net/thread-60604-116.html - Как в инсталлятор прикрутить на станицу, где галоячками отмечаем, какие создавать ярлыки, и прочее - в [Tasks] в общем, ещё один комбо бокс - мол добавить в автозагрузку, ли не добавить, и кабы это было для текущего и для всех пользователей - вапще шикарно будет!

http://forum.oszone.net/thread-60604-117.html - Не знаете ли вы, как можно сделать окно "исталлятора" передвигаемым при выполнение, например этого?:

http://forum.oszone.net/thread-60604-117.html - Как определить факт установленного .NET Framework 1 ?

ZanyGamer 08-01-2010 11:17 1313995

Sotonisto, кинь свой скрипт, а то у меня где выбор пути фон белый =\

Sotonisto 08-01-2010 11:21 1313999

Цитата:

Цитата ZanyGamer
Sotonisto, кинь свой скрипт, а то у меня где выбор пути фон белый =\ »


читать дальше »
Код:

[Сode]
const
Color = clblack;

procedure InitializeWizard();
begin
WizardForm.Font.Color:=clWhite;
WizardForm.Color:=Color;
WizardForm.WelcomePage.Color:=Color;
WizardForm.InnerPage.Color:=Color;
WizardForm.FinishedPage.Color:=Color;
WizardForm.LicensePage.Color:=Color;
WizardForm.PasswordPage.Color:=Color;
WizardForm.InfoBeforePage.Color:=Color;
WizardForm.UserInfoPage.Color:=Color;
WizardForm.SelectDirPage.Color:=Color;
WizardForm.SelectComponentsPage.Color:=Color;
WizardForm.SelectProgramGroupPage.Color:=Color;
WizardForm.SelectTasksPage.Color:=Color;
WizardForm.ReadyPage.Color:=Color;
WizardForm.PreparingPage.Color:=Color;
WizardForm.InstallingPage.Color:=Color;
WizardForm.InfoAfterPage.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.DiskSpaceLabel.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.GroupEdit.Color:=Color;
WizardForm.PasswordLabel.Color:=Color;
WizardForm.PasswordEdit.Color:=Color;
WizardForm.PasswordEditLabel.Color:=Color;
WizardForm.ReadyMemo.Color:=Color;
WizardForm.TypesCombo.Color:=Color;
WizardForm.WelcomeLabel1.Color:=Color;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.Color:=Color;
WizardForm.YesRadio.Color:=Color;
WizardForm.NoRadio.Color:=Color;
WizardForm.WelcomeLabel2.Color:=Color;
WizardForm.LicenseLabel1.Color:=Color;
WizardForm.InfoAfterClickLabel.Color:=Color;
WizardForm.ComponentsList.Color:=Color;
WizardForm.ComponentsDiskSpaceLabel.Color:=Color;
WizardForm.BeveledLabel.Color:=Color;
WizardForm.StatusLabel.Color:=Color;
WizardForm.FilenameLabel.Color:=Color;
WizardForm.SelectDirLabel.Color:=Color;
WizardForm.SelectStartMenuFolderLabel.Color:=Color;
WizardForm.SelectComponentsLabel.Color:=Color;
WizardForm.SelectTasksLabel.Color:=Color;
WizardForm.LicenseAcceptedRadio.Color:=Color;
WizardForm.LicenseNotAcceptedRadio.Color:=Color;
WizardForm.UserInfoNameLabel.Color:=Color;
WizardForm.UserInfoNameEdit.Color:=Color;
WizardForm.UserInfoOrgLabel.Color:=Color;
WizardForm.UserInfoOrgEdit.Color:=Color;
WizardForm.PreparingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Color:=Color;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
end;


ZanyGamer 08-01-2010 11:42 1314011

Sotonisto, спасибо - сработало! :up

ser88172509 08-01-2010 14:50 1314161

Прошу помощи у всех кто знает в этом толк.Как сделать черный фон в приложении инсталлятора? Дайте кто нибудь ответ !!!

Sotonisto 08-01-2010 16:28 1314274

Цитата:

Цитата ser88172509
Прошу помощи у всех кто знает в этом толк.Как сделать черный фон в приложении инсталлятора? Дайте кто нибудь ответ ! »

Ну вот.

ser88172509 08-01-2010 17:20 1314316

Большое Человеческое спасибо за помощь в том как создать черный фон в форме приложения !!!

DemonAk 08-01-2010 18:36 1314369

Реализация запроса 2го и последующих дисков для скрипта Виктора Доброва (FreeArc_Example-Ext) от CTACKo
http://rghost.ru/803792
Только вот проблемка с отображением надписей под первым прогрессбаром (их не видно) и распаковка идет только в {app}, у меня не получилось заставить распаковать например 2ой архив в {app}\data =\. Может кто нибудь допетрит и исправит скриптег :)

A1EXXX 08-01-2010 22:12 1314675

Inno ISCmplr Setup 5.3.7 build 100108 by Restools

JohnDes 08-01-2010 23:18 1314765

Кто подскажет как связать tedit с ini файлом ?
Нужно чтобы когда в tedit ввели любое значение оно при установке записывалось в ini.
По возможности - нужно чтобы проверялось значение в tedit, если оно осталось не тронутым, то было оповещение что вы не изменили значение.

BlackSelf 09-01-2010 01:38 1314899

JohnDes
читать дальше »
Код:

[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program

[code]
var
  Edit: TEdit;
  s: String;
 
procedure InitializeWizard();
begin
Edit:=TEdit.Create(WizardForm);
Edit.Left:=WizardForm.DirEdit.Left;
Edit.Top:=WizardForm.DirEdit.Top + ScaleY(40);
Edit.Width:=WizardForm.DirEdit.Width;
Edit.Height:=WizardForm.DirEdit.Height;
Edit.AutoSize:=False;
Edit.Parent:=WizardForm.SelectDirPage;
Edit.Text:='Data';
s:=Edit.Text;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
var
  ini: string;
begin
  Result:= True;
  if CurPageID = wpSelectDir then begin
    if Edit.Text=s then
      MsgBox('Значение не изменено.', mbInformation, MB_OK);
    end;
  ini:=ExpandConstant('{userdocs}\file.ini');
  SaveStringToFile(ini, Edit.Text, False);
end;


ZanyGamer 09-01-2010 08:46 1314980

A1EXXX, а как ею пользоваться и зачем она?

Serega 09-01-2010 18:28 1315462

Цитата:

Цитата ZanyGamer
как ею пользоваться и зачем она?»

В шапке этой темы есть ссылка на тему 'Inno Setup. Прочие вопросы.', где вы сможете найти ссылку на 'Расширенную версию Inno Setup от Restools', с кратким описанием и инструкцией по установке.

ZanyGamer 09-01-2010 21:05 1315646

Serega, пожалуйста помогите! :help: http://forum.oszone.net/post-1313906-823.html, у Sotonisto тоже похожие вопросы

И вот ещё по-моему хорошая идея http://forum.oszone.net/post-1313963-827.html

MediEvil 09-01-2010 22:58 1315749

Подскажите, как в скрипте указать те приложения, которые должны быть закрыты в начале деинсталляции.
Что нужно...
1-чтоб он проверил есть ли такой файл
2-запущен ли он
3-если да то закрыл сам и продолжил удаление
4-если нет то продолжил удаление
все облазил но не нашел..
Извините если не суда написал

Serega 10-01-2010 00:50 1315832

Цитата:

Цитата ZanyGamer
пожалуйста помогите! »

Прежде чем выкладвать скрипты, сами проверьте их на работоспасобность... Если результат вашей деятельности не просто объединить человеку, то чего же вы хотите от InnoSetup Script Joiner, это же обычная программа, которая просто складывает первую строку со второй, а не анализирует их...
Вот результат объединения, я бы даже добавил исправления, ваших кодов:
читать дальше »
Код:

[Code]
const
  ButtonWidth = 80;    //Указываем размер кнопок
  ButtonHeight = 23;
  bidBack = 0;
  bidNext = 1;
  bidCancel = 2;
  bidDirBrowse = 3;
  bidGroupBrowse = 4;
  Color = clWhite;

var
  pnl: TPanel;
  LogoImage:TBitmapImage;
  LogoLabel: TLabel;
  LogoPanel: TPanel;

  ButtonPanel: array [0..4] of TPanel;
  ButtonImage: array [0..4] of TBitmapImage;
  ButtonLabel: array [0..4] of TLabel;

procedure ButtonLabelClick(Sender: TObject);
var
  Button: TButton;
begin
  ButtonImage[TLabel(Sender).Tag].Left:=0;
  case TLabel(Sender).Tag of
    bidBack: Button:=WizardForm.BackButton;
    bidNext: Button:=WizardForm.NextButton;
    bidCancel: Button:=WizardForm.CancelButton;
    bidDirBrowse: Button:=WizardForm.DirBrowseButton;
    bidGroupBrowse: Button:=WizardForm.GroupBrowseButton;
  else
    Exit;
  end
  Button.OnClick(Button);
end;

procedure ButtonLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if ButtonLabel[TLabel(Sender).Tag].Enabled then
    ButtonImage[TLabel(Sender).Tag].Left:=-ButtonWidth;
end;

procedure ButtonLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  ButtonImage[TLabel(Sender).Tag].Left:=0;
end;

procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
  Image: TBitmapImage;
  Panel: TPanel;
  Labl: TLabel;
begin
  Panel:=TPanel.Create(WizardForm);
  with Panel do
    begin
      Left:=AButton.Left;
      Top:=AButton.Top;
      Width:=AButton.Width;
      Height:=AButton.Height;
      Tag:=AButtonIndex;
      Parent:=AButton.Parent;
    end;
  ButtonPanel[AButtonIndex]:=Panel;

  Image:=TBitmapImage.Create(WizardForm);    //Рисунок который ложится на кнопку
  with  do
    begin
      Width:=160;                          //Обязательно прописать оригинальный размер рисунка
      Height:=23;
      Enabled:=False;
      Bitmap.LoadFromFile(ExpandConstant('{tmp}\button.bmp'));
      Parent:=Panel;
    end;
  ButtonImage[AButtonIndex]:=Image;

  with TLabel.Create(WizardForm) do
    begin
      Tag:=AButtonIndex;
      Parent:=Panel;
      Width:=Panel.Width;
      Height:=Panel.Height;
      Transparent:=True;
      OnClick:=@ButtonLabelClick;
      OnDblClick:=@ButtonLabelClick;
      OnMouseDown:=@ButtonLabelMouseDown;
      OnMouseUp:=@ButtonLabelMouseUp;
    end;

  Labl:=TLabel.Create(WizardForm);        //Текст кнопок
  with Labl do
    begin
      Left:=23;                          //Указываем положение текста
      Top:=5;
//      Autosize:=True;  // это и так по умолчанию
      Alignment:=taCenter;
      Tag:=AButtonIndex;
      Transparent:=True;
      Font.Color:=clWhite;              //Цвет текста
      Caption:=AButton.Caption;
      OnClick:=@ButtonLabelClick;
      OnDblClick:=@ButtonLabelClick;
      OnMouseDown:=@ButtonLabelMouseDown;
      OnMouseUp:=@ButtonLabelMouseUp;
      Parent:=Panel;
    end;
  ButtonLabel[AButtonIndex]:=Labl;
end;

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
  ButtonLabel[AButtonIndex].Caption:=AButton.Caption;
  ButtonPanel[AButtonIndex].Visible:=AButton.Visible;
  ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled;
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
  ButtonLabel[bidNext].Enabled:=True;
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
  ButtonLabel[bidNext].Enabled:=False;
end;

///////////////////////WelcomePage//////////////////////////////////////
procedure WelcomePage;
begin
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.WelcomeLabel1.AutoSize;
      SetBounds(WizardForm.WelcomeLabel1.Left,WizardForm.WelcomeLabel1.Top,
                WizardForm.WelcomeLabel1.Width,WizardForm.WelcomeLabel1.Height);
      WordWrap:= WizardForm.WelcomeLabel1.WordWrap;
      Caption:= WizardForm.WelcomeLabel1.Caption;
      with Font do
        begin
          Color:= WizardForm.WelcomeLabel1.Font.Color;
          Style:= WizardForm.WelcomeLabel1.Font.Style;
          Name:= WizardForm.WelcomeLabel1.Font.Name;
          Size:= WizardForm.WelcomeLabel1.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.WelcomeLabel2.AutoSize;
      SetBounds(WizardForm.WelcomeLabel2.Left,WizardForm.WelcomeLabel2.Top,
                WizardForm.WelcomeLabel2.Width,WizardForm.WelcomeLabel2.Height);
      WordWrap:= WizardForm.WelcomeLabel2.WordWrap;
      Caption:= WizardForm.WelcomeLabel2.Caption;
      with Font do
        begin
          Color:= WizardForm.WelcomeLabel2.Font.Color;
          Style:= WizardForm.WelcomeLabel2.Font.Style;
          Name:= WizardForm.WelcomeLabel2.Font.Name;
          Size:= WizardForm.WelcomeLabel2.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////SelectDirPage//////////////////////////////////////
procedure SelectDirPage;
begin
  with WizardForm do
    begin
      with DirEdit do
        begin
          Left:= 40;
          Top:= 137;
          Parent:= pnl;
        end;
      with DirBrowseButton do
        begin
          Left:= WizardForm.DirEdit.Left + WizardForm.DirEdit.Width + 10;
          Top:= WizardForm.DirEdit.Top - 1;
          Parent:= pnl;
        end;
      with SelectDirBitmapImage do
        begin
          Left:= WizardForm.DirEdit.Left;
          Top:= WizardForm.DirEdit.Top - 62;
          Stretch:= True;
          Parent:= pnl;
        end;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.SelectDirBrowseLabel.AutoSize;
      SetBounds(WizardForm.DirEdit.Left,WizardForm.DirEdit.Top - 30,
                WizardForm.SelectDirBrowseLabel.Width, WizardForm.SelectDirBrowseLabel.Height);
      WordWrap:= WizardForm.SelectDirBrowseLabel.WordWrap;
      Caption:= WizardForm.SelectDirBrowseLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.SelectDirBrowseLabel.Font.Color;
          Style:= WizardForm.SelectDirBrowseLabel.Font.Style;
          Name:= WizardForm.SelectDirBrowseLabel.Font.Name;
          Size:= WizardForm.SelectDirBrowseLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.SelectDirLabel.AutoSize;
      SetBounds(WizardForm.SelectDirBitmapImage.Left + 50,WizardForm.SelectDirBitmapImage.Top + 10,
                WizardForm.SelectDirLabel.Width,WizardForm.SelectDirLabel.Height);
      WordWrap:= WizardForm.SelectDirLabel.WordWrap;
      Caption:= WizardForm.SelectDirLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.SelectDirLabel.Font.Color;
          Style:= WizardForm.SelectDirLabel.Font.Style;
          Name:= WizardForm.SelectDirLabel.Font.Name;
          Size:= WizardForm.SelectDirLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.DiskSpaceLabel.AutoSize;
      SetBounds(WizardForm.DirEdit.Left,WizardForm.Bevel.Top - 25,
                WizardForm.DiskSpaceLabel.Width,WizardForm.DiskSpaceLabel.Height);
      WordWrap:= WizardForm.DiskSpaceLabel.WordWrap;
      Caption:= WizardForm.DiskSpaceLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.DiskSpaceLabel.Font.Color;
          Style:= WizardForm.DiskSpaceLabel.Font.Style;
          Name:= WizardForm.DiskSpaceLabel.Font.Name;
          Size:= WizardForm.DiskSpaceLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////ReadyPage//////////////////////////////////////
procedure ReadyPage;
var
  ready_str: string;
begin
  ready_str:= WizardForm.ReadyMemo.Text;
  with TLabel.Create(pnl) do
    begin
      SetBounds(45,115,WizardForm.ReadyMemo.Width, WizardForm.ReadyMemo.Height);
      Caption:= ready_str;
      with Font do
        begin
          Color:= WizardForm.ReadyLabel.Font.Color;
          Style:= WizardForm.ReadyLabel.Font.Style;
          Name:= WizardForm.ReadyLabel.Font.Name;
          Size:= WizardForm.ReadyLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TBevel.Create(WizardForm) do
    begin
      SetBounds(40,110, WizardForm.ReadyMemo.Width, WizardForm.ReadyMemo.Height);
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.ReadyLabel.AutoSize;
      SetBounds(40,70, WizardForm.ReadyLabel.Width, WizardForm.ReadyLabel.Height);
      WordWrap:= WizardForm.ReadyLabel.WordWrap;
      Caption:= WizardForm.ReadyLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.ReadyLabel.Font.Color;
          Style:= WizardForm.ReadyLabel.Font.Style;
          Name:= WizardForm.ReadyLabel.Font.Name;
          Size:= WizardForm.ReadyLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////InstallingPage//////////////////////////////////////
procedure InstallingPage;
begin
  with WizardForm.ProgressGauge do
    begin
      Left:= 40;
      Top:= 115;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.FilenameLabel.AutoSize;
      SetBounds(WizardForm.ProgressGauge.Left,WizardForm.ProgressGauge.Top-20,
                WizardForm.FilenameLabel.Width,WizardForm.FilenameLabel.Height);
      WordWrap:= WizardForm.FilenameLabel.WordWrap;
      Caption:= WizardForm.FilenameLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.FilenameLabel.Font.Color;
          Style:= WizardForm.FilenameLabel.Font.Style;
          Name:= WizardForm.FilenameLabel.Font.Name;
          Size:= WizardForm.FilenameLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.StatusLabel.AutoSize;
      SetBounds(WizardForm.StatusLabel.Left,WizardForm.StatusLabel.Top,
                WizardForm.StatusLabel.Width,WizardForm.StatusLabel.Height);
      WordWrap:= WizardForm.StatusLabel.WordWrap;
      Caption:= WizardForm.StatusLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.StatusLabel.Font.Color;
          Style:= WizardForm.StatusLabel.Font.Style;
          Name:= WizardForm.StatusLabel.Font.Name;
          Size:= WizardForm.StatusLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////FinishedPage//////////////////////////////////////
var
  CheckBox: array of TNewCheckBox;

procedure CheckBoxClick(Sender: TObject);
begin
  if TNewCheckBox(Sender).Checked then
    WizardForm.RunList.Checked[TNewCheckBox(Sender).Tag]:= True
  else WizardForm.RunList.Checked[TNewCheckBox(Sender).Tag]:= False;
end;

procedure LabelClick(Sender: TObject);
begin
  if CheckBox[TLabel(Sender).Tag].Checked then
    begin
      WizardForm.RunList.Checked[TLabel(Sender).Tag]:= False;
      CheckBox[TLabel(Sender).Tag].Checked:= False;
    end
  else
    begin
      WizardForm.RunList.Checked[TLabel(Sender).Tag]:= True;
      CheckBox[TLabel(Sender).Tag].Checked:= True;
    end;
end;

procedure HideRunList(Control: TWinControl);
var
  i, t: Integer;
  str: string;
begin
  if WizardForm.RunList.Items.Count > 0 then
    begin
      WizardForm.RunList.Hide;
      SetArrayLength(CheckBox, SizeOf(WizardForm.RunList.Items.Count));
      for i:= 0 to WizardForm.RunList.Items.Count-1 do
        begin
          CheckBox[i]:= TNewCheckBox.Create(Control);
          with CheckBox[i] do
            begin
              SetBounds(ScaleX(WizardForm.RunList.Left+2),ScaleY(WizardForm.RunList.Top+2+t),14,14);
              Tag:= i;
              Checked:= WizardForm.RunList.Checked[i];
              Caption:= WizardForm.RunList.Items.Strings[i];
              OnClick:= @CheckBoxClick;
              Color:= clWhite;
              Parent:= Control;
            end;
          str:= WizardForm.RunList.Items.Strings[i];
          with TLabel.Create(WizardForm) do
            begin
              SetBounds(ScaleX(WizardForm.RunList.Left+20),ScaleY(WizardForm.RunList.Top+2+t),
                        WizardForm.RunList.Width,14);
              Caption:= str;
              Tag:= i;
              OnClick:= @LabelClick;
              Transparent:= True;
              Parent:= Control;
            end;
          t:= t + 20;
        end;
    end;
end;

procedure FinishedPage;
begin
  HideRunList(pnl);
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.FinishedHeadingLabel.AutoSize;
      SetBounds(WizardForm.FinishedHeadingLabel.Left,WizardForm.FinishedHeadingLabel.Top,
                WizardForm.FinishedHeadingLabel.Width,WizardForm.FinishedHeadingLabel.Height);
      WordWrap:= WizardForm.FinishedHeadingLabel.WordWrap;
      Caption:= WizardForm.FinishedHeadingLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.FinishedHeadingLabel.Font.Color;
          Style:= WizardForm.FinishedHeadingLabel.Font.Style;
          Name:= WizardForm.FinishedHeadingLabel.Font.Name;
          Size:= WizardForm.FinishedHeadingLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.FinishedLabel.AutoSize;
      SetBounds(WizardForm.FinishedLabel.Left,WizardForm.FinishedLabel.Top,
                WizardForm.FinishedLabel.Width,WizardForm.FinishedLabel.Height);
      WordWrap:= WizardForm.FinishedLabel.WordWrap;
      Caption:= WizardForm.FinishedLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.FinishedLabel.Font.Color;
          Style:= WizardForm.FinishedLabel.Font.Style;
          Name:= WizardForm.FinishedLabel.Font.Name;
          Size:= WizardForm.FinishedLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

procedure CurPageChanged(CurPageID: Integer);
begin
  UpdateButton(WizardForm.BackButton,bidBack);
  UpdateButton(WizardForm.NextButton,bidNext);
  UpdateButton(WizardForm.CancelButton,bidCancel);

  pnl:= TPanel.Create(WizardForm);
  with pnl do
    begin
      Align:= alClient;
      Parent:= WizardForm;
    end;
  with WizardForm do
    begin
      with WizardBitmapImage do
        begin
          Align:= alClient;
          Stretch:= True;
          Parent:= pnl;
        end;
      NextButton.Parent:= pnl;
      CancelButton.Parent:= pnl;
      BackButton.Parent:= pnl;
      Bevel.Parent:= pnl;
      pnl.Repaint;
    end;

  if (CurPageID > wpWelcome) and (CurPageID < wpFinished) then
    begin
      WizardForm.Bevel1.Parent:= pnl;
      with TLabel.Create(pnl) do
        begin
          AutoSize:= WizardForm.PageNameLabel.AutoSize;
          SetBounds(WizardForm.PageNameLabel.Left,WizardForm.PageNameLabel.Top,
                    WizardForm.PageNameLabel.Width,WizardForm.PageNameLabel.Height);
          Caption:= WizardForm.PageNameLabel.Caption;
          with Font do
            begin
              Color:= WizardForm.PageNameLabel.Font.Color;
              Style:= WizardForm.PageNameLabel.Font.Style;
              Name:= WizardForm.PageNameLabel.Font.Name;
              Size:= WizardForm.PageNameLabel.Font.Size;
            end;
          Transparent:= True;
          Parent:= pnl;
        end;
      with TLabel.Create(pnl) do
        begin
          AutoSize:= WizardForm.PageDescriptionLabel.AutoSize;
          SetBounds(WizardForm.PageDescriptionLabel.Left,WizardForm.PageDescriptionLabel.Top,
                    WizardForm.PageDescriptionLabel.Width,WizardForm.PageDescriptionLabel.Height);
          Caption:= WizardForm.PageDescriptionLabel.Caption;
          with Font do
            begin
              Color:= WizardForm.PageDescriptionLabel.Font.Color;
              Style:= WizardForm.PageDescriptionLabel.Font.Style;
              Name:= WizardForm.PageDescriptionLabel.Font.Name;
              Size:= WizardForm.PageDescriptionLabel.Font.Size;
            end;
          Transparent:= True;
          Parent:= pnl;
        end;
      pnl.Repaint;
    end;

  if CurPageID = wpWelcome then WelcomePage;
  if CurPageID = wpSelectDir then SelectDirPage;
  if CurPageID = wpReady then ReadyPage;
  if CurPageID = wpInstalling then InstallingPage;
  if CurPageID = wpFinished then FinishedPage;
end;

procedure LogoOnClick(Sender: TObject);
var
  ReturnCode: Integer;
begin
  ShellExec('open', 'http://Bigtorrents.ru', '', '', SW_SHOWNORMAL, ewNoWait, ReturnCode)
end;

procedure InitializeWizard();
begin
  ExtractTemporaryFile('papka.bmp');
  with WizardForm do
    begin
      SelectDirBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\papka.bmp'));
      SelectDirBitmapImage.AutoSize:=true;
      SelectGroupBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\papka.bmp'));
      SelectGroupBitmapImage.AutoSize:=true;

      BackButton.Width:=ButtonWidth;
      BackButton.Height:=ButtonHeight;
      NextButton.Width:=ButtonWidth;
      NextButton.Height:=ButtonHeight;
      CancelButton.Width:=ButtonWidth;
      CancelButton.Height:=ButtonHeight;
      DirBrowseButton.Left:=337;
      DirBrowseButton.Width:=ButtonWidth;
      DirBrowseButton.Height:=ButtonHeight;
      GroupBrowseButton.Left:=337;
      GroupBrowseButton.Width:=ButtonWidth;
      GroupBrowseButton.Height:=ButtonHeight;
      LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick;
      LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick;

      PageNameLabel.Font.Color:=Color;
      Font.Color:=Color;
      Color:=Color;
      WelcomePage.Color:=Color;
      InnerPage.Color:=Color;
      FinishedPage.Color:=Color;
      LicensePage.Color:=Color;
      PasswordPage.Color:=Color;
      InfoBeforePage.Color:=Color;
      UserInfoPage.Color:=Color;
      SelectDirPage.Color:=Color;
      SelectComponentsPage.Color:=Color;
      SelectProgramGroupPage.Color:=Color;
      SelectTasksPage.Color:=Color;
      ReadyPage.Color:=Color;
      PreparingPage.Color:=Color;
      InstallingPage.Color:=Color;
      InfoAfterPage.Color:=Color;
      DirEdit.Color:=Color;
      DiskSpaceLabel.Color:=Color;
      GroupEdit.Color:=Color;
      PasswordLabel.Color:=Color;
      PasswordEdit.Color:=Color;
      PasswordEditLabel.Color:=Color;
      ReadyMemo.Color:=Color;
      TypesCombo.Color:=Color;
      WelcomeLabel1.Color:=Color;
      InfoBeforeClickLabel.Color:=Color;
      MainPanel.Color:=Color;
      PageNameLabel.Color:=Color;
      PageDescriptionLabel.Color:=Color;
      ReadyLabel.Color:=Color;
      FinishedLabel.Color:=Color;
      YesRadio.Color:=Color;
      NoRadio.Color:=Color;
      WelcomeLabel2.Color:=Color;
      LicenseLabel1.Color:=Color;
      InfoAfterClickLabel.Color:=Color;
      ComponentsList.Color:=Color;
      ComponentsDiskSpaceLabel.Color:=Color;
      BeveledLabel.Color:=Color;
      StatusLabel.Color:=Color;
      FilenameLabel.Color:=Color;
      SelectDirLabel.Color:=Color;
      SelectStartMenuFolderLabel.Color:=Color;
      SelectComponentsLabel.Color:=Color;
      SelectTasksLabel.Color:=Color;
      LicenseAcceptedRadio.Color:=Color;
      LicenseNotAcceptedRadio.Color:=Color;
      UserInfoNameLabel.Color:=Color;
      UserInfoNameEdit.Color:=Color;
      UserInfoOrgLabel.Color:=Color;
      UserInfoOrgEdit.Color:=Color;
      PreparingLabel.Color:=Color;
      FinishedHeadingLabel.Color:=Color;
      UserInfoSerialLabel.Color:=Color;
      UserInfoSerialEdit.Color:=Color;
      TasksList.Color:=Color;
      RunList.Color:=Color;
      SelectDirBrowseLabel.Color:=Color;
      SelectStartMenuFolderBrowseLabel.Color:=Color;

      Bevel.Hide;
      Bevel1.Hide;

      LicenseAcceptedRadio.Font.Color:= Color;
      LicenseNotAcceptedRadio.Font.Color:= Color;
    end;

  ExtractTemporaryFile('Button.bmp');
  LogoPanel := TPanel.Create(WizardForm);
  with LogoPanel do
    begin
      Parent := WizardForm;
      Left := ScaleX(5);
      Top := ScaleY(320);
      Width := ScaleX(165);
      Height := ScaleY(35);
      BevelOuter := bvNone;
    end;

  LogoImage := TBitmapImage.Create(WizardForm);
  with LogoImage do
    begin
      Parent := LogoPanel;
      Left := ScaleX(0);
      Top := ScaleY(0);
      AutoSize:=true;
      ReplaceColor:=clFuchsia;
      ReplaceWithColor:=clBtnFace;
      Bitmap.LoadFromFile(ExpandConstant('{tmp}\Button.bmp'));
    end;

  LogoLabel := TLabel.Create(WizardForm);
  with LogoLabel do
    begin
      Parent := LogoPanel;
      Width := LogoPanel.Width;
      Height := LogoPanel.Height;
      Transparent:=True;
      Cursor := crHand;
      OnClick:=@LogoOnClick;
    end;

  LoadButtonImage(WizardForm.BackButton,bidBack);
  LoadButtonImage(WizardForm.NextButton,bidNext);
  LoadButtonImage(WizardForm.CancelButton,bidCancel);
  LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse);
  LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse);
end;



Цитата:

Цитата ZanyGamer
И вот ещё по-моему хорошая идея »

Особо интересные, на мой взгляд вещи, есть в шапке темы, плюс скачайте Inno Setup Scripting 5.1, Коллекция скриптов и Сборник вопросов из шапки темы.

Serega 10-01-2010 01:06 1315846

Цитата:

Цитата MediEvil
Подскажите, как в скрипте указать те приложения, которые должны быть закрыты в начале деинсталляции. »

Как говорят - проще не куда:
Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion

[UninstallRun]
; при деинсталляции, указанный файл и все дочерние процессы, будут завершены...
Filename: taskkill; Parameters: /f /t /im MyProg.exe; Flags: runhidden

[Run]
; запустите файл после установки и не закрывая его удалите установленную программу и ^...
Filename: {app}\MyProg.exe; Description: Запустить программу?; Flags: postinstall nowait skipifsilent


Sed0y 10-01-2010 18:11 1316443

Может я не по теме, но очень нужен реестр игры «Войны древности: Спарта». Помогите пожалуйста.

ZanyGamer 11-01-2010 19:39 1317500

Вот
мой скрипт
[Setup]
AppId={B4866999-9FF1-4780-A2E9-A952A5E7BBCA}
AppName=[Prototype]
AppVerName=[Prototype]
AppPublisher=Activision
AppVersion=1.0
AppSupportURL=http://activision.custhelp.com/
DefaultDirName={pf}\Prototype
OutputDir=D:\Репаки\Prototype
DefaultGroupName=Activision\Radical Entertainment\Prototype
UninstallFilesDir={app}\Uninstall
Compression=lzma/ultra64
InternalCompressLevel=ultra64
SolidCompression=true
DiskSpanning=yes
SlicesPerDisk=3
DiskSliceSize=1100000000
UninstallDisplayIcon={app}\prototypef.exe, 0
UninstallDisplayName=WarCraft The Frozen Throne 1.24c
DisableReadyPage=true

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

[Files]
Source: "{tmp}\1.bmp"; DestDir: "{tmp}"; Flags: deleteafterinstall dontcopy
Source: "{tmp}\site.bmp"; DestDir: "{tmp}"; Flags: deleteafterinstall dontcopy
Source: "{tmp}\black.cjstyles"; DestDir: "{tmp}"; Flags: deleteafterinstall dontcopy
Source: "{app}\ISSkin.dll"; DestDir: "{app}";
Source: "isgsg.dll"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak

[CustomMessages]
RUS.BUT=Установить
RUS.SPACE=Доступно места на диске:
RUS.SPACE1=Требуется места на диске:
RUS.DRT=Обновить DirectX
RUS.UP=Идет обновление DirectX...
RUS.Icons=Создать ярлык на рабочем столе
RUS.Group=Создать ярлыки в меню "Пуск"
RUS.Redist=Установить ЫЫЫ
RUS.Finished1=Игра WarCraft The Frozen Throne 1.24c установлена на Ваш компьютер.
RUS.Finished2=Нажмите «Завершить», чтобы выйти из программы установки.
RUS.RunProgram=Запустить WarCraft The Frozen Throne 1.24c

[code]

////////////////////

//Эти данные нужны для создания надписей, при вставке изображения в инстяллятор
var
DirectX, Redist, Icons, Group, RunProgram: TCheckBox; //Чекбоксы
IconsLabel, GroupLabel, RedistLabel, DirectXLabel: TLabel; //Надписи к чекбоксам
SelectDirLabel, SelectDirLabelBrowse, RunProgramLabel: TLabel; //Надписи на странице выбора места установки
PageNameLabel, PageNameLabel1, PageNameLabel2, PageNameLabel3, PageNameLabel4, PageNameLabel5, PageNameLabel6, PageNameLabel7, PageNameLabel8: TLabel; //Заголовок страницы
PageDescriptionLabel, PageDescriptionLabel1, PageDescriptionLabel2, PageDescriptionLabel3, PageDescriptionLabel4, PageDescriptionLabel5, PageDescriptionLabel6, PageDescriptionLabel7, PageDescriptionLabel8: TLabel; //Информация о странице
StatusLabel, FilenameLabel, NeedSpaceLabel,FreeSpaceLabel: TLabel; //Данные на странице установки
WelcomeLabel1, WelcomeLabel2, FinishedLabel, FinishedHeadingLabel: TLabel; //Надписи на на странице приветствия и на финишной странице
SelectStartMenuFolderLabel, SelectStartMenuFolderBrowseLabel, ReadyLabel, NoIconsLabel: TLabel; //Надписи и чекбоксы на странице выбора места установки ярлыков в Главном Меню
LicenseLabel1, LicenseAcceptedLabel, LicenseNotAcceptedLabel: Tlabel; //Надписи на страниые Лицензионнго соглашения
InfoBeforeClickLabel, InfoAfterClickLabel, ComponentsDiskSpaceLabel, SelectComponentsLabel: TLabel; //Надписи на странице компонентов и страницах показа данных до и после установки
NeedSize:Integer; //Нужное место на диске
FreeMB, TotalMB: Cardinal; //нужное место на диске
BmpFile: TBitmapImage; //Вставка изобрпжения в окно инсталлятора
PageID,ResultCode: Integer; //Запуск программы после установки
URLLabel:TLabel;

//Дальше функция проверки чекбоксов
function InstallDirectX: Boolean;
begin
Result:= DirectX.Checked;
end;

function InstallRedist: Boolean;
begin
Result:=Redist.Checked;
end;

function CreateIcons: Boolean;
begin
Result:=Icons.Checked;
end;

function GroupIcons: Boolean;
begin
Result:=Group.Checked;
end;

function Run: Boolean;
begin
Result:=RunProgram.Checked;
end;
//Функция проверки чекбоксов

// задал процедуру, чтоб отмечался чебокс еси кликнуть по надписи
procedure RedistOnClick(Sender: TObject);
begin
if Redist.Checked = False then
Redist.Checked:= True else
Redist.Checked:= False;
end;

procedure DirectXLabelOnClick(Sender: TObject);
begin
if DirectX.Checked = False then
DirectX.Checked:= True else
DirectX.Checked:= False;
end;

procedure IconsOnClick(Sender: TObject);
begin
if Icons.Checked = False then
Icons.Checked:= True else
Icons.Checked:= False;
end;

procedure GroupOnClick(Sender: TObject);
begin
if Group.Checked = False then
Group.Checked:= True else
Group.Checked:= False;
end;

procedure RunProgramOnClick(Sender: TObject);
begin
if RunProgram.Checked = False then
RunProgram.Checked:= True else
RunProgram.Checked:= False;
end;

Procedure NoIconsLabelOnClick (Sender: TObject);
begin
WizardForm.NoIconsCheck.Checked:=Not(WizardForm.NoIconsCheck.Checked)
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
WizardForm.NextButton.Enabled:=True
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
WizardForm.NextButton.Enabled:=False
end;

Procedure YesRadioOnClick (Sender: TObject);
begin
WizardForm.LicenseAcceptedRadio.Checked:=True
end;

Procedure NoRadioOnClick (Sender: TObject);
begin
WizardForm.LicenseNotAcceptedRadio.Checked:=True
end;
// задал процедуру, чтоб отмечался чебокс еси кликнуть по надписи lblCheckBox

//Свободное место, отображает сколько нужно и сколько есть места на диске, находтся на странице выбора пути
procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
FreeSpaceLabel.Caption := ExpandConstant('{cm:SPACE} ')+ FloatToStr(round(FreeMB/1024*100)/100) + ' GB' else
FreeSpaceLabel.Caption := ExpandConstant('{cm:SPACE} ')+ IntToStr(FreeMB)+ ' MB';
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False else
WizardForm.NextButton.Enabled := True;

end;

procedure GetNeedSpaceCaption;
begin
if NeedSize > 1024 then
NeedSpaceLabel.Caption := ExpandConstant('{cm:SPACE1} ')+ FloatToStr(round(NeedSize/1024*100)/100) + ' GB' else
NeedSpaceLabel.Caption := ExpandConstant('{cm:SPACE1} ')+ IntToStr(NeedSize)+ ' MB';
end;
//Свободное место
procedure FilenameExt();
begin
FilenameLabel.Caption:= ExpandConstant(ExtractFileDir(CurrentFilename)) + '\' + ExtractFilename(CurrentFilename);
end;


procedure InitializeWizard();
begin

WizardForm.WelcomeLabel2.Height := WizardForm.WelcomeLabel2.Height - ScaleY(18);
MouseLabel:=TLabel.Create(WizardForm)
MouseLabel.Width:=WizardForm.Width
MouseLabel.Height:=WizardForm.Height
MouseLabel.Autosize:=False
MouseLabel.Transparent:=True
MouseLabel.OnMouseMove:=@SiteLabelMouseMove2
MouseLabel.Parent:=WizardForm

SiteLabel:=TLabel.Create(WizardForm);
SiteLabel.Left:= WizardForm.NextButton.Left + WizardForm.NextButton.Width;
SiteLabel.Top:= WizardForm.OuterNotebook.Height - SiteLabel.Height;
SiteLabel.Cursor:=crHand
SiteLabel.Font.Color:=clBlue
SiteLabel.Caption:='Forum Ru-Board'
SiteLabel.OnClick:=@SiteLabelOnClick
SiteLabel.OnMouseDown:=@SiteLabelMouseDown
SiteLabel.OnMouseUp:=@SiteLabelMouseUp
SiteLabel.OnMouseMove:=@SiteLabelMouseMove
SiteLabel.Parent:=WizardForm.WelcomePage;

ExtractTemporaryFile('1.bmp'); //Извлекаем файл, который пойдет в окно инсталлятора
NeedSize:= 7980; //Необходимое место для установки
BmpFile:= TBitmapImage.Create(WizardForm);

//Вставляем изображение в окно инсталлятора, для каждой страницы нужно добвлять изображение заново
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.SetBounds(0, 0, 497, 360);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.WelcomePage;

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.SetBounds(0, 0, 497, 360);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.LicensePage;

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.SetBounds(0, 0, 497, 360);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.InfoBeforePage;

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.SetBounds(0, 0, 497, 360);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.SelectDirPage;

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.SetBounds(0, 0, 497, 360);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.SelectComponentsPage;

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.SetBounds(0, 0, 497, 360);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.InstallingPage;

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.SetBounds(0, 0, 497, 360);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.InfoAfterPage;

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.SetBounds(0, 0, 497, 360);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.FinishedPage;

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.SetBounds(0, 0, 497, 360);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.SelectProgramGroupPage;

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.SetBounds(0, 0, 497, 360);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.ReadyPage;
//Вставляем изображение в окно инсталлятора, для каждой страницы нужно добвлять изображение заново

//Скрывем стандартные надписи, значки и чекбоксы
with WizardForm do
begin
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
WelcomeLabel1.Hide;
WelcomeLabel2.Hide;
DiskSpaceLabel.Hide;
SelectDirBitmapImage.Hide;
SelectDirBrowseLabel.Hide;
SelectDirLabel.Hide;
FinishedHeadingLabel.Hide;
FinishedLabel.Hide;
MainPanel.Hide
FilenameLabel.Hide;
StatusLabel.Hide;
SelectStartMenuFolderLabel.Hide;
SelectStartMenuFolderBrowseLabel.Hide;
ReadyLabel.Hide;
LicenseLabel1.Hide;
InfoBeforeClickLabel.Hide;
InfoAfterClickLabel.Hide;
ComponentsDiskSpaceLabel.Hide;
SelectComponentsLabel.Hide;
end;
//Скрывем стандартные надписи, значки и чекбоксы
with WizardForm do
begin
DirBrowseButton.Left:= DirBrowseButton.Left + ScaleX(40); //Местоположение кнопки "Обзор" от левого края, на странице выбора пути установки
DirBrowseButton.Top:= DirBrowseButton.Top + ScaleY(72); //Местоположение кнопки "Обзор" сверху, на странице выбора пути установки
DirEdit.Left:= DirEdit.Left + ScaleX(40); //Местоположение панели, где отображается путь от левого края, на странице выбора пути установки
DirEdit.Top:= DirEdit.Top + ScaleY(72); //Местоположение панели, где отображается путь сверху, на странице выбора пути установки
GroupBrowseButton.Left:= GroupBrowseButton.Left + ScaleX(40); //Местоположение кнопки "Обзор" от левого края, на странице создания ярлыков в Главном Меню
GroupBrowseButton.Top:= GroupBrowseButton.Top + ScaleY(72); //Местоположение кнопки "Обзор" сверху, на странице создания ярлыков в Главном Меню
GroupEdit.Left:= GroupEdit.Left + ScaleX(40); //Местоположение панели, где отображается путь от левого края, на странице создания ярлыков в Главном Меню
GroupEdit.Top:= GroupEdit.Top + ScaleX(72); //Местоположение панели, где отображается путь сверху, на странице создания ярлыков в Главном Меню
GroupEdit.Color:= ClBlack //Цвет панели, где отображается путь, на странице создания ярлыков в Главном Меню
NextButton.BringToFront; //Выносим на передний план кнопки
BackButton.BringToFront; //Выносим на передний план кнопки
CancelButton.BringToFront; //Выносим на передний план кнопки
Font.Style:=[]; //Стиль шрифта, используемого в инсталляторе
Font.Name:= 'MS Sans Serif'; //Имя шрифта, используемого в инсталляторе
DirEdit.Color:=clBlack; //Цвет панели, где отображается путь, на странице выбора пути установки
Font.Color:=clWhite; //Цвет шрифта, используемого в инсталляторе
ProgressGauge.Top:=ScaleY(120); //Местоположение Прогресс-бара сверху
ProgressGauge.Left:=ScaleX(20); //Местоположение Прогресс-бара от левого края
ProgressGauge.Width:=ScaleX(457); //Ширина Прогресс-бара
ReadyMemo.Left:=ScaleX(40); //Местоположение сверху панели где отображаются данные выбранных компонентов, на странице готовности установки
ReadyMemo.Top:= WizardForm.ReadyMemo.Top + ScaleY(72) //Цвет шрифта в панели где отображаются данные выбранных компонентов, на странице готовности установки
ReadyMemo.Font.Color:= clBlack; //Стиль панели где отображаются данные выбранных компонентов, на странице готовности установки. Без скроллов - ssNone, с вертикальным скроллом - ssVertial, с горизонтальным скроллом - ssHorizontal, и со всеми скроллами - просто уберите эту строчку или ssBoth
ReadyMemo.ScrollBars:= ssVertical; //ssNone
end;
//Это нужно для того чтоб картинка нормально отображалась
with WizardForm do
begin
InnerNotebook.Left := ScaleX(0);
InnerNotebook.Top := ScaleY(0);
InnerNotebook.Width := ScaleX(497); //Ширина инсталлятора
InnerNotebook.Height := ScaleY(360); //Высота инсталлятора
OuterNotebook.Left := ScaleX(0);
OuterNotebook.Top := ScaleY(0);
OuterNotebook.Width := ScaleX(497); //Ширина инсталлятора
OuterNotebook.Height := ScaleY(360); //Высота инсталлятора
end;
//Это нужно для того чтоб картинка нормально отображалась

//WelcomePage, создаем надписи на странице


WelcomeLabel1:= TLabel.Create(WizardForm);
with WelcomeLabel1 do
begin
Left:= ScaleX(40);
Top:= ScaleY(33);
Width:= ScaleX(301);
Height:= ScaleY(50);
AutoSize:= false;
Transparent:= true;
WordWrap:= true;
Font.Size:= 14;
Font.Color:=ClWhite
Font.Style := [fsBold]
Parent:= WizardForm.WelcomePage;
Caption:= WizardForm.WelcomeLabel1.Caption;
end;

WelcomeLabel2:=TLabel.Create(WizardForm);
with WelcomeLabel2 do
begin
Left:= ScaleX(40);
Top:= ScaleY(100);
Width:= ScaleX(301);
Height:= ScaleY(300);
AutoSize:= false;
WordWrap:= true;
Transparent:= true;
Parent:= WizardForm.WelcomePage;
Caption:= WizardForm.WelcomeLabel2.Caption;
end;
//WelcomePage

//licensePage, создаем надписи, кнопки на странице
LicenseLabel1:=TLabel.Create(WizardForm)
with LicenseLabel1 do
begin
Left:=40
Top:=70
Width:=465
Height:=28
AutoSize:=False
WordWrap:=True
Transparent:=True
Caption:=WizardForm.LicenseLabel1.Caption
Parent:=WizardForm.LicensePage
end;

WizardForm.LicenseMemo.Left:=40
WizardForm.LicenseMemo.Top:=108
WizardForm.LicenseMemo.Parent:=WizardForm.LicensePage

WizardForm.LicenseAcceptedRadio.Left:=40
WizardForm.LicenseAcceptedRadio.Top:=265
WizardForm.LicenseAcceptedRadio.Width:=14
WizardForm.LicenseAcceptedRadio.Height:=14
WizardForm.LicenseAcceptedRadio.Color:=clBlack
WizardForm.LicenseAcceptedRadio.Parent:=WizardForm.LicensePage

LicenseAcceptedLabel:=TLabel.Create(WizardForm)
with LicenseAcceptedLabel do
begin
Left:=56
Top:=265
Transparent:=True
Caption:=WizardForm.LicenseAcceptedRadio.Caption
Parent:=WizardForm.LicensePage
OnClick:= @YesRadioOnClick
end;

WizardForm.LicenseNotAcceptedRadio.Left:=40
WizardForm.LicenseNotAcceptedRadio.Top:=285
WizardForm.LicenseNotAcceptedRadio.Width:=14
WizardForm.LicenseNotAcceptedRadio.Height:=14
WizardForm.LicenseNotAcceptedRadio.Color:=clBlack
WizardForm.LicenseNotAcceptedRadio.Parent:=WizardForm.LicensePage

LicenseNotAcceptedLabel:=TLabel.Create(WizardForm)
with LicenseNotAcceptedLabel do
begin
Left:=56
Top:=285
Transparent:=True
Caption:=WizardForm.LicenseNotAcceptedRadio.Caption
Parent:=WizardForm.LicensePage;
OnClick:= @NoRadioOnClick;
end;

PageNameLabel:= TLabel.Create(WizardForm);
with PageNameLabel do
begin
Left:= WizardForm.PageNameLabel.Left;
Top:= WizardForm.PageNameLabel.Top;
Width:= ScaleX(300);
Height:= ScaleY(14);
AutoSize:= False;
Font.Style:= [fsBold];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm.LicensePage;
end;

PageDescriptionLabel:= TLabel.Create(WizardForm);
with PageDescriptionLabel do
begin
Left:= WizardForm.PageDescriptionLabel.Left;
Top:= WizardForm.PageDescriptionLabel.top;
Width:= ScaleX(400);
Height:= WizardForm.PageDescriptionLabel.Height;
AutoSize:= False;
Wordwrap:= True;
Transparent := True;
Parent:= WizardForm.LicensePage;
end;
//LicensePage

//InfoBeforePage
InfoBeforeClickLabel:= TLabel.Create(WizardForm);
with InfoBeforeClickLabel do
begin
Left:= ScaleX(40);
Top:= ScaleY(70)
Width:= WizardForm.InfoBeforeClickLabel.Width;
Height:= WizardForm.InfoBeforeClickLabel.Height;
Transparent:= true;
AutoSize:= False;
WordWrap:= true;
Parent:= WizardForm.InfoBeforePage;
Caption:= WizardForm.InfoBeforeClickLabel.Caption;
end;

WizardForm.InfoBeforeMemo.left:= ScaleX(40);
WizardForm.InfoBeforeMemo.Top:= ScaleY(108);

PageNameLabel2:= TLabel.Create(WizardForm);
with PageNameLabel2 do
begin
Left:= WizardForm.PageNameLabel.Left;
Top:= WizardForm.PageNameLabel.Top;
Width:= ScaleX(300);
Height:= ScaleY(14);
AutoSize:= False;
Font.Style:= [fsBold];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm.InfoBeforePage;
end;

PageDescriptionLabel2:= TLabel.Create(WizardForm);
with PageDescriptionLabel2 do
begin
Left:= WizardForm.PageDescriptionLabel.Left;
Top:= WizardForm.PageDescriptionLabel.top;
Width:= ScaleX(400);
Height:= WizardForm.PageDescriptionLabel.Height;
AutoSize:= False;
Wordwrap:= True;
Transparent := True;
Parent:= WizardForm.InfoBeforePage;
end;
//InfoBeforePage

//SelectDirPage
SelectDirLabel:= TLabel.Create(WizardForm);
with SelectDirLabel do
begin
Caption:= WizardForm.SelectDirLabel.Caption;
Left:= ScaleX(40);
Top:= WizardForm.SelectDirLabel.Top + ScaleY(62);
Width:= WizardForm.SelectDirLabel.Width;
Height:= WizardForm.SelectDirLabel.Height;
Transparent := True;
Parent:= WizardForm.SelectDirPage;
end;

SelectDirLabelBrowse:= TLabel.Create(WizardForm);
with SelectDirLabelBrowse do
begin
Caption:= WizardForm.SelectDirBrowseLabel.Caption;
Left:= ScaleX(40);
Top:= WizardForm.SelectDirBrowseLabel.Top + ScaleY(62);
Width:= WizardForm.SelectDirBrowseLabel.Width;
Height:= WizardForm.SelectDirBrowseLabel.Height;
WordWrap:= True;
Transparent:= True;
Parent:= WizardForm.SelectDirPage;
end;

PageNameLabel3:= TLabel.Create(WizardForm);
with PageNameLabel3 do
begin
Left:= WizardForm.PageNameLabel.Left;
Top:= WizardForm.PageNameLabel.Top;
Width:= ScaleX(300);
Height:= ScaleY(14);
AutoSize:= False;
Font.Style:= [fsBold];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm.SelectDirPage;
end;

PageDescriptionLabel3:= TLabel.Create(WizardForm);
with PageDescriptionLabel3 do
begin
Left:= WizardForm.PageDescriptionLabel.Left;
Top:= WizardForm.PageDescriptionLabel.top;
Width:= ScaleX(400);
Height:= WizardForm.PageDescriptionLabel.Height;
AutoSize:= False;
Wordwrap:= True;
Transparent := True;
Parent:= WizardForm.SelectDirPage;
end;

DirectX:= TCheckBox.Create(WizardForm);
with DirectX do
begin
Parent:= WizardForm.SelectDirPage;
Left:= WizardForm.DirEdit.Left + 200;
Top:= WizardForm.DirEdit.Top + 35;
Width:= ScaleX(14);
Height:= ScaleY(14);
TabOrder:= 0;
Checked:= False;
end;

DirectXLabel:= TLabel.Create(WizardForm);
with DirectXLabel do
begin
Caption:= ExpandConstant('{cm:DRT}');
Left:= WizardForm.DirEdit.Left + 220;
Top:= WizardForm.DirEdit.Top + 35;
Width:= ScaleX(150);
Height:= ScaleY(13);
Transparent := True;
Parent:= WizardForm.SelectDirPage;
OnClick:= @DirectXLabelOnClick;
end;

Redist:= TCheckBox.Create(WizardForm);
with Redist do
begin
Parent:= WizardForm.SelectDirPage;
Left:= WizardForm.DirEdit.Left + 200;
Top:= WizardForm.DirEdit.Top + 70;
Width:= ScaleX(14);
Height:= ScaleY(14);
TabOrder:= 1;
Checked:= False;
end;

RedistLabel:= TLabel.Create(WizardForm);
with RedistLabel do
begin
Caption:=ExpandConstant('{cm:Redist}');
Left:= WizardForm.DirEdit.Left + 220;
Top:= WizardForm.DirEdit.Top + 70;
Width:= ScaleX(150);
Height:= ScaleY(13);
Transparent := True;
Parent:= WizardForm.SelectDirPage;
OnClick:= @RedistOnClick;
end;

Icons:= TCheckBox.Create(WizardForm);
with Icons do
begin
Parent:= WizardForm.SelectDirPage;
Left:= WizardForm.DirEdit.Left;
Top:= WizardForm.DirEdit.Top + 35;
Width:= ScaleX(14);
Height:= ScaleY(14);
TabOrder:= 2;
Checked:= False;
end;

IconsLabel:= TLabel.Create(WizardForm);
with IconsLabel do
begin
Caption:=ExpandConstant('{cm:Icons}');
Left:= WizardForm.DirEdit.Left + 20;
Top:= WizardForm.DirEdit.Top + 35;
Width:= ScaleX(150);
Height:= ScaleY(13);
Transparent := True;
Parent:= WizardForm.SelectDirPage;
OnClick:= @IconsOnClick;
end;

Group:= TCheckBox.Create(WizardForm);
with Group do
begin
Parent:= WizardForm.SelectDirPage;
Left:= WizardForm.DirEdit.Left;
Top:= WizardForm.DirEdit.Top + 70;
Width:= ScaleX(14);
Height:= ScaleY(14);
TabOrder:= 3;
Checked:= False;
end;

GroupLabel:= TLabel.Create(WizardForm);
with GroupLabel do
begin
Caption:=ExpandConstant('{cm:Group}');
Left:= WizardForm.DirEdit.Left + 20;
Top:= WizardForm.DirEdit.Top + 70;
Width:= ScaleX(150);
Height:= ScaleY(13);
Transparent := True;
Parent:= WizardForm.SelectDirPage;
OnClick:= @GroupOnClick;
end;

NeedSpaceLabel:= TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent:= WizardForm.SelectDirPage;
Left:= WizardForm.DirEdit.Left;
Top:= ScaleY(262);
Width:= ScaleX(209);
Height:= ScaleY(13);
Transparent:= True;
end;

FreeSpaceLabel:= TLabel.Create(WizardForm);
with FreeSpaceLabel do
begin
Parent:= WizardForm.SelectDirPage;
Left:= WizardForm.DirEdit.Left;
Top:= ScaleY(250);
Width:= ScaleX(209);
Height:= ScaleY(13);
Transparent:= True;
end;

WizardForm.DirEdit.OnChange:= @GetFreeSpaceCaption;
WizardForm.DirEdit.Text:= WizardForm.DirEdit.Text + #0;
//SelectDirPage

//SelectComponentPage
SelectComponentsLabel:= TLabel.Create(WizardForm)
with SelectComponentsLabel do
begin
Left:= ScaleX(40);
Top:= SelectDirLabel.Top;
Width:= WizardForm.SelectComponentsLabel.Width;
Height:= WizardForm.SelectComponentsLabel.Height;
Autosize:= false;
WordWrap:= true;
Transparent:= true;
Caption:= WizardForm.SelectComponentsLabel.Caption;
Parent:= WizardForm.SelectComponentsPage;
end;

WizardForm.TypesCombo.Left:= ScaleX(40);
WizardForm.TypesCombo.Top:= ScaleY(120)
WizardForm.TypesCombo.Font.Color:= clBlack;

WizardForm.ComponentsList.Left:= ScaleX(40)
WizardForm.ComponentsList.Top:= ScaleY(155);
WizardForm.ComponentsList.Font.Color:= clBlack;

ComponentsDiskSpaceLabel:= TLabel.Create(WizardForm);
with ComponentsDiskSpaceLabel do
begin
Left:= ScaleX(40);
Top:= ScaleY(295);
Width:= WizardForm.ComponentsDiskSpaceLabel.Width;
Height:= WizardForm.ComponentsDiskSpaceLabel.Height;
Autosize:= false;
WordWrap:= true;
Transparent:= true;
Caption:= WizardForm.ComponentsDiskSpaceLabel.Caption;
Parent:= WizardForm.SelectComponentsPage;
end;

PageNameLabel4:= TLabel.Create(WizardForm);
with PageNameLabel4 do
begin
Left:= WizardForm.PageNameLabel.Left;
Top:= WizardForm.PageNameLabel.Top;
Width:= ScaleX(300);
Height:= ScaleY(14);
AutoSize:= False;
Font.Style:= [fsBold];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm.SelectComponentsPage;
end;

PageDescriptionLabel4:= TLabel.Create(WizardForm);
with PageDescriptionLabel4 do
begin
Left:= WizardForm.PageDescriptionLabel.Left;
Top:= WizardForm.PageDescriptionLabel.top;
Width:= ScaleX(400);
Height:= WizardForm.PageDescriptionLabel.Height;
AutoSize:= False;
Wordwrap:= True;
Transparent := True;
Parent:= WizardForm.SelectComponentsPage;
end;
//SelectComponentPage

//ProgrammGroupPage
SelectStartMenuFolderLabel:=TLabel.Create(WizardForm)
with SelectStartMenuFolderLabel do
begin
Left:= ScaleX(40);
Top:= WizardForm.SelectDirLabel.Top + ScaleY(62);
Width:= WizardForm.SelectDirBrowseLabel.Width;
Height:= WizardForm.SelectDirBrowseLabel.Height;
AutoSize:=False
WordWrap:=True
Transparent:=True
Caption:=WizardForm.SelectStartMenuFolderLabel.Caption
Parent:=WizardForm.SelectProgramGroupPage
end;

SelectStartMenuFolderBrowseLabel:=TLabel.Create(WizardForm)
with SelectStartMenuFolderBrowseLabel do
begin
Left:= ScaleX(40);
Top:= WizardForm.SelectDirBrowseLabel.Top + ScaleY(62);
Width:= WizardForm.SelectDirBrowseLabel.Width
Height:= WizardForm.SelectDirBrowseLabel.Height
AutoSize:=False
WordWrap:=True
Transparent:=True
Caption:=WizardForm.SelectStartMenuFolderBrowseLabel.Caption
Parent:=WizardForm.SelectProgramGroupPage
end;

WizardForm.NoIconsCheck.Left:=ScaleX(40);
WizardForm.NoIconsCheck.Top:= WizardForm.DirEdit.Top + ScaleY(140)
WizardForm.NoIconsCheck.Width:=13
WizardForm.NoIconsCheck.Height:=13
WizardForm.NoIconsCheck.Visible:=True
WizardForm.NoIconsCheck.Parent:= WizardForm.SelectProgramGroupPage

NoIconsLabel:=TLabel.Create(WizardForm)
with NoIconsLabel do
begin
Left:=ScaleX(56);
Top:= WizardForm.DirEdit.Top + ScaleY(140)
Transparent:=True
OnClick:= @NoIconsLabelOnClick
Caption:=WizardForm.NoIconsCheck.Caption
Parent:=WizardForm.SelectProgramGroupPage
end;

PageNameLabel5:= TLabel.Create(WizardForm);
with PageNameLabel5 do
begin
Left:= WizardForm.PageNameLabel.Left;
Top:= WizardForm.PageNameLabel.Top;
Width:= ScaleX(300);
Height:= ScaleY(14);
AutoSize:= False;
Font.Style:= [fsBold];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm.SelectProgramGroupPage;
end;

PageDescriptionLabel5:= TLabel.Create(WizardForm);
with PageDescriptionLabel5 do
begin
Left:= WizardForm.PageDescriptionLabel.Left;
Top:= WizardForm.PageDescriptionLabel.top;
Width:= ScaleX(400);
Height:= WizardForm.PageDescriptionLabel.Height;
AutoSize:= False;
Wordwrap:= True;
Transparent := True;
Parent:= WizardForm.SelectProgramGroupPage;
end;
//ProgrammGroupPage

//InstallingPage
StatusLabel:= TLabel.Create(WizardForm);
with StatusLabel do
begin
Left:= ScaleX(20);
Top:= ScaleY(80);
Width:= WizardForm.StatusLabel.Width;
Height:= WizardForm.StatusLabel.Height;
AutoSize:= False;
Transparent := True;
Parent:= WizardForm.InstallingPage;
Caption:= 'Распаковка файлов...'
end;

FilenameLabel:= TLabel.Create(WizardForm);
with FilenameLabel do
begin
Left:= ScaleX(20);
Top:= ScaleY(100);
Width:= WizardForm.StatusLabel.Width;
Height:= WizardForm.StatusLabel.Height;
AutoSize:= False;
Transparent := True;
Parent:= WizardForm.InstallingPage;
end;

PageNameLabel7:= TLabel.Create(WizardForm);
with PageNameLabel7 do
begin
Left:= WizardForm.PageNameLabel.Left;
Top:= WizardForm.PageNameLabel.Top;
Width:= ScaleX(300);
Height:= ScaleY(14);
AutoSize:= False;
Font.Style:= [fsBold];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm.InstallingPage;
end;

PageDescriptionLabel7:= TLabel.Create(WizardForm);
with PageDescriptionLabel7 do
begin
Left:= WizardForm.PageDescriptionLabel.Left;
Top:= WizardForm.PageDescriptionLabel.top;
Width:= ScaleX(400);
Height:= WizardForm.PageDescriptionLabel.Height;
AutoSize:= False;
Wordwrap:= True;
Transparent := True;
Parent:= WizardForm.InstallingPage;
end;
//InstallingPage

//InfoAfterPage
InfoAfterClickLabel:= TLabel.Create(WizardForm);
with InfoAfterClickLabel do
begin
Left:= ScaleX(40);
Top:= ScaleY(70)
Width:= WizardForm.InfoAfterClickLabel.Width;
Height:= WizardForm.InfoAfterClickLabel.Height;
Transparent:= true;
AutoSize:= False;
WordWrap:= true;
Parent:= WizardForm.InfoAfterPage;
Caption:= WizardForm.InfoAfterClickLabel.Caption;
end;

WizardForm.InfoAfterMemo.left:= ScaleX(40);
WizardForm.InfoAfterMemo.Top:= ScaleY(108);

PageNameLabel8:= TLabel.Create(WizardForm);
with PageNameLabel8 do
begin
Left:= WizardForm.PageNameLabel.Left;
Top:= WizardForm.PageNameLabel.Top;
Width:= ScaleX(300);
Height:= ScaleY(14);
AutoSize:= False;
Font.Style:= [fsBold];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm.InfoAfterPage;
end;

PageDescriptionLabel8:= TLabel.Create(WizardForm);
with PageDescriptionLabel8 do
begin
Left:= WizardForm.PageDescriptionLabel.Left;
Top:= WizardForm.PageDescriptionLabel.top;
Width:= ScaleX(400);
Height:= WizardForm.PageDescriptionLabel.Height;
AutoSize:= False;
Wordwrap:= True;
Transparent := True;
Parent:= WizardForm.InfoAfterPage;
end;
//InfoAfterPage

//FinishedPage
FinishedHeadingLabel:=TLabel.Create(WizardForm);
with FinishedHeadingLabel do
begin
Top:= ScaleY(33);
Left:= ScaleX(40);
Width:= ScaleX(301);
Height:= ScaleY(53);
AutoSize:= false;
WordWrap:= true;
Font.Size:= 14;
Font.Color:=ClWhite
Font.Style := [fsBold]
Transparent:= true;
Parent:= WizardForm.FinishedPage;
Caption:= WizardForm.FinishedHeadingLabel.Caption;
end;

FinishedLabel:= TLabel.Create(WizardForm);
with FinishedLabel do
begin
Left:= ScaleX(40);
Top:= ScaleY(100);
Width:= ScaleX(301);
Height:= ScaleY(54);
AutoSize:= false;
WordWrap:= true;
Transparent:= true;
Parent:= WizardForm.FinishedPage;
Caption:= ExpandConstant('{cm:Finished1}') + #10#13#10 + ExpandConstant('{cm:Finished2}')
end;

RunProgram:= TCheckBox.Create(WizardForm);
with RunProgram do
begin
Parent:= WizardForm.FinishedPage;
Left:= ScaleX(176);
Top:= ScaleY(200);
Width:= ScaleX(14);
Height:= ScaleY(14);
TabOrder:= 4;
Checked:= True;
end;

RunProgramLabel:= TLabel.Create(WizardForm);
with RunProgramLabel do
begin
Caption:=ExpandConstant('{cm:RunProgram}');
Left:= ScaleX(196);
Top:= ScaleY(200);
Width:= ScaleX(150);
Height:= ScaleY(13);
Transparent := True;
Parent:= WizardForm.FinishedPage;
OnClick:= @RunProgramOnClick;
end;
//FinishedPage
end;

///////

procedure LoadSkin(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@files:isskin.dll stdcall';
procedure UnloadSkin(); external 'UnloadSkin@files:isskin.dll stdcall';
function ShowWindow(hWnd: Integer; uType: Integer): Integer; external 'ShowWindow@user32.dll stdcall';

function InitializeSetup:boolean;
begin
ExtractTemporaryFile('black.cjstyles');
LoadSkin(ExpandConstant('{tmp}')+'\black.cjstyles', '');
Result:=True;
end;

Sotonisto 11-01-2010 23:26 1317685

Serega, не могли бы Вы мне все-таки помочь?
Мне необходимо доделать 2 страницы - это выбор папки в меню пуск и создание ярлыков.
Я брал скрипт отсюда.
Там написано что несколько страниц не хватает и если что - доделать по шаблону, но для меня это суицид (я даж названия страниц не знаю).

R.i.m.s.k.y. 12-01-2010 13:17 1318063

Вопрос знатокам:

Можно ли в окне выбора компонентов сделать так, чтобы определенные компоненты отображались в зависимости от ОС, под которой запущен инсталлер? И в зависимости от того, есть ли определенный файл/файлы менялась название компоненты и действие при ее выборе

В общем надо сделать так: под вин7 переименовать пару файликов (ее встроенных декодеров, а то они ffdshow перекрывают), соответственно если инсталлер запускается под вистой и ниже - этот компонент не отображается и ничего не делает, если ОС = Вин7 и файлы есть - отображается компонента с названием "Переименовать..." и действие соответсвующее, если ОС = Вин7 и файлы уже переименованы (есть mfds.dll.bak и другие) - название "вернуть обратно" и действие - переименовать обратно, если ОС = Вин7 и нету никаких файлов (кто-то другой постарался) - серый компонент или название "переименовать нельзя" и ничего не делать.

Как переменовывать я знаю - cmd.exe /c rename {sys}\MP3DMOD.DLL MP3DMOD.DLL.bak, а вот как в окне компонентов - реализовать требуемое - не знаю.

Файлы не защищены, руками переименовываются нормально.

Совсем хорошо бы было, если бы в окне выбора компонентов еще написать что делается и для чего, т.е. вставить свой текст (желательно в зависимости от ОС и наличия файлов).


Еще вопрос не по этой теме, но все-же: такой же эффект можно сделать в реестре. Ключи реестра я тоже знаю, но в вин7 к ним имеет доступ только TrustedInstaller. Руками можно к ним получить доступ и внести изменения (владельцем поставить текущего пользователя), но как это автоматизировать?


Спасибо за помощь!

Цитата:

Цитата Sed0y
Может я не по теме, но очень нужен реестр игры «Войны древности: Спарта». Помогите пожалуйста. »

Сам дистрибутив игры есть?
Если да - поможет утилитка RegShot

R.i.m.s.k.y. 14-01-2010 14:03 1319972

Неужели мне никто не поможет?
Ну хотя бы намекните как, пожалуйста.

Можно через Tasks, да хоть как-нибудь.

Косметический вопрос - как убрать на странице компонентов выпадающий список "Полная установка - выборочная установка..."

Serega 14-01-2010 18:14 1320187

Цитата:

Цитата Sotonisto
Мне необходимо доделать 2 страницы - это выбор папки в меню пуск и создание ярлыков. »

Будет время по свободней, доделаю.

Цитата:

Цитата R.i.m.s.k.y.
Ну хотя бы намекните как, пожалуйста. »

К сожелению с Windows7 знаком только по скриншотам, поэтому ничего сказать не могу.
Цитата:

Цитата R.i.m.s.k.y.
как убрать на странице компонентов выпадающий список »

WizardForm.TypesCombo.Hide;

Sotonisto 15-01-2010 22:16 1321306

Народ, вод я видел один репак игры Painkiller (сделан точно inno setup'ом), там когда запускаешь инсталл сначала появляется картинка с логотипом игры (небольшая, примерно 500х300) а потом уже окно инсталлятора. Так вот, как это можно реализовать?

Habetdin 15-01-2010 22:31 1321317

Sotonisto, http://members.home.nl/albartus/inno...ssi_splash.htm

vint56 16-01-2010 09:45 1321547

Это splash вот код под png
читать дальше »
[Files]
Source: splash.png; DestDir: {tmp}; Flags: dontcopy nocompression
Source: isgsg.dll; DestDir: {tmp}; Flags: dontcopy nocompression

[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 InitializeWizard();
begin
ExtractTemporaryFile('splash.png');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\splash.png',1000,3000,1000,0,255,False, $FFFFFF,10);
end;


Это splash вот код под .bmp
читать дальше »
[Files]
Source: 1.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: isgsg.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
[code]
procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';
function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';

procedure InitializeWizard;
begin
WizardForm.Position:=poScreenCenter;
ExtractTemporaryFile('1.bmp');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\1.bmp',1000,3000,1000,0,255,False,$FFFF FF);
end;

A1EXXX 16-01-2010 13:31 1321661

vint56, не хватает только для jpg :)
читать дальше »
Код:

[Files]
Source: splash.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy
Source: sgsg.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy

[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 InitializeWizard;
begin
  ExtractTemporaryFile('splash.jpg');
  ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\splash.jpg',1000,3000,1000,0,255,False,$FFFFFF,10);
end;


South 16-01-2010 17:23 1321864

ну, код для бмп с последней версией библиотеки работать не будет

Цитата:

Цитата A1EXXX
vint56, не хватает только для jpg »

тогда уж забыли код для анимированных gif :)

Sotonisto 16-01-2010 17:46 1321878

Люди, я хочу сделать типо патчик (замена англ. файлов озвучки на русский).
Вот мне бы хотелось что бы не нужно было создавать папку (и указывать к ней путь) - ну что бы инсталл определил по этим записям в реестре где установлена игра и сам кинул туда файлы.
Это реально сделать?
читать дальше »
Код:

Root: HKLM; Subkey: "Software\Soto"; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: "Software\Soto\Left 4 Dead"; Flags: uninsdeletekey
Root: HKLM; Subkey: "Software\Soto\Left 4 Dead"; ValueType: string; ValueName: "Version"; ValueData: "1.0.0.1"; Flags: uninsdeletekey
Root: HKLM; Subkey: "Software\Soto\Left 4 Dead"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}"; Flags: uninsdeletekey


И если это можно сделать (в чем я не сомневаюсь) как мне отключить создание папки в меню пуск?

A1EXXX 16-01-2010 18:22 1321895

Sotonisto, вот пример:
читать дальше »

Код:

[Setup]
AppName=NBA 2K10
AppVerName=NBA 2K10
DefaultDirName={reg:HKLM\Software\2K Sports\NBA 2K10,InstallDir}
OutputDir=.

[code]
function InitializeSetup(): Boolean;
var
ResultCode:Integer;
begin
if RegValueExists(HKEY_LOCAL_MACHINE, 'Software\2K Sports\NBA 2K10','InstallDir')
then
  Result := True
else
MsgBox('Игра NBA 2K10 не найдена.',mbInformation, mb_Ok)
end;

Procedure InitializeWizard();
begin
WizardForm.DirEdit.Enabled:=False;
WizardForm.DirBrowseButton.Enabled:=False;
end;


Про Пуск: добавь в [Setup] строку AllowNoIcons=yes, чтобы добавить это

Shegorat 16-01-2010 19:53 1321957

Вложений: 1
2ALL
Вот скрипт распаковки FreeArc + ISPrecomp 0.7. Теперь показывает нормально надписи, ISPrecomp автоматически получает названия файлов. Один минус - прогресс отображается неверно, но это уже к Vo1T'у, чтоб поправил дллку.

YURSHAT 17-01-2010 05:43 1322313

Цитата:

Цитата A1EXXX
Про Пуск: добавь в [Setup] строку AllowNoIcons=yes, чтобы добавить это »

Ну если пользователь заведомо не хочет создавать иконки, гораздо проще просто не прописывать их в секции [Icons], тогда и страницы не будет вообще...

A1EXXX 17-01-2010 11:10 1322398

YURSHAT, можно и так, но насколько я понял, пользователь хочет отключить, а не избавиться от них вообще... :)

Sotonisto 17-01-2010 13:50 1322540

Цитата:

Цитата A1EXXX
отключить »

Ну да, я хотел что бы отключали.
Тут любому понятно что если они не нужны, то можно их просто не прописывать :)
A1EXXX, а вот это обязательно?
Код:

DefaultDirName={reg:HKLM\Software\2K Sports\NBA 2K10,InstallDir}

YURSHAT 17-01-2010 14:13 1322567

A1EXXX, извини, отвечу за тебя :)

Цитата:

Цитата Sotonisto
а вот это обязательно? »

Да, через эту строчку инсталл узнает куда установлена игра, и соответственно инсталлит в эту папку

gluyk 18-01-2010 17:47 1323603

а можно ли сделать в инно сетапе вывод сайта?) если да, то как.
т.е. задача, что бы в одно окно выводился урл к примеру http://ya.ru

A1EXXX 18-01-2010 18:05 1323618

gluyk, ты хочешь, чтобы сайт открывался в окне инсталла?? Не думаю, что к Инно можно прикрутить функции браузера...

gluyk 18-01-2010 18:15 1323624

A1EXXX,
ага. именно.

gluyk 18-01-2010 18:52 1323644

а есть возможность сделать сверку серийного номера вводимым пользователем с он-лайн?

gluyk 19-01-2010 00:58 1323895

изучая манаул понял, что инсталлер может работать со моими dll. а значит, можно загнать Indy.Sockets а именно, IdHTTP в dll и прикрутить его к инсталлеру. у кого уже был такой или подобный опыт?

Sotonisto 20-01-2010 05:40 1324828

Я вот в инно ламер, так что у меня есть вопрос.
Я создаю инсталл для Left 4 Dead 2, в папке есть файл (stryder.ini) и в нем только вот эти две строки
Код:

[Settings]
Name=Sotonisto

Так вот, мне бы хотелось что бы тот кто установил игру мог вписать свой ник (он должен быть там где мой).
То есть сделать так, что бы полсе установки игры появилось окно в котором пользователю предлагалось ввести свой ник (и он естественно изменился).
------
A1EXXX а не могли бы вы доработать мой инсталл RE5 (картинка для инсталла в двух диалогах поверх всего)?

A1EXXX 20-01-2010 11:14 1324960

Sotonisto, на написание себе скрипта время выделить не могу, а кому-то и подавно...
Здесь (скрипт Prototype), реализованы остальные страницы. А по поводу записи данных в .ini вопрос уже звучал, используй поиск.

serega355 20-01-2010 12:40 1325031

Пользователи, если кто-нибудь знает, подскажите пожалуйста, создал инсталлятор с помощью мастера, установил игру, а ярлыки с рабочего стола и с ПУСКА не запускают её. Вот инсталлятор:
Код:

; Скрипт создан при помощи мастера создания скриптов.
; СМ. ДОКУМЕНТАЦИЮ ДЛЯ ИЗУЧЕНИЯ ДЕТАЛЕЙ ОТНОСИТЕЛЬНО СОЗДАНИЯ ФАЙЛОВ СКРИПТА INNO SETUP!

[Setup]
AppName=Grand Theft Auto Racing Driver
AppVerName=Grand Theft Auto Racing Driver 1.5
AppPublisher=Rockstar Games
AppPublisherURL=http://rockstargames.ru/
AppSupportURL=http://rockstargames.ru/
AppUpdatesURL=http://rockstargames.ru/
DefaultDirName=C:\Program Files\Rockstar Games\Grand Theft Auto Racing Driver
DefaultGroupName=Grand Theft Auto Racing Driver
LicenseFile=D:\Игромания\Grand Theft Auto Racing Driver\ReadMe\Readme\License.txt
InfoBeforeFile=D:\Игромания\Grand Theft Auto Racing Driver\ReadMe\Readme\info.txt
InfoAfterFile=D:\Игромания\Grand Theft Auto Racing Driver\ReadMe\Readme\files.txt
OutputDir=D:\Игромания\Инсталлятор GTA Racing Driver
OutputBaseFilename=setup
SetupIconFile=D:\Игромания\Grand Theft Auto Racing Driver\data\Icons\app.ico
Password=1345O-9087H-0967K-3555R
Compression=lzma/ultra
SolidCompression=yes
DiskSpanning=yes
SlicesPerDisk=1
DiskSliceSize=999999999
DiskClusterSize=4096
ReserveBytes=0

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

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "D:\Игромания\Grand Theft Auto Racing Driver\gta_sa.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Игромания\Grand Theft Auto Racing Driver\unins000.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Игромания\Grand Theft Auto Racing Driver\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; ОТМЕТЬТЕ: Не используйте "Флажки: Проигнорировать версию" на любых общедоступных системных файлах

[Icons]
Name: "{group}\Grand Theft Auto Racing Driver"; Filename: "{app}\gta_sa.exe"
Name: "{group}\{cm:ProgramOnTheWeb,Grand Theft Auto Racing Driver}"; Filename: "http://rockstargames.ru/"
Name: "{group}\{cm:UninstallProgram,Grand Theft Auto Racing Driver}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\Grand Theft Auto Racing Driver"; Filename: "{app}\gta_sa.exe"; Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\Grand Theft Auto Racing Driver"; Filename: "{app}\gta_sa.exe"; Tasks: quicklaunchicon

[Run]
Filename: "{app}\gta_sa.exe"; Description: "{cm:LaunchProgram,Grand Theft Auto Racing Driver}"; Flags: nowait postinstall skipifsilent


R.i.m.s.k.y. 20-01-2010 14:12 1325090

Цитата:

Цитата R.i.m.s.k.y.
Вопрос знатокам:
Можно ли в окне выбора компонентов сделать так, чтобы определенные компоненты отображались в зависимости от ОС, под которой запущен инсталлер? И в зависимости от того, есть ли определенный файл/файлы менялась название компоненты и действие при ее выборе »

Чтож, отвечаю сам себе - можно и просто.

Код:

...
function CheckOption(OptionNum: integer): Boolean;
begin
Result:= Page.Values[OptionNum];
end;
...
procedure InitializeWizard();
  GetWindowsVersionEx (Version);
  if (Version.Major = 6) and (Version.Minor = 1) then begin
    if (FileExists (ExpandConstant('{sys}\mfds.dll'))) then mfds := 1; if (FileExists (ExpandConstant('{sys}\mfds.dll.bak'))) then mfds := -1; if not (FileExists (ExpandConstant('{sys}\mfds.dll'))) and not (FileExists (ExpandConstant('{sys}\mfds.dll.bak')))then mfds := 0;
...
    Page := CreateInputOptionPage(wpSelectTasks,'Встроенные кодеки Windows 7', 'Включение/отключение встроенных кодеков Windows 7 должно запускаться от имени пользователя, имеющего права Администратора!!!','Отключение кодеков осуществляется добавлением расширения .bak к файлам. Сами файлы остаются на своем месте - в папке ' + ExpandConstant('{sys}'),False, False);
    {0} if mfds = 1 then Page.Add('ОТКЛЮЧИТЬ Windows Media Foundation'); if mfds = -1 then Page.Add('ВКЛЮЧИТЬ Windows Media Foundation');  if mfds = 0 then Page.Add('В папке ' + ExpandConstant('{sys}') + ' не найден файл mfds.dll или mfds.dll.bak');
...
    if (CheckOption(0) and (mfds = 1)) then begin
...
    if (CheckOption(0) and (mfds = -1)) then begin
...

Надеюсь понятно и кому-то поможет.

Drongo 20-01-2010 14:41 1325120

serega355, У вас не отображается путь к Рабочей папке в свойствах ярлыка.

Зачем такая жёсткая привязка? :)
Код:

DefaultDirName=C:\Program Files\Rockstar Games\Grand Theft Auto Racing Driver
Тему перенесу в соответствующий раздел, вам помогу.

R.i.m.s.k.y. 20-01-2010 15:50 1325185

Еще косметический вопрос: как увеличить окошко выбора компонентов и само белое поле с компонентами? А то одна строчка не влезает и из-за нее приходится вниз проматывать.

Авансом спасибо!

YURSHAT 20-01-2010 19:26 1325363

Цитата:

Цитата R.i.m.s.k.y.
Еще косметический вопрос: как увеличить окошко выбора компонентов и само белое поле с компонентами? А то одна строчка не влезает и из-за нее приходится вниз проматывать. »

WizardForm.ComponentsList.Width:= ScaleX(550);
WizardForm.TypesCombo.Width:= ScaleX(550);

Tukash 20-01-2010 21:46 1325473

помогите!!! нашел скрипт
Код:

var
  RunProg: TCheckBox;

procedure CheckBoxChecked;
var
  res: Integer;
begin
  if RunProg.Checked then
  // запускаем Grand Theft Auto IV
  Exec(ExpandConstant('{src}\Redistributables\gfwlivesetup.exe'), '',
      ExpandConstant('{src}\Redistributables'), SW_HIDE, ewWaitUntilTerminated, res);
end;

procedure GreatCheckBox;
begin
  RunProg:= TCheckBox.Create(WizardForm);
  with RunProg do
    begin
      Parent := WizardForm;
      Caption := 'Запустить игру?';
      SetBounds(140,330,150,15);
      Cursor:= crHand;
      Checked:= True;
    end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpFinished then GreatCheckBox;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssDone then CheckBoxChecked;
end;

это чекбокс на странице завершения, но что то не получаеться, мне надо что-бы этот чекбокс предлогал, запускать установленную программу, но как прописать правильно непойму, это совсем сбило с толку:!
Код:

  Exec(ExpandConstant('{src}\Redistributables\gfwlivesetup.exe'), '',
      ExpandConstant('{src}\Redistributables'), SW_HIDE, ewWaitUntilTerminated, res);

... надо запустить LaunchGTAIV.exe находиться в {app}, папка с игрой, помогите!!!

A1EXXX 20-01-2010 21:55 1325480

Tukash, если скрипт верен, то, наверное, так:

Код:

Exec(ExpandConstant('{app\LaunchGTAIV.exe'), '',
      ExpandConstant('{app}'), SW_HIDE, ewWaitUntilTerminated, res);


Tukash 20-01-2010 22:02 1325485

A1EXXX
блиииин во я тупанул)))) благодарю!:)

Drongo 20-01-2010 22:19 1325506

Ребята, по возможности посмотрите перенесённое сообщение 869, человек ведь ждёт. :)

A1EXXX 20-01-2010 22:27 1325509

Drongo, serega355, если пути указаны правильно, то вероятней всего, не хватает рабочей папки в свойствах ярлыка - WorkingDir: {app}; , - попробуйте так:
читать дальше »
Код:

; Скрипт создан при помощи мастера создания скриптов.
; СМ. ДОКУМЕНТАЦИЮ ДЛЯ ИЗУЧЕНИЯ ДЕТАЛЕЙ ОТНОСИТЕЛЬНО СОЗДАНИЯ ФАЙЛОВ СКРИПТА INNO SETUP!

[Setup]
AppName=Grand Theft Auto Racing Driver
AppVerName=Grand Theft Auto Racing Driver 1.5
AppPublisher=Rockstar Games
AppPublisherURL=http://rockstargames.ru/
AppSupportURL=http://rockstargames.ru/
AppUpdatesURL=http://rockstargames.ru/
DefaultDirName=C:\Program Files\Rockstar Games\Grand Theft Auto Racing Driver
DefaultGroupName=Grand Theft Auto Racing Driver
LicenseFile=D:\Игромания\Grand Theft Auto Racing Driver\ReadMe\Readme\License.txt
InfoBeforeFile=D:\Игромания\Grand Theft Auto Racing Driver\ReadMe\Readme\info.txt
InfoAfterFile=D:\Игромания\Grand Theft Auto Racing Driver\ReadMe\Readme\files.txt
OutputDir=D:\Игромания\Инсталлятор GTA Racing Driver
OutputBaseFilename=setup
SetupIconFile=D:\Игромания\Grand Theft Auto Racing Driver\data\Icons\app.ico
Password=1345O-9087H-0967K-3555R
Compression=lzma/ultra
SolidCompression=yes
DiskSpanning=yes
SlicesPerDisk=1
DiskSliceSize=999999999
DiskClusterSize=4096
ReserveBytes=0

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

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "D:\Игромания\Grand Theft Auto Racing Driver\gta_sa.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Игромания\Grand Theft Auto Racing Driver\unins000.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Игромания\Grand Theft Auto Racing Driver\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; ОТМЕТЬТЕ: Не используйте "Флажки: Проигнорировать версию" на любых общедоступных системных файлах

[Icons]
Name: "{group}\Grand Theft Auto Racing Driver"; Filename: "{app}\gta_sa.exe"; WorkingDir: {app};
Name: "{group}\{cm:ProgramOnTheWeb,Grand Theft Auto Racing Driver}"; Filename: "http://rockstargames.ru/"
Name: "{group}\{cm:UninstallProgram,Grand Theft Auto Racing Driver}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\Grand Theft Auto Racing Driver"; Filename: "{app}\gta_sa.exe"; WorkingDir: {app}; Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\Grand Theft Auto Racing Driver"; Filename: "{app}\gta_sa.exe"; WorkingDir: {app}; Tasks: quicklaunchicon

[Run]
Filename: "{app}\gta_sa.exe"; WorkingDir: {app}; Description: "{cm:LaunchProgram,Grand Theft Auto Racing Driver}"; Flags: nowait postinstall skipifsilent


serg aka lain 20-01-2010 22:28 1325511

Цитата:

Цитата Drongo
человек ведь ждёт. »

Возможно, так:
Код:

[Icons]
Name: "{group}\Grand Theft Auto Racing Driver"; Filename: "{app}\gta_sa.exe"; WorkingDir: "{app}";
Name: "{group}\{cm:ProgramOnTheWeb,Grand Theft Auto Racing Driver}"; Filename: "http://rockstargames.ru/"
Name: "{group}\{cm:UninstallProgram,Grand Theft Auto Racing Driver}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\Grand Theft Auto Racing Driver"; Filename: "{app}\gta_sa.exe"; WorkingDir: "{app}"; Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\Grand Theft Auto Racing Driver"; Filename: "{app}\gta_sa.exe";  WorkingDir: "{app}"; Tasks: quicklaunchicon


Serega 20-01-2010 23:12 1325549

serega355, немного добавлю...

Секция [Setup]:
1. Исправьте: DefaultDirName={pf}\Rockstar Games\Grand Theft Auto Racing Driver
2. Добавьте: Encryption=yes - не критично, но раз уж шифруете...
Секция [Files]:
Удалите первые две строки, они не нужны, т.е. должно быть так:
Код:

[Files]
Source: "D:\Игромания\Grand Theft Auto Racing Driver\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

Ну и про секцию [Icons] A1EXXX и serg aka lain уже сказали ;)

Serega 21-01-2010 01:28 1325616

Вложений: 1
Здравствуйте.
Прикрепил к сообщению скрипт, который позволяет запускать другие программы с ожиданием их завершения и при этом инсталлятор остаётся "живым", т.е. отвечает на действия пользователя.
Пример использования, подробно описан в скрипте.

R.i.m.s.k.y. 21-01-2010 09:35 1325779

Цитата:

Цитата YURSHAT
Еще косметический вопрос: как увеличить окошко выбора компонентов и само белое поле с компонентами? А то одна строчка не влезает и из-за нее приходится вниз проматывать. »
WizardForm.ComponentsList.Width:= ScaleX(550);
WizardForm.TypesCombo.Width:= ScaleX(550); »

Спасибо!
А если надо кардинально увеличить окно? Ведь элементы поупираются в кнопки, линии и пр, как все перенести/раздвинуть?

Качнул Inno Setup Form Designer - а там с кодировкой что-то

Tukash 21-01-2010 14:24 1326022

Добрый день, такой вопрос! хочу сделать что-бы здесь писало не 38мб, а 38мб + строка NeedSize := 15350;
то есть я хочу что-бы это:

складывалось с этим:

и в итоге тут: получалась сумма 1 и 2 скриншота!

YURSHAT 21-01-2010 15:17 1326068

Цитата:

Цитата R.i.m.s.k.y.
А если надо кардинально увеличить окно? Ведь элементы поупираются в кнопки, линии и пр, как все перенести/раздвинуть? »

Используйте расширенную версию от ResTools. Там есть WizardForm Designer.

South 21-01-2010 15:34 1326085

Цитата:

Цитата Serega
Прикрепил к сообщению скрипт, который позволяет запускать другие программы с ожиданием их завершения и при этом инсталлятор остаётся "живым", т.е. отвечает на действия пользователя.
Пример использования, подробно описан в скрипте. »

не очень понятно где это можно применить на практике, если только рассматривать этот вопрос как чисто академический

если вызвать ExecAndWait, то вызвавшая процедура/функция не завершится пока не завершится запущенное приложение.
а если после этого должны выполнится еще какие-то действия?

сдается мне, что _ProcIsRunning вообще не в кассу, постоянно шмонать список процессов далеко не лучшее решение. вообще для этих целей существует WaitForSingleObject

данные о запущенных процессах я бы заносил в массив
по уму процедуру ожидания надо делать в отдельном потоке. в инно с этим проблемы, поэтому я бы запустил таймер (не очень хорошо, но на безрыбье ...), а в нем прошелся бы циклом по массиву
Код:

if WaitForSingleObject(PI.hProcess,200)<>WAIT_TIMEOUT then begin
  _CloseHandle(PI.hProcess);
  _CloseHandle(PI.hThread);
  ну и удаляем элемент массива, чтобы не отсвечивал
end;

и была бы отдельная процедура прибития процессов при выходе из инсталла: прибили таймер и опять же пробежались по массиву и всем процессам TerminateProcess. это можно сделать в том же OnCloseQuery

тогда и _Application_ProcessMessages не нужен

ну как-то так

ЗЫ в цикле от "if _QUIT then Break; " не будет толку. если процесс первый в списке, то ты из цикла "while _ProcIsRunning(ProcessName, ProcessID) do;" не выйдешь. в этом же случае не сработает _Application_ProcessMessages

Cranz86 21-01-2010 15:46 1326105

Вложений: 1
Всем доброго времени суток!
Есть вопрос один. У меня в инсталере есть окно, на котором 3 чекбокса, как сделать что бы первый из них стал главным, т.е. если он убирается второй и третий чекбокс становятся некликабельными или же вариант когда все кликабельные, но как только выбрать 2 или 3 чекбокс, первый ставиться автоматически (это вариант используется в [Components]).
Прикрепил пример того что хочется сделать у себя. На скрине видно, что на 2 и 3 чекбоксе галочки стоят, но была убрана первая, которая отменяет установку не только себя, но 2 и 3 чекбокса.

Заранее благодарен за любую помощь!

Tukash 21-01-2010 16:08 1326127

Cranz86
а если сделать первый(главный) с неубераемой галочкой? а 2 и 3 выбрать как угодно???
если пойдет то просто поставь там флаг
Код:

Flags: fixed
вот тебе пример как выглядит:
на обведенное красным, внимание не обращай)))

R.i.m.s.k.y. 21-01-2010 16:20 1326136

В шапке темы есть коллекция скриптов, в нем файлик SelComp-EnableGroup.iss, думаю он поможет.

Cranz86 21-01-2010 16:21 1326139

Цитата:

Цитата Tukash
вот тебе пример как выглядит: »

Нет, это совсем другое. Я там мини-скрин прикрепил...
Цитата:

Цитата Cranz86
Check.jpg »


R.i.m.s.k.y. 21-01-2010 16:27 1326149

Я вообще скачал себе эту коллекцию, chm-файл "Сборник вопросов" и сначала ищу там. Поверьте - там ответы на половину вопросов.

Cranz86 21-01-2010 16:46 1326172

R.i.m.s.k.y. - я то там просмотрел и эту исску видел, но это не то или не пойму как её привинтить к моему окну. Эти чекбоскы в окне компонентов пишутся. А у меня все чеки в коде пишуться...
Код:

var
*****
  GreathCheck  : TCheckBox;
  SearchCheck  : TCheckBox;
  HomeCheck    : TCheckBox;
******


R.i.m.s.k.y. 21-01-2010 17:21 1326207

Cranz86
тогда да, файлик не в тему, как чекбоксы в коде делать я не знаю и уже вряд ли помогу.

Serega 21-01-2010 18:18 1326251

Цитата:

Цитата South
не очень понятно где это можно применить на практике, если только рассматривать этот вопрос как чисто академический »

При запуске распаковки архивов.
Цитата:

Цитата South
если вызвать ExecAndWait, то вызвавшая процедура/функция не завершится пока не завершится запущенное приложение.
а если после этого должны выполнится еще какие-то действия? »

Совершенно верно.
Видимо вы слабо знакомы с Inno Setup. Попробуйте запустить любую программу через Exec или ShellExec с параметром ожидания ewWaitUntilTerminated или запустить через [Run] и вы не сможите передвинуть окно инсталлятора.
Цитата:

Цитата South
сдается мне, что _ProcIsRunning вообще не в кассу, постоянно шмонать список процессов далеко не лучшее решение. »

:) Понятно, вы знакомы с программированием...
Самый простой вариант, это открыть файл через OpenProcess, если Handle > 0, то процесс работает...
Ну вообще-то, вы наверно заметили, что я сначала сверяю ID процесса, а затем его имя, т.е. чтоб определить, что это именно тот файл.
Не знаю, знаете вы или нет, но ID процесса в системе не уникален. После завершения этого процесса, его ID освобождается и при запуске другого процесса ему может быть присвоен системой точно такой же ID.
Так что проверка просто по ID, я счёл не совсем правильным и точным.
Ну а более простой способ узнать имя процесса через его ID, мне к сожалению не известен. Если вам известен более простой способ, то поделитесь, так сказать для само развития.

Цитата:

Цитата South
вообще для этих целей существует WaitForSingleObject »

Не согласен, инсталлятор, так же будет мёртвым, т.е. переместить вы его не сможете.

Цитата:

Цитата South
данные о запущенных процессах я бы заносил в массив »

и что дальше? Процесс закрылся, а с таким же ID, работает уже другой...

Цитата:

Цитата South
по уму процедуру ожидания надо делать в отдельном потоке. в инно с этим проблемы, поэтому я бы запустил таймер (не очень хорошо, но на безрыбье ...), »

Совершенно с вами согласен, но стандартный Inno не поддерживает, не только многопоточность, он также не знает, что такое таймер (этот недостаток исправлен в версии от Restools). Если конечно не использовать дополнительных библиотек, а именно эту цель я и приследывал при написании данного скрипта, чтоб можно было использовать его без ничего.

Цитата:

Цитата South
и была бы отдельная процедура прибития процессов при выходе из инсталла: прибили таймер и опять же пробежались по массиву и всем процессам TerminateProcess »

и прибили другой процесс...

Цитата:

Цитата South
тогда и _Application_ProcessMessages не нужен »

да, если была бы возможность всё делать в отдельном потоке.

Цитата:

Цитата South
в цикле от "if _QUIT then Break; " не будет толку. если процесс первый в списке, то ты из цикла "while _ProcIsRunning(ProcessName, ProcessID) do;" не выйдешь. в этом же случае не сработает _Application_ProcessMessages »

Здесь я с вами полностью согласен, недоглядел...

A1EXXX 21-01-2010 18:21 1326255

Inno Setup Compiler 5.3.7 build 100121 (English) by Restools

South 21-01-2010 21:52 1326395

Цитата:

Цитата Serega
Цитата South:
не очень понятно где это можно применить на практике, если только рассматривать этот вопрос как чисто академический »
При запуске распаковки архивов.

да вроде библиотек уже куча есть, хотя в данном случае не важно
Цитата:

Цитата South:
если вызвать ExecAndWait, то вызвавшая процедура/функция не завершится пока не завершится запущенное приложение.
а если после этого должны выполнится еще какие-то действия? »
Совершенно верно.
Видимо вы слабо знакомы с Inno Setup. Попробуйте запустить любую программу через Exec или ShellExec с параметром ожидания ewWaitUntilTerminated или запустить через [Run] и вы не сможите передвинуть окно инсталлятора.
про это я в курсе. кстати, если не лень, можете глянуть в исходники инно и посмотреть каким образом используется ewWaitUntilTerminated.
Цитата:

Цитата South:
сдается мне, что _ProcIsRunning вообще не в кассу, постоянно шмонать список процессов далеко не лучшее решение. »
Понятно, вы знакомы с программированием...
с программированием немного знаком
Цитата:

Самый простой вариант, это открыть файл через OpenProcess, если Handle > 0, то процесс работает...
может и простой, но работает дольше чем WaitForMultipleObjects,WaitForSingleObjects

Цитата:

Ну вообще-то, вы наверно заметили, что я сначала сверяю ID процесса, а затем его имя, т.е. чтоб определить, что это именно тот файл.
Не знаю, знаете вы или нет, но ID процесса в системе не уникален. После завершения этого процесса, его ID освобождается и при запуске другого процесса ему может быть присвоен системой точно такой же ID.
Так что проверка просто по ID, я счёл не совсем правильным и точным.
Ну а более простой способ узнать имя процесса через его ID, мне к сожалению не известен. Если вам известен более простой способ, то поделитесь, так сказать для само развития.
чтобы более наглядно было
Код:

  TProcessInformation = record
    hProcess: THandle;
    hThread: THandle;
    dwProcessId: DWORD;
    dwThreadId: DWORD;
  end;

начнем с того, что я не предлагал использовать dwProcessId. я предложил использовать hProcess, который не будет освобожден, пока не вызван CloseHandle
Цитата:

Цитата South:
вообще для этих целей существует WaitForSingleObject »
Не согласен, инсталлятор, так же будет мёртвым, т.е. переместить вы его не сможете.
в общем случае да, будет мертвым, а если его использовать как я предложил, то должен ожить
Цитата:

Цитата South:
данные о запущенных процессах я бы заносил в массив »
и что дальше? Процесс закрылся, а с таким же ID, работает уже другой...
читаем выше, id не при чем
Цитата:

Цитата South:
по уму процедуру ожидания надо делать в отдельном потоке. в инно с этим проблемы, поэтому я бы запустил таймер (не очень хорошо, но на безрыбье ...), »
Совершенно с вами согласен, но стандартный Inno не поддерживает, не только многопоточность, он также не знает, что такое таймер (этот недостаток исправлен в версии от Restools). Если конечно не использовать дополнительных библиотек, а именно эту цель я и приследывал при написании данного скрипта, чтоб можно было использовать его без ничего.
да, пока не нажата кнопка 'install', приложение является однопоточным, только вот распаковку он может делать в несколько потоков. если по теме, то да, создавать потоки без привлечения самописных длл не получится. а про таймер, ваша религия позволила вам использовать системные библиотеки, так почему же не использовать SetTimer и KillTimer :shocked:

Цитата:

Цитата South:
и была бы отдельная процедура прибития процессов при выходе из инсталла: прибили таймер и опять же пробежались по массиву и всем процессам TerminateProcess »
и прибили другой процесс...
Цитата South:
тогда и _Application_ProcessMessages не нужен »
да, если была бы возможность всё делать в отдельном потоке. »
не прибил бы, это все непонятки с PID'ом

Serega 21-01-2010 22:32 1326429

Цитата:

Цитата South
может и простой, но работает дольше чем WaitForMultipleObjects,WaitForSingleObjects »

здесь ничего возразить не могу, просто не знаю, кто быстрее.

Цитата:

Цитата South
я предложил использовать hProcess, который не будет освобожден, пока не вызван CloseHandle »

Согласен, но сразу забыл сказать, что PI.hProcess, не знаю почему, но именно в Inno показывает не верное значение, может где-то, что я не так сделал…
Это можно увидеть, если добавить сообщение в функцию _StartProc, пример:
Код:

  ProcessName:= ExtractFileName(Filename);
  ProcessId:= PI.dwProcessId;
  MsgBox('Запущена программа: ' + ProcessName + #13#10 +
        'PI.hProcess: ' + IntToStr(PI.hProcess) + #13#10 +
        '_OpenProcess: ' + IntToStr(_OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId)),
        mbInformation, MB_OK);
  _CloseHandle(PI.hProcess);
  _CloseHandle(PI.hThread);

Цитата:

Цитата South
в общем случае да, будет мертвым, а если его использовать как я предложил, то должен ожить »

теоретически да, но я не пробовал, врать не буду.

Цитата:

Цитата South
а про таймер, ваша религия позволила вам использовать системные библиотеки, так почему же не использовать SetTimer и KillTimer »

Причём тут религия? Попробуйте, в стандартной версии SetTimer и у вас вылетит ошибка. Цель написания скрипта была, чтоб с ним можно было работать в разных версиях Inno и не тащить с собой в инсталляторе дополнительные библиотеки.
А так понятно, можно было написать отдельную dll'ку и всего это скрипта не надо, но этих dll'ок и так уже куча...

P.S.
Код:

const
  PROCESS_ALL_ACCESS = $000F0000 or $00100000 or $FFF;


South 21-01-2010 23:32 1326471

Цитата:

Цитата Serega
Цитата South:
я предложил использовать hProcess, который не будет освобожден, пока не вызван CloseHandle »
Согласен, но сразу забыл сказать, что PI.hProcess, не знаю почему, но именно в Inno показывает не верное значение, может где-то, что я не так сделал…
Это можно увидеть, если добавить сообщение в функцию _StartProc, пример:
Код:
ProcessName:= ExtractFileName(Filename);
ProcessId:= PI.dwProcessId;
MsgBox('Запущена программа: ' + ProcessName + #13#10 +
'PI.hProcess: ' + IntToStr(PI.hProcess) + #13#10 +
'_OpenProcess: ' + IntToStr(_OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId)),
mbInformation, MB_OK);
_CloseHandle(PI.hProcess);
_CloseHandle(PI.hThread);

у меня в инно с PI.hProcess проблем не было
по поводу приведенного куска
hProcess:THandle, THandle=Longword
Код:

Longint                -2147483648..2147483647        signed 32-bit
Longword        0..4294967295                        unsigned 32-bit

в инно - function IntToStr(i: Longint): String;
выводы по поводу IntToStr(PI.hProcess) должны быть очевидны

Цитата:

Цитата South:
в общем случае да, будет мертвым, а если его использовать как я предложил, то должен ожить »
теоретически да, но я не пробовал, врать не буду.
я вообще-то тоже не пробовал и полной уверенности, что это сработает нет, надо пробовать

Цитата:

Цитата South:
а про таймер, ваша религия позволила вам использовать системные библиотеки, так почему же не использовать SetTimer и KillTimer »
Причём тут религия? Попробуйте, в стандартной версии SetTimer и у вас вылетит ошибка. Цель написания скрипта была, чтоб с ним можно было работать в разных версиях Inno и не тащить с собой в инсталляторе дополнительные библиотеки.
А так понятно, можно было написать отдельную dll'ку и всего это скрипта не надо, но этих dll'ок и так уже куча...
я в своих скриптах никогда не использовал версии от ResTools (если это имелось ввиду), только только стандартный инно, даже препроцессор никогда не использовал. и SetTimer у меня всегда работал. только вот ему нужна innocallback.dll, тут я не подумал, каюсь

ЗЫ все-таки для данной задачи в такой постановке достаточно WaitForSingleObjects. если интересно можно посмотреть на руборде в шапке скрипт ExecAppAndMoveWindow.iss. давненько делал, тоже была задача без привлечения внешних длл запустить приложение и переместить его окно и тоже для распаковки внешних архивов :). там и hProcess, и WaitForSingleObjects используется, а общий подход примерно такой же :)

ЗЗЫ тут глянул, в TStartupInfo 3 поля являются указателями, ты же их обзываешь Longint'ом, который может принимать отрицательные значения, при этом не инициализируешь все поля, хотя это нужно делать.
попробуй эти три поля объявить как Longword, обнули все поля которые не заполняешь конкретными значениями (обычно вызывают FillChar(TStartupInfo , SizeOf(TStartupInfo ), 0)). после этого вызывай CreateProcess, тогда возможно Longword нормально приведется к Pointer и в ответ нормально заполнится TProcessInformation

Serega 22-01-2010 00:12 1326512

Цитата:

Цитата South
выводы по поводу IntToStr(PI.hProcess) должны быть очевидны »

Согласен.
Цитата:

Цитата South
скрипт ExecAppAndMoveWindow.iss. давненько делал »

Нашёл у себя на диске этот скрипт, интересно и если вы говорите, что его писали давно...

Приятно познакомиться с экспертом... :)

Эх, давненько я не просматривал архив со скриптами, не пришлось бы над многим ломать голову.
Кстати запускается там файл у вас через ShellExec, а не через CreateProcess и я попробовал такой вариант:
Код:

    while WaitForSingleObject(PI.hProcess, 50) = WAIT_TIMEOUT do
      _Application_ProcessMessages;

Действительно работает ;) Спасибо.

South 22-01-2010 00:50 1326541

Цитата:

Цитата Serega
скрипт ExecAppAndMoveWindow.iss. давненько делал »
Нашёл у себя на диске этот скрипт, интересно и если вы говорите, что его писали давно...
Приятно познакомиться с экспертом...

взаимно, хотя я себя экспертом не считаю
Цитата:

Эх, давненько я не просматривал архив со скриптами, не пришлось бы над многим ломать голову.
Кстати запускается там файл у вас через ShellExec, а не через CreateProcess и я попробовал такой вариант:
Код:
while WaitForSingleObject(PI.hProcess, 50) = WAIT_TIMEOUT do
_Application_ProcessMessages;
Действительно работает Спасибо. »
я тоже нашел у себя этот скрипт, теперь сижу и думаю: почему я тогда не использовал CreateProcess, а стал городить огород с поиском хэндла и идентификатора процесса :o

вот так вот, из 2 скриптов можно уже собрать что-то человеческое

PS а вот тут я выкладывал этот скрипт. правда поиск местонахождения скрипта так и не прояснил не использование CreateProcess :( видимо я тогда изрядно ступил

Serega 22-01-2010 01:11 1326555

Цитата:

Цитата South
теперь сижу и думаю: почему я тогда не использовал CreateProcess, а стал городить огород с поиском хэндла »

У меня тоже не с первого раза вышло. Сначала искал и загонял в массив, как вы и предлагали, только я туда заносил ещё и дочерние процессы запущенной программы, чтоб потом всех их за одно, если чего... :)
Потом смотрю, чего-то много строк в скрипте получается... решил лишнее не делать, а в итоге оказывается можно ещё проще где-то ещё на 50-70 строк :)

Цитата:

Цитата South
вот так вот, из 2 скриптов можно уже собрать что-то человеческое »

:) согласен

Цитата:

Цитата South
PS а вот тут я выкладывал этот скрипт. правда поиск местонахождения скрипта так и не прояснил »

Хм, я тогда бы и не разобрался... это только сейчас начинаю немного понимать чего куда...

R.i.m.s.k.y. 22-01-2010 08:28 1326672

Serega, South
Разрешите я влезу в вашу высокоодухотворенную дискуссию?
Как сделать так, чтобы определенные компоненты ставились только на Вин7? GetWindowsVersionEx рапортует о Вин7 как 6.1.7600.
Код вот такой.
Код:

Components: tools; Source: RimPack\Program Files\RimPack\CodecTweakTool.exe; DestDir: {app}\Misc\; BeforeInstall: ChangeCaption('CodecTweakTool'); Flags: ignoreversion uninsrestartdelete setntfscompression
Components: tools; Source: RimPack\Program Files\RimPack\DSFM.exe; DestDir: {app}\Misc\; BeforeInstall: ChangeCaption('Direct Show Filter Manager'); Flags: ignoreversion uninsrestartdelete setntfscompression
Components: tools; Source: RimPack\Program Files\RimPack\Win7DSFilterTweaker_2.7.exe; DestDir: {app}\Misc\; MinVersion: 6.1.7500,6.1.7500

И не робит. Где грабли? Не очень хочется такую простоту в коде делать...

Cranz86 22-01-2010 11:12 1326789

Цитата:

Цитата A1EXXX
Inno Setup Compiler 5.3.7 build 100121 (English) by Restools »

WizardForm на висте я так понимаю не идёт?

South 22-01-2010 11:35 1326809

R.i.m.s.k.y.,
смотрим справку

Код:

Windows Versions
Windows versions:

4.0.950 Windows 95
4.0.1111 Windows 95 OSR 2 & OSR 2.1
4.0.1212 Windows 95 OSR 2.5
4.1.1998 Windows 98
4.1.2222 Windows 98 Second Edition
4.9.3000 Windows Me

Windows NT versions:

4.0.1381 Windows NT 4.0
5.0.2195 Windows 2000
5.01.2600 Windows XP
or Windows XP 64-Bit Edition Version 2002 (Itanium)
5.02.3790 Windows Server 2003
or Windows XP x64 Edition (AMD64/EM64T)
or Windows XP 64-Bit Edition Version 2003 (Itanium)
6.0.6000 Windows Vista
6.0.6001 Windows Vista with Service Pack 1
or Windows Server 2008
6.01.7600 Windows 7
or Windows Server 2008 R2

Note that there is normally no need to specify the build numbers (i.e. you may simply use "4.1" for Windows 98).

Serega я все-таки останусь при своем мнении: для внешних архивов лучше пользоваться специализированными библиотеками
хотя поднятый вопрос был достаточно интересный, чтобы покопаться в этом.
запоминать еще и дочерние процессы это уже совсем сложновато получится, тогда убийство процессов должно быть рекурсивным, начиная с "самых дочерних"

R.i.m.s.k.y. 22-01-2010 12:01 1326824

Цитата:

Цитата South
смотрим справку »

Смотрел я справку, с нее и начал. Писал MinVersion по-всякому: 0,6.1.7600, и 6.1.7600,0, и 6.1.7500, и просто 6.1 - никак. Как правильно-то?
Напишите, пожалуйста, как правильно.

Serega 22-01-2010 13:53 1326898

Цитата:

Цитата Cranz86
WizardForm на висте я так понимаю не идёт? »

Что вы подразумеваете под WizardForm и при этом приводя цитату A1EXXX?
Должно всё работать, т.е. сам компилятор и созданный инсталлятор.

Цитата:

Цитата South
хотя поднятый вопрос был достаточно интересный, чтобы покопаться в этом. »

Согласен, хотя изначально задумывал альтернативу ISTask.dll, но тут как говорят: "Остапа понесло..."
Цитата:

Цитата South
тогда убийство процессов должно быть рекурсивным, начиная с "самых дочерних" »

Я прибивал сначала родителя, потом все его дочерние становились родителями и так далее...

Цитата:

Цитата R.i.m.s.k.y.
Писал MinVersion по-всякому »

Вы немного не внимательно читали...
Цитата:

Цитата South
6.01.7600 Windows 7 »

Цитата:

Цитата R.i.m.s.k.y.
Напишите, пожалуйста, как правильно. »

MinVersion: 0,6.01.7600 или можно просто MinVersion: 0,6.01

Tukash 22-01-2010 14:19 1326932

подскажите пожалуйста как пользовать прекомпрессором? пол дня ищу но ничего не понял, куда писать, какие примеры для чего лучше подходят, заранее спасибо!

Cranz86 22-01-2010 15:53 1327022

Вложений: 1
Цитата:

Цитата Serega
Что вы подразумеваете под WizardForm »

Вместо графического редактора, у меня белая форма с какими то кусками непонятно чего.

A1EXXX 22-01-2010 16:01 1327029

Cranz86, установи последнюю версию - Inno Setup 5.3.7 (U), а уж потом закидывай Restools'овский компилятор... Для полного счастья можно и это закинуть. В итоге - вот :)

Cranz86 22-01-2010 17:11 1327090

Вложений: 1
Цитата:

Цитата A1EXXX
В итоге - вот »

Неа, не помогло, видать это из-за моей висты...

Serega 22-01-2010 17:59 1327142

Цитата:

Цитата Cranz86
Неа, не помогло »

Примените твик реестра CourierNew.reg, из папки UnicodeFontLink и перезагрузитесь, должно помочь.

Serega 22-01-2010 18:13 1327155

Цитата:

Цитата Tukash
помоги мне с precomp »

Я бы с удовольствием, но никогда им не пользовался и ничего по этому поводу сказать не могу.

Tukash 22-01-2010 18:19 1327159

Serega
ок, сори за вопрос, думал что ты то уж точно всем пользовался)))
все нанадо, разобрался вроде сам, отбой))

Jerichoman 23-01-2010 16:46 1327813

Tukash,
А не мог бы написать как пользоваться, если разобрался, просто тоже мучает этот вопрос

Tukash 23-01-2010 16:58 1327825

Jerichoman
вот:
читать дальше »
Пример Precomp + Run Inno setup
На примере игры Call of Duty Modern Warfare 2
В игре есть папка zone\english или russian у кого как вот её мы будем запаковывать

1 Создадим текстовый документ и впишем
precomp -slow af_caves.ff
precomp -slow af_chase.ff
precomp -slow airport.ff
precomp -slow arcadia.ff
precomp -slow boneyard.ff и так далие сохраним документ как precomp.bat и ложим в папку zone\english туда ложим два файла precomp.exe и packjpg_dll.dll вот сылка на эти файлы http://schnaader.info/precomp.html это надо скачать Precomp (and Precomp Comfort) v0.4

потом запустим precomp.bat когда процес закончится будут файлы не .ff af_caves.pcf он будет весит больше значит он разжал этот файл потом сжимаем FreeArc -mx -ld1600m + поставить галочку Сделать .exe
но не у всех 2 или 4 гига памяти
Лутше сжимать по 5 или 10 файлов

Inno setup
Files
Source: precomp.exe; DestDir: {app}
Source: packjpg_dll.dll; DestDir: {app}

Run вписываем
Идет распавовка FreeArc в каталог установки

Filename: {app}\GameDataSP1.exe; WorkingDir: {app}; Parameters: -x -y -s2 -d.; StatusMsg: Идет распаковка файлов ...; Flags: runminimized runasoriginaluser

Потом удаление GameDataSP1.exe
Filename: cmd.exe; WorkingDir: {app}; Parameters: /C del /F /Q GameDataSP1.exe; Flags: runhidden runasoriginaluser
Потом идет востоновления игровых архивов
Filename: {app}\precomp.exe; WorkingDir: {app}; Parameters: "-o""af_caves.ff"" -r ""af_caves.pcf"""; StatusMsg: Идет востоновления игровых архивов...; Flags: runminimized runasoriginaluser
Удаления .pcf файлов

Filename: cmd.exe; WorkingDir: {app}; Parameters: /C del /F /Q af_caves.pcf; Flags: runhidden runasoriginaluser
Удаление файлов packjpg_dll.dll precomp.exe;

Filename: cmd.exe; WorkingDir: {app}; Parameters: /C del /F /Q af_chase.pcf packjpg_dll.dll zlib1.dll precomp.exe; Flags: runhidden runasoriginaluser

lexikon 23-01-2010 18:18 1327893

подскажите почему может не подхватывать стиль?
[Files]
Source: ISSkin.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: steam.cjstyles; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression

Windows 7 x64
версия Inno 5.3.7 (u)

DemonAk 23-01-2010 19:04 1327934

Не хватает в Converter 0.1.3 пакетной обработки, а то по одному файлегу выбирать муторно) и возможно ли что бы после обработки нескольких reg файлов результат записывался в один iss?

Jerichoman 23-01-2010 19:11 1327938

Tukash,
Спасибо

Tukash 23-01-2010 19:23 1327948

Jerichoman
да ладно:)

Sotonisto 23-01-2010 19:58 1327978

Народ, как сделать что бы не создавался файл удаления игры (uninstall.exe)?

CrOsP 23-01-2010 20:01 1327981

Uninstallable=false вот таку строчку допишите в [Setup].

Sotonisto 23-01-2010 20:19 1327993

CrOsP, спасиб - помогло :)

Цитата:

Цитата lexikon
подскажите почему может не подхватывать стиль?
[Files]
Source: ISSkin.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: steam.cjstyles; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Windows 7 x64
версия Inno 5.3.7 (u) »

Это просто даже для такого как я :)

читать дальше »
[Files]
Source: "D:\Programs\ISSkin\ISSkin.dll"; DestDir: {app}; Flags: dontcopy
Source: "D:\My Skin\steam.cjstyles"; DestDir: {tmp}; Flags: dontcopy

[code]
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';
procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('steam.cjstyles');
LoadSkin(ExpandConstant('{tmp}\steam.cjstyles'), '');
Result := True;
end;

procedure DeinitializeSetup();
begin
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
UnloadSkin();
end;

Serega 23-01-2010 20:28 1327998

Цитата:

Цитата lexikon
подскажите почему может »

Ошибка в 15 строке, неверный параметр... скрипт покажите или те строки, как вы экспортируете и загружаете скин.

Цитата:

Цитата DemonAk
Не хватает в Converter 0.1.3 пакетной обработки »

Я думаю это не критично и считаю не проблемой объединить два рег-файла в один в ручную, это не утилита для объединения рег-файлов, а конвертирование reg в iss.

Jerichoman 23-01-2010 20:58 1328030

Скажите, пожалуйста, если precomp для лучшего сжатия файлов, то почему
Цитата:

будут файлы не .ff af_caves.pcf он будет весит больше значит он разжал этот файл
или потом во FreeArc эти файлы лучше сожмутся?

REXE 23-01-2010 21:04 1328039

Пожалуйста подскажите в этом коде,мне надо чтобы текст в документе который сделается в некоторых местах переходил на новую строку

читать дальше »

[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
OutputDir=userdocs:My Program.

[UninstallDelete]
Type: files; Name: "{app}\autoexec.cfg";

[code]
var
Page: TInputQueryWizardPage;

procedure InitializeWizard();
begin
Page := CreateInputQueryPage(wpWelcome, 'Текст_1', 'Текст_2', 'Введите ник для сетевой игры');
Page.Add('', False);
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
SaveStringToFile(ExpandConstant('{app}\autoexec.cfg'), 'name ' + '"' + Page.Values[0] + '"' + #13#10, False);
end;

Habetdin 23-01-2010 21:05 1328041

REXE, перенос строки - это
Цитата:

Цитата REXE
#13#10 »


Sotonisto 23-01-2010 21:49 1328072

Люди, кто может дать скрипт вот такого инсталла


Tukash 23-01-2010 22:54 1328118

Вложений: 1
Цитата:

Цитата Jerichoman
Скажите, пожалуйста, если precomp для лучшего сжатия файлов, то почему
Цитата:
будут файлы не .ff af_caves.pcf он будет весит больше значит он разжал этот файл
или потом во FreeArc эти файлы лучше сожмутся? »

да, сначала он как-бы "распаковывает" файл, а потом фриарком запаковываешь и получаеться меньший размер!

Sotonisto
прилепил что просил!
-------------------------------------------------------------------------------------
буду благодарен, если кто-то вытащит из этого скрипта, растягивание картинки на весь экран и на всех страницах, а так-же размер окна инсталлятора, а то скрипт слишком огромный, я пробовал но запутывался.
-------------------------------------------------------------------------------------

CrOsP 23-01-2010 23:11 1328131

Sotonisto,
Цитата:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[code]
var
lbl1, lbl2, lbl3, lbl4, lbl5: TLabel;

procedure initializeWizard();
begin
WizardForm.PageDescriptionLabel.Hide;
// создаём Label'ы, на который вешаем ссылку
lbl1:= TLabel.Create(WizardForm);
with lbl1 do
begin
AutoSize:= False;
SetBounds(20, 40, 50, 13);
Caption:= '|';
Transparent:= True;
Parent:= WizardForm.MainPanel;
end;
lbl2:= TLabel.Create(WizardForm);
with lbl2 do
begin
AutoSize:= False;
SetBounds(50, 40, 50, 13);
Caption:= 'lbl2';
Transparent:= True;
Parent:= WizardForm.MainPanel;
end;
lbl3:= TLabel.Create(WizardForm);
with lbl3 do
begin
AutoSize:= False;
SetBounds(100, 40, 50, 13);
Caption:= '|';
Transparent:= True;
Parent:= WizardForm.MainPanel;
end;
lbl4:= TLabel.Create(WizardForm);
with lbl4 do
begin
AutoSize:= False;
SetBounds(130, 40, 50, 13);
Caption:= 'lbl4';
Transparent:= True;
Parent:= WizardForm.MainPanel;
end;
lbl5:= TLabel.Create(WizardForm);
with lbl5 do
begin
AutoSize:= False;
SetBounds(180, 40, 50, 13);
Caption:= '|';
Transparent:= True;
Parent:= WizardForm.MainPanel;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpSelectDir then
begin
lbl1.Font.Color:= clBlack;
lbl1.Font.Style:= [fsBold];
lbl2.Font.Color:= clBlack;
lbl2.Font.Style:= [fsBold];
lbl3.Font.Color:= clBlack;
lbl3.Font.Style:= [fsBold];
lbl4.Font.Color:= clGray;
lbl4.Font.Style:= [];
lbl5.Font.Color:= clGray;
lbl5.Font.Style:= [];
end;
if CurPageID = wpReady then
begin
lbl1.Font.Color:= clGray;
lbl1.Font.Style:= [];
lbl2.Font.Color:= clGray;
lbl2.Font.Style:= [];
lbl3.Font.Color:= clBlack;
lbl3.Font.Style:= [fsBold];
lbl4.Font.Color:= clBlack;
lbl4.Font.Style:= [fsBold];
lbl5.Font.Color:= clBlack;
lbl5.Font.Style:= [fsBold];
end;
end;

Sotonisto 24-01-2010 08:30 1328266

Цитата:

Цитата Tukash
Sotonisto
прилепил что просил!»

Народ, не бы хотелось как нить к кнопкам выбора языка (от инсталла NFS) прикрепить распаковку озвучки :)
Ну кароч если выбрали Русскую озвучку для видео - в папку скопировался и распаковывался 7z SFX архив, а если выбирали английскую - просто шла установка без распаковки.
Но там с этими кнопками я мозк сломаю :) Сейчас они у меня "для прикола" - ничего не происходит если выбрать одну из них, а хотелось бы что бы работало :(

Jerichoman 24-01-2010 10:28 1328296

Tukash,
И еще вопрос :) Это можно только каждый файл так или можно как-то всю папку целиком? И какие файлы лучше всего precomp'ить?

Tukash 24-01-2010 10:47 1328301

Sotonisto
читать дальше »
[Types]
Name: custom; Description: Выборочная установка; Flags: iscustom

[Components]
Name: lng; Description: Выбор Озвучки; Flags: fixed; Types: custom
Name: lng/ru; Description: Русская; Flags: exclusive
Name: lng/en; Description: English; Flags: exclusive

[Files]
Source: C:\ENG\*; DestDir: {app}\audio\speech; Components: lng/en; Flags: recursesubdirs ignoreversion sortfilesbyextension createallsubdirs
Source: C:\Rus\*; DestDir: {app}\audio\speech; Components: lng/ru; Flags: recursesubdirs ignoreversion sortfilesbyextension createallsubdirs


Jerichoman
как всю папку прекомпом жать я пока не знаю, а сжимать лучше игровые архивы, видео и звук бесполезно...

Sotonisto 24-01-2010 11:21 1328318

Цитата:

Цитата Tukash
Sotonisto
читать дальше » »

Это для стандартного инсталла подходит, но тут нельзя создать еще одну страницу :(

Tukash 24-01-2010 11:24 1328324

Цитата Tukash:Sotonisto
читать дальше » »

Это для стандартного инсталла подходит, но тут нельзя создать еще одну страницу

хмм, но ведь можно этот скрипт прелепить к твоим текстурам, и получиться то что ты хочешь, только как, я не знаю)))

Sotonisto 24-01-2010 11:32 1328329

Цитата:

Цитата Tukash
хмм, но ведь можно этот скрипт прелепить к твоим текстурам, и получиться то что ты хочешь, только как, я не знаю))) »

во во :) и я о том же :)
P.S.: у меня и так был такой скрипт :)

svensoft 24-01-2010 13:59 1328443

Вложений: 1
люди шарящие, ну помогите разобраться !!! Сценарий следующий : при открытии инсталлятора делается эмуляция отключения страниц приветствия "Welcome", выбора пути установки , вообщем сразу перепрыгиваем на страницу "Ready". Очень хочется включить на этой странице эффект ввода текста "печатной машинки". Есть алгоритм того-же действия, но на странице "Welcome". Всвязи с этим вопрос, какие парамметры надо вставить в код вместо : WelcomeLabel1, WelcomeLabel2, WelcomePage, так как действие происходит на странице "Ready" - надписи "Все готово к установке", "Программа установки готова начать установку ХХХ на ваш компьютер", "нажмите установить чтобы продолжить", пробовал заменить ReadyLabel1,ReadyLabel2, ReadyPage - ругается ?...

Вот код :

svensoft 24-01-2010 14:09 1328454

Цитата:

Цитата svensoft
люди шарящие, ну помогите разобраться !!! Сценарий следующий : при открытии инсталлятора делается эмуляция отключения страниц приветствия "Welcome", выбора пути установки , вообщем сразу перепрыгиваем на страницу "Ready". Очень хочется включить на этой странице эффект ввода текста "печатной машинки". Есть алгоритм того-же действия, но на странице "Welcome". Всвязи с этим вопрос, какие парамметры надо вставить в код вместо : WelcomeLabel1, WelcomeLabel2, WelcomePage, так как действие происходит на странице "Ready" - надписи "Все готово к установке", "Программа установки готова начать установку ХХХ на ваш компьютер", "нажмите установить чтобы продолжить", пробовал заменить ReadyLabel1,ReadyLabel2, ReadyPage - ругается ?... »


Извиняюсь, все уже сделал, уже не надо..

Но вот теперь другой вопрос появился на повестке дня, можно ли сделать так чтобы в инсталляторе с помощью bass.dll не только играла фоновая музыка (которая стартует при открытии и обрывается при завершения установки), а еще и при нажатие на педали проигрывались тоже мп3, не обрывая фоновую музыку ?.. Была такая мысль две bass.dl кидать в инсталлятор и потом для каждой прописать отдельный код (так как одна будет занята фоновой музыкой), но может как-то с помощью одной можно сделать ?..

YURSHAT 24-01-2010 14:50 1328501

Цитата:

Цитата svensoft
при нажатие на педали проигрывались тоже мп3, »

При нажатии на педали вовсе не нужно использовать Bass , можно проигрывать музыку через винду.

Код:

function mciSendString(lpstrCommand, lpstrReturnString: PAnsiChar; uReturnLength: Cardinal; hWndCallback: HWND): Cardinal; external 'mciSendStringA@winmm.dll stdcall';

procedure нажатие на педаль;
begin
  mciSendString('stop '+ExpandConstant('{tmp}\click.wav'), 'NULL', 0, 0);
  mciSendString('play '+ExpandConstant('{tmp}\click.wav'), 'NULL', 0, 0);
end;


svensoft 24-01-2010 15:08 1328519

Цитата:

Цитата YURSHAT
При нажатии на педали вовсе не нужно использовать Bass , можно проигрывать музыку через винду. »

YURSHAT
О, и здесь ты рулишь !!! Спасибо еще раз, прямо сегодня праздник ты мне подарил в разбирание скриптов !!!..А вот если такой вариант : Играет уже фоновая музыка и при открытие страницы Ready надо включить озвучку "мой ля ля " (mp3), и как только пользователь жмет "Установить" мой ля ля обрывается, но фоновая музыка остается играть. Можно ли так сделать вообще ?..

================================
Где бы почитать синтаксис inno setup ?..

YURSHAT 24-01-2010 16:27 1328584

Цитата:

Цитата svensoft
Можно ли так сделать вообще ?.. »

Легко.
Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
OutputDir=userdocs:My Program.

[Files]
Source: "button.bmp"; Flags: dontcopy;
Source: "click.wav"; Flags: dontcopy;         
Source: "sound.mp3"; Flags: dontcopy;

[Code_]
const
  ButtonWidth = 80;
  ButtonHeight = 23;
  bidBack = 0;
  bidNext = 1;
  bidCancel = 2;
  bidDirBrowse = 3;
  bidGroupBrowse = 4;

#ifdef UNICODE
    #define A "W"
#else
    #define A "A"
#endif

function mciSendString(lpstrCommand, lpstrReturnString: PAnsiChar; uReturnLength: Cardinal; hWndCallback: HWND): Cardinal;
  external 'mciSendStringA@winmm.dll stdcall';

var
  ButtonPanel: array [0..4] of TPanel;
  ButtonImage: array [0..4] of TBitmapImage;
  ButtonLabel: array [0..4] of TLabel;

procedure ButtonLabelClick(Sender: TObject);
var
  Button: TButton;
begin
  ButtonImage[TLabel(Sender).Tag].Left := 0;
  mciSendString('stop '+ExpandConstant('{tmp}\click.wav'), 'NULL', 0, 0);
  mciSendString('play '+ExpandConstant('{tmp}\click.wav'), 'NULL', 0, 0);
  case TLabel(Sender).Tag of
    bidBack: Button := WizardForm.BackButton;
    bidNext: Button := WizardForm.NextButton;
    bidCancel: Button := WizardForm.CancelButton;
    bidDirBrowse: Button := WizardForm.DirBrowseButton;
    bidGroupBrowse: Button := WizardForm.GroupBrowseButton;
  else
    Exit
  end
  Button.OnClick(Button);
end;

procedure ButtonLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if ButtonLabel[TLabel(Sender).Tag].Enabled then
    ButtonImage[TLabel(Sender).Tag].Left := -ScaleX(ButtonWidth);
end;

procedure ButtonLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  ButtonImage[TLabel(Sender).Tag].Left := 0;
end;

procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
  Image: TBitmapImage;
  Panel: TPanel;
  Labl: TLabel;
begin
  Panel := TPanel.Create(WizardForm);
  Panel.Left := AButton.Left;
  Panel.Top := AButton.Top;
  Panel.Width := AButton.Width;
  Panel.Height := AButton.Height;
  Panel.Tag := AButtonIndex;
  Panel.Parent := AButton.Parent;
  ButtonPanel[AButtonIndex] := Panel;

  Image := TBitmapImage.Create(WizardForm);
  Image.Width := ScaleX(160);
  Image.Height := ScaleY(23);
  Image.Enabled := False;
  Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\button.bmp'));
  Image.Stretch := True;
  Image.Parent := Panel;
  ButtonImage[AButtonIndex] := Image;

  with TLabel.Create(WizardForm) do begin
    Tag := AButtonIndex;
    Parent := Panel;
    Width := Panel.Width;
    Height := Panel.Height;
    Transparent := True;
    OnClick := @ButtonLabelClick;
    OnDblClick := @ButtonLabelClick;
    OnMouseDown := @ButtonLabelMouseDown;
    OnMouseUp := @ButtonLabelMouseUp;
  end;

  Labl := TLabel.Create(WizardForm);
  Labl.Top := ScaleY(ButtonHeight) div 5;
  Labl.Autosize := True;
  Labl.Alignment := taCenter;
  Labl.Tag := AButtonIndex;
  Labl.Transparent := True;
  Labl.Font.Color := clWhite;
  Labl.Caption := AButton.Caption;
  Labl.OnClick := @ButtonLabelClick;
  Labl.OnDblClick := @ButtonLabelClick;
  Labl.OnMouseDown := @ButtonLabelMouseDown;
  Labl.OnMouseUp := @ButtonLabelMouseUp;
  Labl.Parent := Panel;
  ButtonLabel[AButtonIndex] := Labl;
end;

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
  ButtonLabel[AButtonIndex].Caption := AButton.Caption;
  ButtonPanel[AButtonIndex].Visible := AButton.Visible;
  ButtonLabel[AButtonIndex].Enabled := Abutton.Enabled;
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
  ButtonLabel[bidNext].Enabled := True;
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
  ButtonLabel[bidNext].Enabled := False;
end;

procedure InitializeWizard();
begin
  ExtractTemporaryFile('button.bmp');
  ExtractTemporaryFile('click.wav');
  ExtractTemporaryFile('sound.mp3');

  WizardForm.BackButton.Left := WizardForm.BackButton.Left - ScaleX(7);
  WizardForm.BackButton.Width := ScaleX(ButtonWidth);
  WizardForm.BackButton.Height := ScaleY(ButtonHeight);

  WizardForm.NextButton.Width := ScaleX(ButtonWidth);
  WizardForm.NextButton.Height := ScaleY(ButtonHeight);

  WizardForm.CancelButton.Width := ScaleX(ButtonWidth);
  WizardForm.CancelButton.Height := ScaleY(ButtonHeight);

  WizardForm.DirBrowseButton.Left := ScaleX(337);
  WizardForm.DirBrowseButton.Top := WizardForm.DirEdit.Top + WizardForm.DirEdit.Height div 2 - ScaleY(ButtonHeight) div 2;
  WizardForm.DirBrowseButton.Width := ScaleX(ButtonWidth);
  WizardForm.DirBrowseButton.Height := ScaleY(ButtonHeight);

  WizardForm.GroupBrowseButton.Left := ScaleX(337);
  WizardForm.GroupBrowseButton.Top := WizardForm.GroupEdit.Top + WizardForm.GroupEdit.Height div 2 - ScaleY(ButtonHeight) div 2;
  WizardForm.GroupBrowseButton.Width := ScaleX(ButtonWidth);
  WizardForm.GroupBrowseButton.Height := ScaleY(ButtonHeight);

  WizardForm.LicenseAcceptedRadio.OnClick := @LicenceAcceptedRadioOnClick;

  WizardForm.LicenseNotAcceptedRadio.OnClick := @LicenceNotAcceptedRadioOnClick;

  LoadButtonImage(WizardForm.BackButton,bidBack);
  LoadButtonImage(WizardForm.NextButton,bidNext);
  LoadButtonImage(WizardForm.CancelButton,bidCancel);
  LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse);
  LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  UpdateButton(WizardForm.BackButton,bidBack);
  UpdateButton(WizardForm.NextButton,bidNext);
  UpdateButton(WizardForm.CancelButton,bidCancel);

  ButtonLabel[bidBack].Left := ButtonPanel[bidBack].Width div 2 - ButtonLabel[bidBack].Width div 2;
  ButtonLabel[bidNext].Left := ButtonPanel[bidNext].Width div 2 - ButtonLabel[bidNext].Width div 2;
  ButtonLabel[bidCancel].Left := ButtonPanel[bidCancel].Width div 2 - ButtonLabel[bidCancel].Width div 2;
  ButtonLabel[bidDirBrowse].Left := ButtonPanel[bidDirBrowse].Width div 2 - ButtonLabel[bidDirBrowse].Width div 2;
  ButtonLabel[bidGroupBrowse].Left := ButtonPanel[bidGroupBrowse].Width div 2 - ButtonLabel[bidGroupBrowse].Width div 2;

  if CurPageID = wpReady then
begin
  mciSendString('play '+ExpandConstant('{tmp}\sound.mp3'), 'NULL', 0, 0);
end;

if CurPageID = wpInstalling then
begin
  mciSendString('stop '+ExpandConstant('{tmp}\sound.mp3'), 'NULL', 0, 0);
end;
end;


svensoft 24-01-2010 18:42 1328709

Цитата:

Цитата YURSHAT
Легко. »

YURSHAT, Здорово !!! Большое, большое спасибо !!! Прямо слов нет, один восторг....))

user_123 24-01-2010 18:59 1328722

Столкнулся с небольшой проблемой...
Устанавливаемое приложение некорректно работает в каталогах, в пути которых имеются символы, не входящие в набор стандартной латиницы...
Подскажите пожалуйста, как на странице выбора каталога при нажатии кнопки "далее" проверять, входят ли все символы указанного каталога в группу разрешённых (символы стандартной латиницы) . Если входят - продолжить, в противном случае - вывести msgbox и остаться на текущей странице инсталлятора.

Заранее выражаю благодарность и прошу прощение, если данный вопрос уже обсуждался.

Sotonisto 24-01-2010 22:27 1328877

Мне необходимо к кнопкам выбора языка озвучки прикрепить действия. Мне бы хотелось вот так.
Когда пользователь выбирает 1 флаг (Рус.) - после установки в папку с игрой распаковывался архив с рус. файлами;
а если выбирает 2 флаг (Англ.) - игра просто установилась.

Скрипт в этом посте.

P.S: игра RE4 UE занимает 4.7 Gb, но инсталл постоянно показывает 5.3 Gb :(
Что там в коде нужно изменить что бы правильно показывало необходимый размер?

Зарание благодарен.

serg aka lain 25-01-2010 00:46 1328971

Цитата:

Цитата user_123
Устанавливаемое приложение некорректно работает в каталогах, в пути которых имеются символы, не входящие в набор стандартной латиницы... »

Возможно, так
код

Код:

[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program

[code]
function NextButtonClick(CurPageID: Integer): Boolean;
var
  i: Integer;
begin
  Result := True;
  if CurPageID = wpSelectDir then
  begin
    for i := 1 to Length(WizardForm.DirEdit.Text) do
    if WizardForm.DirEdit.Text[i] > #122 then
    begin
      MsgBox('Сообщение', mbError, MB_OK);
      Result := False;
    end;
  end;
end;


mariolast 25-01-2010 03:16 1329055

Подскажите такой вопрос

Нужно записать в реестр бинарное значение такого типа
'04 08 0E 01 58 04 0F 16 00 00 00 00 00 00 D3 B6 95 15 20 00 0A 00 11 11 11 11 42 42'
Если из секции [Registry] заносить, то проблем нет

Но мне надо из кода....
Пробую так
...
Var
Reg1: String;
RegArray:array of string;
begin
Reg1:= '04 08 0E 01 58 04 0F 16 00 00 00 00 00 00 D3 B6 95 15 20 00 0A 00 11 11 11 11 42 42'
RegWriteBinaryValue (HKLM, 'SYSTEM\CurrentControlSet\MultiKey\Dumps\9E4E58E8', 'Data', Reg1);
.....

А оно заносит какую-то хрень в реестр, не то что надо...

Sotonisto 25-01-2010 07:07 1329094

Цитата:

Цитата Sotonisto
Мне необходимо к кнопкам выбора языка озвучки прикрепить действия. Мне бы хотелось вот так.
Когда пользователь выбирает 1 флаг (Рус.) - после установки в папку с игрой распаковывался архив с рус. файлами;
а если выбирает 2 флаг (Англ.) - игра просто установилась. »

Народ, можете не напрягаться (хотя я сомневаюсь что кто-то вообще напрягался :) ) - методом проб и ошибок я сам все реализовал :)
Но вот с вопросом отображения необходимого размера для установки я разобраться не могу :( хелп!

Tukash 25-01-2010 09:50 1329158

Sotonisto
найди такую строчку:
Код:

NeedSize := 5600;
и напиши свой размер:
Код:

NeedSize := 4900;
CTRL+F в помощь))

mash 25-01-2010 10:26 1329183

Здравствуйте! Я не силен в Inno, да и скрипт, чесно говоря, мне помогли написать.
Для кооректного отображения в англ. Windows русских букв я скачал ispack-5.3.7-unicode и теперь у меня не работает скин. Может подскажете в чем проблема? В конце компил. пишет:

Код:

.....Updating version info

Warning: The [Setup] section directive "VersionInfoDescription" is not assuming a default value because AppName includes constants.
Warning: The [Setup] section directive "VersionInfoProductName" is not assuming a default value because AppName includes constants.
Warning: Unsafe flag usage on file "ISSkin3.dll": The "ignoreversion" flag should not be used on files installed to the Windows System directory ("{sys}").
Warning: Unsafe flag usage on file "ISSkin3.cjstyles": The "ignoreversion" flag should not be used on files installed to the Windows System directory ("{sys}").
*** Finished.  [10:04:50, 01:25,641 elapsed]

Как я понимаю 4 ошибки. Что-то не вписано в секцию [Setup] и что то не так с flag - ами в [Files].
Секция [Files] такая:
Код:

[Files]
Source: ISSkin3.dll; DestDir: {sys}; Flags: ignoreversion
Source: ISSkin3.cjstyles; DestDir: {sys}; Flags: ignoreversion
................................................

Заранее благодарен за понимание и помощь !
P.S. Первые 2 исправил, остались две по скину.

Jerichoman 25-01-2010 10:31 1329188

Tukash,
Еще пара вопросов к тебе:
1. Когда файлы разажму precom'ом, оригинал надо удалять, или оставлять (когда уже создаю инсталл)?
2. Можно ли сжать freearc'ом всю папку, в которой находяться эти файлы или лучше сжимать сами файлы?

Tukash 25-01-2010 10:36 1329190

Jerichoman
1. ну ты же их оставил (копия этих файлов в прекомпе), так что если файлы зажмал прекомпом, то можешь смело удалять оригинал(но не забудь прекомп в инсталл вставить, а то игра кострированная будет)))
2. ну если у тебя много оперативы то сжимай сразу всю, а если делаешь для народа, то лучше по 3-5 файлов, так он на любом компе установиться!!!

Jerichoman 25-01-2010 10:40 1329191

Tukash,
А игра нормально будет работать, порсто получается что мы меням расширение у фалов

Tukash 25-01-2010 10:48 1329196

Jerichoman
смотри!вначале прекомп их разжимает, меняет расширеие файла, потом он его распаковывает и получается оригинальный файл, вот проверь)) так что он меняет расширение для того что-бы лучше сожмать, а потом обратно переименовывает!

Jerichoman 25-01-2010 10:54 1329200

Tukash
Все, понял. ОГРОМНОЕ тебе человеческое спс

Tukash 25-01-2010 10:57 1329202

Jerichoman
рад что хоть кому-то могу помочь))
ЗЫ, кто-нибудь подскажет скрипт для изменения окна инсталялтора? а то шрифтами уже запарился менять)))

serega355 25-01-2010 11:47 1329235

Доброго времени суток!!
Обращаюсь ко всем пользователям. Если кто-нибудь знает как решить проблему, подскажите. Вот есть скрипт, с помощью него создаю инсталлятор, ставлю игру, потом удаляя её с помощью деинсталлятора из меню ПУСК, выводится сообщение:
Ошибка
Файл протокола для деинсталляции "D\Игромания\Grand Theft Auto Racing Driver\unins000.dat" не распознан данной версией программы-деинсталлятора. Деинсталляция невозможна.

Скрипт:
; Скрипт создан при помощи мастера создания скриптов.
; СМ. ДОКУМЕНТАЦИЮ ДЛЯ ИЗУЧЕНИЯ ДЕТАЛЕЙ ОТНОСИТЕЛЬНО СОЗДАНИЯ ФАЙЛОВ СКРИПТА INNO SETUP!

[Setup]
AppName=Grand Theft Auto Racing Driver
AppVerName=Grand Theft Auto Racing Driver 1.5
AppPublisher=Rockstar Games
AppPublisherURL=http://rockstargames.ru/
AppSupportURL=http://rockstargames.ru/
AppUpdatesURL=http://rockstargames.ru/
DefaultDirName={pf}\Rockstar Games\Grand Theft Auto Racing Driver
Encryption=yes
DefaultGroupName=Grand Theft Auto Racing Driver
AllowNoIcons=yes
LicenseFile=D:\Игромания\Grand Theft Auto Racing Driver\ReadMe\Readme\License.txt
InfoBeforeFile=D:\Игромания\Grand Theft Auto Racing Driver\ReadMe\Readme\info.txt
InfoAfterFile=D:\Игромания\Grand Theft Auto Racing Driver\ReadMe\Readme\files.txt
OutputDir=D:\Инсталлятор GTA RD
OutputBaseFilename=setup
SetupIconFile=D:\Игромания\Grand Theft Auto Racing Driver\data\Icons\app.ico
Password=1345O-9087H-0967K-3555R
DiskSpanning=yes
SlicesPerDisk=1
DiskSliceSize=999975555
DiskClusterSize=4096
ReserveBytes=0
Compression=lzma/ultra
SolidCompression=yes
Uninstallable=yes
UninstallFilesDir={pf}\Rockstar Games\Grand Theft Auto Racing Driver
UninstallLogMode=append
UninstallRestartComputer=no
UpdateUninstallLogAppName=yes
UninstallStyle=classic
WizardImageFile=D:\Игромания\Grand Theft Auto Racing Driver\data\Icons\GTA RD.bmp
WizardImageStretch=yes
[Languages]
Name: "russian"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "D:\Игромания\Grand Theft Auto Racing Driver\gta_sa.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Игромания\Grand Theft Auto Racing Driver\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; ОТМЕТЬТЕ: Не используйте "Флажки: Проигнорировать версию" на любых общедоступных системных файлах

[Icons]
Name: "{group}\Grand Theft Auto Racing Driver"; Filename: "{app}\gta_sa.exe"; WorkingDir: {app};
Name: "{group}\{cm:ProgramOnTheWeb,Grand Theft Auto Racing Driver}"; Filename: "http://rockstargames.ru/"
Name: "{group}\{cm:UninstallProgram,Grand Theft Auto Racing Driver}"; Filename: "{app}\unins000.exe"
Name: "{commondesktop}\Grand Theft Auto Racing Driver"; Filename: "{app}\gta_sa.exe"; WorkingDir: {app}; Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\Grand Theft Auto Racing Driver"; Filename: "{app}\gta_sa.exe"; WorkingDir: {app}; Tasks: quicklaunchicon

[Run]
Filename: "{app}\gta_sa.exe"; WorkingDir: {app}; Description: "{cm:LaunchProgram,Grand Theft Auto Racing Driver}"; Flags: nowait postinstall skipifsilent

[UninstallRun]
Filename: "{app}\unins000.exe"; WorkingDir: {app}; RunOnceId: "DeleteProgram"

Если знаете подскажите, как сделать чтобы одна картинка использовалась в окне приветствия, а в окне окончания установки другая.
Заранее Благодарен.

Tukash 25-01-2010 11:50 1329237

serega355
перед созданием репака, удали из папки с игрой старый unins000.exe и unins000.dat!
и
Код:

[UninstallRun]
Filename: "{app}\unins000.exe"; WorkingDir: {app}; RunOnceId: "DeleteProgram"

ненужен!

Serega 25-01-2010 11:53 1329241

Цитата:

Цитата mash
я скачал ispack-5.3.7-unicode и теперь у меня не работает скин »

У вас ISSkin v.3.0.0.0 от [19.01.2010]? Если нет, то скачать можете из шапки темы Скрипты Inno Setup. Помощь и советы или с сайта, это решит вашу проблему.

Serega 25-01-2010 12:40 1329285

Цитата:

Цитата mariolast
А оно заносит какую-то хрень в реестр, не то что надо... »

Всё правильно она заносит. Просто строка конвертируется в HEX данные.
Попробуйте запишите Reg1:= 'mariolast' и вы увидите в реестре "Data"=hex:6d,61,72,69,6f,6c,61,73,74.

Цитата:

Цитата Tukash
кто-нибудь подскажет скрипт для изменения окна инсталялтора? »

Код:

  WizardForm.ClientHeight:= высота
  WizardForm.ClientWidth:= ширена


YURSHAT 25-01-2010 13:08 1329310

Serega,
Код:

WizardForm.ClientWidth:= ширена
правильно ширИна :)

Tukash 25-01-2010 13:25 1329322

YURSHAT
твой скрипт:) скажи как отсюда полностью убрать шрифт?
пишу это: PageNameLabel.Font.Size := 0; ему пох...
Код:

var
  PageNameLabel,PageDescriptionLabel:TLabel;

procedure InitializeWizard();
begin
  WizardForm.PageNameLabel.Hide;
  WizardForm.PageDescriptionLabel.Hide;
  WizardForm.WizardSmallBitmapImage.Align:=true;

  PageNameLabel := TLabel.Create(WizardForm);
  PageNameLabel.Left := ScaleX(25);
  PageNameLabel.Top := ScaleY(10);
  PageNameLabel.Width := ScaleX(300);
  PageNameLabel.Height := ScaleY(14);
  PageNameLabel.AutoSize := False;
  PageNameLabel.WordWrap := True;
  PageNameLabel.Font.Color := clBlack;
  PageNameLabel.Font.Style := [fsBold];
  PageNameLabel.Transparent := True;
  PageNameLabel.Parent := WizardForm.MainPanel;

  PageDescriptionLabel := TLabel.Create(WizardForm);
  PageDescriptionLabel.Left := ScaleX(40);
  PageDescriptionLabel.Top := ScaleY(25);
  PageDescriptionLabel.Width := ScaleX(475);
  PageDescriptionLabel.Height := ScaleY(30);
  PageDescriptionLabel.AutoSize := False;
  PageDescriptionLabel.WordWrap := True;
  PageDescriptionLabel.Font.Color := clBlack;
  PageDescriptionLabel.Transparent := True;
  PageDescriptionLabel.Parent := WizardForm.MainPanel;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
  PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;
end;

и еще такой вопрос, есть-ли такой -же скрипт но для WizardImage.bmp?? хочу сделать WizardImage.bmp чуть шире!

mash 25-01-2010 13:28 1329323

Спасибо, я скачал, но не получается все равно, то ли что то не так делаю (мне нужен обычный скин Black), но внизу пишет тоже самое. Но главное, Демо из Codejock Software тоже без скина получается на ispack-5.3.7-unicode

Jerichoman 25-01-2010 13:30 1329329

Вот такая проблема, не отображается иконка музыки в углу
И почему-то выбор директории установки отображается белым шрифтом

Tukash 25-01-2010 13:34 1329332

Jerichoman
а у тебя кнопка есть для музыки?

YURSHAT 25-01-2010 13:40 1329336

Tukash, Шрифт задается для каждого отдельного элемента, а не в общем для всего инсталла.

Цитата:

Цитата Jerichoman
И почему-то выбор директории установки отображается белым шрифтом »

DirEdit.Font.Color:=ClBlack ;

Jerichoman 25-01-2010 13:42 1329339

Tukash
Да, брал из этого скрипта

Cranz86 25-01-2010 13:46 1329343

Народ помогите, критичная проблема. Вот часть кода...
Код:

ToolbarCheck := TCheckBox.Create(ToolbarPage);
  with ToolbarCHeck do
  begin
    ToolbarCheck.Top := ToolbarImage.Top + ToolbarImage.Height + ScaleY(12);
    ToolbarCheck.Left := ScaleX(12);
    ToolbarCheck.Caption := 'Install the Realore Toolbar (recommended)';
    ToolbarCheck.Parent := ToolbarPage.Surface;
    ToolbarCheck.Width := 380;
    ToolbarCheck.State := cbChecked;
  end;

  SearchCheck := TCheckBox.Create(ToolbarPage);
  with ToolbarCHeck do
  begin
    SearchCheck.Top := ToolbarImage.Top + ToolbarImage.Height + ScaleY(32);
    SearchCheck.Left := ScaleX(12);
    SearchCheck.Caption := 'Make the Realore web search my default search';
    SearchCheck.Parent := ToolbarPage.Surface;
    SearchCheck.Width := 390;
    SearchCheck.State := cbChecked;
  end;

  HomeCheck := TCheckBox.Create(ToolbarPage);
  with ToolbarCHeck do
  begin
    HomeCheck.Top := ToolbarImage.Top + ToolbarImage.Height + ScaleY(52);
    HomeCheck.Left := ScaleX(12);
    HomeCheck.Caption := 'Make the Realore web search my homepage';
    HomeCheck.Parent := ToolbarPage.Surface;
    HomeCheck.Width := 100;
    HomeCheck.State := cbChecked;
  end;

Как сделать первый (ToolbarCheck) чекбокс "главным". Что бы убирая его, 2 и 3 чекбосы делались некликабельными и не устанавливались.

Jerichoman 25-01-2010 14:18 1329376

Tukash
Так что нужно чтобы отображалась иконка музыки?

mariolast 25-01-2010 14:19 1329377

Цитата:

Цитата mariolast
Нужно записать в реестр бинарное значение такого типа
'04 08 0E 01 58 04 0F 16 00 00 00 00 00 00 D3 B6 95 15 20 00 0A 00 11 11 11 11 42 42'
Если из секции [Registry] заносить, то проблем нет
Но мне надо из кода....
Пробую так
...
Var
Reg1: String;
RegArray:array of string;
begin
Reg1:= '04 08 0E 01 58 04 0F 16 00 00 00 00 00 00 D3 B6 95 15 20 00 0A 00 11 11 11 11 42 42'
RegWriteBinaryValue (HKLM, 'SYSTEM\CurrentControlSet\MultiKey\Dumps\9E4E58E8', 'Data', Reg1);
.....
А оно заносит какую-то хрень в реестр, не то что надо... »

Цитата:

Цитата Serega
Всё правильно она заносит. Просто строка конвертируется в HEX данные.
Попробуйте запишите Reg1:= 'mariolast' и вы увидите в реестре "Data"=hex:6d,61,72,69,6f,6c,61,73,74. »

Я знаю что правильно, но как занести правильно в уже готовом HEX виде? Конвертировать Reg1 в строку а потом уже заносить?

Думал использовать фичу типа
Root: HKLM; Subkey: SYSTEM\Dumps; ValueName: Data; ValueType: Binary; ValueData:"{code:Reg}", не проканало, ибо тип Binary стоит.обновление

Tukash 25-01-2010 14:31 1329386

Jerichoman ой забыл сорри:
[Files]
Source: C:\MusicButton.bmp; DestDir: {tmp}; Flags: dontcopy
написано?

serega355 25-01-2010 14:32 1329388

Не подскажите, как сделать чтобы одна картинка отображалась вначале установки, а совсем другая в конце.
Код:
WizardImageFile=D:\Игромания\Grand Theft Auto Racing Driver\data\Icons\GTA RD.bmp
WizardImageStretch=yes

При этом коде одна и та же картинка показывается. Что нужно добавить?

svensoft 25-01-2010 15:50 1329455

Подскажите, как можно на странице Ready изменить расположение текста PageNameLabel, PageDescriptionLabel, ReadyLabel, а так-же придать каждому из них свой цвет, размер и стиль шрифта ?.. Например PageNameLabel (размер шрифта 16, цвет белый, жирный, стиль times new roman), PageDescriptionLabel (размер 12, цвет синий, стиль comic sans ms) ......... ???

Jerichoman 25-01-2010 15:58 1329462

Tukash
да, все это есть, даже кнопка создается, но там нет картинки, нужно чтобы имя было MusicButton.bmp? просто я переименовал файл

Tukash 25-01-2010 16:00 1329466

скажите как сменить расположение всех кнопок? подвинуть хочу, и еще WizardImage как его НЕМНОГО растянуть??

Jerichoman
да, иначе в скрипте все надо изменять так как называеться она у тебя!

R.i.m.s.k.y. 25-01-2010 16:11 1329471

Как в скрипте узнать какая видеокарта у человечка? Ultimate Test.iss смотрел, но не помогло, в секции "Видеоадаптер" вконец запутался. Результатом достаточно получить стринговую переменную с именем видеокарты.

Заранее спасибо!

Jerichoman 25-01-2010 16:11 1329472

Tukash
В том-то и дело что везде менял :( а она все равно не появляется

Vengeance 25-01-2010 17:39 1329543

Здравствуйте... Прошу прощения, я знаю, что это вероятно уже обсуждалось и не один раз. Но сил уже искать и т.п. нет просто :D

Так вот... В Inno Setup Я полный новичок, поэтому прошу помочь и все расписать по полочкам.

Мне нужен скрипт установки компонентов, как вот этот(он идет после указания пути):

http://s002.radikal.ru/i198/1001/39/8d80683eaf1b.jpg


Если не выбран пункт Half-Life non Steam, то остальные пункты тоже недоступны.

ЗЫ в этом инсталляторе было так:

Half-Life - (папка)Half-Life
Blue Shift - Half-life/bshift
Opposing Force - half-life/gearbox
и т.д.

Вообщем, как сделать вот такой вот скрипт?

Также еще хочу узнать, как осуществить вот это, к примеру:

Установить модели 1
Установить модели 2
Установить модели 3

Можно выбрать только 1 из пунктов, но как бы вот в чем загвоздка для меня:

1. Все модели из этих пунктов носят одинаковые имена и должны носить их.
2. И все они лежат в одной и той же папке и должны лежать только там.
Собственно куда тогда поместить модели, чтобы при пункте устанавливались определённые?

Заранее спасибо. Жду ясного для себя и подробного ответа

Tukash 25-01-2010 17:52 1329554

Vengeance
это по:
Цитата:

Цитата Vengeance
Также еще хочу узнать, как осуществить вот это, к примеру: »

Код:

[Components]
Name: lng; Description: Выберите:; Flags: fixed; Types: custom
Name: lng/ru; Description:Установить модели 1; Flags: exclusive
Name: lng/en; Description: Установить модели 2; Flags: exclusive
Name: lng/fr; Description: Установить модели 3; Flags: exclusive

[Files]
Source: C:\mod1\*; DestDir: {app}\; Components: lng/ru; Flags: recursesubdirs ignoreversion sortfilesbyextension createallsubdirs
Source: C:\mod2\*; DestDir: {app}\; Components: lng/en; Flags: recursesubdirs ignoreversion sortfilesbyextension createallsubdirs
Source: C:\mod3\*; DestDir: {app}\; Components: lng/fr; Flags: recursesubdirs ignoreversion sortfilesbyextension createallsubdirs

PS на lng не обращай внимания:)

Vengeance 25-01-2010 17:57 1329562

Сейчас попробую. Спасибо.

P.S. Если кто зарегистрирован в ICQ, добавьте меня(вдруг еще вопросы возникнут, так может узнаю по ICQ): 8426401

mariolast 25-01-2010 18:00 1329564

У кого есть кода для перевода HEX строки в десятичный тип? Попробую таким образом работать с бинарным значением в реестре

svensoft 25-01-2010 18:08 1329571

Какой из этих парамметров отвечает за прижименае текста ("прижимать влево", "прижимать вправо", "по середине"), или может какой-нить другой ?..

Код:

 
PageNameLabel := TLabel.Create(WizardForm);
PageNameLabel.Left := ScaleX(25);   
PageNameLabel.Top := ScaleY(10);   
PageNameLabel.Width := ScaleX(300);   
PageNameLabel.Height := ScaleY(14);   
PageNameLabel.AutoSize := False;   
PageNameLabel.WordWrap := True;   
PageNameLabel.Font.Color := clBlack;   
PageNameLabel.Font.Style := [fsBold];   
PageNameLabel.Transparent := True;   
PageNameLabel.Parent := WizardForm.MainPanel;

или просто, как можно сделать, чтобы текст прижимался"по середине" ?..

Tukash 25-01-2010 18:11 1329574

Serega
такой тупой вопрос, можно-ли растянуть окно инсталлятора, но что-бы оно не просто расширилось, а та часть каторую я расширю сразу была со шрифтом, кнопками и т.д.(была рабочей), а то блин, тот код который ты дал, просто расширил окно, теперь надо двигать все вручную, вот подумал можно-ли облегчить...

A1EXXX 25-01-2010 18:16 1329581

Tukash, всё растягивается вручную. Каждый элемент нужно либо растягивать, либо смещать. Само оно не сделается...

Tukash 25-01-2010 18:19 1329584

A1EXXX
все пасибо рестол скачал там намного проще все, с простым инно и передвижением по цифрам я бы с ума сошел!!!

Vengeance 25-01-2010 18:20 1329585

Tukash, попробЫвал... Наверно не то сделал или что.

Выбираю к примеру Установить модели 1. У меня ставятся обе папки. И еще, мне надо чтобы папки model1 и model2 устанавливались файлы из них в папку models.

Скрипт:

Код:

[Setup]
AppName=Ïðîâåðêà
AppVerName=Ïðîâåðêà1.5
AppPublisher=Ïðîâåðêà
AppPublisherURL=http://www.mycompany.com
AppSupportURL=http://www.mycompany.com
AppUpdatesURL=http://www.mycompany.com
DefaultDirName={pf}\Ïðîâåðêà
DefaultGroupName=Ïðîâåðêà
DisableProgramGroupPage=yes
LicenseFile=C:\ag\Ëèöåíçèÿ.txt
InfoBeforeFile=C:\ag\Èíôîðìàöèÿ.txt
OutputDir=C:\Íîâàÿ ïàïêà
OutputBaseFilename=proverka
Compression=lzma
SolidCompression=yes

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

[Components]
Name: lng; Description: Âûáåðèòå:; Flags: fixed; Types: custom
Name: lng/ru; Description:Óñòàíîâèòü ìîäåëè 1; Flags: exclusive
Name: lng/en; Description: Óñòàíîâèòü ìîäåëè 2; Flags: exclusive

[Files]
Source: C:\s\a\model1\*; DestDir: {app}\; Components: lng/ru; Flags: recursesubdirs ignoreversion sortfilesbyextension createallsubdirs
Source: C:\s\a\model2\*; DestDir: {app}\; Components: lng/en; Flags: recursesubdirs ignoreversion sortfilesbyextension createallsubdirs

[Files]
Source: "C:\ag\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; Íå èñïîëüçóéòå ôëàã "ignoreversion" äëÿ ëþáûõ ñèñòåìíûõ ôàéëîâ.

Чёрт, йероглифы... (

Tukash 25-01-2010 18:29 1329593

Код:

[Files]
Source: C:\s\a\model1\*; DestDir: {app}\; Components: lng/ru; Flags: recursesubdirs ignoreversion sortfilesbyextension createallsubdirs
Source: C:\s\a\model2\*; DestDir: {app}\; Components: lng/en; Flags: recursesubdirs ignoreversion sortfilesbyextension createallsubdirs

[Files]
Source: "C:\ag\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; Íå èñïîëüçóéòå ôëàã "ignoreversion" äëÿ ëþáûõ ñèñòåìíûõ ôàéëîâ.

соединил тебе:
Код:

[Files]
Source: C:\s\a\model1\*; DestDir: {app}\models\; Components: lng/ru; Flags: recursesubdirs ignoreversion sortfilesbyextension createallsubdirs
Source: C:\s\a\model2\*; DestDir: {app}\models\; Components: lng/en; Flags: recursesubdirs ignoreversion sortfilesbyextension createallsubdirs
Source: "C:\ag\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

вот! должно работать! главное что бы у тебя в C:\s\a\mode* в папке "а" были файлы а не твоя папка, иначе так и установится папкой, короче в папку "а" кидай файлы напрямую из папки моделс! думаю понял

beve 25-01-2010 18:31 1329600

Подскажите такое. Что добавить в скрипт, чтоб перед деинсталяцией приложения был убит процесс, а уже потом происходила деинсталяция приложения.
Добавил в скрипт такой код, но не работает, процесс не закрывается и поэтому программа не удаляется:
Код:

[_Code]
function RunTask(FileName: string; bFullpath: Boolean): Boolean;
 
function KillTask(ExeFileName: string): Integer;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usUninstall then
  begin
    if RunTask('punto.exe', false) then
    KillTask('punto.exe');
  end;
end;


Sotonisto 25-01-2010 18:53 1329619

Цитата:

Цитата Tukash
Код:

NeedSize := 5600
»

Tukash, респект те! :)
И как я эту строку раньше не увидел?!
Кста там было 5428 :)

svensoft 25-01-2010 19:03 1329628

Цитата:

Цитата svensoft
Какой из этих парамметров отвечает за прижименае текста ("прижимать влево", "прижимать вправо", "по середине"), или может какой-нить другой ?..
Код:
PageNameLabel := TLabel.Create(WizardForm);
PageNameLabel.Left := ScaleX(25);
PageNameLabel.Top := ScaleY(10);
PageNameLabel.Width := ScaleX(300);
PageNameLabel.Height := ScaleY(14);
PageNameLabel.AutoSize := False;
PageNameLabel.WordWrap := True;
PageNameLabel.Font.Color := clBlack;
PageNameLabel.Font.Style := [fsBold];
PageNameLabel.Transparent := True;
PageNameLabel.Parent := WizardForm.MainPanel;или просто, как можно сделать, чтобы текст прижимался"по середине" ?.. »

Ребят, ну помогите посередине текст отцентровать !!!

serg aka lain 25-01-2010 19:06 1329633

Цитата:

Цитата svensoft
ну помогите посередине текст отцентровать !!! »

Код:

PageNameLabel.Alignment := taCenter;

Tukash 25-01-2010 19:11 1329638

Sotonisto
рад что помог:)

A1EXXX 25-01-2010 19:13 1329642

Цитата:

Цитата Vengeance
Чёрт, йероглифы... ( »

Чтобы иероглифов не было, при копировании кодов должен быть включен русский язык.

Tukash 25-01-2010 19:17 1329649

A1EXXX
оо:) скажи почему в рестоле в визардформ десинджер не все двигаються объекты???

A1EXXX 25-01-2010 19:22 1329652

Tukash, что именно? По-моему, всё что может и должно двигаться, смещается одним кликом мыши :)

Tukash 25-01-2010 19:27 1329660

A1EXXX
НИХРИНА:)) я уже минут 20 двигаю, а она стоит, все что рядом с ней двигаеться а она на месте(((
поможешь с меня бутылка:)

svensoft 25-01-2010 19:39 1329676

serg aka lain, спасибо

Chelluga 25-01-2010 19:42 1329680

Здравствуйте. Подскажите кто-нить как в Inno Setup реализовать функцию подсчёта времени до завершения инсталляции. Было бы великолепно если бы кто-то выложил часть скрипта с кодом сией функции. Заранее спасибо.

svensoft 25-01-2010 20:35 1329716

Подскажите еще, вот, какой знак служит как разделитель строк в тексте ?..

Код:

txt3:= 'Все готово для начала установки на ваш компьютер                       
          Для продолжения нажмите "Установить", для отмены установки нажмите "Отмена"';


YURSHAT 25-01-2010 20:54 1329733

Цитата:

Цитата svensoft
Подскажите еще, вот, какой знак служит как разделитель строк в тексте ?.. »

#13#10

Код:

txt3:= 'Все готово для начала установки на ваш компьютер'#13#10'Для продолжения нажмите "Установить", для отмены установки нажмите "Отмена"';

Tukash 25-01-2010 20:55 1329734

блииин 2 часа сидел красоту наводил, сделал что хотел, и ничего не получилось, не принимает он код и все, будт нет его и вовсе...
вот скрипт может кто-то что-нибудь придумает...
[code][ISFormDesigner]


8656967687402F309466F6E742E4E616D65060747656F726769610A466F6E742E5374796C650B066673426F6C64086673497 4616C6963000C4578706C696369744C65667402460D4578706C69636974576964746803850100000000F110544E65774E6F7 465626F6F6B506167650C46696E69736865645061676505436F6C6F720707636C426C61636B0D4578706C696369745769647 4680359020E4578706C6963697448656967687403400100F10C544269746D6170496D6167651257697A6172644269746D617 0496D6167653205576964746803CC00064865696768740342010D4578706C69636974576964746803CC000E4578706C69636 9744865696768740342010000F10F544E6577526164696F427574746F6E074E6F526164696F044C65667403100103546F700 319010C466F6E742E43686172736574070C414E53495F434841525345540A466F6E742E436F6C6F720707636C57686974650 A466F6E742E5374796C650B066673426F6C64000A506172656E74466F6E74080C4578706C696369744C6566740310010B457 8706C69636974546F700319010000F10F544E6577526164696F427574746F6E08596573526164696F044C656674031001035 46F700301010A466F6E742E436F6C6F720707636C57686974650A506172656E74466F6E74080C4578706C696369744C65667 40310010B4578706C69636974546F700301010000F110544E6577436865636B4C697374426F780752756E4C697374044C656 67403D80003546F70039100055769647468037D010648656967687402600C4578706C696369744C65667403D8000B4578706 C69636974546F700391000D4578706C696369745769647468037D010E4578706C6963697448656967687402600000F10E544 E6577537461746963546578740D46696E69736865644C6162656C044C65667403D80003546F70026F055769647468036D010 648656967687403820005436F6C6F720707636C426C61636B0C466F6E742E43686172736574070F5255535349414E5F43484 1525345540A466F6E742E436F6C6F720707636C57686974650B466F6E742E48656967687402F409466F6E742E4E616D65060 B5365676F65205072696E740A466F6E742E5374796C650B066673426F6C64000B506172656E74436F6C6F72080A506172656 E74466F6E74080C4578706C696369744C65667403D8000B4578706C69636974546F70026F0D4578706C69636974576964746 8036D010E4578706C696369744865696768740382000000F10E544E6577537461746963546578741446696E6973686564486 56164696E674C6162656C044C65667403D00003546F70020805576964746803850106486569676874024F05436F6C6F72070 7636C426C61636B0C466F6E742E43686172736574070C414E53495F434841525345540A466F6E742E436F6C6F720707636C5 7686974650B466F6E742E48656967687402E809466F6E742E4E616D65061041646F6265204361736C6F6E2050726F0A466F6 E742E5374796C650B0866734974616C6963000B506172656E74436F6C6F72080C4578706C696369744C65667403D0000B457 8706C69636974546F7002080D4578706C6963697457696474680385010E4578706C69636974486569676874024F000000000 0


Код:

{ RedesignWizardFormBegin } // Don't remove this line!
// Don't modify this section. It is generated automatically.
var
  NewMemo1: TNewMemo;

procedure RedesignWizardForm;
begin
  with WizardForm do
  begin
    ClientHeight := ScaleY(354);
    ClientWidth := ScaleX(603);
    Color := clBlack;
  end;

  with WizardForm.CancelButton do
  begin
    Left := ScaleX(484);
    Font.Name := 'Segoe UI';
    Font.Style := [fsBold];
    ParentFont := False;
  end;

  with WizardForm.NextButton do
  begin
    Left := ScaleX(383);
    Font.Name := 'Segoe UI';
    Font.Style := [fsBold, fsItalic];
    ParentFont := False;
  end;

  with WizardForm.BackButton do
  begin
    Left := ScaleX(284);
    Font.Name := 'Segoe UI';
    Font.Style := [fsBold];
    ParentFont := False;
  end;

  with WizardForm.OuterNotebook do
  begin
    Width := ScaleX(601);
    Height := ScaleY(320);
  end;

  with WizardForm.WelcomePage do
  begin
    Color := clBlack;
  end;

  with WizardForm.WizardBitmapImage do
  begin
    Top := ScaleY(-4);
    Width := ScaleX(204);
    Height := ScaleY(322);
  end;

  with WizardForm.WelcomeLabel2 do
  begin
    Left := ScaleX(216);
    Top := ScaleY(119);
    Width := ScaleX(389);
    Height := ScaleY(199);
    Color := clBlack;
    Font.Color := clWhite;
    Font.Height := -13;
    Font.Name := 'Segoe Print';
    Font.Style := [fsBold];
    ParentColor := False;
    ParentFont := False;
  end;

  with WizardForm.WelcomeLabel1 do
  begin
    Left := ScaleX(208);
    Width := ScaleX(389);
    Color := clBlack;
    Font.Color := clWhite;
    Font.Height := -24;
    Font.Name := 'Adobe Caslon Pro';
    Font.Style := [fsItalic];
    ParentColor := False;
  end;

  with WizardForm.InnerPage do
  begin
    Color := clBlack;
  end;

  with WizardForm.Bevel1 do
  begin
    Left := ScaleX(-10);
    Width := ScaleX(611);
    Height := ScaleY(0);
  end;

  with WizardForm.InnerNotebook do
  begin
    Left := ScaleX(144);
  end;

  with WizardForm.LicensePage do
  begin
    ShowHint := True;
  end;

  with WizardForm.LicenseNotAcceptedRadio do
  begin
    Left := ScaleX(32);
    Top := ScaleY(212);
    Width := ScaleX(321);
    Font.Height := -12;
    Font.Name := 'Segoe Print';
    Font.Style := [fsBold];
    ParentFont := False;
  end;

  with WizardForm.LicenseAcceptedRadio do
  begin
    Left := ScaleX(32);
    Top := ScaleY(192);
    Width := ScaleX(273);
    Font.Color := clRed;
    Font.Height := -12;
    Font.Name := 'Segoe Print';
    Font.Style := [fsBold];
    ParentFont := False;
  end;

  with WizardForm.LicenseMemo do
  begin
    Left := ScaleX(10);
    Top := ScaleY(29);
    Width := ScaleX(391);
    Height := ScaleY(164);
  end;

  with WizardForm.LicenseLabel1 do
  begin
    Left := ScaleX(2);
    Width := ScaleX(399);
    Font.Color := clWhite;
    Font.Height := -12;
    Font.Name := 'Segoe Print';
    Font.Style := [fsBold];
    ParentFont := False;
  end;

  with WizardForm.PasswordEdit do
  begin
    Top := ScaleY(117);
  end;

  with WizardForm.PasswordEditLabel do
  begin
    Top := ScaleY(101);
  end;

  with WizardForm.InfoBeforeMemo do
  begin
    Top := ScaleY(0);
  end;

  with WizardForm.InfoBeforeClickLabel do
  begin
    Top := ScaleY(208);
    Width := ScaleX(409);
    Height := ScaleY(30);
    Font.Color := clWhite;
    Font.Height := -12;
    Font.Name := 'Segoe Print';
    Font.Style := [fsBold];
    ParentFont := False;
  end;

  with WizardForm.UserInfoSerialEdit do
  begin
    Left := ScaleX(88);
    Width := ScaleX(289);
  end;

  with WizardForm.UserInfoSerialLabel do
  begin
    Left := ScaleX(-16);
  end;

  with WizardForm.UserInfoOrgEdit do
  begin
    Left := ScaleX(88);
    Width := ScaleX(289);
  end;

  with WizardForm.UserInfoOrgLabel do
  begin
    Left := ScaleX(-16);
  end;

  with WizardForm.UserInfoNameEdit do
  begin
    Left := ScaleX(8);
    Top := ScaleY(24);
  end;

  with WizardForm.UserInfoNameLabel do
  begin
    Left := ScaleX(-16);
  end;

  { NewMemo1 }
  NewMemo1 := TNewMemo.Create(WizardForm);
  with NewMemo1 do
  begin
    Parent := WizardForm.UserInfoPage;
    Left := ScaleX(-184);
    Top := ScaleY(24);
    Width := ScaleX(209);
    Height := ScaleY(89);
    Color := clBlack;
    Lines.Text := 'NewMemo1';
  end;

  NewMemo1.TabOrder := 6;

  with WizardForm.SelectDirPage do
  begin
    Tag := 9;
  end;

  with WizardForm.SelectDirBitmapImage do
  begin
    Left := ScaleX(8);
    Top := ScaleY(17);
  end;

  with WizardForm.DiskSpaceLabel do
  begin
    Left := ScaleX(16);
    Top := ScaleY(208);
    Width := ScaleX(353);
    Font.Color := clWhite;
    ParentFont := False;
  end;

  with WizardForm.DirBrowseButton do
  begin
    Left := ScaleX(8);
    Top := ScaleY(116);
    Font.Height := -15;
    Font.Name := 'Segoe UI';
    Font.Style := [fsBold, fsItalic];
    ParentFont := False;
  end;

  with WizardForm.DirEdit do
  begin
    Left := ScaleX(85);
    Top := ScaleY(118);
    Width := ScaleX(324);
  end;

  with WizardForm.SelectDirBrowseLabel do
  begin
    Left := ScaleX(8);
    Top := ScaleY(60);
    Width := ScaleX(393);
    Height := ScaleY(46);
    Font.Color := clWhite;
    Font.Height := -12;
    Font.Name := 'Segoe Print';
    Font.Style := [fsBold];
    ParentFont := False;
  end;

  with WizardForm.SelectDirLabel do
  begin
    Left := ScaleX(49);
    Top := ScaleY(17);
    Width := ScaleX(360);
    Height := ScaleY(45);
    Font.Color := clWhite;
    Font.Height := -13;
    Font.Name := 'Segoe Print';
    Font.Style := [fsBold];
    ParentFont := False;
  end;

  with WizardForm.ComponentsDiskSpaceLabel do
  begin
    Left := ScaleX(8);
    Height := ScaleY(22);
    Font.Color := clWhite;
    Font.Name := 'Segoe Print';
    ParentFont := False;
  end;

  with WizardForm.ComponentsList do
  begin
    Top := ScaleY(69);
    Color := clBtnShadow;
  end;

  with WizardForm.TypesCombo do
  begin
    Top := ScaleY(45);
    Color := cl3DDkShadow;
  end;

  with WizardForm.SelectComponentsLabel do
  begin
    Width := ScaleX(433);
    Height := ScaleY(35);
    Font.Color := clWhite;
    Font.Name := 'Segoe Print';
    ParentFont := False;
  end;

  WizardForm.ComponentsList.TabOrder := 1;
  WizardForm.TypesCombo.TabOrder := 2;
  WizardForm.ComponentsDiskSpaceLabel.TabOrder := 3;

  with WizardForm.SelectGroupBitmapImage do
  begin
    Left := ScaleX(9);
    Top := ScaleY(8);
  end;

  with WizardForm.NoIconsCheck do
  begin
    Left := ScaleX(9);
    Top := ScaleY(143);
    Font.Color := clWhite;
    Font.Name := 'Segoe Print';
    Font.Style := [fsBold];
    ParentFont := False;
  end;

  with WizardForm.GroupBrowseButton do
  begin
    Left := ScaleX(0);
    Top := ScaleY(100);
    Font.Name := 'Segoe UI';
    Font.Style := [fsBold];
    ParentFont := False;
  end;

  with WizardForm.GroupEdit do
  begin
    Left := ScaleX(85);
    Top := ScaleY(100);
  end;

  with WizardForm.SelectStartMenuFolderBrowseLabel do
  begin
    Left := ScaleX(9);
    Top := ScaleY(76);
    Font.Color := clWhite;
    Font.Name := 'Segoe Print';
    Font.Style := [fsBold];
    ParentFont := False;
  end;

  with WizardForm.SelectStartMenuFolderLabel do
  begin
    Left := ScaleX(56);
    Top := ScaleY(25);
    Height := ScaleY(38);
    Font.Height := -12;
    Font.Name := 'Segoe Print';
    ParentFont := False;
  end;

  with WizardForm.TasksList do
  begin
    Top := ScaleY(45);
  end;

  with WizardForm.SelectTasksLabel do
  begin
    Height := ScaleY(43);
    Font.Color := clWhite;
    Font.Name := 'Segoe Print';
    ParentFont := False;
  end;

  with WizardForm.ReadyMemo do
  begin
    Top := ScaleY(14);
    Height := ScaleY(223);
  end;

  with WizardForm.ReadyLabel do
  begin
    Height := ScaleY(20);
    Font.Color := clWhite;
    Font.Name := 'Segoe Print';
    ParentFont := False;
  end;

  with WizardForm.PreparingErrorBitmapImage do
  begin
    Left := ScaleX(417);
    Width := ScaleX(0);
    Height := ScaleY(0);
  end;

  with WizardForm.PreparingLabel do
  begin
    Left := ScaleX(8);
    Top := ScaleY(64);
    Font.Color := clWhite;
    Font.Name := 'Segoe Print';
    ParentFont := False;
  end;

  with WizardForm.StatusLabel do
  begin
    Left := ScaleX(8);
    Top := ScaleY(40);
    Height := ScaleY(40);
    Font.Color := clWhite;
    Font.Height := -15;
    Font.Name := 'Monotype Corsiva';
    Font.Style := [fsBold, fsItalic];
    ParentFont := False;
  end;

  with WizardForm.ProgressGauge do
  begin
    Top := ScaleY(90);
  end;

  with WizardForm.InfoAfterClickLabel do
  begin
    Left := ScaleX(16);
    Height := ScaleY(22);
    Font.Color := clWhite;
    Font.Name := 'Segoe Print';
    Font.Style := [fsBold];
    ParentFont := False;
  end;

  with WizardForm.MainPanel do
  begin
    Left := ScaleX(-2);
    Width := ScaleX(603);
    BevelOuter := bvSpace;
    Color := clBlack;
    ParentBackground := False;
  end;

  with WizardForm.WizardSmallBitmapImage do
  begin
    Left := ScaleX(532);
    Top := ScaleY(0);
  end;

  with WizardForm.PageDescriptionLabel do
  begin
    Left := ScaleX(70);
    Width := ScaleX(341);
    Font.Color := clWhite;
    Font.Height := -13;
    Font.Name := 'Georgia';
    Font.Style := [fsItalic];
    ParentFont := False;
  end;

  with WizardForm.PageNameLabel do
  begin
    Left := ScaleX(70);
    Width := ScaleX(389);
    Font.Color := clWhite;
    Font.Height := -13;
    Font.Name := 'Georgia';
    Font.Style := [fsBold, fsItalic];
  end;

  with WizardForm.FinishedPage do
  begin
    Color := clBlack;
  end;

  with WizardForm.WizardBitmapImage2 do
  begin
    Width := ScaleX(204);
    Height := ScaleY(322);
  end;

  with WizardForm.NoRadio do
  begin
    Left := ScaleX(272);
    Top := ScaleY(281);
    Font.Color := clWhite;
    Font.Style := [fsBold];
    ParentFont := False;
  end;

  with WizardForm.YesRadio do
  begin
    Left := ScaleX(272);
    Top := ScaleY(257);
    Font.Color := clWhite;
    ParentFont := False;
  end;

  with WizardForm.RunList do
  begin
    Left := ScaleX(216);
    Top := ScaleY(145);
    Width := ScaleX(381);
    Height := ScaleY(96);
  end;

  with WizardForm.FinishedLabel do
  begin
    Left := ScaleX(216);
    Top := ScaleY(111);
    Width := ScaleX(365);
    Height := ScaleY(130);
    Color := clBlack;
    Font.Color := clWhite;
    Font.Height := -12;
    Font.Name := 'Segoe Print';
    Font.Style := [fsBold];
    ParentColor := False;
    ParentFont := False;
  end;

  with WizardForm.FinishedHeadingLabel do
  begin
    Left := ScaleX(208);
    Top := ScaleY(8);
    Width := ScaleX(389);
    Height := ScaleY(79);
    Color := clBlack;
    Font.Color := clWhite;
    Font.Height := -24;
    Font.Name := 'Adobe Caslon Pro';
    Font.Style := [fsItalic];
    ParentColor := False;
  end;

{ ReservationBegin }
  // This part is for you. Add your specialized code here.

{ ReservationEnd }
end;
// Don't modify this section. It is generated automatically.
{ RedesignWizardFormEnd } // Don't remove this line!


svensoft 25-01-2010 21:07 1329744

YURSHAT, вот спасибо, пришел настоящий спец..))

Sotonisto 25-01-2010 21:07 1329745

Народ, ахтунг! как сделать что бы во время распаковки 7zip sfx архива его окна не было видно, а в строке состояния писалось что-то типа "Идет русификация файла"?
----
Jerichoman, я тут пролистал предыдущие сообщения - если у тебя до сих пор проблемы с инталлом попробуй качни этот архив http://rghost.ru/888810 (там все что я использовал, кроме музыки). Заливал я его другому пользователю, но и тебе он пригодится :)

Chelluga 25-01-2010 21:27 1329755

Народ, ещё вопрос:

какие могут быть последствия объединения скриптов через Inno Script Joiner??
Если один скрипт мой, а два других только с отдельной функцией.

Tukash 25-01-2010 21:31 1329759

Chelluga
последствия только положительные, если плохие, то скрипт не примется

Serega 25-01-2010 21:41 1329764

Цитата:

Цитата mariolast
У кого есть кода для перевода HEX строки в десятичный тип? »

Написал функцию для преобразования строки из Hex в string.
HexToStr
Код:

[Setup]
AppName=HexToStr
AppVerName=HexToStr v 1.0
AppPublisher=Serega
AppPublisherURL=http://forum.oszone.net/member.php?userid=88670
DefaultDirName={pf}\HexToStr
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
function HexToStr(str_hex: string): string;
var
  i: Integer;
begin
  StringChange(str_hex, ',', '');
  for i:= 1 to Length(str_hex) div 2 do
    Result:= Result +  Chr(StrToInt('$' + Copy(str_hex, (i-1)*2+1, 2)));
end;

function InitializeSetup(): Boolean;
var
  msg: string;
begin
  msg:= 'CF,F0,E8,EC,E5,F0,20,F0,E0,E1,EE,F2,FB,20,F4,F3,ED,EA,F6,E8,E8,20,48,65,78,54,6F,53,74,72';
  MsgBox(HexToStr(msg), mbInformation, MB_OK);
end;


Chelluga 25-01-2010 22:03 1329783

Так кто может написать (или выложить скрипт) функцию подсчёта времени (до завершения)??

svensoft 25-01-2010 22:05 1329784

YURSHAT, Подскажи пожайлуста, какой размер у .bmp должен быть чтобы вставить в инсталятор и растянуть на всю станицу ?..

Serega 25-01-2010 22:12 1329793

Цитата:

Цитата Chelluga
Так кто может написать (или выложить скрипт) функцию подсчёта времени (до завершения)?? »

Вам такое никто не сделает. Как вы себе всё это представляете?

Chelluga 25-01-2010 22:18 1329799

Цитата:

Вам такое никто не сделает. Как вы себе всё это представляете?
Ну я то не знаю, насколько это сложно в написании поэтому и спросил - тут же народ больше осведомлён в инсталляторах, мож поможет. Но если нет, так нет.

Serega 25-01-2010 22:28 1329810

Цитата:

Цитата beve
перед деинсталяцией приложения был убит процесс »

Просто надо записать:
Код:

[UninstallRun]
Filename: taskkill; Parameters: /f /t /im punto.exe; Flags: runhidden

Цитата:

Цитата Chelluga
насколько это сложно в написании поэтому и спросил »

Я не говорю, что это не возможно, но действительно, писанины очень много...

Chelluga 25-01-2010 22:36 1329818

Цитата:

Цитата Serega
Я не говорю, что это не возможно, но действительно, писанины очень много... »

А может Вы знаете откуда можно эту функцию вырезать?
Я пытался найти её в Corona Skin, но там уж слишком много текста...может подскажете где можно поискать пример или что-то на подобии?

Serega 25-01-2010 22:39 1329821

Цитата:

Цитата mash
я скачал, но не получается все равно »

Сейчас внимательно прочитал ваши сообщения об ошибке.
Вы копируете файлы ISSkin3.dll и ISSkin3.cjstyles в {sys}, т.е. это системный каталог system32, мало того вы ещё и ставите флаги ignoreversion. Такие вещи нужно распаковывать в {tmp} или в {app}, но никак не в {sys}.
На сайте есть инструкция по использованию.

YURSHAT 25-01-2010 22:40 1329824

Цитата:

Цитата svensoft
YURSHAT, Подскажи пожайлуста, какой размер у .bmp должен быть чтобы вставить в инсталятор и растянуть на всю станицу ?.. »

497 * 360

Цитата:

Цитата Chelluga
Ну я то не знаю, насколько это сложно в написании поэтому и спросил - тут же народ больше осведомлён в инсталляторах, мож поможет. Но если нет, так нет. »

У меня есть такая фича, будет в новой версии моего скрипта (NFS Undercover). Как только доделаю свой скрипт (пару деньков) сразу выложу фичу со временем. Так что немного подождите

Цитата:

Цитата Serega
Я не говорю, что это не возможно, но действительно, писанины очень много... »

Ну, не сильно то и много

Tukash 25-01-2010 22:42 1329829

так такой скрипт в фриарковский встроен вроде?О_о

Serega 25-01-2010 22:44 1329833

Цитата:

Цитата Chelluga
может подскажете где можно поискать пример »

Скрипт InnoSetup для распаковки архивов FreeArc

Chelluga 25-01-2010 22:47 1329835

Цитата:

Цитата YURSHAT
через пару деньков выложу такой скрипт »

Большое Вам человеческое спасибо :)

Serega И Вам спасибо.

Tukash 25-01-2010 22:50 1329836

Serega
не поможешь мне с моей траблой? 2 часа убил, Инно не принимает стиль из визардформ десинджер, просто игнорирует его... он на 100 странице, заранее спасибо!

mash 25-01-2010 22:52 1329838

Эх, Serega, я подумал об этом и читал инструкцию. Вписал скрипт точь в точь как на сайте, вложив Office2007.cjstyles и ISSkin.dll в так сказать {app}. Ну не проходит скин с этой версией. Я не спец конечно по Inno, но вроде бы все что я делаю мне понятно, но не получается хоть тресни, не думаю что со скинами не тестилась версия 5.3.7 unocode. Целый день сижу и так и сяк кручу, не получается, досадно, ужас.
Может еще надо вписывать в какую то секцию, я вписал как на сайте, только в две секции [Files] и [code].
В секции [code] сейчас у меня вот так:
[code]
Код:

// Importing LoadSkin API from ISSkin.DLL
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';

// Importing UnloadSkin API from ISSkin.DLL
procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';

// Importing ShowWindow Windows API from User32.DLL
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';
function InitializeSetup(): Boolean;
begin
  ExtractTemporaryFile('Office2007.cjstyles');
  LoadSkin(ExpandConstant('{tmp}\Office2007.cjstyles'), 'NormalBlack.ini');
  Result := True;
end;
procedure DeinitializeSetup();
begin
  // Hide Window before unloading skin so user does not get
  // a glimpse of an unskinned window before it is closed.
  ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
  UnloadSkin();
end;


Serega 25-01-2010 22:55 1329841

Цитата:

Цитата Tukash
2 часа убил, Инно не принимает стиль из визардформ десинджер, просто игнорирует его »

Так название этой процедуры (RedesignWizardForm;) нужно просто добавить в InitializeWizard, пример:
Код:

procedure InitializeWizard();
begin
  RedesignWizardForm;
end;


Tukash 25-01-2010 22:57 1329843

Serega
Блииин ошибку выдает на RedesignWizardForm ругаеться, наверно не туда вставляю ее, это в самый верх надо???

YURSHAT 25-01-2010 23:23 1329860

Цитата:

Цитата Tukash
Блииин ошибку выдает на RedesignWizardForm ругаеться, наверно не туда вставляю ее, это в самый верх надо??? »

Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program

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


[ISFormDesigner]
WizardForm=FF0A005457495A415244464F524D0030104401000054504630F10B5457697A617264466F726D0A57697A617264466F726D0C436C69656E744865696768740366010B436C69656E74576964746803EF010C4578706C696369744C65667402000B4578706C69636974546F7002000D4578706C69636974576964746803F7010E4578706C696369744865696768740388010D506978656C73506572496E636802600A54657874486569676874020D00F10A544E6577427574746F6E0A4E657874427574746F6E044C656674021F0557696474680373010C4578706C696369744C656674021F0D4578706C6963697457696474680373010000F10C544E65774E6F7465626F6F6B0D4F757465724E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167650B57656C636F6D65506167650D4578706C69636974576964746803F1010E4578706C6963697448656967687403390100000000


[Code_]
procedure RedesignWizardForm;
begin
  with WizardForm.NextButton do
  begin
    Left := ScaleX(31);
    Width := ScaleX(371);
  end;
end;

procedure InitializeWizard();
begin
  RedesignWizardForm;
end;


Tukash 25-01-2010 23:26 1329862

YURSHAT
спс!

Serega 25-01-2010 23:48 1329875

YURSHAT,
Цитата:

При отправке сообщения были допущены следующие ошибки: :

YURSHAT превысил максимальный объем сохраненных персональных сообщений и не может получать новые сообщения, пока не удалит часть старых.

South 26-01-2010 00:07 1329890

Цитата:

Цитата Serega
Цитата Chelluga:
насколько это сложно в написании поэтому и спросил »
Я не говорю, что это не возможно, но действительно, писанины очень много... »

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

Chelluga 26-01-2010 00:18 1329905

Цитата:

Цитата South
там действительно не очень много писать, вешается таймер на основной прогрессбар, ну и имея время начала установки, текущее время и зная текущую позицию и максимум прогрессбара не сложно посчитать оставшееся время »

А Вы бы не могли написать скрипт со всем вышеперечисленным??

YURSHAT 26-01-2010 00:23 1329912

Цитата:

Цитата Serega
YURSHAT превысил максимальный объем сохраненных »

Удалил :)

Serega 26-01-2010 00:50 1329931

Цитата:

Цитата mash
Ну не проходит скин с этой версией »

Специально поставил себе ispack-5.3.7-unicode и скачал последнюю версию ISSkin.
Сразу скомпилировал первый скрипт ISSkinAdv.iss в каталоге ISSkin'а. Всё нормально скомпилировалось и запустилось, ошибок не было.

mash 26-01-2010 01:15 1329953

Serega, вот посмотри какой скомпилированный этот демо скрипт у меня:

Вместо вот такого-серебранного окна:

У меня проходят только .bmp, а вид окна синий, обычный Хр-шный не серебрянный как должен бы быть, кнопки не те, обычные. Если у тебя был серебрянный точно, то я не знаю на что грешить, на ХР-SP3?
PS Да, все ошибки что были внизу, я поборол, спасибо тебе, а вот скин не идет, ..только он.
Еще проверил на соседней Х64 , синее окно демы, не серебрянное.
Кстати, обычная 5.3.7 со скинами дружит.

volk1234 26-01-2010 01:41 1329961

mash перенес ваши сообщения в "правильную" тему.
На будущее - если в шапке темы что- то написано красными буквами - стоит прочитать :)

mash 26-01-2010 01:54 1329971

Я Вас понял, но мой вопрос, хоть я и затронул скрипты, скорее про новую версию с юникодом, с прежними версиями (не юникод) у меня нет проблем.

svensoft 26-01-2010 02:10 1329978

YURSHAT, помоги пожайлуста, сделал я рисунок .bmp (497 * 360), вставил код из шапки форума (для вставки фонового рисунка инсталлятора), все вроде запаковалось, в момент старта исталляционного пакета ошибка выскакивает - Runtime Error (at 35:2062) Could not call proc. Посмотри пожайлуста что там не так ?...

[code]
[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{C609B4C1-5331-4D1E-96A4-7420EC33C4CB}
AppName=Sven
AppVerName=Sven
DefaultDirName={pf}\Sven
DisableDirPage=yes
DefaultGroupName=Sven
AllowNoIcons=yes
OutputDir=C:\Documents and Settings\Alexander\Ðàáî÷èé ñòîë
OutputBaseFilename=Sven (foto+video).exe
SetupIconFile=C:\Documents and Settings\Alexander\XXX\ico-èêîíêè\ya.ico
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes
WizardImageFile=C:\Documents and Settings\Alexander\\XXX\image3.bmp
WizardImageStretch=yes

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

[Files]
Source: "C:\Documents and Settings\Alexander\XXX\autorun.exe"; DestDir: "{app}"; Flags:

ignoreversion

[Run]
Filename: "{app}\autorun.exe"; Description: "{cm:LaunchProgram,Sven}";

Код:

var
  lbl1, lbl2, lbl3: TLabel;
  txt1, txt2, txt3: string;
  i: Integer;
  tmr1: TTimer;
  pnl: TPanel;
 
procedure tmr1Timer(Sender: TObject);
begin
  tmr1.Enabled:= False;
 
lbl1.Caption:= 'текст';
txt2:= 'текст2';
txt3:= 'текст3';

  lbl2.Caption:= '';
  for i:= 1 to Length(txt2) do begin
    if Application.Terminated then Break;
    lbl2.Caption:= lbl2.Caption + txt2[i];
    Application.ProcessMessages;
    Sleep(50);
  end;

  lbl3.Caption:= '';
  for i:= 1 to Length(txt3) do begin
    if Application.Terminated then Break;
    lbl3.Caption:= lbl3.Caption + txt3[i];
    Application.ProcessMessages;
    Sleep(25);
  end;
end;

procedure CreateComponents;
begin
  WizardForm.PageNameLabel.Hide;
  WizardForm.PageDescriptionLabel.Hide;
  WizardForm.ReadyLabel.Hide;

  lbl1:= TLabel.Create(WizardForm);
  with lbl1 do begin
    Left:= 0;
    Top:= 0;
    Width:= 400;
    Height:= 100;
    AutoSize:= False;
    WordWrap:= True;
    Alignment:= taCenter;
    Font.Style:= [fsBold];
    Font.Size:= 16;
    Font.Color:= clDkGray;
    Transparent:= True;
    Caption:= '';
    Parent:= WizardForm.ReadyLabel.Parent;
  end;

  lbl2:=TLabel.Create(WizardForm);
  with lbl2 do begin
    Left:= 0;
    Top:= 70;
    Width:= 400;
    Height:= 70;
    AutoSize:= False;
    WordWrap:= True;
    Font.Style:= [fsBold];
    Font.Size:= 10;
    Font.Color:= clTeal;
    Transparent:= True;
    Caption:= '';
    Parent:= WizardForm.ReadyLabel.Parent;
  end;

  lbl3:=TLabel.Create(WizardForm);
  with lbl3 do begin
    Left:= 0;
    Top:= 130;
    Width:= 400;
    Height:= 100;
    AutoSize:= False;
    WordWrap:= True;
    Font.Style:= [fsBold];
    Font.Size:= 8;
    Font.Color:= clBlue;
    Transparent:= True;
    Caption:= '';
    Parent:= WizardForm.ReadyLabel.Parent;
  end;

  tmr1:= TTimer.Create(WizardForm);
  with tmr1 do begin
    Interval:= 500;
    OnTimer:= @tmr1Timer;
  end;
end;

procedure ReadyPage;
var
  ready_str: string;
begin
  ready_str:= WizardForm.ReadyMemo.Text;
  with TLabel.Create(pnl) do
    begin
      SetBounds(45,115,WizardForm.ReadyMemo.Width, WizardForm.ReadyMemo.Height);
      Caption:= ready_str;
      with Font do
        begin
          Color:= WizardForm.ReadyLabel.Font.Color;
          Style:= WizardForm.ReadyLabel.Font.Style;
          Name:= WizardForm.ReadyLabel.Font.Name;
          Size:= WizardForm.ReadyLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TBevel.Create(WizardForm) do
    begin
      SetBounds(40,110, WizardForm.ReadyMemo.Width, WizardForm.ReadyMemo.Height);
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.ReadyLabel.AutoSize;
      SetBounds(40,70, WizardForm.ReadyLabel.Width, WizardForm.ReadyLabel.Height);
      WordWrap:= WizardForm.ReadyLabel.WordWrap;
      Caption:= WizardForm.ReadyLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.ReadyLabel.Font.Color;
          Style:= WizardForm.ReadyLabel.Font.Style;
          Name:= WizardForm.ReadyLabel.Font.Name;
          Size:= WizardForm.ReadyLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  pnl.Repaint;
end;

  procedure CurPageChanged(CurPageID: Integer);
 
  begin
  If CurPageID=wpWelcome then
  begin
      WizardForm.NextButton.OnClick(WizardForm.NextButton);
  end
  else
  If CurPageID=wpReady then
  begin
    WizardForm.BackButton.Hide;
    CreateComponents;
    ReadyPage;
  end
  else
  If CurPageID=wpFinished then
  begin
      WizardForm.NextButton.OnClick(WizardForm.NextButton);
  end;
  end;


volk1234 26-01-2010 03:25 1330011

mash , я вас тоже понял. Затрудняюсь определить в силу того, что ни той ни той версией не пользовался, но судил по коду- раз есть код - значит сюда, если вопрос по юникоду без кода, туда :)

Vengeance 26-01-2010 04:12 1330016

Цитата:

Цитата Tukash
вот! должно работать! главное что бы у тебя в C:\s\a\mode* в папке "а" были файлы а не твоя папка, иначе так и установится папкой, короче в папку "а" кидай файлы напрямую из папки моделс! думаю понял »

То есть мне в папку "a" надо слить те файлы которые у мя устанавливались, при установить модели 1 и 2? А если у них одинаковое название? Короче я вообще не разобрался :(

South 26-01-2010 09:47 1330087

Цитата:

Цитата Chelluga
А Вы бы не могли написать скрипт со всем вышеперечисленным?? »

ну, сейчас я еще раз писать этот скрипт не буду, дождись когда YURSHAT выложит (обещал вроде завтра), у него точно есть
mash,
если не ошибаюсь для работы с юникод-версией инно существует ISSkinU.dll, попробуй ее использовать

Tukash 26-01-2010 12:17 1330181

TNeWNotebookPage не двигаеться в Инно от Рестола... в чем причина?
и все подобные тоже, блин второй день уже мучаюсь она невкатую, все подвинул...
я бы хотел растянуть как обычно, но все поля стоящие на этом месте на двигаються...
вот скрин:

Vengeance
в папку "а" кидаешь модели из первого чекбока, в папку "б" из второго, если они одинаковые они заменят друг друга, поэтому они у тебя в папках!

mash 26-01-2010 12:37 1330204

South, молодчина, так и есть, ведь перед носом же лежала Dll-шка и эта буква U, блин как просто. Спасибо огромное!

vint56 26-01-2010 12:56 1330225

Как можно сделать чтобы установшик не как нельзя было свернуть

svensoft 26-01-2010 13:06 1330236

Вложений: 1
Пока YURSHAT-а нету здесь, может кто-нибудь сможет помочь, плиззз !!! Сделал я рисунок .bmp (497 * 360), вставил код из шапки форума (для вставки фонового рисунка инсталлятора), все вроде запаковалось, в момент старта исталляционного пакета ошибка выскакивает - Runtime Error (at 35:2062) Could not call proc. Посмотрите пожайлуста что там не так ?...

svensoft 26-01-2010 13:19 1330250

Вложений: 1
И вот еще вопросик, как можно вот такую шапку сделать в инсталляторе ?..
Заранее благодарен всем откликнувшимся..

vint56 26-01-2010 13:35 1330262

svensoft, вот сам скрипт http://forum.oszone.net/post-1328266-929.html

svensoft 26-01-2010 13:49 1330273

vint56, спасибо...

Jerichoman 26-01-2010 13:58 1330284

Помогите

vint56 26-01-2010 14:11 1330293

Jerichoman,
[CustomMessages]
russian.ArcTitle=Распаковка FreeArc-архивов...

Jerichoman 26-01-2010 14:21 1330303

vint56
Спс

vint56 26-01-2010 14:50 1330336

это файл картинки progress1.bmp для процесс бара

svensoft 26-01-2010 14:56 1330342

vint56, да , уже понял, спасибо, блин, чего то не нахожу там от куда он фоновую картинку берет и растягивает и где для шапки окна там код, ну да ладно, буду дальше смотреть.. процесс бар - это полоса установки насколько я понимаю, да ?..

vint56 26-01-2010 15:12 1330364

svensoft,
procedure InitializeWizard1();
begin
ExtractTemporaryFile('1.bmp'); распаковывает во времиный каталог

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.Top:= ScaleY(0);
BmpFile.Left:= ScaleX(0);
BmpFile.Width:= ScaleX(790); ширина
BmpFile.Height:= ScaleY(533); высота
BmpFile.Stretch:= true;
BmpFile.Parent:= WizardForm.WelcomePage; первая страничка привествия

svensoft 26-01-2010 15:24 1330375

vint56, ааа, так 1-2-3-4-5 .bmp это и есть фоновые рисунки, я думал что это маленькие изображения "приветствие", "параметры","пуск","установка","завершение",..... понял, СПАСИБО !!!..... А за шапку окна наверное скины отвечают ? вот это наверное :
Код:

Source: "D:\Programs\ISSkin\ISSkin.dll"; DestDir: {app}; Flags: dontcopy
Source: "D:\Programs\ISSkin\Styles\my.cjstyles"; DestDir: {tmp}; Flags: dontcopy


vint56 26-01-2010 15:29 1330377

svensoft, нет это за скин удаления

Sotonisto 26-01-2010 19:08 1330587

svensoft, сейчас все объясню.
За черную рамку инстала отвечают скины. Я использовал свой скин (но он переделан из скина Tiger).
Незнаю поможет вам или нет, но вот отсюда можно скачать архив http://rghost.ru/888810 - в нем все, что
я использовал для создания инсталла (кроме музыки).
-----
А вот сам скрипт использования скина (для любого инсталлятора)
читать дальше »
[Files]
Source: "D:\Programs\ISSkin\ISSkin.dll"; DestDir: {app}; Flags: dontcopy
Source: "D:\My Skin\my.cjstyles"; DestDir: {tmp}; Flags: dontcopy

[code]
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';
procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('my.cjstyles');
LoadSkin(ExpandConstant('{tmp}\my.cjstyles'), '');
Result := True;
end;

procedure DeinitializeSetup();
begin
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
UnloadSkin();
end;

Tukash 26-01-2010 20:10 1330630

Sotonisto
ксати а чем переделать-то уже готовый скиН???

YURSHAT 26-01-2010 20:23 1330647

Цитата:

Цитата Tukash
ксати а чем переделать-то уже готовый скиН??? »

Этой прогой - ISSkin Программа для создания и добавления в инсталлятор кастомных скинов. Изменить можно практически любой элемент окна.

svensoft 26-01-2010 21:16 1330700

vint56, Sotonisto, Спасибо большое за инфу подробную, а у вас ребята кнопки живые ?.. Я имею в виду, когда на кнопку наводишь мышкой подстветка там, ну как в стандартном инсталляторе. У меня чего-то дубовые они вообще..))

YURSHAT 26-01-2010 22:46 1330798

Цитата:

Цитата svensoft
А за шапку окна наверное скины отвечают ? вот это наверное :
Код:
Source: "D:\Programs\ISSkin\ISSkin.dll"; DestDir: {app}; Flags: dontcopy
Source: "D:\Programs\ISSkin\Styles\my.cjstyles"; DestDir: {tmp}; Flags: dontcopy »

Цитата:

Цитата vint56
нет это за скин удаления »

vint56, не совсем верный ответ
Они отвечают за скин вобщем (установка\удаление). А в папку назначение распаковываются, чтобы деинсталлятору было откуда подхвачивать скин.

svensoft 26-01-2010 22:50 1330801

YURSHAT, а можно ли как-то изменить шапку окна инсталлятора другими способами, не при помощи скинов ?..
И вот еще вопрос, можно ли вот здесь :
Код:

BmpFile:= TBitmapImage.Create(WizardForm);                             
 BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\image.bmp'));
 BmpFile.Top:= ScaleY(0);
 BmpFile.Left:= ScaleX(0);
 BmpFile.Width:= ScaleX(790);
 BmpFile.Height:= ScaleY(533);
 BmpFile.Stretch:= true;
 BmpFile.Parent:= WizardForm.ReadyPage;
 
 BmpFile:= TBitmapImage.Create(WizardForm);
 BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\image.bmp'));
 BmpFile.Top:= ScaleY(0);
 BmpFile.Left:= ScaleX(0);
 BmpFile.Width:= ScaleX(790);
 BmpFile.Height:= ScaleY(533);
 BmpFile.Stretch:= true;
 BmpFile.Parent:= WizardForm.InstallingPage;

прописать в строке что-то подобное BmpFile.Parent:= WizardForm.ReadyPage, WizardForm.InstallingPage; (это конечно пробовал - не работает), чтобы не повторять код для обеих страниц. ?...

semiono 26-01-2010 23:02 1330810

Мне нужно продолжить то что я начал...
Код:

[C*de]
function Const1(Param: String): String;
begin
  Result := ExpandConstant('{pf}');
end;

function Const2(Param: String): String;
begin
  Result := ExpandConstant('{sys}');
end;

function Const3(Param: String): String;
begin
  Result := ExpandConstant('{sys}');
end;

function Const4(Param: String): String;
begin
  Result ==  const dwoffset: dword = $11223344;
end;

[Registry]
Root: HKLM; Subkey: "Software\$reg.exe"; ValueType: string; ValueName: "1"; ValueData: "{code:Const1}"; Flags: noerror; Permissions: admins-full
Root: HKLM; Subkey: "Software\$reg.exe"; ValueType: string; ValueName: "2"; ValueData: "{code:Const2}"; Flags: noerror; Permissions: admins-full
Root: HKLM; Subkey: "Software\$reg.exe"; ValueType: multisz; ValueName: "3"; ValueData: "{code:Const3}"; Flags: noerror; Permissions: admins-full
Root: HKLM; Subkey: "Software\$reg.exe"; ValueType: dword; ValueName: "4"; ValueData: "{code:Const4}"; Flags: noerror; Permissions: admins-full

С двордом я запарился, так как не знаю паскаль, и это надо исправить, подскажите как?
И мне не нравиться частый вызов функции, нельзя ли просто константы в секции код указать?
Мне просто пока надо получить одинаковые заданные константы в двух секциях [code] / [registry]
чтоб не писать по два раза.

YURSHAT 26-01-2010 23:16 1330822

Цитата:

Цитата svensoft
YURSHAT, а можно ли как-то изменить шапку окна инсталлятора другими способами, не при помощи скинов ?..

И вот еще вопрос, можно ли вот здесь : »

1. Можно. Отключи строку заголовка ( WizardForm.BorderStyle:=bsNone) и рисуй на фоновой картинке, что хочешь (шапку). Пример прикрепляю.

2. BmpFile.Parent:= WizardForm;

svensoft 26-01-2010 23:34 1330839

YURSHAT, понятно, СПАСИБО !!! А еще вопрос, как на этом форуме благодарности отправлять ?.. :) А то мне уже надо 100 благодарностей тебе отправить, а я чего-то полазил, полазил, и не нашел где это можно сделать...

YURSHAT 26-01-2010 23:55 1330864

svensoft, с тебя бутылка :wink:

svensoft 27-01-2010 00:40 1330880

Цитата:

Цитата YURSHAT
2. BmpFile.Parent:= WizardForm; »

не берет чего-то, вообще рисунок пропадает на всех страницах.. :unsure: , точнее без указания идентификатора конкректной страницы не отображается..

YURSHAT 27-01-2010 00:53 1330891

Цитата:

Цитата svensoft
не берет чего-то, вообще рисунок пропадает на всех страницах.. , точнее без указания идентификатора конкректной страницы не отображается.. »

Это зависит от того как у тебя в скрипте все устроено

svensoft 27-01-2010 01:19 1330901

Вложений: 1
Ну как бы, вот исходник скрипта, но правда там черт ногу сломит, тренировочно-пробовательный скрипт, все до кучи, половина закоментировано, там сразу после констант :

mash 27-01-2010 02:10 1330925

При использовании скина при установке самое первое окно выбора языка обычное, а когда выбрал язык, начиная с приветствия все диалоги "заскинованы". Скажите, можно это как то поправить?

A1EXXX 27-01-2010 02:23 1330935

mash, никак.

Sotonisto 27-01-2010 03:11 1330958

Цитата:

Цитата mash
При использовании скина при установке самое первое окно выбора языка обычное, а когда выбрал язык, начиная с приветствия все диалоги "заскинованы". Скажите, можно это как то поправить? »

Что то я себе это плохо представляю. Скрины в студию! :)

svensoft 27-01-2010 03:39 1330970

Sotonisto, посмотрел твою сборку, очень впечатляет, супер !!!... Вот еще бы педали мигали как в скине при наведении мыши , вообще цены бы ему небыло... :up

Sotonisto 27-01-2010 03:41 1330972

Цитата:

Цитата svensoft
Ну как бы, вот исходник скрипта, но правда там черт ногу сломит »

1. Ты отключил страницу выбора папки для установки твоего приложения. Если ты это действительно хотел - пропиши путь по которому оно должно установиться.
2. Я когда создавал свой инсталл изменял прогресс бар, но тебе это (как я понял) не нужно. Так что удали 2 эти строки.
читать дальше »
Код:

#define PB_ImageFile "progress.bmp"
[Files]
Source: {#PB_ImageFile}; DestDir: {tmp}; Flags: recursesubdirs ignoreversion


3. Вот тут ошибка:
читать дальше »
Код:

[Files]
Source: "C:\Documents and Settings\Alexander\Рабочий стол\XXX\заливаем REMOTE.OFFCE.MANAGER.4.1\через 15 минут\Делаем дистрибутив\autorun.exe"; DestDir: "{app}"; Flags: ignoreversion
//Source: {#PB_ImageFile}; DestDir: {tmp}; Flags: recursesubdirs ignoreversion
Source: "C:\Documents and Settings\Alexander\Рабочий стол\XXX\image.bmp"; Flags: dontcopy
Source: "C:\Documents and Settings\Alexander\Рабочий стол\XXX\button.bmp"; DestDir: {tmp}; Flags: dontcopy


Все изображения, которые используются для оформления инсталла должны быть записаны в самом начале секции [Files], а файлы твоей программы должны быть в самом конце. Кароче вот так:
читать дальше »
Код:

[Files]
Source: "C:\Documents and Settings\Alexander\Рабочий стол\XXX\image.bmp"; Flags: dontcopy nocompression
Source: "C:\Documents and Settings\Alexander\Рабочий стол\XXX\button.bmp"; DestDir: {tmp}; Flags: dontcopy nocompression
Source: "C:\Documents and Settings\Alexander\Рабочий стол\XXX\заливаем REMOTE.OFFCE.MANAGER.4.1\через 15 минут\Делаем дистрибутив\autorun.exe"; DestDir: "{app}"; Flags: ignoreversion



P.S: если найду еще что-то - напишу :)
P.P.S: лучше создай на жестком для всех файлов отдельную папку (например "setup"). Так будет гораздо проще, а то у тебя километровые пути к файлам :)

Цитата:

Цитата svensoft
Вот еще бы педали мигали как в скине при наведении мыши , вообще цены бы ему небыло »

Ну можно просто удалить секцию с текстурой кнопок - кнопки будут от скина :) в том архиве что я вылаживал ранее - есть 2 скина (tiger и мой) у них черные кнопки и при наведении они изменяются :)

svensoft 27-01-2010 03:50 1330977

Sotonisto, а, та не, тот исходник что выше висит, то так, тренировочный полигон, это я у YURSHAT-а, спрашивал на предыдущей странице как вот эти два фрагмента кода соединить в один :
Код:

BmpFile:= TBitmapImage.Create(WizardForm);                             
 BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\image.bmp'));
 BmpFile.Top:= ScaleY(0);
 BmpFile.Left:= ScaleX(0);
 BmpFile.Width:= ScaleX(790);
 BmpFile.Height:= ScaleY(533);
 BmpFile.Stretch:= true;
 BmpFile.Parent:= WizardForm.ReadyPage;
 
 BmpFile:= TBitmapImage.Create(WizardForm);
 BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\image.bmp'));
 BmpFile.Top:= ScaleY(0);
 BmpFile.Left:= ScaleX(0);
 BmpFile.Width:= ScaleX(790);
 BmpFile.Height:= ScaleY(533);
 BmpFile.Stretch:= true;
 BmpFile.Parent:= WizardForm.InstallingPage;

но все равно приму к сведению что ты сказал ))..

Sotonisto 27-01-2010 04:12 1330981

Я там все правильно написал :) чем тебе фрагмента кода не нравится? :)
А как иначе селать изображения на каждой странице?

YURSHAT 27-01-2010 04:17 1330983

Наложение текстур на кнопки инсталлятора. Кнопки имеют три состояния: нормальное, при наведении, при клике.

Текстура прилагается
Скрипт
Код:

[Setup]
AppName=Test
AppVerName=Test
DefaultDirName={pf}\Test
OutputDir=userdocs:Test.

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

[Files]
;Изображение размером 240х23
Source: button.bmp; DestDir: {tmp}; Flags: dontcopy

[Code_]

const
ButtonWidth = 80;
ButtonHeight = 23;

bidBack = 0;
bidNext = 1;
bidCancel = 2;
bidDirBrowse = 3;
bidGroupBrowse = 4;

var
WizardLabel: TLabel;
ButtonPanel: array [0..4] of TPanel;
ButtonImage: array [0..4] of TBitmapImage;
ButtonLabel: array [0..4] of TLabel;
n: Integer;

procedure ButtonLabelClick(Sender: TObject);
var
Button: TButton;
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
case TLabel(Sender).Tag of
bidBack: Button:=WizardForm.BackButton
bidNext: Button:=WizardForm.NextButton
bidCancel: Button:=WizardForm.CancelButton
bidDirBrowse: Button:=WizardForm.DirBrowseButton
bidGroupBrowse: Button:=WizardForm.GroupBrowseButton
else
Exit
end
Button.OnClick(Button)
end;

procedure ButtonLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if ButtonLabel[TLabel(Sender).Tag].Enabled then
ButtonImage[TLabel(Sender).Tag].Left:=-ButtonWidth
end;

procedure ButtonLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
end;

procedure ButtonLabelMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if ButtonLabel[TLabel(Sender).Tag].Left <> -80 then
begin
for n:=0 to 4 do ButtonImage[n].Left:= 0
end;
if ButtonLabel[TLabel(Sender).Tag].Enabled then
begin
if ButtonLabel[TLabel(Sender).Tag].Left <> -80 then
ButtonImage[TLabel(Sender).Tag].Left:= -160
end;
end;

procedure WizardLabelMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if ButtonLabel[TLabel(Sender).Tag].Left <> -80 then
for n:=0 to 4 do ButtonImage[n].Left:= 0
end;

procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
Image: TBitmapImage;
Panel: TPanel;
Labl: TLabel;

begin
Panel:=TPanel.Create(WizardForm)
Panel.Left:=AButton.Left
Panel.Top:=AButton.Top
Panel.Width:=AButton.Width
Panel.Height:=AButton.Height
Panel.Tag:=AButtonIndex
Panel.Parent:=AButton.Parent
ButtonPanel[AButtonIndex]:=Panel

Image:=TBitmapImage.Create(WizardForm)
Image.Width:=240
Image.Height:=23
Image.Enabled:=False
Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\button.bmp'))
Image.Parent:=Panel
ButtonImage[AButtonIndex]:=Image

with TLabel.Create(WizardForm) do begin
Tag:=AButtonIndex
Parent:=Panel
Width:=Panel.Width
Height:=Panel.Height
Transparent:=True
OnClick:=@ButtonLabelClick
OnDblClick:=@ButtonLabelClick
OnMouseMove:=@ButtonLabelMove
OnMouseDown:=@ButtonLabelMouseDown
OnMouseUp:=@ButtonLabelMouseUp
end

Labl:=TLabel.Create(WizardForm)
Labl.Left:=23
Labl.Top:=5
Labl.Autosize:=True
Labl.Alignment:=taCenter
Labl.Tag:=AButtonIndex
Labl.Transparent:=True
Labl.Font.Color:=clWhite
Labl.Caption:=AButton.Caption
Labl.OnClick:=@ButtonLabelClick
Labl.OnDblClick:=@ButtonLabelClick
Labl.OnMouseMove:=@ButtonLabelMove
Labl.OnMouseDown:=@ButtonLabelMouseDown
Labl.OnMouseUp:=@ButtonLabelMouseUp
Labl.Parent:=Panel
ButtonLabel[AButtonIndex]:=Labl
end;

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
ButtonLabel[AButtonIndex].Caption:=AButton.Caption
ButtonPanel[AButtonIndex].Visible:=AButton.Visible
ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled
ButtonLabel[AButtonIndex].Left:= ButtonPanel[AButtonIndex].Width div 2 - ButtonLabel[AButtonIndex].Width div 2;
ButtonLabel[AButtonIndex].Top:= ButtonPanel[AButtonIndex].Height div 2 - ButtonLabel[AButtonIndex].Height div 2;
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=True
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=False
end;

procedure InitializeWizard();
begin
WizardLabel:= TLabel.Create(WizardForm)
WizardLabel.Left:= ScaleX(0)
WizardLabel.Top:= ScaleY(0)
WizardLabel.Width:= ScaleX(497);
WizardLabel.Height:= ScaleY(360);
WizardLabel.Transparent:= True;
WizardLabel.AutoSize:=false;
WizardLabel.Caption:='';
WizardLabel.OnMouseMove:=@WizardLabelMove
WizardLabel.Parent:= WizardForm;

WizardForm.BackButton.Width:=ButtonWidth
WizardForm.BackButton.Height:=ButtonHeight

WizardForm.NextButton.Width:=ButtonWidth
WizardForm.NextButton.Height:=ButtonHeight

WizardForm.CancelButton.Width:=ButtonWidth
WizardForm.CancelButton.Height:=ButtonHeight

WizardForm.DirBrowseButton.Left:=337
WizardForm.DirBrowseButton.Width:=ButtonWidth
WizardForm.DirBrowseButton.Height:=ButtonHeight

WizardForm.GroupBrowseButton.Left:=337
WizardForm.GroupBrowseButton.Width:=ButtonWidth
WizardForm.GroupBrowseButton.Height:=ButtonHeight

WizardForm.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick

WizardForm.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick

ExtractTemporaryFile('button.bmp')
LoadButtonImage(WizardForm.BackButton,bidBack)
LoadButtonImage(WizardForm.NextButton,bidNext)
LoadButtonImage(WizardForm.CancelButton,bidCancel)
LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;

procedure CurPageChanged(CurPageID: Integer);
begin
UpdateButton(WizardForm.BackButton,bidBack)
UpdateButton(WizardForm.NextButton,bidNext)
UpdateButton(WizardForm.CancelButton,bidCancel)
UpdateButton(WizardForm.DirBrowseButton,bidDirBrowse)
UpdateButton(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;



ЗЫ. Serega, можно заменить пример в шапке.

Sotonisto 27-01-2010 05:29 1330999

Цитата:

Цитата YURSHAT
Хотите мигающие педали - ловите! »

Мне оно не оч то и нуно - если че - можно удалить наложение текстуры и будут использоваться кнопки скина.
Но вот я попробовал и вот что у меня :-\

YURSHAT 27-01-2010 06:05 1331011

Цитата:

Цитата Sotonisto
Но вот я попробовал и вот что у меня :-\ »

Ты допустил ошибку, в
Код:

var
WizardLabel: TLabel;
ButtonPanel: array [0..4] of TPanel;
ButtonImage: array [0..4] of TBitmapImage;
ButtonLabel: array [0..4] of TLabel;
n: Integer;

Цитата:

Цитата Sotonisto
Мне оно не оч то и нуно »

Ну я никому и не навязываю. Тебе не нужно - пригодится другим...

Sotonisto 27-01-2010 06:13 1331013

Цитата:

Цитата YURSHAT
n: Integer; »

хы... как эт я скопировал полностью твой скрипт а у меня этой строки вообще нету о_0

vint56 27-01-2010 07:02 1331023

YURSHAT, как можно сделать так чтобы установшик не как невозможно было свернуть чтобы он стоял по центру

МИШАНЧИК 27-01-2010 07:27 1331034

Подскажите пожалуйста!
Если я разместил на странице чекбокс, то как сделать, чтоб его нельзя было выключить? Типа - Flags: fixed;
Код:

LIVE:= TCheckBox.Create(WizardForm);
  with LIVE do
  begin
  Parent:= WizardForm.SelectDirPage;
  Left:= ScaleX(65);
  Top:= ScaleY(360);
  Width:= ScaleX(14);
  Height:= ScaleY(14);
  TabOrder:= 0;
  Checked:= True;
end;

  LIVELabel:= TLabel.Create(WizardForm);
  with LIVELabel do
  begin
  Caption:= ExpandConstant('{cm:LIVE}');
  Left:= ScaleX(90); 
  Top:= ScaleY(360); 
  Width:= ScaleX(150);
  Height:= ScaleY(13);
  Font.Name:= 'Georgia';
  Font.Size:= 8;
  Font.Style:= [fsBold, fsItalic];
  Font.Color:= ClWhite;
  Transparent := True;
  Parent:= WizardForm.SelectDirPage;
  OnClick:= @LIVELabelOnClick;
end;


svensoft 27-01-2010 11:30 1331199

Цитата:

Цитата Sotonisto
Я там все правильно написал чем тебе фрагмента кода не нравится?
А как иначе селать изображения на каждой странице? »

Да у тебя в коде все правильно написано, и даже великолепно и мне все нравится, и спасибо что выложил такой очень полезный материал :) .. У тебя на каждой странице - разные фоновые картинки, а у меня в коде один и тот-же файл картинки на двух страницах, вот я и думал - как код не плодить лишний в модуле :
Код:

BmpFile:= TBitmapImage.Create(WizardForm);                             
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\image.bmp'));
 BmpFile.Top:= ScaleY(0);
 BmpFile.Left:= ScaleX(0);
 BmpFile.Width:= ScaleX(790);
 BmpFile.Height:= ScaleY(533);
 BmpFile.Stretch:= true;
BmpFile.Parent:= WizardForm.ReadyPage;
 
 BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\image.bmp'));
 BmpFile.Top:= ScaleY(0);
 BmpFile.Left:= ScaleX(0);
 BmpFile.Width:= ScaleX(790);
 BmpFile.Height:= ScaleY(533);
 BmpFile.Stretch:= true;
BmpFile.Parent:= WizardForm.InstallingPage;

YURSHAT, тут как всегда РЕСПЕКТ !!! И огромное человеческое СПАСИБО !!! :)

mash 27-01-2010 12:47 1331280

Цитата:

Цитата Sotonisto
Цитата mash:
Цитата:

При использовании скина при установке самое первое окно выбора языка обычное, а когда выбрал язык, начиная с приветствия все диалоги "заскинованы". Скажите, можно это как то поправить?
Что то я себе это плохо представляю. Скрины в студию!
------- »


A1EXXX 27-01-2010 12:58 1331284

mash, я ж писал - никак. Делай инсталл одноязычным и всё...

mash 27-01-2010 13:07 1331294

A1EXXX, Я видел что Вы писали, но в том то и дело, что нужно 2 языка или же отказаться от скинов. Я не очень в этих скриптах разбираюсь, но помоему тут дело "очереди", т.е. диалог выбора появляется раньше, чем "скинуется" установка.

A1EXXX 27-01-2010 13:15 1331309

Не встречал функции, которая могла загрузить скин быстрее, чем InitializeSetup. Не знаю, можно ли сделать автовыбор языка установщика, в зависимости от языка системы (раз уж так нужны оба)... Если можно, то местные программисты должны подкинуть примерчик :)

mash 27-01-2010 13:18 1331314

Автовыбор тоже держу в голове, надеюсь на чудо, на примерчик.

mash 27-01-2010 14:09 1331365

Лучше бы примерчик, если таковой можно придумать, несколькоязычная установка "палит" инсталлятор со скином. :)

YURSHAT 27-01-2010 18:32 1331585

Цитата:

Цитата vint56
YURSHAT, как можно сделать так чтобы установшик не как невозможно было свернуть чтобы он стоял по центру »


Так
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.

[code_]
const
  SC_MOVE = $F010;
  MF_BYCOMMAND = 0;

function GetSystemMenu(Wnd: HWnd; bRevert: boolean): HWnd;
external 'GetSystemMenu@user32.dll stdcall';

function RemoveMenu(hMenu: HWnd; uPosition: Integer; uFlags: Longint): boolean;
external 'RemoveMenu@user32.dll stdcall';

procedure InitializeWizard;
begin
  WizardForm.BorderIcons:=[biSystemMenu]
  RemoveMenu(GetSystemMenu(WizardForm.Handle, false), SC_MOVE, MF_BYCOMMAND);
end;

пойдет?

svensoft 28-01-2010 01:28 1331873

Вложений: 1
YURSHAT, а в скрипте про вчерашние кнопки - там должны они после отведения мышки возвращаться в обычное состояние или нет ?... У меня так получается, навожу на кнопку - вид меняется, отвожу мышку от кнопки - вид не изменяется назад :

YURSHAT 28-01-2010 01:45 1331882

Цитата:

Цитата svensoft
а в скрипте про вчерашние кнопки - там должны они после отведения мышки возвращаться в обычное состояние или нет ? »

Конечно должны. Я так понял ты имеешь ввиду кнопку "Обзор". Если в с крипте скрыть InnerNotebook и OuterNotebook - будут работать нормально.

svensoft 28-01-2010 01:55 1331889

Цитата:

Цитата YURSHAT
Я так понял ты имеешь ввиду кнопку "Обзор" »

Нет, у меня со всеми педальками такая проблема.. :( .. Сто пудово где-то я накосячил, а вот где , это вопрос. Посмотри пожайлуста, если есть свободное время.. Выше текст прикрепил..

Добавил :
А вот то, что ты сказал (InnerNotebook и OuterNotebook) - сделал их невидимыми и правда все заработало, но у меня все кнопки не работали, не только "Обзор". Но после скрытия InnerNotebook и OuterNotebook)у меня фоновая картинка исчезла вместе с кнопкой "Обзор" в форме..

vint56 28-01-2010 07:12 1331973

YURSHAT, большое спасибо за помощь

YURSHAT 28-01-2010 07:27 1331977

Цитата:

Цитата svensoft
А вот то, что ты сказал (InnerNotebook и OuterNotebook) - сделал их невидимыми и правда все заработало, но у меня все кнопки не работали, не только "Обзор". Но после скрытия InnerNotebook и OuterNotebook)у меня фоновая картинка исчезла вместе с кнопкой "Обзор" в форме.. »

Посмотри как это сделано в Vista Lite Skin (я выкладывал этот скриптик пару страниц назад) Там картинка вставлена при скрытых InnerNotebook и OuterNotebook.

ЗЫ. Вообще если делать по-нормальному (вставлять картинку в окно инсталла) то InnerNotebook и OuterNotebook нужно скрывать полюбому.

vint56 28-01-2010 07:57 1331989

YURSHAT, в windows 7 в низу когда установшик работает есть иконка если нажать установшик сворачивается что можно сделать чтобы там тоже нельзя было сверуть

vint56 28-01-2010 10:18 1332102

YURSHAT, ты немог бы поправить скрипт Call of Duty(R) - World at War + 2 DiskPromts 1.0 http://upwap.ru/727988
Этот скипт работает FreeArc+Precomp+2DiskPromts проблема в том после FreeArc как распаковал перед precomp вылетает 2-3секунды 4 процессбара а потом вроде все нормально

South 28-01-2010 10:38 1332125

Цитата:

Цитата vint56
YURSHAT, в windows 7 в низу когда установшик работает есть иконка если нажать установшик сворачивается что можно сделать чтобы там тоже нельзя было сверуть »

очень странное желание - сделать невозможность свернуть установщик. ты случайно не ту дрянь пыташься написать, которая денег просит за смс? если нет, то все равно не понятно. заставлять пользователя пялится на твой инсталл все то время пока идет установка это знаешь ли перебор

ЗЫ еще есть кнопка "свернуть все окна", еще есть Alt+Tab, еще есть Ctrl+Alt+Del и т.д., вобщем много способов убрать твой инсталл с экрана. все их можно обойти, но я тебе в этом не помощник, т.к. это не правильно

vint56 28-01-2010 11:41 1332185

South, нет я не пытаюсь написать ту дрянь для смс потому что я не могу решить проблему с процесс баром когда сворачиваеш установшик и разворачиваеш проблема с процесс баром он белый решить не как потом что идет распаковка precomp потому что precomp потребляет много оперативной памяти вот почему я хочу сделать чтобы его нельзя было свернуть

South 28-01-2010 12:49 1332254

Цитата:

Цитата vint56
South, нет я не пытаюсь написать ту дрянь для смс потому что я не могу решить проблему с процесс баром когда сворачиваеш установшик и разворачиваеш проблема с процесс баром он белый решить не как потом что идет распаковка precomp потому что precomp потребляет много оперативной памяти вот почему я хочу сделать чтобы его нельзя было свернуть »

тогда вопрос нужно ставить по другому - как обновить прогрессбар?
при такой постановке задачи нужно естественно смотреть скрипт. я не буду обещать что помогу, т.к. не работал с прекомпом (могу только предположить, что это распаковщик). все зависит от того как он работает. если у распаковщика есть callback-функция, то в ней нужно обновлять прогрессбар, если нету или она редко вызывается, то правильнее будет обратиться к разработчику прекомпа, чтобы он это дело исправил

svensoft 28-01-2010 15:02 1332416

Цитата:

Цитата YURSHAT
Посмотри как это сделано в Vista Lite Skin (я выкладывал этот скриптик пару страниц назад) Там картинка вставлена при скрытых InnerNotebook и OuterNotebook.
ЗЫ. Вообще если делать по-нормальному (вставлять картинку в окно инсталла) то InnerNotebook и OuterNotebook нужно скрывать полюбому. »

YURSHAT, посмотрел, но там одна картинка для всех страниц. А можно сделать так, чтобы для каждой страницы своя фоновая картинка, и кнопки чтобы в трех положениях нормально работали (включая и "Обзор") ?..

Добавил :
Все, вопрос снят с повестки дня, разобрался ... Правда весь скрипт придется переделывать практически с нуля ...

YURSHAT, спасибо !!!

vint56 28-01-2010 15:40 1332463

svensoft, вот
читать дальше »
#define MyAppName "My Program"
[Setup]
AppId={{1D0BAE20-BB22-4540-BBC7-E7531009F9BF}
AppName=My Program
AppVerName=My Program 1.5
AppPublisher=My Company, Inc.
AppPublisherURL=http://www.example.com/
AppSupportURL=http://www.example.com/
AppUpdatesURL=http://www.example.com/
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
DisableReadyPage=True

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

[CustomMessages]
russian.Welcome1=Вас приветствует Мастер установки игры
russian.Welcome2=Программа установит игру {#MyAppName} на Ваш компьютер.%n%nРекомендуется закрыть антивирусные пакеты, а также все прочие приложения перед тем, как продолжить.%n%nНажмите «Далее», чтобы продолжить, или «Отмена», чтобы выйти из программы установки.
russian.Space=Доступно места на диске:
russian.Space1=Требуется места на диске:
russian.Status=Пожалуйста, подождите, пока игра установится на Ваш компьютер.
russian.DescrLbl1=В какую папку Вы хотите установить {#MyAppName}?
russian.Language=Выберите язык игры
russian.StartMenuLbl=Нажмите «Установить», чтобы продолжить. Если Вы хотите выбрать другую папку, нажмите «Обзор».
russian.Finished1=Установка игры {#MyAppName} успешно завершена.
russian.Finished2=Игра {#MyAppName} была успешно установлена на Ваш компьютер. Для ее запуска выберите соответствующий ярлык в меню «Пуск» или ярлык на Рабочем столе.
russian.Finished3=Нажмите «Завершить», чтобы выйти из программы установки.
russian.DirectX=Обновить DirectX
russian.DirectXInstall=Идет обновление DirectX...
russian.Icons=Добавить ярлык на Рабочий стол
russian.Uninstall=Удалить {#MyAppName}

[Files]
Source: 1.bmp; DestDir: {tmp}

[Icons]
Name: {group}\My Program; Filename: {app}\MyProg.exe
Name: {group}\{cm:UninstallProgram,My Program}; Filename: {uninstallexe}



[code]
var
IconsLabel, NoIconsLabel, DirectXLabel, GroupLabel,
SelectDirLabel, SelectDirBrowseLabel,
PageNameLabel1, PageNameLabel2, PageNameLabel3,
PageDescriptionLabel1, PageDescriptionLabel2, PageDescriptionLabel3,
StatusLabel, FilenameLabel, NeedSpaceLabel,FreeSpaceLabel,
WelcomeLabel1, WelcomeLabel2,FinishedLabel, FinishedHeadingLabel,
SelectStartMenuFolderLabel, SelectStartMenuFolderBrowseLabel, ReadyLabel, NoIconsLabel: TLabel;
DirectX, Icons, NoIconsCheck, Group: TCheckBox;
NeedSize:Integer;
FreeMB, TotalMB: Cardinal;
BmpFile: TBitmapImage;



function InstallDirectX: Boolean;
begin
Result:= DirectX.Checked;
end;

function CreateIcons: Boolean;
begin
Result:=Icons.Checked;
end;

function GroupIcons: Boolean;
begin
Result:=Group.Checked;
end;

procedure DirectXLabelOnClick(Sender: TObject);
begin
if DirectX.Checked = False then
DirectX.Checked:= True else
DirectX.Checked:= False;
end;

procedure IconsOnClick(Sender: TObject);
begin
if Icons.Checked = False then
Icons.Checked:= True else
Icons.Checked:= False;
end;

procedure CheckStartMenuOnClick(Sender: TObject);
begin
if WizardForm.NoIconsCheck.Checked then
begin
WizardForm.GroupEdit.Enabled := not (WizardForm.GroupEdit.Enabled);
WizardForm.GroupBrowseButton.Enabled := False;
end else
begin
WizardForm.GroupEdit.Enabled := True;
WizardForm.GroupEdit.Enabled := WizardForm.GroupEdit.Enabled;
WizardForm.GroupBrowseButton.Enabled := True;
end;
end;

procedure CheckNoIconsCheck(Sender: TObject);
begin
if (WizardForm.NoIconsCheck.Checked = False) then
WizardForm.NoIconsCheck.Checked := True
else
WizardForm.NoIconsCheck.Checked := False;
end;

procedure InitializeWizard();
begin

ExtractTemporaryFile('1.bmp');


BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.Top:= ScaleY(0);
BmpFile.Left:= ScaleX(0);
BmpFile.Width:= ScaleX(790);
BmpFile.Height:= ScaleY(533);
BmpFile.Stretch:= true;
BmpFile.Parent:= WizardForm.WelcomePage;

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.Top:= ScaleY(0);
BmpFile.Left:= ScaleX(0);
BmpFile.Width:= ScaleX(790);
BmpFile.Height:= ScaleY(533);
BmpFile.Stretch:= true;
BmpFile.Parent:= WizardForm.SelectDirPage;

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.Top:= ScaleY(0);
BmpFile.Left:= ScaleX(0);
BmpFile.Width:= ScaleX(790);
BmpFile.Height:= ScaleY(533);
BmpFile.Stretch:= true;
BmpFile.Parent:= WizardForm.SelectProgramGroupPage;

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.Top:= ScaleY(0);
BmpFile.Left:= ScaleX(0);
BmpFile.Width:= ScaleX(790);
BmpFile.Height:= ScaleY(533);
BmpFile.Stretch:= true;
BmpFile.Parent:= WizardForm.InstallingPage;

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.Top:= ScaleY(0);
BmpFile.Left:= ScaleX(0);
BmpFile.Width:= ScaleX(790);
BmpFile.Height:= ScaleY(533);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.FinishedPage;

WizardForm.ClientWidth:=ScaleX(790);
WizardForm.ClientHeight:=ScaleY(533);
WizardForm.Font.Color:=$ffffff;
WizardForm.Center;

with WizardForm do
begin
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
WelcomeLabel1.Hide;
WelcomeLabel2.Hide;
DiskSpaceLabel.Hide;
SelectDirBitmapImage.Hide;
SelectDirBrowseLabel.Hide;
SelectDirLabel.Hide;
FinishedHeadingLabel.Hide;
FinishedLabel.Hide;
MainPanel.Hide;
FilenameLabel.Hide;
StatusLabel.Hide;
SelectStartMenuFolderLabel.Hide;
SelectStartMenuFolderBrowseLabel.Hide;
ReadyLabel.Hide;
end;

with WizardForm do
begin
InnerNotebook.Left := ScaleX(0);
InnerNotebook.Top := ScaleY(0);
InnerNotebook.Width := ScaleX(790);
InnerNotebook.Height := ScaleY(533);
OuterNotebook.Left := ScaleX(0);
OuterNotebook.Top := ScaleY(0);
OuterNotebook.Width := ScaleX(790);
OuterNotebook.Height := ScaleY(533);
end;

//Скрывем стандартные надписи, значки и чекбоксы=
with WizardForm do
begin
DirBrowseButton.Left:=DirBrowseButton.Left + ScaleX(40); //Местоположение кнопки "Обзор" от левого края, на странице выбора пути установки
DirBrowseButton.Top:=DirBrowseButton.Top + ScaleY(72); //Местоположение кнопки "Обзор" сверху, на странице выбора пути установки
DirEdit.Left:=DirEdit.Left + ScaleX(40); //Местоположение панели, где отображается путь от левого края, на странице выбора пути установки
DirEdit.Top:=DirEdit.Top + ScaleY(72); //Местоположение панели, где отображается путь сверху, на странице выбора пути установки
GroupBrowseButton.Left:=GroupBrowseButton.Left + ScaleX(40); //Местоположение кнопки "Обзор" от левого края, на странице создания ярлыков в Главном Меню
GroupBrowseButton.Top:=GroupBrowseButton.Top + ScaleY(72); //Местоположение кнопки "Обзор" сверху, на странице создания ярлыков в Главном Меню
GroupEdit.Left:=GroupEdit.Left + ScaleX(40); //Местоположение панели, где отображается путь от левого края, на странице создания ярлыков в Главном Меню
GroupEdit.Top:=GroupEdit.Top + ScaleX(72); //Местоположение панели, где отображается путь сверху, на странице создания ярлыков в Главном Меню
GroupEdit.Color:=ClBlack //Цвет панели, где отображается путь, на странице создания ярлыков в Главном Меню
NextButton.BringToFront; //Выносим на передний план кнопки=
BackButton.BringToFront; //Выносим на передний план кнопки=
CancelButton.BringToFront; //Выносим на передний план кнопки=
Font.Style:=[]; //Стиль шрифта, используемого в инсталляторе
Font.Name:='MS Sans Serif'; //Имя шрифта, используемого в инсталляторе
DirEdit.Color:=clBlack; //Цвет панели, где отображается путь, на странице выбора пути установки
Font.Color:=clWhite; //Цвет шрифта, используемого в инсталляторе
ProgressGauge.Top:=ScaleY(120); //Местоположение Прогресс-бара сверху
ProgressGauge.Left:=ScaleX(20); //Местоположение Прогресс-бара от левого края
ProgressGauge.Width:=ScaleX(457); //Ширина Прогресс-бара
ReadyMemo.Left:=ScaleX(40); //Местоположение сверху панели где отображаются данные выбранных компонентов, на странице готовности установки
ReadyMemo.Top:=WizardForm.ReadyMemo.Top + ScaleY(72) //Цвет шрифта в панели где отображаются данные выбранных компонентов, на странице готовности установки
ReadyMemo.Font.Color:=clBlack; //Стиль панели где отображаются данные выбранных компонентов, на странице готовности установки. Без скроллов - ssNone, с вертикальным скроллом - ssVertial, с горизонтальным скроллом - ssHorizontal, и со всеми скроллами - просто уберите эту строчку или ssBoth
ReadyMemo.ScrollBars:=ssVertical; //ssNone
NextButton.Left:=NextButton.Left + ScaleX(255);
NextButton.top:=NextButton.top + ScaleX(160);
BackButton.Left:=BackButton.Left + ScaleX(250);
BackButton.top:=BackButton.top + ScaleX(160);
CancelButton.Left:=CancelButton.Left + ScaleX(250);
CancelButton.top:=CancelButton.top + ScaleX(160);
DirBrowseButton.BringToFront;
DirBrowseButton.Left:=DirBrowseButton.Left + ScaleX(280);
GroupBrowseButton.Left:=GroupBrowseButton.Left + ScaleX(280);
GroupBrowseButton.BringToFront;

end;

////////////////////// WelcomePage //////////////////////

WelcomeLabel1:= TLabel.Create(WizardForm);
with WelcomeLabel1 do
begin
Left:= ScaleX(70);
Top:= ScaleY(180);
Width:= ScaleX(650);
Height:= ScaleY(65);
AutoSize:= false;
Alignment := taCenter;
Transparent:= true;
WordWrap:= true;
Font.Name:='Georgia';
Font.Size:= 16;
Font.Color:=ClWhite;
Font.Style := [fsBold];
Parent:= WizardForm.WelcomePage;
Caption:= ExpandConstant('{cm:Welcome1}')+#13+('{#MyAppName}');
end;

WelcomeLabel2:=TLabel.Create(WizardForm);
with WelcomeLabel2 do
begin
Top:= ScaleY(270);
Left:= ScaleX(70);
Width:= ScaleX(650);
Height:= ScaleY(200);
AutoSize:= false;
WordWrap:= true;
Font.Name:= 'Georgia';
Font.Size:= 11
Font.Style := [fsBold, fsItalic];
Font.Color:=ClWhite;
Transparent:= true;
Parent:= WizardForm.WelcomePage;
Caption:= ExpandConstant('{cm:Welcome2}');
end;

////////////////////// WelcomePage //////////////////////

////////////////////// SelectDirPage //////////////////////

PageNameLabel1:= TLabel.Create(WizardForm);
with PageNameLabel1 do
begin
Left:= ScaleX(65);
Top:= ScaleY(185);
Width:= ScaleX(300);
Height:= ScaleY(30);
AutoSize:= False;
Font.Name:= 'Georgia'
Font.Size:= 13;
Font.Style:= [fsBold];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm.SelectDirPage;
end;

PageDescriptionLabel1:= TLabel.Create(WizardForm);
with PageDescriptionLabel1 do
begin
Left:=ScaleX(95);
Top:= ScaleY(215);
Width:= ScaleX(600);
Height:= ScaleY(50);
AutoSize:= False;
Font.Name:= 'Georgia'
Font.Size:= 10;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Wordwrap:= True;
Transparent := True;
Parent:= WizardForm.SelectDirPage;
end;

SelectDirBrowseLabel:= TLabel.Create(WizardForm);
with SelectDirBrowseLabel do
begin
Caption:= WizardForm.SelectDirBrowseLabel.Caption;
Left:= ScaleX(120);
Top:= ScaleY(250);
Width:= ScaleX(600);
Height:= ScaleY(50);
AutoSize:= False;
WordWrap:= True;
Font.Name:= 'Georgia'
Font.Size:= 10;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Transparent:= True;
Parent:= WizardForm.SelectDirPage;
end;

with WizardForm do
begin
DirBrowseButton.Top:= ScaleY(305);

DirEdit.Left:= ScaleX(120);
DirEdit.Top:= ScaleY(305);
DirEdit.Width:= ScaleX(460);
DirEdit.Font.Size:= 9;
DirEdit.Font.Style:= [fsBold, fsItalic];
DirEdit.Font.Name:= 'Georgia'
end;

DirectX:= TCheckBox.Create(WizardForm);
with DirectX do
begin
Parent:= WizardForm.SelectDirPage;
Left:= ScaleX(65);
Top:= ScaleY(340);
Width:= ScaleX(14);
Height:= ScaleY(14);
TabOrder:= 0;
Checked:= False;
end;

DirectXLabel:= TLabel.Create(WizardForm);
with DirectXLabel do
begin
Caption:= ExpandConstant('{cm:DirectX}');
Left:= ScaleX(90);
Top:= ScaleY(340);
Width:= ScaleX(150);
Height:= ScaleY(13);
Font.Name:= 'Georgia';
Font.Size:= 8;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm.SelectDirPage;
OnClick:= @DirectXLabelOnClick;
end;

Icons:= TCheckBox.Create(WizardForm);
with Icons do
begin
Parent:= WizardForm.SelectDirPage;
Left:= ScaleX(65);
Top:= ScaleY(360);
Width:= ScaleX(14);
Height:= ScaleY(14);
TabOrder:= 2;
Checked:= False;
end;

IconsLabel:= TLabel.Create(WizardForm);
with IconsLabel do
begin
Caption:=ExpandConstant('{cm:Icons}');
Left:= ScaleX(90);
Top:= ScaleY(360);
Width:= ScaleX(150);
Height:= ScaleY(13);
Font.Name:= 'Georgia';
Font.Size:= 8;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm.SelectDirPage;
OnClick:= @IconsOnClick;
end;

NeedSpaceLabel:= TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent:= WizardForm.SelectDirPage;
Left:= ScaleX(65);
Top:= ScaleY(420);
Width:= ScaleX(209);
Height:= ScaleY(13);
Font.Name:= 'Georgia';
Font.Size:= 8;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Transparent:= True;
end;

FreeSpaceLabel:= TLabel.Create(WizardForm);
with FreeSpaceLabel do
begin
Parent:= WizardForm.SelectDirPage;
Left:= ScaleX(65);
Top:= ScaleY(440);
Width:= ScaleX(209);
Height:= ScaleY(13);
Font.Name:= 'Georgia';
Font.Size:= 8;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Transparent:= True;
end;

////////////////////// SelectDirPage //////////////////////

////////////////////// ProgrammGroupPage //////////////////////

PageNameLabel2:= TLabel.Create(WizardForm);
with PageNameLabel2 do
begin
Left:= ScaleX(65);
Top:= ScaleY(185);
Width:= ScaleX(350);
Height:= ScaleY(30);
AutoSize:= False;
Font.Name:= 'Georgia';
Font.Size:= 13;
Font.Style:= [fsBold];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm.SelectProgramGroupPage;
end;

PageDescriptionLabel2:= TLabel.Create(WizardForm);
with PageDescriptionLabel2 do
begin
Left:=ScaleX(95);
Top:= ScaleY(215);
Width:= ScaleX(600);
Height:= ScaleY(50);
AutoSize:= False;
Font.Name:= 'Georgia'
Font.Size:= 10;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Wordwrap:= True;
Transparent := True;
Parent:= WizardForm.SelectProgramGroupPage;
end;

SelectStartMenuFolderBrowseLabel:=TLabel.Create(WizardForm)
with SelectStartMenuFolderBrowseLabel do
begin
Left:= ScaleX(120);
Top:= ScaleY(250);
Width:= ScaleX(600);
Height:= ScaleY(50);
AutoSize:= False;
WordWrap:= True;
Font.Name:= 'Georgia';
Font.Size:= 10;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
WordWrap:=True
Transparent:=True
Caption:=ExpandConstant('{cm:StartMenuLbl}')
Parent:=WizardForm.SelectProgramGroupPage
end;

WizardForm.NoIconsCheck.Show;
WizardForm.NoIconsCheck.Left := ScaleX(65);
WizardForm.NoIconsCheck.Top := ScaleY(440);
WizardForm.NoIconsCheck.Width := ScaleX(13);
WizardForm.NoIconsCheck.Height := ScaleY(13);
WizardForm.NoIconsCheck.OnClick := @CheckStartMenuOnClick;
WizardForm.NoIconsCheck.Parent := WizardForm.SelectProgramGroupPage;

NoIconsLabel:= TLabel.Create(WizardForm);
with NoIconsLabel do
begin
Caption:=WizardForm.NoIconsCheck.Caption
Left:= ScaleX(90);
Top:= ScaleY(440);
Width:= ScaleX(150);
Height:= ScaleY(13);
Font.Name:= 'Georgia';
Font.Size:= 8;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm.SelectProgramGroupPage
OnClick := @CheckNoIconsCheck;
end;

with WizardForm do
begin
GroupEdit.Left:= ScaleX(120);
GroupEdit.Top:= ScaleY(305);
GroupEdit.Width:= ScaleX(460);
GroupEdit.Font.Size:=9
GroupEdit.Font.Style:= [fsBold, fsItalic];
GroupEdit.Font.Name:= 'Georgia'

GroupBrowseButton.Top:= ScaleY(305);
end;

////////////////////// ProgrammGroupPage //////////////////////

////////////////////// InstallingPage //////////////////////

PageNameLabel3:= TLabel.Create(WizardForm);
with PageNameLabel3 do
begin
Left:= ScaleX(65);
Top:= ScaleY(185);
Width:= ScaleX(150);
Height:= ScaleY(20);
AutoSize:= False;
Font.Name:= 'Georgia';
Font.Size:= 13;
Font.Style:= [fsBold];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm.InstallingPage;
end;

StatusLabel:= TLabel.Create(WizardForm);
with StatusLabel do
begin
Left:=ScaleX(95);
Top:= ScaleY(215);
Width:= ScaleX(600);
Height:= ScaleY(50);
AutoSize:= False;
Font.Name:= 'Georgia';
Font.Size:= 10;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm.InstallingPage;
Caption:= ExpandConstant('{cm:Status}')
end;

FilenameLabel:= TLabel.Create(WizardForm);
with FilenameLabel do
begin
Left:= ScaleX(65);
Top:= ScaleY(275);
Width:= ScaleX(625);
Height:= ScaleY(20);
AutoSize:= False;
Font.Name:= 'Georgia'
Font.Size:= 10;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm.InstallingPage;
end;

with WizardForm do
begin
ProgressGauge.Top:=ScaleY(310);
ProgressGauge.Left:=ScaleX(100);
ProgressGauge.Width:=ScaleX(590);
end;

////////////////////// InstallingPage //////////////////////

////////////////////// FinishedPage //////////////////////

FinishedHeadingLabel:=TLabel.Create(WizardForm);
with FinishedHeadingLabel do
begin
Left:= ScaleX(70);
Top:= ScaleY(180);
Width:= ScaleX(650);
Height:= ScaleY(65)
AutoSize:= false;
Alignment := taCenter;
WordWrap:= true;
Font.Name:='Georgia';
Font.Size:= 16;
Font.Color:=ClWhite;
Font.Style := [fsBold];
Transparent:= true;
Parent:= WizardForm.FinishedPage;
Caption:= ExpandConstant('{cm:Finished1}');
end;

FinishedLabel:= TLabel.Create(WizardForm);
with FinishedLabel do
begin
Top:= ScaleY(270);
Left:= ScaleX(70);
Width:= ScaleX(650);
Height:= ScaleY(200);
AutoSize:= false;
WordWrap:= true;
Font.Name:= 'Georgia'
Font.Size:= 11;
Font.Style := [fsBold, fsItalic];
Font.Color:=ClWhite;
Transparent:= true;
Parent:= WizardForm.FinishedPage;
Caption:= ExpandConstant('{cm:Finished2}')+#13#13+ExpandConstant('{cm:Finished3}');
end;
end;

////////////////////// FinishedPage //////////////////////

procedure CurPageChanged(CurPageID: Integer);
begin
PageNameLabel1.Caption:= WizardForm.PageNameLabel.Caption;
PageDescriptionLabel1.Caption:= WizardForm.PageDescriptionLabel.Caption;
PageNameLabel2.Caption:= WizardForm.PageNameLabel.Caption;
PageDescriptionLabel2.Caption:= WizardForm.PageDescriptionLabel.Caption;
PageNameLabel3.Caption:= WizardForm.PageNameLabel.Caption;

if CurPageID=wpSelectProgramGroup then
begin
If WizardForm.FindComponent('NextButton') is TButton
then
TButton(WizardForm.FindComponent('NextButton')).Caption:='Установить';
end;
end;

YURSHAT 28-01-2010 16:09 1332495

Цитата:

Цитата svensoft
Правда весь скрипт придется переделывать практически с нуля ... »

Придется, но так будет намного лучше...

svensoft 28-01-2010 16:11 1332499

vint56, спасибо за инфу !!!

YURSHAT 28-01-2010 16:25 1332510

Цитата:

Цитата South
YURSHAT, в windows 7 в низу когда установшик работает есть иконка если нажать установшик сворачивается что можно сделать чтобы там тоже нельзя было сверуть »
очень странное желание - сделать невозможность свернуть установщик. ты случайно не ту дрянь пыташься написать, которая денег просит за смс? если нет, то все равно не понятно. заставлять пользователя пялится на твой инсталл все то время пока идет установка это знаешь ли перебор »

vint56, я полностью согласен с учителем :wink: (South, ). Ты выбрал заведомо неправильный подход к решению проблемы. Тебе нужно пытатся довести прогресс-бар до ума, а не пытатся как-то скрыть этот баг ибо это неправильно!.

ЗЫ. windows 7 видел только на скринах :).

vint56 28-01-2010 17:12 1332558

YURSHAT, вот в чем проблема вот скрины если можеш помоги это проблема возникает только когда сворачиваеш и разворачиваеш если не трогать установшик то нормально
1 скрин http://s002.radikal.ru/i197/1001/5f/bad31567c5dd.jpg
2 скрин http://i059.radikal.ru/1001/fd/50007799f5c2.jpg

yamaha 28-01-2010 17:13 1332559

Два вопросика:
Команда для того чтобы создался ярлык после установки и он появился с иконкой.
Команда для для того чтобы во время установки из архива он установил допустим directx

Sotonisto 28-01-2010 18:21 1332638

Цитата:

Цитата yamaha
Команда для того чтобы создался ярлык после установки и он появился с иконкой. »

Чет не понял вопрос. Если тебе нужен ярлык на рабочий стол то вот (ну это если я правильно понял):
читать дальше »
Код:

[Icons]
Name: "{commondesktop}\Имя файла (например Resident Evil)"; Filename: "{app}\файл запуска.exe"; Tasks: desktopicon



Цитата:

Цитата yamaha
Команда для для того чтобы во время установки из архива он установил допустим directx »

Директ можно установить и без всякого копиpования. Просто нужно что бы он находился в одной директории с инсталлятором (например в одном образе).
читать дальше »
Код:

[Run]
Filename: {src}\путь к файлу\файл запуска DirectX.exe; WorkingDir: {src}\название папки DirectX; Parameters: /silent; StatusMsg: "Обновление DirectX..."; Flags: waituntilterminated


Например:
читать дальше »
Код:

[Run]
Filename: {src}\redist\dxsetup.exe; WorkingDir: {src}\redist; Parameters: /silent; StatusMsg: "Обновление DirectX..."; Flags: waituntilterminated


----

vint56, я использую почти такой же инсталл и у меня все нормально. Возможно ты слишком нагрузил инсталл?
Попробуй использовать прогресс бар и кнопки от скина, а не свои.

yamaha 28-01-2010 18:53 1332660

А как мне сделать чтобы создался ярлык если у меня при установке идёт распаковка файлов freearc
И файл запуска внутри

Serega 28-01-2010 19:31 1332692

Цитата:

Цитата South
ты случайно не ту дрянь пыташься написать, которая денег просит за смс? »

:) обычно это программы, а не инсталлятор.
Цитата:

Цитата vint56
потому что precomp потребляет много оперативной памяти »

Если оперативка загружена на 100%, то ничего вы с этим не поделаете, т.е. будут тормозить все программы без исключения.

vint56 28-01-2010 19:38 1332700

Serega, Precomp у меня использует оперативку на 91-100% а фриарк 51-60%

South 28-01-2010 22:28 1332861

Цитата:

Цитата Serega
обычно это программы, а не инсталлятор. »

я в курсе, просто есть люди, которые пытаются использовать программы для создания инсталляторов как полноценную среду разработки приложений
Цитата:

Цитата Serega
Если оперативка загружена на 100%, то ничего вы с этим не поделаете, т.е. будут тормозить все программы без исключения. »

думаю не совсем так. если есть callback-функция, то вызвав в ней принудительное обновление все-таки отрисовка будет идти, хоть и с запозданием

ЗЫ в данном случае это все никчемные рассуждения и предположения, нужно скрипт смотреть

Serega 29-01-2010 18:40 1333690

Цитата:

Цитата South
я в курсе, просто есть люди, которые пытаются использовать программы для создания инсталляторов как полноценную среду разработки приложений »

Ну вот и я поймал камень в свой огород... :) Конструктор для аддона Дополнительные апплеты
Цитата:

Цитата South
то вызвав в ней принудительное обновление все-таки отрисовка будет идти, хоть и с запозданием »

Именно это я и имел ввиду, т.е. задержка с отрисовкой будет...

svensoft 29-01-2010 19:55 1333754

Вложений: 1
YURSHAT, HELP !!! HELP !!! HELP !!! Помоги пожалуйста. Сделал скрипт, все компилирует-пакует, но при открытии вываливается : Runtime Error (at 20: 267): Could not call proc. Уже все переглядел, не знаю что там может быть за затык. Помоги разобраться пожалуйста.

вот скрипт :

YURSHAT 29-01-2010 22:01 1333875

svensoft, выложи все полностью, что нужно для компиляции скрипта

Serega 29-01-2010 22:16 1333884

Цитата:

Цитата svensoft
но при открытии вываливается : Runtime Error (at 20: 267): Could not call proc. »

Сразу на вскидку, первой выполняется процедура WizardFormHideAll, смотрим процедуру внимательно, начиная со строки 149... Помимо стандартных контролов, пытаетесь скрыть те, которые ещё не созданы, отсюда и ошибка.

P.S.
Скрыть все стандартные контролы можно просто написав две строки:
Код:

procedure WizardFormHideAll();
begin
  WizardForm.OuterNotebook.Hide;
  WizardForm.InnerNotebook.Hide;
end;


svensoft 29-01-2010 22:28 1333890

YURSHAT, я завтра выложу, сегодня инет вообще не хочет работать, рвет связь, не получается залить.. :(
Serega, хорошо, посмотрю сейчас, спасибо ..

lexikon 30-01-2010 05:17 1334027

а кто нить в cjstyles копался? ^^
помогите баг исправить http://imglink.ru/show-image.php?id=...ca51c8505a338a
вот сам файл http://narod.ru/disk/17407978000/steam.cjstyles.html

Sotonisto 30-01-2010 07:19 1334035

lexikon, это не баг :) это во всех скинах такое :)

YURSHAT 30-01-2010 07:47 1334039

Цитата:

Цитата Sotonisto
lexikon, это не баг это во всех скинах такое »

Да перестань, я такое в первый раз вижу. Вот, все нормально

vint56 30-01-2010 09:01 1334053

YURSHAT, такое есть дествительно в windows 7 само окно по высоте оно больше но по ширене оно короче потому снизу белое

YURSHAT 30-01-2010 09:04 1334054

Цитата:

Цитата vint56
YURSHAT, такое windows 7 само окно по высоте оно больше но по ширене оно короче »

А, может быть, семеркой не пользовался...

vint56 30-01-2010 09:13 1334055

YURSHAT, уменя тоже самое на tiger.cjstyles править

YURSHAT, как можно наложить на втрой процес бар текстуру

МИШАНЧИК 30-01-2010 10:38 1334084

Цитата:

Цитата vint56
такое есть дествительно в windows 7 »

Ага, у меня тоже на 7 так.

vint56,
Цитата:

Цитата vint56
уменя тоже самое на tiger.cjstyles править »

сбрось пожалуйста правленный tiger.cjstyles - посмотреть.

lexikon 30-01-2010 14:00 1334207

хмм бред :( а других дистрибах норм значит?
может быть как то возможно увеличить размер окна?

Jerichoman 30-01-2010 14:28 1334236

А можно вообще убрать это окно, что бы при нажатии на кнопку "отмена", инсталл просто закрывался не выдавая никаких окон?

vint56 30-01-2010 16:18 1334323

//Как избавиться от запроса подтверждения выхода из инсталлятора?
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:=False;
end;

МИШАНЧИК, я еще пока не делал я пока разбираюс с процесбаром

lexikon 30-01-2010 17:55 1334387

как указать имя uninstaller'у в папке куда установилась программа) вместо стандартного uninst000

PS
за
Цитата:

//Как избавиться от запроса подтверждения выхода из инсталлятора?
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:=False;
end;
огромное спасибо))) но проблемы то не решает :( в других местах можно видеть злочастные белые поля

http://imglink.ru/show-image.php?id=...689a5ab26e02ff

svensoft 30-01-2010 18:42 1334420

YURSHAT, вот выложил полностью скрипт со всем необходимым для него (по поводу вчерашней проблемы). Вчера я все-таки его запустил, но этот запуск особой радости не принес, так как после запуска я понял что все там работает криво:
1. Пытаюсь скрывать/отображать объекты формы, не со всеми получается, то ли слои надо добавлять , то ли не прячу какие-то объекты. Кнопки обзора "bidDirBrowse" и "bidGroupBrowse" не знаю как добавить в глобальные переменные чтобы их скоывать/отображать. Некоторый текст который должен быть виден, почему-то не виден, да и вообще сплошной гемор там чего-то..
2. Подгружаю скин, почему-то рамка не появляется, возможно тоже из-за того, что фоновой картинкой перекрываю, вообщем я еще тот мастер ..
3. На третей странице педаль "Далее" должна меняться на "Установить" - фигушки там
4. На второй странице при нажатии на текст "про Директ Х" должна срабатывать функция изменения флажка - тоже вообщем без комментариев..

Правда радуют работающие в трех положениях педали. Вообщем далеко не стал забегать, потому что хочу разобраться в этих первых трех страницах, так как думаю что делаю там какие-то глобальные ошибки. Посмотри пожалуйста..
Главная фишка, которую преследую в этом скрипте - как можно сильнее разгрузить стандартные-встроенные объекты формы (слои, панели) если таковые имеются , чтобы можно было свободно строить свои объекты формы на страницах (таких как кнопки, работающие в трех положениях и т.д.) при помощи Hide/Show, и стандартые объекты при этом не мешали.

Jerichoman 30-01-2010 19:26 1334455

Подскажите, пожалуйста, что нужно сделать, чтобы при создании инсталла с arc архивом, инно его упаковывал в bin файлы http://s002.radikal.ru/i197/1001/ae/07fadc7ebcd1.jpg , а то сколько не пытался, все время получается вот так (сам arc архив+инсталл на его распаковку) http://s001.radikal.ru/i194/1001/9e/082cc59602bb.jpg Если добавлять архив в секцию Files, то получается так как на первой картинке, но при установке инсталл тупо выдает сам архив :(

vint56 30-01-2010 20:31 1334508

Jerichoman, просто arc переминованый в bin просто когда будеш паковать в место пример названия архива data.arc переминуй в Data.bin
Source: {src}\*.arc; DestDir: {app}\; Flags: external dontcopy и сдесь подправь на Source: {src}\*.bin ; DestDir: {app}\; Flags: external dontcopy

Jerichoman 30-01-2010 20:34 1334511

vint56
Это можно, но все равно он так и будет одним куском, а хотелось бы чтоб он при создании инсталла делился+при установке он не разархивируется а копируется сам архив

vint56 30-01-2010 20:49 1334524

Jerichoman, Почему я так делаю нормально работает он распаковывает архив

Serega 30-01-2010 23:14 1334602

Цитата:

Цитата lexikon
может быть как то возможно увеличить размер окна? »

Семёрки у меня нет, т.е. проверить негде, попробуйте прописать сообщение заново:
Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
#ifdef UNICODE
type
  PChar = PAnsiChar;
#endif

function MessageBox(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer;
  external 'MessageBoxA@user32.dll stdcall';

#ifndef IS_ENHANCED
const
  MB_ICONQUESTION = $00000020;
#endif

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  Confirm:= False;
  Cancel:= False;
  if MessageBox(WizardForm.Handle, SetupMessage(msgExitSetupMessage),
    SetupMessage(msgExitSetupTitle), MB_ICONQUESTION or MB_YESNO or MB_DEFBUTTON2) = IDYES then
    Cancel:= True;
end;



P.S.
Если результат будет таким же, то можно создать отдельную форму с сообщением.

A1EXXX 31-01-2010 00:00 1334625

Возможно ли перемещение задач (или хотя бы чекбоксов), если, к примеру, у меня в [Tasks] так:
Код:

[Tasks]
Name: "icon"; Description: "{cm:xx}";
Name: "icon\sp"; Description: "{cm:sp}";
Name: "icon\mp"; Description: "{cm:mp}";
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}";

Дело в том, что я растягиваю окно инталлятора, и, разумеется, чекбоксы нужно разместить иначе. Возможно ли такое? Или лучше всё делать в [Сode] и не париться? :)

Serega 31-01-2010 00:19 1334642

Цитата:

Цитата A1EXXX
чекбоксы нужно разместить иначе »

Такое только
Цитата:

Цитата A1EXXX
всё делать в [Сode] »


A1EXXX 31-01-2010 00:35 1334651

Serega, так и думал... спрашивал для очистки совести, получается... :)

yamaha 31-01-2010 04:34 1334701

Вообщем немогу собрать два скрипта.
Один готовый и к нему надо добавить скрипт маленький который проверяет конфигурацию.
Вот первый:
читать дальше »
Цитата:

[Setup]
AppName=FIFA 2007
AppVerName=FIFA 2007 by yamaha
DefaultDirName={pf}\PanCopmany by yamaha\FIFA 2007
UsePreviousAppDir=true
DirExistsWarning=no
ShowLanguageDialog=auto
OutputBaseFilename=FIFA 2007
OutputDir=C://FIFA 2000-2010
VersionInfoCopyright=PanCompany, Inc.
DiskSliceSize=2100000000
DiskSpanning=yes
ReserveBytes=5242880
DefaultGroupName=FIFA 2007 by yamaha
Compression=lzma/ultra
SolidCompression=yes


[Languages]
Name: "eng"; MessagesFile: "compiler:Default.isl"
Name: "rus"; MessagesFile: "compiler:Languages\Russian.isl"

[CustomMessages]
eng.ArcBreak=Installation cancelled!
eng.ExtractedInfo=Extracted %1 Mb of %2 Mb
eng.ArcInfo=Archive: %1 of %2
eng.ArcTitle=Extracting FreeArc archive
eng.ArcError=Decompression failed with error code %1
eng.ArcFail=Decompression failed!
eng.AllProgress=Overall extraction progress: %1%%
eng.ArcBroken=Archive %1 is damaged%nor not enough free space.
eng.Extracting=Extracting: %1
eng.taskbar=%1%%, %2 remains
eng.remains=Remaining time: %1
eng.LongTime=at no time
eng.ending=ending
eng.hour= hours
eng.min= mins
eng.sec= secs

rus.ArcBreak=Установка прервана!
rus.ExtractedInfo=Распаковано %1 Мб из %2 Мб
rus.ArcInfo=Архив: %1 из %2
rus.ArcTitle=Распаковка архивов FreeArc
rus.ArcError=Распаковщик FreeArc вернул код ошибки: %1
rus.ArcFail=Распаковка не завершена!
rus.AllProgress=Общий прогресс распаковки: %1%%
rus.ArcBroken=Возможно, архив %1 повреждён%nили недостаточно места на диске назначения.
rus.Extracting=Распаковывается: %1
rus.taskbar=%1%%, жди %2
rus.remains=Осталось ждать %1
rus.LongTime=вечно
rus.ending=завершение
rus.hour= часов
rus.min= мин
rus.sec= сек

[Icons]
Name: {group}\Uninstall FIFA 2007; Filename: {app}\unins000.exe

[Files]
;Source: *.arc; DestDir: {app}; Flags: nocompression
Source: unarc.dll; DestDir: {tmp}; Flags: dontcopy deleteafterinstall
Source: compiler:InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
Source: ISSkin.dll; DestDir: {app}; Flags: dontcopy
Source: Office2007.cjstyles; DestDir: {tmp}; Flags: dontcopy

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

[code]
// Importing LoadSkin API from ISSkin.DLL
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';

// Importing UnloadSkin API from ISSkin.DLL
procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';

// Importing ShowWindow Windows API from User32.DLL
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('Office2007.cjstyles');
LoadSkin(ExpandConstant('{tmp}\Office2007.cjstyles'), 'NormalSilver.ini');
Result := True;
end;

const
Archives = '{src}\*.arc'; // укажите расположение архивов FreeArc; для внешних файлов строку в [Files] добавлять необязательно

PM_REMOVE = 1;
CP_ACP = 0; CP_UTF8 = 65001;
oneMb = 1048576;

type
#ifdef UNICODE ; если у вас ошибка на этой строке, то установите препроцессор или исправьте скрипт для вашей версии Inno Setup
#define A "W"
#else
#define A "A" ; точка входа в SetWindowText, {#A} меняется на A или W в зависимости от версии
#endif
#if Ver < 84018176
AnsiString = String; // There is no need for this line in Inno Setup 5.2.4 and above (для Inno Setup версий 5.2.4 и выше эта строка не нужна)
#endif

TMyMsg = record
hwnd: HWND;
message: UINT;
wParam: Longint;
lParam: Longint;
time: DWORD;
pt: TPoint;
end;

TFreeArcCallback = function (what: PAnsiChar; int1, int2: Integer; str: PAnsiChar): Integer;
TArc = record Path: string; OrigSize: Integer; Size: Extended; end;

var
ExtractFile: TLabel;
lblExtractFileName: TLabel;
btnCancelUnpacking: TButton;
CancelCode, n, UnPackError, StartInstall: Integer;
Arcs: array of TArc;
msgError: string;
lastMb: Integer;
baseMb: Integer;
totalUncompressedSize: Integer; // total uncompressed size of archive data in mb
LastTimerEvent: DWORD;

Function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: string; cbMultiByte: integer; lpWideCharStr: string; cchWideChar: integer): longint; external 'MultiByteToWideChar@kernel32.dll stdcall';
Function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: string; cchWideChar: integer; lpMultiByteStr: string; cbMultiByte: integer; lpDefaultChar: integer; lpUsedDefaultChar: integer): longint; external 'WideCharToMultiByte@kernel32.dll stdcall';

function PeekMessage(var lpMsg: TMyMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMyMsg): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: TMyMsg): Longint; external 'DispatchMessageA@user32.dll stdcall';

Function OemToChar(lpszSrc, lpszDst: AnsiString): longint; external 'OemToCharA@user32.dll stdcall';
function GetWindowLong(hWnd, nIndex: Integer): Longint; external 'GetWindowLongA@user32 stdcall delayload';
function SetWindowText(hWnd: Longint; lpString: String): Longint; external 'SetWindowText{#A}@user32 stdcall delayload';

function GetTickCount: DWord; external 'GetTickCount@kernel32';
function WrapFreeArcCallback (callback: TFreeArcCallback; paramcount: integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function FreeArcExtract (callback: longword; cmd1,cmd2,cmd3,cmd4,cmd5,cmd6,cmd7,cmd8,cmd9,cmd10: PAnsiChar): integer; external 'FreeArcExtract@files:unarc.dll cdecl';

procedure AppProcessMessage;
var
Msg: TMyMsg;
begin
while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;

// Перевод числа в строку с точностью 3 знака (%.3n) с округлением дробной части, если она есть
Function NumToStr(Float: Extended): String;
Begin
Result:= Format('%.3n', [Float]); StringChange(Result, ',', '.');
while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Length(Result) > 1) do
SetLength(Result, Length(Result)-1);
End;

function cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;

Function Size64(Hi, Lo: Integer): Extended;
Begin
Result:= Lo;
if Lo<0 then Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
for Hi:= Hi-1 Downto 0 do
Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
End;

// Converts OEM encoded string into ANSI
// Преобразует OEM строку в ANSI кодировку
function OemToAnsiStr( strSource: AnsiString): AnsiString;
var
nRet : longint;
begin
SetLength( Result, Length( strSource ) );
nRet:= OemToChar( strSource, Result );
end;

// Converts ANSI encoded string into UTF-8
// Преобразует строку из ANSI в UTF-8 кодировку
function AnsiToUtf8( strSource: string ): string;
var
nRet : integer;
WideCharBuf: string;
MultiByteBuf: string;
begin
strSource:= strSource + chr(0);
SetLength( WideCharBuf, Length( strSource ) * 2 );
SetLength( MultiByteBuf, Length( strSource ) * 2 );

nRet:= MultiByteToWideChar( CP_ACP, 0, strSource, -1, WideCharBuf, Length(WideCharBuf) );
nRet:= WideCharToMultiByte( CP_UTF8, 0, WideCharBuf, -1, MultiByteBuf, Length(MultiByteBuf), 0, 0);

Result:= MultiByteBuf;
end;

// OnClick event function for btnCancel
procedure btnCancelUnpackingOnClick(Sender: TObject);
begin
if MsgBox( SetupMessage( msgExitSetupMessage ), mbInformation, MB_YESNO ) = IDYES then
CancelCode:= -127;
end;

var origsize: Integer;
// The callback function for getting info about FreeArc archive
function FreeArcInfoCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
begin
if string(what)='origsize' then origsize := Mb else
if string(what)='compsize' then else
if string(what)='total_files' then else
Result:= CancelCode;
end;

// Returns decompressed size of files in archive
function ArchiveOrigSize(arcname: string): Integer;
var
callback: longword;
Begin
callback:= WrapFreeArcCallback(@FreeArcInfoCallback,4); //FreeArcInfoCallback has 4 arguments
CancelCode:= 0;
AppProcessMessage;
try
// Pass the specified arguments to 'unarc.dll'
Result:= FreeArcExtract (callback, 'l', '--', AnsiToUtf8(arcname), '', '', '', '', '', '', '');
if CancelCode < 0 then Result:= CancelCode;
if Result >= 0 then Result:= origsize;
except
Result:= -63; // ArcFail
end;
end;

// Scans the specified folders for archives and add them to list
function FindArcs(dir: string): Extended;
var
FSR: TFindRec;
Begin
Result:= 0;
if FindFirst(ExpandConstant(dir), FSR) then begin
try
repeat
// Skip everything but the folders
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then CONTINUE;
n:= GetArrayLength(Arcs);
// Expand the folder list
SetArrayLength(Arcs, n +1);
Arcs[n].Path:= ExtractFilePath(ExpandConstant(dir)) + FSR.Name;
Arcs[n].Size:= Size64(FSR.SizeHigh, FSR.SizeLow);
Result:= Result + Arcs[n].Size;
Arcs[n].OrigSize := ArchiveOrigSize(Arcs[n].Path)
totalUncompressedSize := totalUncompressedSize + Arcs[n].OrigSize
until not FindNext(FSR);
finally
FindClose(FSR);
end;
end;
End;

// Sets the TaskBar title
Procedure SetTaskBarTitle(Title: String); var h: Integer;
Begin
h:= GetWindowLong(MainForm.Handle, -8); if h <> 0 then SetWindowText(h, Title);
End;

// Converts milliseconds to human-readable time
// Конвертирует милисекунды в человеко-читаемое изображение времени
Function TicksToTime(Ticks: DWord; h,m,s: String; detail: Boolean): String;
Begin
if detail {hh:mm:ss format} then
Result:= PADZ(IntToStr(Ticks/3600000), 2) +':'+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +':'+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2)
else if Ticks/3600 >= 1000 {more than hour} then
Result:= IntToStr(Ticks/3600000) +h+' '+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +m
else if Ticks/60 >= 1000 {1..60 minutes} then
Result:= IntToStr(Ticks/60000) +m+' '+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2) +s
else Result:= IntToStr(Ticks/1000) +s {less than one minute}
End;

// The main callback function for unpacking FreeArc archives
function FreeArcCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
var
percents, Remaining: Integer;
s: String;
begin
if GetTickCount - LastTimerEvent > 1000 then begin
// This code will be executed once each 1000 ms (этот код будет выполняться раз в 1000 миллисекунд)
// ....
// End of code executed by timer
LastTimerEvent := LastTimerEvent+1000;
end;

if string(what)='filename' then begin
// Update FileName label
lblExtractFileName.Caption:= FmtMessage( cm( 'Extracting' ), [OemToAnsiStr( str )] )
end else if (string(what)='write') and (totalUncompressedSize>0) and (Mb>lastMb) then begin
// Assign to Mb *total* amount of data extracted to the moment from all archives
lastMb := Mb;
Mb := baseMb+Mb;

// Update progress bar
WizardForm.ProgressGauge.Position:= Mb;

// Show how much megabytes/archives were processed up to the moment
percents:= (Mb*1000) div totalUncompressedSize;
s := FmtMessage(cm('ExtractedInfo'), [IntToStr(Mb), IntToStr(totalUncompressedSize)]);
if GetArrayLength(Arcs)>1 then
s := s + '. '+FmtMessage(cm('ArcInfo'), [IntToStr(n+1), IntToStr(GetArrayLength(Arcs))])
ExtractFile.Caption := s

// Calculate and show current percents
percents:= (Mb*1000) div totalUncompressedSize;
s:= FmtMessage(cm('AllProgress'), [Format('%.1n', [Abs(percents/10)])]);
if Mb > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((totalUncompressedSize - Mb)/Mb)) else Remaining:= 0;
if Remaining = 0 then SetTaskBarTitle(cm('ending')) else begin
s:= s + '. '+FmtMessage(cm('remains'), [TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)])
SetTaskBarTitle(FmtMessage(cm('taskbar'), [IntToStr(percents/10), TicksToTime(Remaining, 'h', 'm', 's', false)]))
end;
WizardForm.FileNameLabel.Caption := s
end;
AppProcessMessage;
Result:= CancelCode;
end;

// Extracts all found archives
function UnPack(Archives: string): Integer;
var
totalCompressedSize: Extended;
callback: longword;
FreeMB, TotalMB: Cardinal;
begin
// Display 'Extracting FreeArc archive'
lblExtractFileName.Caption:= '';
lblExtractFileName.Show;
ExtractFile.caption:= cm('ArcTitle');
ExtractFile.Show;
// Show the 'Cancel unpacking' button and set it as default button
btnCancelUnpacking.Caption:= WizardForm.CancelButton.Caption;
btnCancelUnpacking.Show;
WizardForm.ActiveControl:= btnCancelUnpacking;
WizardForm.ProgressGauge.Position:= 0;
// Get the size of all archives
totalUncompressedSize := 0;
totalCompressedSize := FindArcs(Archives);
WizardForm.ProgressGauge.Max:= totalUncompressedSize;
// Other initializations
callback:= WrapFreeArcCallback(@FreeArcCallback,4); //FreeArcCallback has 4 arguments
StartInstall:= GetTickCount; {время начала распаковки}
LastTimerEvent:= GetTickCount;
baseMb:= 0

for n:= 0 to GetArrayLength(Arcs) -1 do
begin
lastMb := 0
CancelCode:= 0;
AppProcessMessage;
try
// Pass the specified arguments to 'unarc.dll'
Result:= FreeArcExtract (callback, 'x', '-o+', '-dp' + AnsiToUtf8( ExpandConstant('{app}') ), '--', AnsiToUtf8(Arcs[n].Path), '', '', '', '', '');
if CancelCode < 0 then Result:= CancelCode;
except
Result:= -63; // ArcFail
end;
baseMb:= baseMb+lastMb

// Error occured
if Result <> 0 then
begin
msgError:= FmtMessage(cm('ArcError'), [IntToStr(Result)]);
GetSpaceOnDisk(ExtractFileDrive(ExpandConstant('{app}')), True, FreeMB, TotalMB);
case Result of
-1: if FreeMB < 32 {Мб на диске} then msgError:= SetupMessage(msgDiskSpaceWarningTitle)
else msgError:= msgError + #13#10 + FmtMessage(cm('ArcBroken'), [ExtractFileName(Arcs[n].Path)]);
-127: msgError:= cm('ArcBreak'); //Cancel button
-63: msgError:= cm('ArcFail');
end;
// MsgBox(msgError, mbInformation, MB_OK); //сообщение показывается на странице завершения
Log(msgError);
Break; //прервать цикл распаковки
end;
end;
// Hide labels and button
WizardForm.FileNameLabel.Caption:= '';
lblExtractFileName.Hide;
ExtractFile.Hide;
btnCancelUnpacking.Hide;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
UnPackError:= UnPack(Archives)
if UnPackError = 0 then
SetTaskBarTitle(SetupMessage(msgSetupAppTitle))
else
begin
// Error occured, uninstall it then
Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n); //откат установки из-за ошибки unarc.dll
SetTaskBarTitle(SetupMessage(msgErrorTitle))
WizardForm.Caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
end;
end;
end;

// стандартный способ отката (не нужна CurPageChanged), но архивы распаковываются до извлечения файлов инсталлятора
// if CurStep = ssInstall then
// if UnPack(Archives) <> 0 then Abort;

Procedure CurPageChanged(CurPageID: Integer);
Begin
if (CurPageID = wpFinished) and (UnPackError <> 0) then
begin // Extraction was unsuccessful (распаковщик вернул ошибку)
// Show error message
WizardForm.FinishedLabel.Font.Color:= $0000C0; // red (красный)
WizardForm.FinishedLabel.Height:= WizardForm.FinishedLabel.Height * 2;
WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) + #13#10#13#10 + msgError;
end;
End;

procedure InitializeWizard();
begin
with WizardForm.ProgressGauge do
begin
// Create a label to show current FileName being extracted
lblExtractFileName:= TLabel.Create(WizardForm);
lblExtractFileName.parent:=WizardForm.InstallingPage;
lblExtractFileName.autosize:=false;
lblExtractFileName.Width:= Width;
lblExtractFileName.top:=Top + ScaleY(35);
lblExtractFileName.Caption:= '';
lblExtractFileName.Hide;

// Create a label to show percentage
ExtractFile:= TLabel.Create(WizardForm);
ExtractFile.parent:=WizardForm.InstallingPage;
ExtractFile.autosize:=false;
ExtractFile.Width:= Width;
ExtractFile.top:=lblExtractFileName.Top + ScaleY(16);
ExtractFile.caption:= '';
ExtractFile.Hide;
end;

// Create a 'Cancel unpacking' button and hide it for now.
btnCancelUnpacking:=TButton.create(WizardForm);
btnCancelUnpacking.Parent:= WizardForm;
btnCancelUnpacking.SetBounds(WizardForm.CancelButton.Left, WizardForm.CancelButton.top, WizardForm.CancelButton.Width, WizardForm.CancelButton.Height);
btnCancelUnpacking.OnClick:= @btnCancelUnpackingOnClick;
btnCancelUnpacking.Hide;
end;
И вот этот надо добавить:
читать дальше »
Цитата:

[_ISToolPreCompile]
#include AddBackslash(SourcePath) +"InnoSetupUpgrade.iss"

[Icons]
Name: {group}\Notepad; Filename: notepad.exe

[code]
Procedure InitializeWizard;
Begin
{значения системных требований (необязательно)} NeedSys:= 5.1; NeedSp:= 2; NeedMB:= 250; NeedMHZ:= 1800; NeedRAM:= 512; NeedVRAM:= 128; NeedSwap:= 960; NeedSoundCard:= 'Creative'; NeedRegKey:= 'Software\Microsoft\.NETFramework'; NeedRegKeyOK:=' Пакет Microsoft .NET Framework установлен'; NeedRegKeyNO:=' Требуется установить Microsoft .NET Framework'
InnoUpgrade { InnoSetup Add-on by Victor Dobrov }
End;
Постоянно ошибки выдаёт.

vint56 31-01-2010 09:30 1334735

yamaha, вот http://upwap.ru/731665

vint56 31-01-2010 09:47 1334739

svensoft, вот скрипт
читать дальше »
#define MyAppName "Resident Evil™ 4 Ultimate Edition"
[Setup]
AppId={{6AA7E180-8314-4263-9FF0-40825E4CE420}
AppName=Resident Evil 4 Ultimate Edition
AppVerName=Resident Evil 4 UE v.1.0.1
AppPublisher=Sotonisto
DefaultDirName={pf}\Soto\Resident Evil 4 UE
DefaultGroupName=Soto\Resident Evil 4 UE
OutputDir=C:\Pack
SetupIconFile=re4.ico
OutputBaseFilename=setup2
Compression=lzma
SolidCompression=yes
DiskSpanning=yes
DiskSliceSize=934003200
DiskClusterSize=2753
DisableReadyPage=True

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

[CustomMessages]
russian.Welcome_1=Вас приветствует мастер установки игры
russian.Welcome_2=Программа установит игру {#MyAppName} на Ваш компьютер.%n%nНа время установки рекомендуется закрыть все прочие приложения.%n%nНажмите «Далее», чтобы продолжить, или «Отмена», чтобы выйти.
russian.SelectDir_1=В какую папку Вы хотите установить {#MyAppName}?
russian.SelectDir_2=Обновить DirectX
russian.SelectDir_3=Добавить ярлык на Рабочий стол
russian.SelectGroup_l=Нажмите «Установить», чтобы продолжить. Если Вы хотите выбрать другую папку, нажмите «Обзор».
russian.Installing_l=Пожалуйста, подождите, пока игра установится на Ваш компьютер.
russian.Finished_1=Установка игры {#MyAppName} успешно завершена.
russian.Finished_2=Игра {#MyAppName} была успешно установлена на Ваш компьютер. Для ее запуска выберите соответствующий значек в меню «Пуск» или ярлык на Рабочем столе.
russian.Finished_3=Нажмите «Завершить», чтобы выйти из программы установки.
russian.Space_1=Доступно места на диске:
russian.Space_2=Требуется места на диске:
russian.Language=Язык озвучки:
russian.DirectXInstall=Идет обновление DirectX...
russian.Uninstall=Удалить {#MyAppName}

[Files]
Source: button.bmp; DestDir: {tmp}; Flags: dontcopy
Source: InnoCallback.dll; Flags: dontcopy ignoreversion
Source: ISSkin.dll; DestDir: {app}; Flags: dontcopy
Source: my.cjstyles; DestDir: {tmp}; Flags: dontcopy
Source: 1.bmp; Flags: dontcopy
Source: 2.bmp; Flags: dontcopy
Source: 3.bmp; Flags: dontcopy
Source: 4.bmp; Flags: dontcopy
Source: 5.bmp; Flags: dontcopy

Source: autorun.exe; DestDir: {app}; Flags: ignoreversion

[Icons]
Name: {group}\Начать игру; Filename: {app}\game.exe
Name: {group}\Настройки игры; Filename: {app}\setuptool.exe
Name: {group}\Readme; Filename: {app}\Readme.txt
Name: {group}\RG PKS; Filename: http://rg-pks.at.ua/
Name: {group}\Удалить игру; Filename: {uninstallexe}
Name: {userdesktop}\Resident Evil 4 Ultimate Edition; Filename: {app}\game.exe; WorkingDir: {app}

[code]
//type
// TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);

const
ButtonWidth = 80;
ButtonHeight = 23;

bidBack = 0;
bidNext = 1;
bidCancel = 2;
bidDirBrowse = 3;
bidGroupBrowse = 4;

var
WizardLabel: TLabel;
ButtonPanel: array [0..4] of TPanel;
ButtonImage: array [0..4] of TBitmapImage;
ButtonLabel: array [0..4] of TLabel;
n: Integer;

ImagePage_Welcome, ImagePage_SelectDir, ImagePage_SelectGroup, ImagePage_Installing, ImagePage_Finished: TBitmapImage;

WelcomeText_1, WelcomeText_2, SelectDirText_1, SelectDirText_2, SelectDirText_3, SelectDirText_4, SelectDirText_5,
SelectGroupText_1, InstallingText_1, PageNameLabel1, PageDescriptionLabel1, PageNameLabel2,
PageDescriptionLabel2, PageNameLabel3, FilenameLabel, FinishedText_1, FinishedText_2: TLabel;

DirectX, Icons: TCheckBox;

NeedSize: Integer;
FreeMB, TotalMB: Cardinal;
FreeSpaceLabel: TLabel;

//=========
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;
//=========
procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
SelectDirText_4.Caption := ExpandConstant('{cm:SPACE_1} ')+ NumToStr(round(FreeMB/1024*100)/100) + ' GB' else
SelectDirText_4.Caption := ExpandConstant('{cm:SPACE_1} ')+ NumToStr(FreeMB)+ ' MB';
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False else
WizardForm.NextButton.Enabled := True;
end;
//========
procedure GetNeedSpaceCaption;
begin
if NeedSize > 1024 then
SelectDirText_5.Caption := ExpandConstant('{cm:SPACE_2} ')+ NumToStr(round(NeedSize/1024*100)/100) + ' GB' else
SelectDirText_5.Caption := ExpandConstant('{cm:SPACE_2} ')+ NumToStr(NeedSize)+ ' MB';
end;
//========
procedure DirectXLabelOnClick(Sender: TObject);
begin
if DirectX.Checked = False then
DirectX.Checked:= True else
DirectX.Checked:= False;
end;
//========
procedure IconsOnClick(Sender: TObject);
begin
if Icons.Checked = False then
Icons.Checked:= True else
Icons.Checked:= False;
end;
//=========
Procedure WizardFormHideAll();
begin
WizardForm.Bevel.Hide;
WizardForm.Bevel1.Hide;
WizardForm.MainPanel.Hide;
WizardForm.BeveledLabel.Hide;

WizardForm.OuterNotebook.Hide;
WizardForm.InnerNotebook.Hide;

ImagePage_Welcome.Hide;
ImagePage_SelectDir.Hide;
ImagePage_SelectGroup.Hide;
ImagePage_Installing.Hide;
ImagePage_Finished.Hide;

WelcomeText_1.Hide;
WelcomeText_2.Hide;
SelectDirText_1.Hide;
SelectDirText_2.Hide;
SelectDirText_3.Hide;
SelectDirText_4.Hide;
SelectDirText_5.Hide;
SelectGroupText_1.Hide;
InstallingText_1.Hide;
PageNameLabel1.Hide;
PageDescriptionLabel1.Hide;
PageNameLabel2.Hide;
PageDescriptionLabel2.Hide;
PageNameLabel3.Hide;
FilenameLabel.Hide;
FinishedText_1.Hide;
FinishedText_2.Hide;

//WizardForm.bidDirBrowse.Hide;
WizardForm.DirEdit.Hide;
DirectX.Hide;
Icons.Hide;
//WizardForm.bidGroupBrowse.Hide;
WizardForm.GroupEdit.Hide;
end;
//=========
procedure WizardFormImagePage();
begin

ExtractTemporaryFile('1.bmp');
ExtractTemporaryFile('2.bmp');
ExtractTemporaryFile('3.bmp');
ExtractTemporaryFile('4.bmp');
ExtractTemporaryFile('5.bmp');

WizardForm.Width:=ScaleX(790);
WizardForm.Height:=ScaleY(533);
WizardForm.Font.Color:=$ffffff;
WizardForm.BorderStyle:=bsNone;
WizardForm.Center;

ImagePage_Welcome:= TBitmapImage.Create(WizardForm);
ImagePage_Welcome.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
ImagePage_Welcome.Top:= ScaleY(0);
ImagePage_Welcome.Left:= ScaleX(0);
ImagePage_Welcome.Width:= ScaleX(790);
ImagePage_Welcome.Height:= ScaleY(533);
ImagePage_Welcome.Stretch:= true
ImagePage_Welcome.Parent:= WizardForm;

ImagePage_SelectDir:= TBitmapImage.Create(WizardForm);
ImagePage_SelectDir.Bitmap.LoadFromFile(ExpandConstant('{tmp}\2.bmp'));
ImagePage_SelectDir.Top:= ScaleY(0);
ImagePage_SelectDir.Left:= ScaleX(0);
ImagePage_SelectDir.Width:= ScaleX(790);
ImagePage_SelectDir.Height:= ScaleY(533);
ImagePage_SelectDir.Stretch:= true;
ImagePage_SelectDir.Parent:= WizardForm;

ImagePage_SelectGroup:= TBitmapImage.Create(WizardForm);
ImagePage_SelectGroup.Bitmap.LoadFromFile(ExpandConstant('{tmp}\3.bmp'));
ImagePage_SelectGroup.Top:= ScaleY(0);
ImagePage_SelectGroup.Left:= ScaleX(0);
ImagePage_SelectGroup.Width:= ScaleX(790);
ImagePage_SelectGroup.Height:= ScaleY(533);
ImagePage_SelectGroup.Stretch:= true;
ImagePage_SelectGroup.Parent:= WizardForm;

ImagePage_Installing:= TBitmapImage.Create(WizardForm);
ImagePage_Installing.Bitmap.LoadFromFile(ExpandConstant('{tmp}\4.bmp'));
ImagePage_Installing.Top:= ScaleY(0);
ImagePage_Installing.Left:= ScaleX(0);
ImagePage_Installing.Width:= ScaleX(790);
ImagePage_Installing.Height:= ScaleY(533);
ImagePage_Installing.Stretch:= true;
ImagePage_Installing.Parent:= WizardForm;

ImagePage_Finished:= TBitmapImage.Create(WizardForm);
ImagePage_Finished.Bitmap.LoadFromFile(ExpandConstant('{tmp}\5.bmp'));
ImagePage_Finished.Top:= ScaleY(0);
ImagePage_Finished.Left:= ScaleX(0);
ImagePage_Finished.Width:= ScaleX(790);
ImagePage_Finished.Height:= ScaleY(533);
ImagePage_Finished.Stretch:= true
ImagePage_Finished.Parent:= WizardForm;

end;
//=========
Procedure WizardFormTextPage();
begin

WelcomeText_1:= TLabel.Create(WizardForm);
with WelcomeText_1 do
begin
Top:= ScaleY(180);
Left:= ScaleX(70);
Width:= ScaleX(650);
Height:= ScaleY(65);
AutoSize:= false;
Alignment := taCenter;
Transparent:= true;
WordWrap:= true;
Font.Name:='Georgia';
Font.Size:= 16;
Font.Color:=ClWhite;
Font.Style := [fsBold];
Parent:= WizardForm;
Caption:= ExpandConstant('{cm:Welcome_1}')+#13+('{#MyAppName}');
end;

WelcomeText_2:=TLabel.Create(WizardForm);
with WelcomeText_2 do
begin
Top:= ScaleY(270);
Left:= ScaleX(70);
Width:= ScaleX(650);
Height:= ScaleY(200);
AutoSize:= false;
WordWrap:= true;
Font.Name:= 'Georgia';
Font.Size:= 11
Font.Style := [fsBold, fsItalic];
Font.Color:=ClWhite;
Transparent:= true;
Parent:= WizardForm;
Caption:= ExpandConstant('{cm:Welcome_2}');
end;

PageNameLabel1:= TLabel.Create(WizardForm);
with PageNameLabel1 do
begin
Left:= ScaleX(65);
Top:= ScaleY(185);
Width:= ScaleX(300);
Height:= ScaleY(30);
AutoSize:= False;
Font.Name:= 'Georgia'
Font.Size:= 13;
Font.Style:= [fsBold];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm;
end;

SelectDirText_1:= TLabel.Create(WizardForm);
with SelectDirText_1 do
begin
Left:=ScaleX(95);
Top:= ScaleY(215);
Width:= ScaleX(600);
Height:= ScaleY(50);
AutoSize:= False;
Font.Name:= 'Georgia'
Font.Size:= 10;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Wordwrap:= True;
Transparent := True;
Parent:= WizardForm;
Caption:= ExpandConstant('{cm:SelectDir_1}');
end;

PageDescriptionLabel1:= TLabel.Create(WizardForm);
with PageDescriptionLabel1 do
begin
Caption:= WizardForm.SelectDirBrowseLabel.Caption;
Left:= ScaleX(120);
Top:= ScaleY(250);
Width:= ScaleX(600);
Height:= ScaleY(50);
AutoSize:= False;
WordWrap:= True;
Font.Name:= 'Georgia'
Font.Size:= 10;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Transparent:= True;
Parent:= WizardForm;
end;

SelectDirText_2:= TLabel.Create(WizardForm);
with SelectDirText_2 do
begin
Left:= ScaleX(90);
Top:= ScaleY(340);
Width:= ScaleX(150);
Height:= ScaleY(13);
Font.Name:= 'Georgia';
Font.Size:= 8;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm;
Caption:= ExpandConstant('{cm:SelectDir_2}');
OnClick:= @DirectXLabelOnClick;
end;

SelectDirText_3:= TLabel.Create(WizardForm);
with SelectDirText_3 do
begin
Left:= ScaleX(90);
Top:= ScaleY(360);
Width:= ScaleX(150);
Height:= ScaleY(13);
Font.Name:= 'Georgia';
Font.Size:= 8;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm;
Caption:=ExpandConstant('{cm:SelectDir_3}');
OnClick:= @IconsOnClick;
end;

SelectDirText_4:= TLabel.Create(WizardForm);
with SelectDirText_4 do
begin
Left:= ScaleX(65);
Top:= ScaleY(420);
Width:= ScaleX(209);
Height:= ScaleY(13);
Font.Name:= 'Georgia';
Font.Size:= 8;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Transparent:= True;
Parent:= WizardForm;
end;

SelectDirText_5:= TLabel.Create(WizardForm);
with SelectDirText_5 do
begin
Left:= ScaleX(65);
Top:= ScaleY(440);
Width:= ScaleX(209);
Height:= ScaleY(13);
Font.Name:= 'Georgia';
Font.Size:= 8;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Transparent:= True;
Parent:= WizardForm;
end;

PageNameLabel2:= TLabel.Create(WizardForm);
with PageNameLabel2 do
begin
Left:= ScaleX(65);
Top:= ScaleY(185);
Width:= ScaleX(350);
Height:= ScaleY(30);
AutoSize:= False;
Font.Name:= 'Georgia';
Font.Size:= 13;
Font.Style:= [fsBold];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm;
end;

PageDescriptionLabel2:= TLabel.Create(WizardForm);
with PageDescriptionLabel2 do
begin
Left:=ScaleX(95);
Top:= ScaleY(215);
Width:= ScaleX(600);
Height:= ScaleY(50);
AutoSize:= False;
Font.Name:= 'Georgia'
Font.Size:= 10;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Wordwrap:= True;
Transparent := True;
Parent:= WizardForm;
end;

SelectGroupText_1:=TLabel.Create(WizardForm)
with SelectGroupText_1 do
begin
Left:= ScaleX(120);
Top:= ScaleY(250);
Width:= ScaleX(600);
Height:= ScaleY(50);
AutoSize:= False;
WordWrap:= True;
Font.Name:= 'Georgia';
Font.Size:= 10;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
WordWrap:=True;
Transparent:=True;
Parent:=WizardForm;
Caption:=ExpandConstant('{cm:SelectGroup_l}')
end;

PageNameLabel3:= TLabel.Create(WizardForm);
with PageNameLabel3 do
begin
Left:= ScaleX(65);
Top:= ScaleY(185);
Width:= ScaleX(150);
Height:= ScaleY(20);
AutoSize:= False;
Font.Name:= 'Georgia';
Font.Size:= 13;
Font.Style:= [fsBold];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm;
end;

InstallingText_1:= TLabel.Create(WizardForm);
with InstallingText_1 do
begin
Left:=ScaleX(95);
Top:= ScaleY(215);
Width:= ScaleX(600);
Height:= ScaleY(50);
AutoSize:= False;
Font.Name:= 'Georgia';
Font.Size:= 10;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm;
Caption:= ExpandConstant('{cm:Installing_l}')
end;

FilenameLabel:= TLabel.Create(WizardForm);
with FilenameLabel do
begin
Left:= ScaleX(65);
Top:= ScaleY(275);
Width:= ScaleX(625);
Height:= ScaleY(20);
AutoSize:= False;
Font.Name:= 'Georgia'
Font.Size:= 10;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm;
end;

FinishedText_1:=TLabel.Create(WizardForm);
with FinishedText_1 do
begin
Left:= ScaleX(70);
Top:= ScaleY(180);
Width:= ScaleX(650);
Height:= ScaleY(65)
AutoSize:= false;
Alignment := taCenter;
WordWrap:= true;
Font.Name:='Georgia';
Font.Size:= 16;
Font.Color:=ClWhite;
Font.Style := [fsBold];
Transparent:= true;
Parent:= WizardForm;
Caption:= ExpandConstant('{cm:Finished_1}');
end;

FinishedText_2:= TLabel.Create(WizardForm);
with FinishedText_2 do
begin
Top:= ScaleY(270);
Left:= ScaleX(70);
Width:= ScaleX(650);
Height:= ScaleY(200);
AutoSize:= false;
WordWrap:= true;
Font.Name:= 'Georgia'
Font.Size:= 11;
Font.Style := [fsBold, fsItalic];
Font.Color:=ClWhite;
Transparent:= true;
Parent:= WizardForm;
Caption:= ExpandConstant('{cm:Finished_2}')+#13#13+ExpandConstant('{cm:Finished_3}');
end;
end;
//=========
Procedure WizardFormOthersObject();
begin

with WizardForm do
begin

DirBrowseButton.Top:= ScaleY(305);
DirBrowseButton.Parent:= WizardForm;

DirEdit.Left:= ScaleX(120);
DirEdit.Top:= ScaleY(305);
DirEdit.Width:= ScaleX(460);
DirEdit.Font.Size:= 9;
DirEdit.Parent:= WizardForm;
end;

DirectX:= TCheckBox.Create(WizardForm);
with DirectX do
begin
Left:= ScaleX(65);
Top:= ScaleY(340);
Width:= ScaleX(14);
Height:= ScaleY(14);
TabOrder:= 0;
Checked:= False;
Parent:= WizardForm;
end;

Icons:= TCheckBox.Create(WizardForm);
with Icons do
begin
Left:= ScaleX(65);
Top:= ScaleY(360);
Width:= ScaleX(14);
Height:= ScaleY(14);
TabOrder:= 2;
Checked:= False;
Parent:= WizardForm;
end;

WizardForm.DirEdit.OnChange:= @GetFreeSpaceCaption;
WizardForm.DirEdit.Text:= WizardForm.DirEdit.Text + #0;


with WizardForm do
begin

GroupBrowseButton.Top:= ScaleY(305);
GroupBrowseButton.Parent:= WizardForm;
//строка выбора пути
GroupEdit.Left:= ScaleX(120);
GroupEdit.Top:= ScaleY(305);
GroupEdit.Width:= ScaleX(460);
GroupEdit.Font.Size:=9;
GroupEdit.Parent:= WizardForm;
end;

with WizardForm do
begin
ProgressGauge.Top:=ScaleY(310);
ProgressGauge.Left:=ScaleX(100);
ProgressGauge.Width:=ScaleX(590);
ProgressGauge.Parent:= WizardForm;
end;
end;
//=========
procedure ButtonLabelClick(Sender: TObject);
var
Button: TButton;
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
case TLabel(Sender).Tag of
bidBack: Button:=WizardForm.BackButton
bidNext: Button:=WizardForm.NextButton
bidCancel: Button:=WizardForm.CancelButton
bidDirBrowse: Button:=WizardForm.DirBrowseButton
bidGroupBrowse: Button:=WizardForm.GroupBrowseButton
else
Exit
end
Button.OnClick(Button)
end;
//==========
procedure ButtonLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if ButtonLabel[TLabel(Sender).Tag].Enabled then
ButtonImage[TLabel(Sender).Tag].Left:=-ButtonWidth
end;
//==========
procedure ButtonLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
end;
//==========
procedure ButtonLabelMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if ButtonLabel[TLabel(Sender).Tag].Left <> -80 then
begin
for n:=0 to 4 do ButtonImage[n].Left:= 0
end;
if ButtonLabel[TLabel(Sender).Tag].Enabled then
begin
if ButtonLabel[TLabel(Sender).Tag].Left <> -80 then
ButtonImage[TLabel(Sender).Tag].Left:= -160
end;
end;
//==========
procedure WizardLabelMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if ButtonLabel[TLabel(Sender).Tag].Left <> -80 then
for n:=0 to 4 do ButtonImage[n].Left:= 0
end;
//==========
procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
ButtonLabel[AButtonIndex].Caption:=AButton.Caption
ButtonPanel[AButtonIndex].Visible:=AButton.Visible
ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled
ButtonLabel[AButtonIndex].Left:= ButtonPanel[AButtonIndex].Width div 2 - ButtonLabel[AButtonIndex].Width div 2;
ButtonLabel[AButtonIndex].Top:= ButtonPanel[AButtonIndex].Height div 2 - ButtonLabel[AButtonIndex].Height div 2;
end;
//==========
procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
Image: TBitmapImage;
Panel: TPanel;
Labl: TLabel;

begin

Panel:=TPanel.Create(WizardForm)
Panel.Left:=AButton.Left
Panel.Top:=AButton.Top
Panel.Width:=AButton.Width
Panel.Height:=AButton.Height
Panel.Tag:=AButtonIndex
Panel.Parent:=AButton.Parent
ButtonPanel[AButtonIndex]:=Panel
//делаем изображение кнопка и определяем ее размер
Image:=TBitmapImage.Create(WizardForm)
Image.Width:=240
Image.Height:=23
Image.Enabled:=False
Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\button.bmp'))
Image.Parent:=Panel
ButtonImage[AButtonIndex]:=Image

with TLabel.Create(WizardForm) do begin
Tag:=AButtonIndex
Parent:=Panel
Width:=Panel.Width
Height:=Panel.Height
Transparent:=True
OnClick:=@ButtonLabelClick
OnDblClick:=@ButtonLabelClick
OnMouseMove:=@ButtonLabelMove
OnMouseDown:=@ButtonLabelMouseDown
OnMouseUp:=@ButtonLabelMouseUp
end

Labl:=TLabel.Create(WizardForm)
Labl.Left:=23
Labl.Top:=5
Labl.Autosize:=True
Labl.Alignment:=taCenter
Labl.Tag:=AButtonIndex
Labl.Transparent:=True
Labl.Font.Color:=clWhite
Labl.Caption:=AButton.Caption
Labl.OnClick:=@ButtonLabelClick
Labl.OnDblClick:=@ButtonLabelClick
Labl.OnMouseMove:=@ButtonLabelMove
Labl.OnMouseDown:=@ButtonLabelMouseDown
Labl.OnMouseUp:=@ButtonLabelMouseUp
Labl.Parent:=Panel
ButtonLabel[AButtonIndex]:=Labl
end;
//=========
Procedure WizardFormButton();
begin

WizardLabel:= TLabel.Create(WizardForm)
WizardLabel.Left:= ScaleX(0)
WizardLabel.Top:= ScaleY(0)
WizardLabel.Width:= ScaleX(790);
WizardLabel.Height:= ScaleY(533);
WizardLabel.Transparent:= True;
WizardLabel.AutoSize:=false;
WizardLabel.Caption:='';
WizardLabel.OnMouseMove:=@WizardLabelMove
WizardLabel.Parent:= WizardForm;
WizardLabel.Show;

WizardForm.BackButton.SetBounds(WizardForm.ClientWidth - ScaleX(8) * 37,
WizardForm.ClientHeight - ScaleY(ButtonHeight) * 2, ScaleX(ButtonWidth), ScaleY(ButtonHeight));

WizardForm.NextButton.SetBounds(WizardForm.ClientWidth - ScaleX(8) * 26,
WizardForm.ClientHeight - ScaleY(ButtonHeight) * 2, ScaleX(ButtonWidth), ScaleY(ButtonHeight));

WizardForm.CancelButton.SetBounds(WizardForm.ClientWidth - ScaleX(8)* 15,
WizardForm.ClientHeight - ScaleY(ButtonHeight) * 2, ScaleX(ButtonWidth), ScaleY(ButtonHeight));

WizardForm.DirBrowseButton.SetBounds(WizardForm.ClientWidth - ScaleX(5) * 30,
WizardForm.ClientHeight - ScaleY(ButtonHeight) * 10, ScaleX(ButtonWidth), ScaleY(ButtonHeight));

WizardForm.GroupBrowseButton.SetBounds(WizardForm.ClientWidth - ScaleX(5) * 30,
WizardForm.ClientHeight - ScaleY(ButtonHeight) * 10, ScaleX(ButtonWidth), ScaleY(ButtonHeight));


ExtractTemporaryFile('button.bmp')
LoadButtonImage(WizardForm.BackButton,bidBack)
LoadButtonImage(WizardForm.NextButton,bidNext)
LoadButtonImage(WizardForm.CancelButton,bidCancel)
LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;
//=========
procedure CurPageChangedButton(CurPageID: Integer);
begin
UpdateButton(WizardForm.BackButton,bidBack)
UpdateButton(WizardForm.NextButton,bidNext)
UpdateButton(WizardForm.CancelButton,bidCancel)
UpdateButton(WizardForm.DirBrowseButton,bidDirBrowse)
UpdateButton(WizardForm.GroupBrowseButton,bidGroupBrowse)

if CurPageID=wpSelectProgramGroup then
begin

If WizardForm.FindComponent('NextButton') is TButton
then
TButton(WizardForm.FindComponent('NextButton')).Caption:='Установить';
end;
end;
//=========
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';

//procedure UnloadSkin();
//external 'UnloadSkin@files:isskin.dll stdcall';

//function ShowWindow(hWnd: Integer; uType: Integer): Integer;
//external 'ShowWindow@user32.dll stdcall';

function InitializeSetup(): Boolean;
begin
//ExtractTemporaryFile('BASS.dll');
//ExtractTemporaryFile('sound.mp3');
//mp3Name := ExpandConstant('{tmp}\sound.mp3');
//BASS_Init(-1, 44100, 0, 0, 0);
//mp3Handle := BASS_StreamCreateFile(FALSE, PChar(mp3Name), 0, 0, BASS_SAMPLE_LOOP);
//BASS_Start();
//BASS_ChannelPlay(mp3Handle, False);
//Result := True;
ExtractTemporaryFile('my.cjstyles');
LoadSkin(ExpandConstant('{tmp}\my.cjstyles'), '');
Result := True;
end;

//************
Procedure InitializeWizard();
begin
WizardFormImagePage();
WizardFormTextPage();
WizardFormOthersObject();
WizardFormButton();
end;
//=========
procedure CurWelcomePageChanged();
begin
ImagePage_Welcome.Show;
WelcomeText_1.Show;
WelcomeText_2.Show;
end;
//=========
procedure CurSelectDirPageChanged();
begin
ImagePage_SelectDir.Show;
SelectDirText_1.Show;
SelectDirText_2.Show;
SelectDirText_3.Show;
SelectDirText_4.Show;
SelectDirText_5.Show;
PageNameLabel1.Show;
PageDescriptionLabel1.Show;
//bidDirBrowse.Show;
WizardForm.DirEdit.Show;
DirectX.Show;
Icons.Show;
end;
//============
procedure CurProgrammGroupPageChanged();
begin
ImagePage_SelectGroup.Show;
PageNameLabel2.Show;
PageDescriptionLabel2.Show;
SelectGroupText_1.Show;
//bidGroupBrowse.Show;
WizardForm.GroupEdit.Show;
end;
//============
procedure CurInstallingPageChanged();
begin

end;
//============
procedure CurFinishedPageChanged();
begin

end;
//============
procedure CurPageChanged(CurPageID: Integer);
begin
ButtonPanel[3].Hide; //добавил vint56
ButtonPanel[4].Hide; //добавил vint56
WizardForm.ProgressGauge.Hide; //добавил vint56
WizardForm.GroupBrowseButton.Hide //добавил vint56
WizardForm.DirBrowseButton.Hide //добавил vint56

CurPageChangedButton(CurPageID);
WizardFormHideAll();

If CurPageID=wpWelcome then
begin
CurWelcomePageChanged();
WelcomeText_1.Show; //добавил vint56
WelcomeText_2.Show; //добавил vint56
end
else
If CurPageID=wpSelectDir then
begin
CurSelectDirPageChanged();
WizardForm.DirBrowseButton.Show; //добавил vint56
SelectDirText_3.Show; //добавил vint56
SelectDirText_4.Show; //добавил vint56
SelectDirText_5.Show; //добавил vint56
end
else
If CurPageID=wpSelectProgramGroup then
begin
CurProgrammGroupPageChanged();
ImagePage_SelectGroup.Show; //добавил vint56
WizardForm.GroupBrowseButton.Show; //добавил vint56
SelectGroupText_1.Show; //добавил vint56
end
else
If CurPageID=wpInstalling then
begin
CurInstallingPageChanged();
ImagePage_Installing.Show; //добавил vint56
WizardForm.ProgressGauge.Show; //добавил vint56
InstallingText_1.Show; //добавил vint56
end
else
If CurPageID=wpFinished then
begin
CurFinishedPageChanged();
ImagePage_Finished.Show; //добавил vint56
FinishedText_1.Show; //добавил vint56
FinishedText_2.Show; //добавил vint56
end
end;

yamaha 31-01-2010 10:06 1334754

Когда он выдаёт ошибку мол типо повтор такой же строки.Что делать?
И как вообще правильно скидывать дополнения к своему инсталятору?

vint56 31-01-2010 10:12 1334758

yamaha, какой строки повтор

vint56 31-01-2010 11:43 1334801

МИШАНЧИК, вот что просил http://upwap.ru/731786

Tukash 31-01-2010 15:58 1335028

возможно-ли сделать, что бы эти файлы не копировались, а запускались?(имеют расширение ехе, и еще как сделать что-бы все ПО включая и это устанавливалось после распаковки архивов FreeArc?)
читать дальше »
[Types]
Name: custom; Description: Выборочная установка; Flags: iscustom

[Components]
Name: lng; Description: Выберите версию игры:; Flags: fixed; Types: custom
Name: lng/ru; Description: Версия игры 1.6.01(патч1); Flags: exclusive
Name: lng/en; Description: Версия игры 1.6.02(патч2); Flags: exclusive

[Files]
Source: C:\1.6.01\*; DestDir: {app}\; Components: lng/ru; Flags: recursesubdirs ignoreversion sortfilesbyextension createallsubdirs
Source: C:\1.6.02\*; DestDir: {app}\; Components: lng/en; Flags: recursesubdirs ignoreversion sortfilesbyextension createallsubdirs
----------------- или так:
Source: C:\1.exe; DestDir: {app}\; Components: lng/ru; Flags: recursesubdirs ignoreversion sortfilesbyextension createallsubdirs
Source: C:\2.exe; DestDir: {app}\; Components: lng/en; Flags: recursesubdirs ignoreversion sortfilesbyextension createallsubdirs

yamaha 31-01-2010 17:07 1335108

Например такие:
Строка 74
Колонка 19
Dupcicate identifier 'n'

Далeе всё теже колонки тока цифры другие и identifier expected
еще colon (':') expected

vint56 31-01-2010 17:52 1335163

yamaha,
var
n: Integer; значит еще где есть n: поблизости значит найди и удали и не будет дубликата

lexikon 31-01-2010 18:21 1335185

Serega,
всмысле заново?
Код:

//Как избавиться от запроса подтверждения выхода из инсталлятора?
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:=False;
end;

этот код работает только для отмены окна подтверждения при выходе :(
но есть другие окна) к примеру "ни один компонент не выбран" данное сообщение не уберешь) оно нужно

Sotonisto 31-01-2010 18:24 1335188

Народ, тут вот такая штука.
Как можно реализовать удаление из папки с игрой некоторых файлов (5 штук)?
Просто у меня есть обновление для RE4, так там перед его установкой нужно удалить эти 5 файлов (замена файлов оригинала на файлы апдейта отпадает).

serg aka lain 31-01-2010 19:07 1335217

Цитата:

Цитата Sotonisto
перед его установкой нужно удалить эти 5 файлов (замена файлов оригинала на файлы апдейта отпадает). »

Код:

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssInstall then
  begin
    if FileExists(ExpandConstant('{app}\MyProg.exe')) then
    DeleteFile(ExpandConstant('{app}\MyProg.exe'));

    // if FileExists(2) then .... DeleteFile(2);
  end;
end;


yamaha 31-01-2010 20:50 1335307

Как добавить бекграунд и музыку (с воззможность остановить) в этот скрипт?
читать дальше »
[Setup]
AppName=Football Manager 2009
AppVerName=Football Manager 2009 by yamaha
DefaultDirName={pf}\PanCopmany by yamaha\Football Manager 2009
UsePreviousAppDir=true
DirExistsWarning=no
ShowLanguageDialog=auto
OutputBaseFilename=Football Manager 2009
OutputDir=C:\Football Manager 2005-2010
VersionInfoCopyright=PanCompany, Inc.
DiskSliceSize=2100000000
DiskSpanning=yes
ReserveBytes=5242880
DefaultGroupName=Football Manager 2009 by yamaha
Compression=lzma/ultra
SolidCompression=yes

[Languages]
Name: eng; MessagesFile: compiler:Default.isl
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[CustomMessages]
eng.ArcBreak=Installation cancelled!
eng.ExtractedInfo=Extracted %1 Mb of %2 Mb
eng.ArcInfo=Archive: %1 of %2
eng.ArcTitle=Extracting FreeArc archive
eng.ArcError=Decompression failed with error code %1
eng.ArcFail=Decompression failed!
eng.AllProgress=Overall extraction progress: %1%%
eng.ArcBroken=Archive %1 is damaged%nor not enough free space.
eng.Extracting=Extracting: %1
eng.taskbar=%1%%, %2 remains
eng.remains=Remaining time: %1
eng.LongTime=at no time
eng.ending=ending
eng.hour= hours
eng.min= mins
eng.sec= secs

rus.ArcBreak=Установка прервана!
rus.ExtractedInfo=Распаковано %1 Мб из %2 Мб
rus.ArcInfo=Архив: %1 из %2
rus.ArcTitle=Распаковка архивов FreeArc
rus.ArcError=Распаковщик FreeArc вернул код ошибки: %1
rus.ArcFail=Распаковка не завершена!
rus.AllProgress=Общий прогресс распаковки: %1%%
rus.ArcBroken=Возможно, архив %1 повреждён%nили недостаточно места на диске назначения.
rus.Extracting=Распаковывается: %1
rus.taskbar=%1%%, жди %2
rus.remains=Осталось ждать %1
rus.LongTime=вечно
rus.ending=завершение
rus.hour= часов
rus.min= мин
rus.sec= сек

[_ISToolPreCompile]
#include AddBackslash(SourcePath) +"InnoSetupUpgrade.iss"

[Files]
;Source: *.arc; DestDir: {app}; Flags: nocompression
Source: unarc.dll; DestDir: {tmp}; Flags: dontcopy deleteafterinstall
Source: compiler:InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
Source: ISSkin.dll; DestDir: {app}; Flags: dontcopy
Source: Office2007.cjstyles; DestDir: {tmp}; Flags: dontcopy

[UninstallDelete]
Type: filesandordirs; Name:Football Manager 2009 {app}

[code]
const
Archives = '{src}\*.arc'; // укажите расположение архивов FreeArc; для внешних файлов строку в [Files] добавлять необязательно

PM_REMOVE = 1;
CP_ACP = 0; CP_UTF8 = 65001;


type
#ifdef UNICODE ; если у вас ошибка на этой строке, то установите препроцессор или исправьте скрипт для вашей версии Inno Setup
#define A "W"
#else
#define A "A" ; точка входа в SetWindowText, {#A} меняется на A или W в зависимости от версии
#endif
#if Ver < 84018176
AnsiString = String; // There is no need for this line in Inno Setup 5.2.4 and above (для Inno Setup версий 5.2.4 и выше эта строка не нужна)
#endif

TMyMsg = record
hwnd: HWND;
message: UINT;
wParam: Longint;
lParam: Longint;
time: DWORD;
pt: TPoint;
end;

TFreeArcCallback = function (what: PAnsiChar; int1, int2: Integer; str: PAnsiChar): Integer;
TArc = record Path: string; OrigSize: Integer; Size: Extended; end;

var
ExtractFile: TLabel;
lblExtractFileName: TLabel;
btnCancelUnpacking: TButton;
CancelCode, UnPackError, StartInstall: Integer;
Arcs: array of TArc;
msgError: string;
lastMb: Integer;
baseMb: Integer;
totalUncompressedSize: Integer; // total uncompressed size of archive data in mb
LastTimerEvent: DWORD;
Upload: TCheckBox;

Function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: string; cbMultiByte: integer; lpWideCharStr: string; cchWideChar: integer): longint; external 'MultiByteToWideChar@kernel32.dll stdcall';
Function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: string; cchWideChar: integer; lpMultiByteStr: string; cbMultiByte: integer; lpDefaultChar: integer; lpUsedDefaultChar: integer): longint; external 'WideCharToMultiByte@kernel32.dll stdcall';

function PeekMessage(var lpMsg: TMyMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMyMsg): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: TMyMsg): Longint; external 'DispatchMessageA@user32.dll stdcall';

Function OemToChar(lpszSrc, lpszDst: AnsiString): longint; external 'OemToCharA@user32.dll stdcall';
function GetWindowLong(hWnd, nIndex: Integer): Longint; external 'GetWindowLongA@user32 stdcall delayload';
function SetWindowText(hWnd: Longint; lpString: String): Longint; external 'SetWindowText{#A}@user32 stdcall delayload';

function GetTickCount: DWord; external 'GetTickCount@kernel32';
function WrapFreeArcCallback (callback: TFreeArcCallback; paramcount: integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function FreeArcExtract (callback: longword; cmd1,cmd2,cmd3,cmd4,cmd5,cmd6,cmd7,cmd8,cmd9,cmd10: PAnsiChar): integer; external 'FreeArcExtract@files:unarc.dll cdecl';

// задал процедуру, чтоб отмечался чебокс еси кликнуть по надписи lblCheckBox
procedure lblCheckBoxOnClick(Sender: TObject);
begin
if Upload.Checked = False then
Upload.Checked:= True else
Upload.Checked:= False;
end;

procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';


procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';


function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('Office2007.cjstyles');
LoadSkin(ExpandConstant('{tmp}\Office2007.cjstyles'), '');
Result := True;
end;

procedure AppProcessMessage;
var
Msg: TMyMsg;
begin
while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;

// Перевод числа в строку с точностью 3 знака (%.3n) с округлением дробной части, если она есть
Function NumToStr(Float: Extended): String;
Begin
Result:= Format('%.3n', [Float]); StringChange(Result, ',', '.');
while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Length(Result) > 1) do
SetLength(Result, Length(Result)-1);
End;

function cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;



// Converts OEM encoded string into ANSI
// Преобразует OEM строку в ANSI кодировку
function OemToAnsiStr( strSource: AnsiString): AnsiString;
var
nRet : longint;
begin
SetLength( Result, Length( strSource ) );
nRet:= OemToChar( strSource, Result );
end;

// Converts ANSI encoded string into UTF-8
// Преобразует строку из ANSI в UTF-8 кодировку
function AnsiToUtf8( strSource: string ): string;
var
nRet : integer;
WideCharBuf: string;
MultiByteBuf: string;
begin
strSource:= strSource + chr(0);
SetLength( WideCharBuf, Length( strSource ) * 2 );
SetLength( MultiByteBuf, Length( strSource ) * 2 );

nRet:= MultiByteToWideChar( CP_ACP, 0, strSource, -1, WideCharBuf, Length(WideCharBuf) );
nRet:= WideCharToMultiByte( CP_UTF8, 0, WideCharBuf, -1, MultiByteBuf, Length(MultiByteBuf), 0, 0);

Result:= MultiByteBuf;
end;

// OnClick event function for btnCancel
procedure btnCancelUnpackingOnClick(Sender: TObject);
begin
if MsgBox( SetupMessage( msgExitSetupMessage ), mbInformation, MB_YESNO ) = IDYES then
CancelCode:= -127;
end;

var origsize: Integer;
// The callback function for getting info about FreeArc archive
function FreeArcInfoCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
begin
if string(what)='origsize' then origsize := Mb else
if string(what)='compsize' then else
if string(what)='total_files' then else
Result:= CancelCode;
end;

// Returns decompressed size of files in archive
function ArchiveOrigSize(arcname: string): Integer;
var
callback: longword;
Begin
callback:= WrapFreeArcCallback(@FreeArcInfoCallback,4); //FreeArcInfoCallback has 4 arguments
CancelCode:= 0;
AppProcessMessage;
try
// Pass the specified arguments to 'unarc.dll'
Result:= FreeArcExtract (callback, 'l', '--', AnsiToUtf8(arcname), '', '', '', '', '', '', '');
if CancelCode < 0 then Result:= CancelCode;
if Result >= 0 then Result:= origsize;
except
Result:= -63; // ArcFail
end;
end;

// Scans the specified folders for archives and add them to list
function FindArcs(dir: string): Extended;
var
FSR: TFindRec;
Begin
Result:= 0;
if FindFirst(ExpandConstant(dir), FSR) then begin
try
repeat
// Skip everything but the folders
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then CONTINUE;
n:= GetArrayLength(Arcs);
// Expand the folder list
SetArrayLength(Arcs, n +1);
Arcs[n].Path:= ExtractFilePath(ExpandConstant(dir)) + FSR.Name;
Arcs[n].Size:= Size64(FSR.SizeHigh, FSR.SizeLow);
Result:= Result + Arcs[n].Size;
Arcs[n].OrigSize := ArchiveOrigSize(Arcs[n].Path)
totalUncompressedSize := totalUncompressedSize + Arcs[n].OrigSize
until not FindNext(FSR);
finally
FindClose(FSR);
end;
end;
End;

// Sets the TaskBar title
Procedure SetTaskBarTitle(Title: String); var h: Integer;
Begin
h:= GetWindowLong(MainForm.Handle, -8); if h <> 0 then SetWindowText(h, Title);
End;

// Converts milliseconds to human-readable time
// Конвертирует милисекунды в человеко-читаемое изображение времени
Function TicksToTime(Ticks: DWord; h,m,s: String; detail: Boolean): String;
Begin
if detail {hh:mm:ss format} then
Result:= PADZ(IntToStr(Ticks/3600000), 2) +':'+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +':'+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2)
else if Ticks/3600 >= 1000 {more than hour} then
Result:= IntToStr(Ticks/3600000) +h+' '+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +m
else if Ticks/60 >= 1000 {1..60 minutes} then
Result:= IntToStr(Ticks/60000) +m+' '+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2) +s
else Result:= IntToStr(Ticks/1000) +s {less than one minute}
End;

// The main callback function for unpacking FreeArc archives
function FreeArcCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
var
percents, Remaining: Integer;
s: String;
begin
if GetTickCount - LastTimerEvent > 1000 then begin
// This code will be executed once each 1000 ms (этот код будет выполняться раз в 1000 миллисекунд)
// ....
// End of code executed by timer
LastTimerEvent := LastTimerEvent+1000;
end;

if string(what)='filename' then begin
// Update FileName label
lblExtractFileName.Caption:= FmtMessage( cm( 'Extracting' ), [OemToAnsiStr( str )] )
end else if (string(what)='write') and (totalUncompressedSize>0) and (Mb>lastMb) then begin
// Assign to Mb *total* amount of data extracted to the moment from all archives
lastMb := Mb;
Mb := baseMb+Mb;

// Update progress bar
WizardForm.ProgressGauge.Position:= Mb;

// Show how much megabytes/archives were processed up to the moment
percents:= (Mb*1000) div totalUncompressedSize;
s := FmtMessage(cm('ExtractedInfo'), [IntToStr(Mb), IntToStr(totalUncompressedSize)]);
if GetArrayLength(Arcs)>1 then
s := s + '. '+FmtMessage(cm('ArcInfo'), [IntToStr(n+1), IntToStr(GetArrayLength(Arcs))])
ExtractFile.Caption := s

// Calculate and show current percents
percents:= (Mb*1000) div totalUncompressedSize;
s:= FmtMessage(cm('AllProgress'), [Format('%.1n', [Abs(percents/10)])]);
if Mb > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((totalUncompressedSize - Mb)/Mb)) else Remaining:= 0;
if Remaining = 0 then SetTaskBarTitle(cm('ending')) else begin
s:= s + '. '+FmtMessage(cm('remains'), [TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)])
SetTaskBarTitle(FmtMessage(cm('taskbar'), [IntToStr(percents/10), TicksToTime(Remaining, 'h', 'm', 's', false)]))
end;
WizardForm.FileNameLabel.Caption := s
end;
AppProcessMessage;
Result:= CancelCode;
end;

// Extracts all found archives
function UnPack(Archives: string): Integer;
var
totalCompressedSize: Extended;
callback: longword;
FreeMB, TotalMB: Cardinal;
begin
// Display 'Extracting FreeArc archive'
lblExtractFileName.Caption:= '';
lblExtractFileName.Show;
ExtractFile.caption:= cm('ArcTitle');
ExtractFile.Show;
// Show the 'Cancel unpacking' button and set it as default button
btnCancelUnpacking.Caption:= WizardForm.CancelButton.Caption;
btnCancelUnpacking.Show;
WizardForm.ActiveControl:= btnCancelUnpacking;
WizardForm.ProgressGauge.Position:= 0;
// Get the size of all archives
totalUncompressedSize := 0;
totalCompressedSize := FindArcs(Archives);
WizardForm.ProgressGauge.Max:= totalUncompressedSize;
// Other initializations
callback:= WrapFreeArcCallback(@FreeArcCallback,4); //FreeArcCallback has 4 arguments
StartInstall:= GetTickCount; {время начала распаковки}
LastTimerEvent:= GetTickCount;
baseMb:= 0

for n:= 0 to GetArrayLength(Arcs) -1 do
begin
lastMb := 0
CancelCode:= 0;
AppProcessMessage;
try
// Pass the specified arguments to 'unarc.dll'
Result:= FreeArcExtract (callback, 'x', '-o+', '-dp' + AnsiToUtf8( ExpandConstant('{app}') ), '--', AnsiToUtf8(Arcs[n].Path), '', '', '', '', '');
if CancelCode < 0 then Result:= CancelCode;
except
Result:= -63; // ArcFail
end;
baseMb:= baseMb+lastMb

// Error occured
if Result <> 0 then
begin
msgError:= FmtMessage(cm('ArcError'), [IntToStr(Result)]);
GetSpaceOnDisk(ExtractFileDrive(ExpandConstant('{app}')), True, FreeMB, TotalMB);
case Result of
-1: if FreeMB < 32 {Мб на диске} then msgError:= SetupMessage(msgDiskSpaceWarningTitle)
else msgError:= msgError + #13#10 + FmtMessage(cm('ArcBroken'), [ExtractFileName(Arcs[n].Path)]);
-127: msgError:= cm('ArcBreak'); //Cancel button
-63: msgError:= cm('ArcFail');
end;
// MsgBox(msgError, mbInformation, MB_OK); //сообщение показывается на странице завершения
Log(msgError);
Break; //прервать цикл распаковки
end;
end;
// Hide labels and button
WizardForm.FileNameLabel.Caption:= '';
lblExtractFileName.Hide;
ExtractFile.Hide;
btnCancelUnpacking.Hide;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
UnPackError:= UnPack(Archives)
if UnPackError = 0 then
SetTaskBarTitle(SetupMessage(msgSetupAppTitle))
else
begin
// Error occured, uninstall it then
Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n); //откат установки из-за ошибки unarc.dll
SetTaskBarTitle(SetupMessage(msgErrorTitle))
WizardForm.Caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
end;
end;
end;

// стандартный способ отката (не нужна CurPageChanged), но архивы распаковываются до извлечения файлов инсталлятора
// if CurStep = ssInstall then
// if UnPack(Archives) <> 0 then Abort;

Procedure CurPageChanged(CurPageID: Integer);
Begin
if (CurPageID = wpFinished) and (UnPackError <> 0) then
begin // Extraction was unsuccessful (распаковщик вернул ошибку)
// Show error message
WizardForm.FinishedLabel.Font.Color:= $0000C0; // red (красный)
WizardForm.FinishedLabel.Height:= WizardForm.FinishedLabel.Height * 2;
WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) + #13#10#13#10 + msgError;
end;
End;

procedure InitializeWizard();
begin
with WizardForm.ProgressGauge do
begin
{значения системных требований (необязательно)} NeedSys:= 5.1; NeedSp:= 2; NeedMB:= 2024; NeedMHZ:= 1424; NeedRAM:= 512; NeedVRAM:= 128; NeedSwap:= 960; NeedRegKey:= 'Software\Microsoft\.NETFramework'; NeedRegKeyOK:=' Пакет Microsoft .NET Framework установлен'; NeedRegKeyNO:=' Требуется установить Microsoft .NET Framework'
InnoUpgrade { InnoSetup Add-on by Victor Dobrov }
// Create a label to show current FileName being extracted
lblExtractFileName:= TLabel.Create(WizardForm);
lblExtractFileName.parent:=WizardForm.InstallingPage;
lblExtractFileName.autosize:=false;
lblExtractFileName.Width:= Width;
lblExtractFileName.top:=Top + ScaleY(35);
lblExtractFileName.Caption:= '';
lblExtractFileName.Hide;

// Create a label to show percentage
ExtractFile:= TLabel.Create(WizardForm);
ExtractFile.parent:=WizardForm.InstallingPage;
ExtractFile.autosize:=false;
ExtractFile.Width:= Width;
ExtractFile.top:=lblExtractFileName.Top + ScaleY(16);
ExtractFile.caption:= '';
ExtractFile.Hide;
end;

// Create a 'Cancel unpacking' button and hide it for now.
btnCancelUnpacking:=TButton.create(WizardForm);
btnCancelUnpacking.Parent:= WizardForm;
btnCancelUnpacking.SetBounds(WizardForm.CancelButton.Left, WizardForm.CancelButton.top, WizardForm.CancelButton.Width, WizardForm.CancelButton.Height);
btnCancelUnpacking.OnClick:= @btnCancelUnpackingOnClick;
btnCancelUnpacking.Hide;
end;

procedure DeinitializeSetup();
begin
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
UnloadSkin();
end;

Tukash 31-01-2010 21:03 1335330

Вложений: 1
yamaha
вот тебе музыка
читать дальше »
[Files]
Source: C:\sound.mp3; DestDir: {tmp}; Flags: dontcopy noencryption nocompression
Source: C:\BASS.dll; DestDir: {tmp}; Flags: dontcopy noencryption
Source: C:\MusicButton.bmp; DestDir: {tmp}; Flags: dontcopy (прилепил)


[_Code]
const
Archives = '{src}\*.arc'; // укажите расположение архивов FreeArc; для внешних файлов строку в [Files] добавлять необязательно

PM_REMOVE = 1;
CP_ACP = 0; CP_UTF8 = 65001;
oneMb = 1048576;

type
#ifdef UNICODE ; если у вас ошибка на этой строке, то установите препроцессор или исправьте скрипт для вашей версии Inno Setup
#define A "W"
#else
#define A "A" ; точка входа в SetWindowText, {#A} меняется на A или W в зависимости от версии
PAnsiChar = PChar; // Required for Inno Setup 5.3.0 and higher. (требуется для Inno Setup версии 5.3.0 и ниже)
#endif
#if Ver < 84018176
AnsiString = String; // There is no need for this line in Inno Setup 5.2.4 and above (для Inno Setup версий 5.2.4 и выше эта строка не нужна)
#endif

TMyMsg = record
hwnd: HWND;
message: UINT;
wParam: Longint;
lParam: Longint;
time: DWORD;
pt: TPoint;
end;

TFreeArcCallback = function (what: PAnsiChar; int1, int2: Integer; str: PAnsiChar): Integer;
TArc = record Path: string; OrigSize: Integer; Size: Extended; end;

var
ExtractFile: TLabel;
lblExtractFileName: TLabel;
btnCancelUnpacking: TButton;
CancelCode, n, UnPackError, StartInstall: Integer;
Arcs: array of TArc;
msgError: string;
lastMb: Integer;
baseMb: Integer;
totalUncompressedSize: Integer; // total uncompressed size of archive data in mb
LastTimerEvent: DWORD;

Function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: string; cbMultiByte: integer; lpWideCharStr: string; cchWideChar: integer): longint; external 'MultiByteToWideChar@kernel32.dll stdcall';
Function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: string; cchWideChar: integer; lpMultiByteStr: string; cbMultiByte: integer; lpDefaultChar: integer; lpUsedDefaultChar: integer): longint; external 'WideCharToMultiByte@kernel32.dll stdcall';

function PeekMessage(var lpMsg: TMyMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMyMsg): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: TMyMsg): Longint; external 'DispatchMessageA@user32.dll stdcall';

Function OemToChar(lpszSrc, lpszDst: AnsiString): longint; external 'OemToCharA@user32.dll stdcall';
function GetWindowLong(hWnd, nIndex: Integer): Longint; external 'GetWindowLongA@user32 stdcall delayload';
function SetWindowText(hWnd: Longint; lpString: String): Longint; external 'SetWindowText{#A}@user32 stdcall delayload';

function GetTickCount: DWord; external 'GetTickCount@kernel32';
function WrapFreeArcCallback (callback: TFreeArcCallback; paramcount: integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function FreeArcExtract (callback: longword; cmd1,cmd2,cmd3,cmd4,cmd5,cmd6,cmd7,cmd8,cmd9,cmd10: PAnsiChar): integer; external 'FreeArcExtract@files:unarc.dll cdecl';

procedure AppProcessMessage;
var
Msg: TMyMsg;
begin
while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;

// Перевод числа в строку с точностью 3 знака (%.3n) с округлением дробной части, если она есть
Function NumToStr(Float: Extended): String;
Begin
Result:= Format('%.3n', [Float]); StringChange(Result, ',', '.');
while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Length(Result) > 1) do
SetLength(Result, Length(Result)-1);
End;

function cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;

Function Size64(Hi, Lo: Integer): Extended;
Begin
Result:= Lo;
if Lo<0 then Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
for Hi:= Hi-1 Downto 0 do
Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
End;

// Converts OEM encoded string into ANSI
// Преобразует OEM строку в ANSI кодировку
function OemToAnsiStr( strSource: AnsiString): AnsiString;
var
nRet : longint;
begin
SetLength( Result, Length( strSource ) );
nRet:= OemToChar( strSource, Result );
end;

// Converts ANSI encoded string into UTF-8
// Преобразует строку из ANSI в UTF-8 кодировку
function AnsiToUtf8( strSource: string ): string;
var
nRet : integer;
WideCharBuf: string;
MultiByteBuf: string;
begin
strSource:= strSource + chr(0);
SetLength( WideCharBuf, Length( strSource ) * 2 );
SetLength( MultiByteBuf, Length( strSource ) * 2 );

nRet:= MultiByteToWideChar( CP_ACP, 0, strSource, -1, WideCharBuf, Length(WideCharBuf) );
nRet:= WideCharToMultiByte( CP_UTF8, 0, WideCharBuf, -1, MultiByteBuf, Length(MultiByteBuf), 0, 0);

Result:= MultiByteBuf;
end;

// OnClick event function for btnCancel
procedure btnCancelUnpackingOnClick(Sender: TObject);
begin
if MsgBox( SetupMessage( msgExitSetupMessage ), mbInformation, MB_YESNO ) = IDYES then
CancelCode:= -127;
end;

var origsize: Integer;
// The callback function for getting info about FreeArc archive
function FreeArcInfoCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
begin
if string(what)='origsize' then origsize := Mb else
if string(what)='compsize' then else
if string(what)='total_files' then else
Result:= CancelCode;
end;

// Returns decompressed size of files in archive
function ArchiveOrigSize(arcname: string): Integer;
var
callback: longword;
Begin
callback:= WrapFreeArcCallback(@FreeArcInfoCallback,4); //FreeArcInfoCallback has 4 arguments
CancelCode:= 0;
AppProcessMessage;
try
// Pass the specified arguments to 'unarc.dll'
Result:= FreeArcExtract (callback, 'l', '--', AnsiToUtf8(arcname), '', '', '', '', '', '', '');
if CancelCode < 0 then Result:= CancelCode;
if Result >= 0 then Result:= origsize;
except
Result:= -63; // ArcFail
end;
end;

// Scans the specified folders for archives and add them to list
function FindArcs(dir: string): Extended;
var
FSR: TFindRec;
Begin
Result:= 0;
if FindFirst(ExpandConstant(dir), FSR) then begin
try
repeat
// Skip everything but the folders
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then CONTINUE;
n:= GetArrayLength(Arcs);
// Expand the folder list
SetArrayLength(Arcs, n +1);
Arcs[n].Path:= ExtractFilePath(ExpandConstant(dir)) + FSR.Name;
Arcs[n].Size:= Size64(FSR.SizeHigh, FSR.SizeLow);
Result:= Result + Arcs[n].Size;
Arcs[n].OrigSize := ArchiveOrigSize(Arcs[n].Path)
totalUncompressedSize := totalUncompressedSize + Arcs[n].OrigSize
until not FindNext(FSR);
finally
FindClose(FSR);
end;
end;
End;

// Sets the TaskBar title
Procedure SetTaskBarTitle(Title: String); var h: Integer;
Begin
h:= GetWindowLong(MainForm.Handle, -8); if h <> 0 then SetWindowText(h, Title);
End;

// Converts milliseconds to human-readable time
// Конвертирует милисекунды в человеко-читаемое изображение времени
Function TicksToTime(Ticks: DWord; h,m,s: String; detail: Boolean): String;
Begin
if detail {hh:mm:ss format} then
Result:= PADZ(IntToStr(Ticks/3600000), 2) +':'+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +':'+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2)
else if Ticks/3600 >= 1000 {more than hour} then
Result:= IntToStr(Ticks/3600000) +h+' '+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +m
else if Ticks/60 >= 1000 {1..60 minutes} then
Result:= IntToStr(Ticks/60000) +m+' '+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2) +s
else Result:= IntToStr(Ticks/1000) +s {less than one minute}
End;

// The main callback function for unpacking FreeArc archives
function FreeArcCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
var
percents, Remaining: Integer;
s: String;
begin
if GetTickCount - LastTimerEvent > 1000 then begin
// This code will be executed once each 1000 ms (этот код будет выполняться раз в 1000 миллисекунд)
// ....
// End of code executed by timer
LastTimerEvent := LastTimerEvent+1000;
end;

if string(what)='filename' then begin
// Update FileName label
lblExtractFileName.Caption:= FmtMessage( cm( 'Extracting' ), [OemToAnsiStr( str )] )
end else if (string(what)='write') and (totalUncompressedSize>0) and (Mb>lastMb) then begin
// Assign to Mb *total* amount of data extracted to the moment from all archives
lastMb := Mb;
Mb := baseMb+Mb;

// Update progress bar
WizardForm.ProgressGauge.Position:= Mb;

// Show how much megabytes/archives were processed up to the moment
percents:= (Mb*1000) div totalUncompressedSize;
s := FmtMessage(cm('ExtractedInfo'), [IntToStr(Mb), IntToStr(totalUncompressedSize)]);
if GetArrayLength(Arcs)>1 then
s := s + '. '+FmtMessage(cm('ArcInfo'), [IntToStr(n+1), IntToStr(GetArrayLength(Arcs))])
ExtractFile.Caption := s

// Calculate and show current percents
percents:= (Mb*1000) div totalUncompressedSize;
s:= FmtMessage(cm('AllProgress'), [Format('%.1n', [Abs(percents/10)])]);
if Mb > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((totalUncompressedSize - Mb)/Mb)) else Remaining:= 0;
if Remaining = 0 then SetTaskBarTitle(cm('ending')) else begin
s:= s + '. '+FmtMessage(cm('remains'), [TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)])
SetTaskBarTitle(FmtMessage(cm('taskbar'), [IntToStr(percents/10), TicksToTime(Remaining, 'h', 'm', 's', false)]))
end;
WizardForm.FileNameLabel.Caption := s
end;
AppProcessMessage;
Result:= CancelCode;
end;

// Extracts all found archives
function UnPack(Archives: string): Integer;
var
totalCompressedSize: Extended;
callback: longword;
FreeMB, TotalMB: Cardinal;
begin
// Display 'Extracting FreeArc archive'
lblExtractFileName.Caption:= '';
lblExtractFileName.Show;
ExtractFile.caption:= cm('ArcTitle');
ExtractFile.Show;
// Show the 'Cancel unpacking' button and set it as default button
btnCancelUnpacking.Caption:= WizardForm.CancelButton.Caption;
btnCancelUnpacking.Show;
WizardForm.ActiveControl:= btnCancelUnpacking;
WizardForm.ProgressGauge.Position:= 0;
// Get the size of all archives
totalUncompressedSize := 0;
totalCompressedSize := FindArcs(Archives);
WizardForm.ProgressGauge.Max:= totalUncompressedSize;
// Other initializations
callback:= WrapFreeArcCallback(@FreeArcCallback,4); //FreeArcCallback has 4 arguments
StartInstall:= GetTickCount; {время начала распаковки}
LastTimerEvent:= GetTickCount;
baseMb:= 0

for n:= 0 to GetArrayLength(Arcs) -1 do
begin
lastMb := 0
CancelCode:= 0;
AppProcessMessage;
try
// Pass the specified arguments to 'unarc.dll'
Result:= FreeArcExtract (callback, 'x', '-o+', '-dp' + AnsiToUtf8( ExpandConstant('{app}') ), '--', AnsiToUtf8(Arcs[n].Path), '', '', '', '', '');
if CancelCode < 0 then Result:= CancelCode;
except
Result:= -63; // ArcFail
end;
baseMb:= baseMb+lastMb

// Error occured
if Result <> 0 then
begin
msgError:= FmtMessage(cm('ArcError'), [IntToStr(Result)]);
GetSpaceOnDisk(ExtractFileDrive(ExpandConstant('{app}')), True, FreeMB, TotalMB);
case Result of
-1: if FreeMB < 32 {Мб на диске} then msgError:= SetupMessage(msgDiskSpaceWarningTitle)
else msgError:= msgError + #13#10 + FmtMessage(cm('ArcBroken'), [ExtractFileName(Arcs[n].Path)]);
-127: msgError:= cm('ArcBreak'); //Cancel button
-63: msgError:= cm('ArcFail');
end;
// MsgBox(msgError, mbInformation, MB_OK); //сообщение показывается на странице завершения
Log(msgError);
Break; //прервать цикл распаковки
end;
end;
// Hide labels and button
WizardForm.FileNameLabel.Caption:= '';
lblExtractFileName.Hide;
ExtractFile.Hide;
btnCancelUnpacking.Hide;
end;

procedure CurStepChanged1(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
UnPackError:= UnPack(Archives)
if UnPackError = 0 then
SetTaskBarTitle(SetupMessage(msgSetupAppTitle))
else
begin
// Error occured, uninstall it then
Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n); //откат установки из-за ошибки unarc.dll
SetTaskBarTitle(SetupMessage(msgErrorTitle))
WizardForm.Caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
end;
end;
end;

// стандартный способ отката (не нужна CurPageChanged1), но архивы распаковываются до извлечения файлов инсталлятора
// if CurStep = ssInstall then
// if UnPack(Archives) <> 0 then Abort;

Procedure CurPageChanged1(CurPageID: Integer);
Begin
if (CurPageID = wpFinished) and (UnPackError <> 0) then
begin // Extraction was unsuccessful (распаковщик вернул ошибку)
// Show error message
WizardForm.FinishedLabel.Font.Color:= $0000C0; // red (красный)
WizardForm.FinishedLabel.Height:= WizardForm.FinishedLabel.Height * 2;
WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) + #13#10#13#10 + msgError;
end;
End;

procedure InitializeWizard1();
begin
with WizardForm.ProgressGauge do
begin
// Create a label to show current FileName being extracted
lblExtractFileName:= TLabel.Create(WizardForm);
lblExtractFileName.parent:=WizardForm.InstallingPage;
lblExtractFileName.autosize:=false;
lblExtractFileName.Width:= Width;
lblExtractFileName.top:=Top + ScaleY(35);
lblExtractFileName.Caption:= '';
lblExtractFileName.Hide;

// Create a label to show percentage
ExtractFile:= TLabel.Create(WizardForm);
ExtractFile.parent:=WizardForm.InstallingPage;
ExtractFile.autosize:=false;
ExtractFile.Width:= Width;
ExtractFile.top:=lblExtractFileName.Top + ScaleY(16);
ExtractFile.caption:= '';
ExtractFile.Hide;
end;

// Create a 'Cancel unpacking' button and hide it for now.
btnCancelUnpacking:=TButton.create(WizardForm);
btnCancelUnpacking.Parent:= WizardForm;
btnCancelUnpacking.SetBounds(WizardForm.CancelButton.Left, WizardForm.CancelButton.top, WizardForm.CancelButton.Width, WizardForm.CancelButton.Height);
btnCancelUnpacking.OnClick:= @btnCancelUnpackingOnClick;
btnCancelUnpacking.Hide;
end;

const

BASS_ACTIVE_PLAYING = 1;
BASS_ACTIVE_STALLED = 2;
BASS_ACTIVE_PAUSED = 3;
BASS_SAMPLE_LOOP = 4;

var
mp3Handle: HWND;
mp3Name: String;
PlayButton, PauseButton, StopButton: TPanel;
PlayImage, PauseImage: TBitmapImage;
PlayLabel, PauseLabel: TLabel;
MouseLabel: Tlabel;

function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean;
external 'BASS_Init@files:BASS.dll stdcall delayload';

function BASS_StreamCreateFile(mem: BOOL; f: PChar; offset: DWORD; length: DWORD; flags: DWORD): DWORD;
external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';

function BASS_Start(): Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';

function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';

function BASS_ChannelIsActive(handle: DWORD): Integer;
external 'BASS_ChannelIsActive@files:BASS.dll stdcall delayload';

function BASS_ChannelPause(handle: DWORD): Boolean;
external 'BASS_ChannelPause@files:BASS.dll stdcall delayload';

function BASS_Pause(): Boolean;
external 'BASS_Pause@files:BASS.dll stdcall delayload';

function BASS_Free(): Boolean;
external 'BASS_Free@files:BASS.dll stdcall delayload';

procedure PlayMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
PlayImage.Left := -101
end;

procedure PlayMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
PlayImage.Left := 5
end;

procedure PlayMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if PlayImage.Left <> -101 then PlayImage.Left := -197
end;

procedure PauseMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
PauseImage.Left := -133
end;

procedure PauseMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
PauseImage.Left := -37
end;

procedure PauseMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if PauseImage.Left <> -133 then PauseImage.Left := -229
end;

procedure MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
PlayImage.Left := -5
PauseImage.Left := -37
end;

function InitializeSetup2(): Boolean;
begin
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('sound.mp3');
mp3Name := ExpandConstant('{tmp}\sound.mp3');
BASS_Init(-1, 44100, 0, 0, 0);
mp3Handle := BASS_StreamCreateFile(FALSE, PChar(mp3Name), 0, 0, BASS_SAMPLE_LOOP);
BASS_Start();
BASS_ChannelPlay(mp3Handle, False);
Result := True;
end;

procedure PlayButtonOnClick(Sender: TObject);
begin
case BASS_ChannelIsActive(mp3Handle) of
BASS_ACTIVE_PAUSED:
begin
BASS_ChannelPlay(mp3Handle, False);
PlayButton.Hide
PauseButton.Show
end;
end;
end;

procedure PauseButtonOnClick(Sender: TObject);
begin
BASS_ChannelPause(mp3Handle);
PauseButton.Hide
PlayButton.Show
end;

procedure InitializeWizard2();
begin
ExtractTemporaryFile('MusicButton.bmp')

MouseLabel := TLabel.Create(WizardForm)
MouseLabel.Width := WizardForm.Width
MouseLabel.Height := WizardForm.Height
MouseLabel.Autosize := False
MouseLabel.Transparent := True
MouseLabel.OnMouseMove := @MouseMove
MouseLabel.Parent := WizardForm

PlayButton := TPanel.Create(WizardForm)
PlayButton.Left :=0
PlayButton.Top :=313
PlayButton.Width := 23
PlayButton.Height := 22
PlayButton.Cursor := crHand
PlayButton.ShowHint := True
PlayButton.Hint := 'Воспроизвести'
PlayButton.OnClick := @PlayButtonOnClick
PlayButton.Parent := WizardForm

PlayImage := TBitmapImage.Create(WizardForm)
PlayImage.Left := 0
PlayImage.Top := 0
PlayImage.Width := 288
PlayImage.Height := 22
PlayImage.Enabled := False
PlayImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\MusicButton.bmp'))
PlayImage.Parent := PlayButton
//
PlayImage.ReplaceColor:=$E2E2E2
PlayImage.ReplaceWithColor:=clBtnFace


PlayLabel := TLabel.Create(WizardForm)
PlayLabel.Width := PlayButton.Width
PlayLabel.Height := PlayButton.Height
PlayLabel.Autosize := False
PlayLabel.Transparent := True
PlayLabel.OnClick := @PlayButtonOnClick
PlayLabel.OnMouseDown := @PlayMouseDown
PlayLabel.OnMouseUp := @PlayMouseUp
PlayLabel.OnMouseMove := @PlayMouseMove
PlayLabel.Parent := PlayButton

PauseButton := TPanel.Create(WizardForm)
PauseButton.Left :=0
PauseButton.Top := 313
PauseButton.Width := 23
PauseButton.Height := 22
PauseButton.Cursor := crHand
PauseButton.ShowHint := True
PauseButton.Hint := 'Приостановить'
PauseButton.OnClick := @PauseButtonOnClick
PauseButton.Parent := WizardForm

PauseImage := TBitmapImage.Create(WizardForm)
PauseImage.Left := -37
PauseImage.Top := 0
PauseImage.Width := 288
PauseImage.Height := 22
PauseImage.Enabled := False
PauseImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\MusicButton.bmp'))
PauseImage.Parent := PauseButton
//
PauseImage.ReplaceColor:=$E2E2E2
PauseImage.ReplaceWithColor:=clBtnFace

PauseLabel := TLabel.Create(WizardForm)
PauseLabel.Width := PauseButton.Width
PauseLabel.Height := PauseButton.Height
PauseLabel.Autosize := False
PauseLabel.Transparent := True
PauseLabel.OnClick := @PauseButtonOnClick
PauseLabel.OnMouseDown := @PauseMouseDown
PauseLabel.OnMouseUp := @PauseMouseUp
PauseLabel.OnMouseMove := @PauseMouseMove
PauseLabel.Parent := PauseButton
end;

procedure DeinitializeSetup2();
begin
BASS_Free();
end;


procedure CurStepChanged(CurStep: TSetupStep);
begin
CurStepChanged1(CurStep);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
CurPageChanged1(CurPageID);
end;

procedure InitializeWizard();
begin
InitializeWizard1();
InitializeWizard2();
end;

function InitializeSetup(): Boolean;
begin
Result := InitializeSetup2(); if not Result then exit;
end;

procedure DeinitializeSetup();
begin
DeinitializeSetup2();
end;

yamaha 31-01-2010 21:16 1335345

ЧТо-то как обычно при слепливание скриптов у меня ошибки выдаёт ты немог бы слепить их)

Tukash 31-01-2010 23:40 1335466

yamaha
я их и так склеил))

yamaha 01-02-2010 09:56 1335682

Ты сам то его тестил?
добавляюэ всё это и ошибки даже не в них а в коде.
читать дальше »
[Setup]
AppName=Football Manager 2009
AppVerName=Football Manager 2009 by yamaha
DefaultDirName={pf}\PanCopmany by yamaha\Football Manager 2009
UsePreviousAppDir=true
DirExistsWarning=no
ShowLanguageDialog=auto
OutputBaseFilename=Football Manager 2009
OutputDir=C:\Football Manager 2005-2010
VersionInfoCopyright=PanCompany, Inc.
DiskSliceSize=2100000000
DiskSpanning=yes
ReserveBytes=5242880
DefaultGroupName=Football Manager 2009 by yamaha
Compression=lzma/ultra
SolidCompression=yes

[Languages]
Name: eng; MessagesFile: compiler:Default.isl
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[CustomMessages]
eng.ArcBreak=Installation cancelled!
eng.ExtractedInfo=Extracted %1 Mb of %2 Mb
eng.ArcInfo=Archive: %1 of %2
eng.ArcTitle=Extracting FreeArc archive
eng.ArcError=Decompression failed with error code %1
eng.ArcFail=Decompression failed!
eng.AllProgress=Overall extraction progress: %1%%
eng.ArcBroken=Archive %1 is damaged%nor not enough free space.
eng.Extracting=Extracting: %1
eng.taskbar=%1%%, %2 remains
eng.remains=Remaining time: %1
eng.LongTime=at no time
eng.ending=ending
eng.hour= hours
eng.min= mins
eng.sec= secs

rus.ArcBreak=Установка прервана!
rus.ExtractedInfo=Распаковано %1 Мб из %2 Мб
rus.ArcInfo=Архив: %1 из %2
rus.ArcTitle=Распаковка архивов FreeArc
rus.ArcError=Распаковщик FreeArc вернул код ошибки: %1
rus.ArcFail=Распаковка не завершена!
rus.AllProgress=Общий прогресс распаковки: %1%%
rus.ArcBroken=Возможно, архив %1 повреждён%nили недостаточно места на диске назначения.
rus.Extracting=Распаковывается: %1
rus.taskbar=%1%%, жди %2
rus.remains=Осталось ждать %1
rus.LongTime=вечно
rus.ending=завершение
rus.hour= часов
rus.min= мин
rus.sec= сек

[_ISToolPreCompile]
#include AddBackslash(SourcePath) +"InnoSetupUpgrade.iss"

[Files]
;Source: *.arc; DestDir: {app}; Flags: nocompression
Source: unarc.dll; DestDir: {tmp}; Flags: dontcopy deleteafterinstall
Source: compiler:InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
Source: ISSkin.dll; DestDir: {app}; Flags: dontcopy
Source: Office2007.cjstyles; DestDir: {tmp}; Flags: dontcopy

[UninstallDelete]
Type: filesandordirs; Name:Football Manager 2009 {app}

vint56 01-02-2010 10:52 1335722

yamaha, вот http://rghost.ru/918364

Tukash 01-02-2010 14:21 1335902

yamaha
[Files]
Source: C:\sound.mp3; DestDir: {tmp}; Flags: dontcopy noencryption nocompression
Source: C:\BASS.dll; DestDir: {tmp}; Flags: dontcopy noencryption
Source: C:\MusicButton.bmp; DestDir: {tmp}; Flags: dontcopy
это для кого???

yamaha 01-02-2010 14:45 1335925

Да вставлял я его как бы)
Уж не до такой степени я тупой.

vint56 спасибо, просто выручаешь)))
Теперь подскажи еще как поменять расположение кнопки и сделать инсталятор на бекграунде и чтобы была смена картинок)

R.i.m.s.k.y. 01-02-2010 15:03 1335937

Как реализовать замену в текстовом файле исходного текста на требуемый?
Команду edlin не предлагать.

Заранее спасибо!

Jerichoman 01-02-2010 15:33 1335966

Как от этого избавиться, появляется при отмене распаковки архива http://s006.radikal.ru/i214/1002/ea/98c498168082.jpg ?

Serega 01-02-2010 15:59 1335992

Цитата:

Цитата R.i.m.s.k.y.
Как реализовать замену в текстовом файле исходного текста на требуемый? »

Создаёте TArrayOfString, TStrings или TStringList, одним словом на ваш выбор. Затем загружаете текстовый файл, ищите нужную строку, меняете, сохраняете назад в файл...

R.i.m.s.k.y. 01-02-2010 16:01 1335995

Цитата:

Цитата Serega
Создаёте TArrayOfString, TStrings или TStringList, одним словом на ваш выбор. Затем загружаете текстовый файл, ищите нужную строку, меняете, сохраняете назад в файл »

Алгоритм мне ясен, мне бы примерчик или консольную программешку, параметры я ей в проекте подсуну...

vint56 01-02-2010 16:15 1336007

Jerichoman,
russian.ArcBreak=Установка прервана!

Jerichoman 01-02-2010 16:34 1336020

vint56, Есть такое

Serega 01-02-2010 16:34 1336023

Цитата:

Цитата R.i.m.s.k.y.
Алгоритм мне ясен, мне бы примерчик »

Пример

Сохраните данный файл, как config.txt и расположите рядом с инсталлятором:
Код:

-$T-
-$U-
-$V+
-$W-
-$X+
-$YD
-$Z1
-Param=
-cg
-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
-H+
-W+
-M

Пример скрипта:
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
procedure ChangeString;
var
  S: TArrayOfString;
  F: string;
  i: Integer;
begin
  F:= ExpandConstant('{src}\config.txt');
  if not FileExists(F) then Exit; // если файла нет, выходим
  LoadStringsFromFile(F, S); // загружаем файл
  for i:= 0 to GetArrayLength(S)-1 do
    if Pos('-Param=', S[i]) > 0 then
      S[i]:= '-Param=' + GetCmdTail;  // записываем параметры командной строки
  SaveStringsToFile(F, S, False); // сохраняем файл
end;

function InitializeSetup(): Boolean;
begin
  ChangeString;
end;


Tukash 01-02-2010 16:37 1336027

yamaha
просто вставить недостаточно, надо длл.ки скачать

lexikon 01-02-2010 17:17 1336074

подскажете пожалуйста
как сделать чтобы к примеру при установке когда выбираешь каталог там в строке была фраза "Выберите каталог для установки"
DefaultDirName=Выберите каталог для установки не прокатывает) в пути оказывается "путь папки со скриптом\Выберите каталог для установки"

ну или иначе чтобы он не добавлял никаких папок
:(
если указать DefaultDirName = \ то при выборе какой то папки в списке он добавляет путь\Новая папка :(

Serega 01-02-2010 19:01 1336159

Цитата:

Цитата lexikon
как сделать чтобы к примеру при установке когда выбираешь каталог там в строке была фраза "Выберите каталог для установки" »

Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
const
  WM_SETTEXT = $000C;
 
var
  SetText: Boolean;

function DirEditSetText(Text: string): Boolean;
var
  TextL: Longint;
begin
  TextL:= CastStringToInteger(Text);
  Result:= SendMessage(WizardForm.DirEdit.Handle, WM_SETTEXT, Length(Text), TextL) > 0;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if (CurPageID = wpSelectDir) and not SetText then
    SetText:= DirEditSetText('Выберите каталог для установки');
end;


yamaha 01-02-2010 19:16 1336167

Повторюсь.
Подскажите как сделать слайд шоу?

morozov-ch 01-02-2010 19:20 1336170

Уважаемые.
Подскажите в какой переменной/константе в Inno Setup хранится путь к инсталятору.
{scr} - не проходит.
Задача такая:
После установки программы требуется скопировать файл nastroiki.ini в папку с установленой программой.

Tukash 01-02-2010 20:04 1336221

morozov-ch
{app}

lexikon 02-02-2010 03:25 1336539

Serega,
благодарю! работает! только вот что указать DefaultDirName чтобы при выборе какой либо папки она не добавляло этот DefaultDirName
к примеру DefaultDirName = \MyProgram то в списке выбрав папку C:\Games у меня автоматически получится С:\Games\MyProgram
мне не надо что бы так получалось :)
заранее благодарю!

morozov-ch 02-02-2010 07:42 1336593

Может я не правельно выразился или что-то не понимаю
Вот функция

//Настройка подключения к серверу.
procedure MyAfterInstall();
//Копирование файла настроек.
begin
FileCopy('{app}\Nastr.ini','{pf}\PPPPP\Nastr.ini', false);
end;


Не работает.

Serega 02-02-2010 07:59 1336601

Цитата:

Цитата lexikon
что указать DefaultDirName чтобы при выборе какой либо папки она не добавляло этот DefaultDirName »

Нужно просто указать AppendDefaultDirName=no, пример:
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
AppendDefaultDirName=no
DefaultDirName={pf}\My Program
;*********и т.д.************;

Цитата:

Цитата morozov-ch
Подскажите в какой переменной/константе в Inno Setup хранится путь к инсталятору.»

AddBackslash(ExpandConstant('{src}')) или ExtractFilePath(ExpandConstant('{srcexe}'))
Цитата:

Цитата morozov-ch
{scr} - не проходит. »

есть {src}, вы спутали.
Цитата:

Цитата morozov-ch
FileCopy('{app}\Nastr.ini','{pf}\PPPPP\Nastr.ini', false); »

забыли дописать ExpandConstant, т.е. надо так:
Код:

FileCopy(ExpandConstant('{app}\Nastr.ini'), ExpandConstant('{pf}\PPPPP\Nastr.ini'), False);

Cranz86 02-02-2010 11:06 1336748

Народ, помогите пожалуйста с событиями. Понимаю что где то координально ошибся, но объясню что есть и что надо. Если первый чекбокс снять, то 2 и 3 благополучно снимаются, но делаются не кликабельными, а хочется что бы на их нажатие реагировал первый чекбокс, т.е. из двух событий работает первое и оно перекрывает второе.

Код:

procedure OnClickCheck(Sender: TObject);
begin
    if №1Check.Checked = false then
      begin
        №2Check.Checked := false;
        №3Check.Checked := false;
      end;

    if №2Check.Checked = true or №3Check.Checked = true then
      begin
        №1Check.Checked := true;
      end;
end;

procedure InitializeWizard();
begin
  CreateTheWizardPages;
  №1Check.OnClick := @OnClickCheck;
  №2Check.OnClick := @OnClickCheck;
  №3Check.OnClick := @OnClickCheck;
end;


Jerichoman 02-02-2010 13:04 1336852

Кто-нибудь помогите, плиз

Serega 02-02-2010 14:47 1336953

Цитата:

Цитата Cranz86
Понимаю что где то координально ошибся, »

надо так:
Пример
Код:

procedure CheckOnClick_1(Sender: TObject);
begin
  if not №1Check.Checked then
    begin
      №2Check.Checked:= False;
      №3Check.Checked:= False;
    end;
end;

procedure CheckOnClick_2(Sender: TObject);
begin
  if №2Check.Checked or №3Check.Checked then
    №1Check.Checked:= True;
end;

procedure InitializeWizard();
begin
  CreateTheWizardPages;
  №1Check.OnClick:= @CheckOnClick_1;
  №2Check.OnClick:= @CheckOnClick_2;
  №3Check.OnClick:= @CheckOnClick_2;
end;


svensoft 02-02-2010 16:35 1337048

vint56, спасибо ..))

Sotonisto 02-02-2010 18:04 1337109

Цитата:

Цитата yamaha
Подскажите как сделать слайд шоу? »

Либо так:
читать дальше »
[Setup]
WindowVisible=yes
WindowResizable=no
WindowShowCaption=no

[Files]
Source: C:\isxbb.dll; DestDir: {tmp}; Flags: dontcopy
Source: C:\1.jpg; DestDir: {tmp}; Flags: dontcopy
//////////файлы для слайд-шоу//////////
Source: C:\2.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\3.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\4.jpg; DestDir: {tmp}; Flags: dontcopy

[code]
const
BACKGROUND=6;
TIMER=16;

function isxbb_AddImage(Image: PChar; Flags: Cardinal): Integer;
external 'isxbb_AddImage@files:isxbb.dll stdcall';

function isxbb_Init(hWnd: Integer): Integer;
external 'isxbb_Init@files:isxbb.dll stdcall';

function isxbb_StartTimer(Seconds: Integer; Flags: Cardinal): Integer;
external 'isxbb_StartTimer@files:isxbb.dll stdcall';

function isxbb_KillTimer(Flags: Cardinal): Integer;
external 'isxbb_KillTimer@files:isxbb.dll stdcall';

procedure InitializeWizard();
begin
ExtractTemporaryFile('1.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\1.jpg',BACKGROUND);
isxbb_Init(StrToInt(ExpandConstant('{hwnd}')));
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin

///////В начале этапа установки запускаем слайд-шоу
if CurStep=ssInstall
then
begin
ExtractTemporaryFile('2.jpg');
ExtractTemporaryFile('3.jpg');
ExtractTemporaryFile('4.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\2.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\3.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\4.jpg',BACKGROUND or TIMER);
isxbb_Init(StrToInt(ExpandConstant('{hwnd}')));

///////Таймер показа изображений, в секундах
isxbb_StartTimer(3,BACKGROUND)
end;

///////На завершающем этапе останавливаем таймер, при этом возвращается фоновое изображение по умолчанию
else if CurStep=ssPostInstall then
isxbb_KillTimer(BACKGROUND);
end;

Либо так:
читать дальше »
[Setup]
WindowVisible=no

[Files]
Source: " D:\GAME\* "; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

///////Oпределяем файлы, перед установкой которых будет выполнена процедура смены изображения

Source: "D:\GAME\MOVIES\Intro.bik"; DestDir: "{app}\MOVIES"; Flags: ignoreversion recursesubdirs createallsubdirs; BeforeInstall: bbrd1;
Source: "D:\GAME\SOUNDS\Effects.pak"; DestDir: "{app}\SOUNDS"; Flags: ignoreversion recursesubdirs createallsubdirs; BeforeInstall: bbrd2;
Source: "D:\GAME\Core.dll"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; BeforeInstall: bbrd3;
Source: "D:\GAME\TEXTURES\Models.pak"; DestDir: "{app}\TEXTURES"; Flags: ignoreversion recursesubdirs createallsubdirs; BeforeInstall: bbrd4;

///////Указываем основное фоновое и дополнительные изображения, показ которых будет выполнен через процедуры.

Source: C:\Background.bmp; DestDir: {tmp}; Flags: dontcopy
Source: C:\bbrd1.bmp; DestDir: {tmp}; Flags: dontcopy
Source: C:\bbrd2.bmp; DestDir: {tmp}; Flags: dontcopy
Source: C:\bbrd3.bmp; DestDir: {tmp}; Flags: dontcopy
Source: C:\bbrd4.bmp; DestDir: {tmp}; Flags: dontcopy

[code]
function GetSystemMetrics(nIndex:Integer):Integer;
external 'GetSystemMetrics@user32.dll stdcall';

var
BackgroundBitmapImage: TBitmapImage;
s:string;
width, height: Integer;

///////Процедура для показа основного фонового изображения
procedure wizimage;
begin
WizardForm.Position:=poScreenCenter;
MainForm.BORDERSTYLE:=bsNone;
width:=GetSystemMetrics(0);
height:=GetSystemMetrics(1);
MainForm.Width:=width;
MainForm.Height:=height;
width:=MainForm.ClientWidth;
height:=MainForm.ClientHeight;
MainForm.Left := 0;
MainForm.Top := 0;
s:=ExpandConstant('{tmp}')+'\Background.bmp';
BackgroundBitmapImage := TBitmapImage.Create(MainForm);
BackgroundBitmapImage.Bitmap.LoadFromFile(s);
BackgroundBitmapImage.Align := alClient;
BackgroundBitmapImage.Parent := MainForm;
BackgroundBitmapImage.Stretch:=True;
MainForm.Visible:=True;
end;

procedure InitializeWizard();
begin
ExtractTemporaryFile('Background.bmp');
///////Выполнение процедуры показа фонового изображения
wizimage;
end;

///////Размеры и параметры дополнительных изображений
procedure ImgSetting;
begin
MainForm.BORDERSTYLE:=bsNone;
MainForm.Width:=width;
MainForm.Height:=height;
width:=MainForm.ClientWidth;
height:=MainForm.ClientHeight;
MainForm.Left := 0;
MainForm.Top := 0;
BackgroundBitmapImage := TBitmapImage.Create(MainForm);
BackgroundBitmapImage.Bitmap.LoadFromFile(s);
BackgroundBitmapImage.Align := alClient;
BackgroundBitmapImage.AutoSize := False;
BackgroundBitmapImage.Parent := MainForm;
BackgroundBitmapImage.Stretch:= False;
MainForm.Visible:=True;
end;

///////Процедуры показа изображений
procedure bbrd1;
begin
ExtractTemporaryFile('bbrd1.bmp');
s:=ExpandConstant('{tmp}')+'\bbrd1.bmp';

///////Вставляем вышеуказанную процедуру
ImgSetting;
end;

procedure bbrd2;
begin
ExtractTemporaryFile('bbrd2.bmp');
s:=ExpandConstant('{tmp}')+'\bbrd2.bmp';
ImgSetting;
end;

procedure bbrd3;
begin
ExtractTemporaryFile('bbrd3.bmp');
s:=ExpandConstant('{tmp}')+'\bbrd3.bmp';
ImgSetting;
end;

procedure bbrd4;
begin
ExtractTemporaryFile('bbrd4.bmp');
s:=ExpandConstant('{tmp}')+'\bbrd4.bmp';
ImgSetting;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpInstalling
then
begin
WizardForm.CancelButton.BringToFront;
WizardForm.MainPanel.Visible:=False;
WizardForm.Bevel1.Visible:=False;
WizardForm.Width:=ScaleX(395);
WizardForm.Height:=ScaleY(142);
WizardForm.Left:=ScaleX(MainForm.Width-420);
WizardForm.Top:=ScaleY(MainForm.Height-170);
WizardForm.InnerNotebook.Left:=ScaleX(10);
WizardForm.InnerNotebook.Top:=ScaleY(10);
WizardForm.InnerNotebook.Width:=ScaleX(370);
WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(20);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(40);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(154);
WizardForm.CancelButton.Top:=ScaleY(80);
end
if CurPageID=wpFinished
then
begin
WizardForm.Width:=502;
WizardForm.Height:=392;
WizardForm.Position:=poScreenCenter;

///////Вставляем процедуру для показа первоначально фонового изображения
wizimage;
end
end;


P.S.: советую скачать Коллекцию скриптов (в шапке этой темы).

yamaha 02-02-2010 19:20 1337168

Как сделать чтобы автоматом во время установки он запустил reg и без подтверждения добавил инфу?

YURSHAT 02-02-2010 19:34 1337187

Цитата:

Цитата yamaha
Как сделать чтобы автоматом во время установки он запустил reg и без подтверждения добавил инфу? »


Код:

Filename: {sys}\regedit.exe; Parameters: -s {app}\file.reg; WorkingDir: {sys}; StatusMsg: Внесение изменений в реестр...;

yamaha 02-02-2010 19:46 1337195

Это в какую строчку вносить?

YURSHAT 02-02-2010 19:55 1337202

Цитата:

Цитата yamaha
Это в какую строчку вносить? »

[Run] :)

yamaha 02-02-2010 20:19 1337229

Что-то пишет при установке что не может найти указанный файл и ссылается на папку систем32.

Sotonisto 03-02-2010 03:24 1337527

yamaha, а не проще примерно так сделать?
Код:

[Registry]
Root: HKLM; Subkey: "SOFTWARE\Electronic Arts\Need for Speed Carbon"; ValueType: string; ValueName: "DisplayName"; ValueData: "Need for Speed™ Carbon"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Electronic Arts\Need for Speed Carbon"; ValueType: string; ValueName: "Language"; ValueData: "Russian"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Electronic Arts\Need for Speed Carbon"; ValueType: string; ValueName: "Install Dir"; ValueData: "{app}\"; Flags: uninsdeletekey


МИШАНЧИК 03-02-2010 06:35 1337563

Цитата:

Цитата Serega
Цитата Cranz86:
Понимаю что где то координально ошибся, »
надо так: »

Serega, не могли бы Вы выложить этот код в небольшом готовом для компилирования скрипте?
Заранее большое спасибо.

lexikon 03-02-2010 07:32 1337574

Sotonisto, а в папке с игрой потом у тебя этот ключик не появляется? у меня так сделано но почему то устанавливается рег файл какой то)))

Tukash 03-02-2010 13:59 1337835

Люди добрые помогите:
Как сделать чтобы программы устанавливались после распаковки архивов, а не после копирования файлов IS?
Тоесть я хочу что-бы разные приложения, типа DirectX(запускаемые из секции RUN:)), и т.д. предлогали установку после распаковки FreeArc архивов... тоесть перед самым завершением, такое вообще возможно?

Jerichoman 03-02-2010 14:04 1337840

Неужели никто не может помочь http://s006.radikal.ru/i214/1002/ea/98c498168082.jpg :(

Tukash 03-02-2010 14:21 1337862

Jerichoman
покажи скрипт!

dracosha 03-02-2010 15:48 1337934

Сори если повторяюсь... Просто 119 страниц читать придется долго.
Народ! Подскажите плиз каким образом можно изменить стандартные диалоги inno?
Может уже есть возможность для нормального вскрытия бинорников? Если есть то как это можно сделать.

Tukash 03-02-2010 15:55 1337939

dracosha
хочешь текст изменить? типа Добро пожаловать...??? если да то иди сюда =>...Inno Setup 5\Languages найди Russian.isl открой блокнотом, и изменяй что хочешь!

dracosha 03-02-2010 16:06 1337951

Да нет. Мне нужно в выборе компонентов добавить описание для компонентов (такое же как в nsis);
в окошко выбора папки для установки проги мне нужно добавить два элемента для выбора одного из них. (для справки: это будет еще один выбор типа установки)

svensoft 03-02-2010 16:09 1337955

Sotonisto, можно у тебя попросить шаблон .bmp от твоей сборки - то есть шаблон для фоновых рисунков, там где тексты перепрыгивают "Приветствие,Параметры, Меню Пуск,Установка, Завершение" и две полоски ?.. Чтобы потом на этот шаблон можно было свои рисунки наложить ...

Цитата:

Цитата Jerichoman
Неужели никто не может помочь http://s006.radikal.ru/i214/1002/ea/98c498168082.jpg »

Jerichoman, скрипт надо смотреть, обрабатываются какие-то данные в коде, которые еще на тот момент не создались или недоступны

user_123 03-02-2010 20:32 1338214

Подскажите, как в функции InitializeSetup секции [code] получить путь к каталогу, в котором файл инсталлятора находится.

По умолчанию используется текущий рабочий каталог (который можно и вручную задать)
Функция GetCurrentDir также возвращает путь рабочего каталога...

Прошу прощение, проблему сам решил: ExpandConstant('{src}')

Sotonisto 04-02-2010 07:09 1338481

Цитата:

Цитата svensoft
Sotonisto, можно у тебя попросить шаблон .bmp от твоей сборки - то есть шаблон для фоновых рисунков, там где тексты перепрыгивают "Приветствие,Параметры, Меню Пуск,Установка, Завершение" и две полоски ?.. Чтобы потом на этот шаблон можно было свои рисунки наложить ... »

svensoft, если ты о этом инситалле http://rghost.ru/888810 то psd исходники лежат тут http://rghost.ru/900775
psd открывает любой фотошоп, как ими пользоваться я надеюсь ты знаешь (если нет - пиши в личку).

Цитата:

Цитата lexikon
Sotonisto, а в папке с игрой потом у тебя этот ключик не появляется? у меня так сделано но почему то устанавливается рег файл какой то))) »

Нет конечно же. Если сделать все по тому примеру, то значения вносятся в реестр не создавая никаких файлов (и после удаления игры удаляются с реестра).

svensoft 04-02-2010 13:18 1338765

Цитата:

Цитата Sotonisto
svensoft, если ты о этом инситалле http://rghost.ru/888810 то psd исходники лежат тут http://rghost.ru/900775 »

Sotonisto, спасибо, да именно о них я говорил.. :yes:

МИШАНЧИК 04-02-2010 13:38 1338781

Подскажите пожалуйста, я сделал на финишной странице чекбокс, а как сделать чтоб он открывал ReadMe.txt находящийся в {app}?

lexikon 04-02-2010 15:45 1338902

Sotonisto,
тогда как понимать это http://imglink.ru/show-image.php?id=...e8fefbdabebe30 ??)))

Sotonisto 04-02-2010 17:22 1338989

Цитата:

Цитата lexikon
тогда как понимать это http://imglink.ru/show-image.php?id=...e8fefbdabebe30 ??))) »

lexikon, что вам собственно нужно? а то описание проблемы... коротенькое что ли :)

lexikon 04-02-2010 18:10 1339024

да все утраивает) при выборе компонента заносятся ключи в реестр....но мало того что заносятся дак еще и устанавливаются как файлы reg
--------
странно но вы своей такой фразно надоумили меня посмотреть на не завалялось ли в компонентах эти рег файлы :) и нашел свои проблемы....благодарю!

Sotonisto 04-02-2010 18:50 1339052

Цитата:

Цитата МИШАНЧИК
Подскажите пожалуйста, я сделал на финишной странице чекбокс, а как сделать чтоб он открывал ReadMe.txt находящийся в {app}? »

Код:

[Run]
Filename: {app}\ReadMe.txt; Flags: shellexec postinstall skipifsilent


Ты примерно так хотел?
Если да, то учти что там выводится название файла (если файл будет называться, например, sss.rft то в диалоге будет "Просмотреть sss.rft").

YURSHAT 04-02-2010 19:07 1339070

Цитата:

Цитата Sotonisto
Скрипт любительского инсталлятора Resident Evil 4 UE от Sotonisto.

Sotonisto, присваивать себе чужие инсталляторы не есть хорошо!!! Имейте совесть

Tukash 04-02-2010 19:17 1339079

YURSHAT
я даже знаю чей это скрипт)) бывший НФС!
кстати неподскажешь, как можно сделать, что-бы доп ПО устанавливалось после распаковки FreeArc архивов?!

Jerichoman 04-02-2010 19:23 1339084

Как сделать так, чтобы во время распаковки arc архивов, они распаковывались по тем папкам в которых они находятся изначально (так получается, если пакуешь всю игру целиком, а когда по отдельности, то они распаковываются не по папкам, а всей кучей в одну папку)

YURSHAT 04-02-2010 19:26 1339086

Цитата:

Цитата Tukash
кстати неподскажешь, как можно сделать, что-бы доп ПО устанавливалось после распаковки FreeArc архивов?! »

Поставь распаковку архивов на этап ssInstall, а ПО на ssPostInstall

Цитата:

Цитата Tukash
я даже знаю чей это скрипт)) бывший НФС! »

Вот из-за этого, большинство людей и не хотят выкладывать свои скрипты...

Tukash 04-02-2010 19:29 1339089

Jerichoman
открываешь главную папку фришкой, выбераешь какие папки надо сжать (файлы не выберай, только папки целиком) и пакуешь, когда распакуються, то будут тебе файлы в папках!:)
YURSHAT
извини, а на примере можешь показать?

serega355 04-02-2010 19:30 1339094

Уважаемые форумчане!!! Может, кто- нибудь знает какой код надо ввести, чтобы на любой диск при её установке каталог был Rockstar Games\GTA, у меня есть код DefaultGroupName=Rockstar Games\GTA, но он делает этот каталог в ПУСКЕ. Ещё есть проблема, есть код для записей в реестре:
[Registry]
Root: HKLM; Subkey: "SOFTWARE\Rockstar Games\GTA"; ValueType: string; ValueName: "ExePath"; ValueData: "{app}\gta_sa.exe"; Flags: deletekey uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Rockstar Games\GTA"; ValueType: string; ValueName: "UninstallPath"; ValueData: "{app}\unins000.exe"; Flags: deletekey uninsdeletekey
Создаю инсталлятор, и когда устанавливаю игру в реестр заносится только один путь из двух. Если кто знает в чём тут дело, подскажите. Заранее благодарен.

Sotonisto 04-02-2010 19:33 1339099

YURSHAT, если вы не заметили то сам скрипт без ничего выложил Tukash в этом сообщении (страница 93), и на авторство оригинального скрипта я никогда не претендовал.
Я залил скрипт отредактированый для RE4 с своими фалами, и так как я без регистрации заливал написал что скрипт от меня.
Че вы так нервничаете? :-/

Tukash 04-02-2010 19:34 1339100

Sotonisto
так я же не говорил что мой! и автор не запрещал его выкладывать!

Sotonisto 04-02-2010 19:37 1339102

Цитата:

Цитата Tukash
так я же не говорил что мой! и автор не запрещал его выкладывать! »

YURSHAT говорит что я взял откуда-то этот скрипт и присвоил себе авторство, хотя я его впервые увидел тут когда вы его выложили.

P.S.: кстати а кто автор? просто мне бы хотелось узнать у него можно ли реализовать в инсталле пару моментов.

Tukash 04-02-2010 19:40 1339105

Sotonisto
а для кого я его выложил? и YURSHAT не сказал Вам, что пользоватся нельзя, ему как и любому человеку не понравилось что его вещь присвоели себе!
PS: автор YURSHAT
Jerichoman
можно и по файлам, назови папку так-же, и кинь туда нужные тебе файлы, когда будут копироваться файлы, названия папок совпадут, и файлы попадут в нужную тебе папку, думаю понял!

Jerichoman 04-02-2010 19:41 1339106

Tukash
Т.е. только по папкам паковать, по отдельности файлы никак не получится :( ?

YURSHAT 04-02-2010 19:45 1339109

Sotonisto, я не прошу писать свое авторство и не запрещаю выкладывать просто когда выкладываете скрипт не нужно писать, что он
Цитата:

от Sotonisto
, ибо этим вы говорите, что вы автор...

Извиняюсь за оффтоп :off:

Tukash 04-02-2010 19:57 1339117

YURSHAT
покажи именно где, если не трудно:
Цитата:

Цитата YURSHAT
Поставь распаковку архивов на этап ssInstall, а ПО на ssPostInstall »

Код:

[Run]
Filename: {src}\DirectX\DXSETUP.exe; WorkingDir: {src}\DirectX; StatusMsg:
Filename: {src}\Redistributables\vcredist_x86.exe; WorkingDir: {src}\Redistributables; StatusMsg:

читать дальше »
[code]
const
Archives = '{src}\*.dat'; // укажите расположение архивов FreeArc; для внешних файлов строку в [Files] добавлять необязательно

PM_REMOVE = 1;
CP_ACP = 0; CP_UTF8 = 65001;
oneMb = 1048576;

type
#ifdef UNICODE ; если у вас ошибка на этой строке, то установите препроцессор или исправьте скрипт для вашей версии Inno Setup
#define A "W"
#else
#define A "A" ; точка входа в SetWindowText, {#A} меняется на A или W в зависимости от версии
PAnsiChar = PChar; // Required for Inno Setup 5.3.0 and higher. (требуется для Inno Setup версии 5.3.0 и ниже)
#endif
#if Ver < 84018176
AnsiString = String; // There is no need for this line in Inno Setup 5.2.4 and above (для Inno Setup версий 5.2.4 и выше эта строка не нужна)
#endif

TMyMsg = record
hwnd: HWND;
message: UINT;
wParam: Longint;
lParam: Longint;
time: DWORD;
pt: TPoint;
end;

TFreeArcCallback = function (what: PAnsiChar; int1, int2: Integer; str: PAnsiChar): Integer;
TArc = record Path: string; OrigSize: Integer; Size: Extended; end;

var
ExtractFile: TLabel;
lblExtractFileName: TLabel;
btnCancelUnpacking: TButton;
CancelCode, n, UnPackError, StartInstall: Integer;
Arcs: array of TArc;
msgError: string;
lastMb: Integer;
baseMb: Integer;
totalUncompressedSize: Integer; // total uncompressed size of archive data in mb
LastTimerEvent: DWORD;

Function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: string; cbMultiByte: integer; lpWideCharStr: string; cchWideChar: integer): longint; external 'MultiByteToWideChar@kernel32.dll stdcall';
Function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: string; cchWideChar: integer; lpMultiByteStr: string; cbMultiByte: integer; lpDefaultChar: integer; lpUsedDefaultChar: integer): longint; external 'WideCharToMultiByte@kernel32.dll stdcall';

function PeekMessage(var lpMsg: TMyMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMyMsg): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: TMyMsg): Longint; external 'DispatchMessageA@user32.dll stdcall';

Function OemToChar(lpszSrc, lpszDst: AnsiString): longint; external 'OemToCharA@user32.dll stdcall';
function GetWindowLong(hWnd, nIndex: Integer): Longint; external 'GetWindowLongA@user32 stdcall delayload';
function SetWindowText(hWnd: Longint; lpString: String): Longint; external 'SetWindowText{#A}@user32 stdcall delayload';

function GetTickCount: DWord; external 'GetTickCount@kernel32';
function WrapFreeArcCallback (callback: TFreeArcCallback; paramcount: integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function FreeArcExtract (callback: longword; cmd1,cmd2,cmd3,cmd4,cmd5,cmd6,cmd7,cmd8,cmd9,cmd10: PAnsiChar): integer; external 'FreeArcExtract@files:unarc.dll cdecl';

procedure AppProcessMessage;
var
Msg: TMyMsg;
begin
while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;

// Перевод числа в строку с точностью 3 знака (%.3n) с округлением дробной части, если она есть
Function NumToStr(Float: Extended): String;
Begin
Result:= Format('%.3n', [Float]); StringChange(Result, ',', '.');
while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Length(Result) > 1) do
SetLength(Result, Length(Result)-1);
End;

function cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;

Function Size64(Hi, Lo: Integer): Extended;
Begin
Result:= Lo;
if Lo<0 then Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
for Hi:= Hi-1 Downto 0 do
Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
End;

// Converts OEM encoded string into ANSI
// Преобразует OEM строку в ANSI кодировку
function OemToAnsiStr( strSource: AnsiString): AnsiString;
var
nRet : longint;
begin
SetLength( Result, Length( strSource ) );
nRet:= OemToChar( strSource, Result );
end;

// Converts ANSI encoded string into UTF-8
// Преобразует строку из ANSI в UTF-8 кодировку
function AnsiToUtf8( strSource: string ): string;
var
nRet : integer;
WideCharBuf: string;
MultiByteBuf: string;
begin
strSource:= strSource + chr(0);
SetLength( WideCharBuf, Length( strSource ) * 2 );
SetLength( MultiByteBuf, Length( strSource ) * 2 );

nRet:= MultiByteToWideChar( CP_ACP, 0, strSource, -1, WideCharBuf, Length(WideCharBuf) );
nRet:= WideCharToMultiByte( CP_UTF8, 0, WideCharBuf, -1, MultiByteBuf, Length(MultiByteBuf), 0, 0);

Result:= MultiByteBuf;
end;

// OnClick event function for btnCancel
procedure btnCancelUnpackingOnClick(Sender: TObject);
begin
if MsgBox( SetupMessage( msgExitSetupMessage ), mbInformation, MB_YESNO ) = IDYES then
CancelCode:= -127;
end;

var origsize: Integer;
// The callback function for getting info about FreeArc archive
function FreeArcInfoCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
begin
if string(what)='origsize' then origsize := Mb else
if string(what)='compsize' then else
if string(what)='total_files' then else
Result:= CancelCode;
end;

// Returns decompressed size of files in archive
function ArchiveOrigSize(arcname: string): Integer;
var
callback: longword;
Begin
callback:= WrapFreeArcCallback(@FreeArcInfoCallback,4); //FreeArcInfoCallback has 4 arguments
CancelCode:= 0;
AppProcessMessage;
try
// Pass the specified arguments to 'unarc.dll'
Result:= FreeArcExtract (callback, 'l', '--', AnsiToUtf8(arcname), '', '', '', '', '', '', '');
if CancelCode < 0 then Result:= CancelCode;
if Result >= 0 then Result:= origsize;
except
Result:= -63; // ArcFail
end;
end;

// Scans the specified folders for archives and add them to list
function FindArcs(dir: string): Extended;
var
FSR: TFindRec;
Begin
Result:= 0;
if FindFirst(ExpandConstant(dir), FSR) then begin
try
repeat
// Skip everything but the folders
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then CONTINUE;
n:= GetArrayLength(Arcs);
// Expand the folder list
SetArrayLength(Arcs, n +1);
Arcs[n].Path:= ExtractFilePath(ExpandConstant(dir)) + FSR.Name;
Arcs[n].Size:= Size64(FSR.SizeHigh, FSR.SizeLow);
Result:= Result + Arcs[n].Size;
Arcs[n].OrigSize := ArchiveOrigSize(Arcs[n].Path)
totalUncompressedSize := totalUncompressedSize + Arcs[n].OrigSize
until not FindNext(FSR);
finally
FindClose(FSR);
end;
end;
End;

// Sets the TaskBar title
Procedure SetTaskBarTitle(Title: String); var h: Integer;
Begin
h:= GetWindowLong(MainForm.Handle, -8); if h <> 0 then SetWindowText(h, Title);
End;

// Converts milliseconds to human-readable time
// Конвертирует милисекунды в человеко-читаемое изображение времени
Function TicksToTime(Ticks: DWord; h,m,s: String; detail: Boolean): String;
Begin
if detail {hh:mm:ss format} then
Result:= PADZ(IntToStr(Ticks/3600000), 2) +':'+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +':'+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2)
else if Ticks/3600 >= 1000 {more than hour} then
Result:= IntToStr(Ticks/3600000) +h+' '+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +m
else if Ticks/60 >= 1000 {1..60 minutes} then
Result:= IntToStr(Ticks/60000) +m+' '+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2) +s
else Result:= IntToStr(Ticks/1000) +s {less than one minute}
End;

// The main callback function for unpacking FreeArc archives
function FreeArcCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
var
percents, Remaining: Integer;
s: String;
begin
if GetTickCount - LastTimerEvent > 1000 then begin
// This code will be executed once each 1000 ms (этот код будет выполняться раз в 1000 миллисекунд)
// ....
// End of code executed by timer
LastTimerEvent := LastTimerEvent+1000;
end;

if string(what)='filename' then begin
// Update FileName label
lblExtractFileName.Caption:= FmtMessage( cm( 'Extracting' ), [OemToAnsiStr( str )] )
end else if (string(what)='write') and (totalUncompressedSize>0) and (Mb>lastMb) then begin
// Assign to Mb *total* amount of data extracted to the moment from all archives
lastMb := Mb;
Mb := baseMb+Mb;

// Update progress bar
WizardForm.ProgressGauge.Position:= Mb;

// Show how much megabytes/archives were processed up to the moment
percents:= (Mb*1000) div totalUncompressedSize;
s := FmtMessage(cm('ExtractedInfo'), [IntToStr(Mb), IntToStr(totalUncompressedSize)]);
if GetArrayLength(Arcs)>1 then
s := s + '. '+FmtMessage(cm('ArcInfo'), [IntToStr(n+1), IntToStr(GetArrayLength(Arcs))])
ExtractFile.Caption := s

// Calculate and show current percents
percents:= (Mb*1000) div totalUncompressedSize;
s:= FmtMessage(cm('AllProgress'), [Format('%.1n', [Abs(percents/10)])]);
if Mb > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((totalUncompressedSize - Mb)/Mb)) else Remaining:= 0;
if Remaining = 0 then SetTaskBarTitle(cm('ending')) else begin
s:= s + '. '+FmtMessage(cm('remains'), [TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)])
SetTaskBarTitle(FmtMessage(cm('taskbar'), [IntToStr(percents/10), TicksToTime(Remaining, 'h', 'm', 's', false)]))
end;
WizardForm.FileNameLabel.Caption := s
end;
AppProcessMessage;
Result:= CancelCode;
end;

// Extracts all found archives
function UnPack(Archives: string): Integer;
var
totalCompressedSize: Extended;
callback: longword;
FreeMB, TotalMB: Cardinal;
begin
// Display 'Extracting FreeArc archive'
lblExtractFileName.Caption:= '';
lblExtractFileName.Show;
ExtractFile.caption:= cm('ArcTitle');
ExtractFile.Show;
// Show the 'Cancel unpacking' button and set it as default button
btnCancelUnpacking.Caption:= WizardForm.CancelButton.Caption;
btnCancelUnpacking.Show;
WizardForm.ActiveControl:= btnCancelUnpacking;
WizardForm.ProgressGauge.Position:= 0;
// Get the size of all archives
totalUncompressedSize := 0;
totalCompressedSize := FindArcs(Archives);
WizardForm.ProgressGauge.Max:= totalUncompressedSize;
// Other initializations
callback:= WrapFreeArcCallback(@FreeArcCallback,4); //FreeArcCallback has 4 arguments
StartInstall:= GetTickCount; {время начала распаковки}
LastTimerEvent:= GetTickCount;
baseMb:= 0

for n:= 0 to GetArrayLength(Arcs) -1 do
begin
lastMb := 0
CancelCode:= 0;
AppProcessMessage;
try
// Pass the specified arguments to 'unarc.dll'
Result:= FreeArcExtract (callback, 'x', '-o+', '-dp' + AnsiToUtf8( ExpandConstant('{app}') ), '--', AnsiToUtf8(Arcs[n].Path), '', '', '', '', '');
if CancelCode < 0 then Result:= CancelCode;
except
Result:= -63; // ArcFail
end;
baseMb:= baseMb+lastMb

// Error occured
if Result <> 0 then
begin
msgError:= FmtMessage(cm('ArcError'), [IntToStr(Result)]);
GetSpaceOnDisk(ExtractFileDrive(ExpandConstant('{app}')), True, FreeMB, TotalMB);
case Result of
-1: if FreeMB < 32 {Мб на диске} then msgError:= SetupMessage(msgDiskSpaceWarningTitle)
else msgError:= msgError + #13#10 + FmtMessage(cm('ArcBroken'), [ExtractFileName(Arcs[n].Path)]);
-127: msgError:= cm('ArcBreak'); //Cancel button
-63: msgError:= cm('ArcFail');
end;
// MsgBox(msgError, mbInformation, MB_OK); //сообщение показывается на странице завершения
Log(msgError);
Break; //прервать цикл распаковки
end;
end;
// Hide labels and button
WizardForm.FileNameLabel.Caption:= '';
lblExtractFileName.Hide;
ExtractFile.Hide;
btnCancelUnpacking.Hide;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
UnPackError:= UnPack(Archives)
if UnPackError = 0 then
SetTaskBarTitle(SetupMessage(msgSetupAppTitle))
else
begin
// Error occured, uninstall it then
Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n); //откат установки из-за ошибки unarc.dll
SetTaskBarTitle(SetupMessage(msgErrorTitle))
WizardForm.Caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
end;
end;
end;

// стандартный способ отката (не нужна CurPageChanged), но архивы распаковываются до извлечения файлов инсталлятора
// if CurStep = ssInstall then
// if UnPack(Archives) <> 0 then Abort;

Procedure CurPageChanged(CurPageID: Integer);
Begin
if (CurPageID = wpFinished) and (UnPackError <> 0) then
begin // Extraction was unsuccessful (распаковщик вернул ошибку)
// Show error message
WizardForm.FinishedLabel.Font.Color:= $0000C0; // red (красный)
WizardForm.FinishedLabel.Height:= WizardForm.FinishedLabel.Height * 2;
WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) + #13#10#13#10 + msgError;
end;
End;

procedure InitializeWizard();
begin
with WizardForm.ProgressGauge do
begin
// Create a label to show current FileName being extracted
lblExtractFileName:= TLabel.Create(WizardForm);
lblExtractFileName.parent:=WizardForm.InstallingPage;
lblExtractFileName.autosize:=false;
lblExtractFileName.Width:= Width;
lblExtractFileName.top:=Top + ScaleY(35);
lblExtractFileName.Caption:= '';
lblExtractFileName.Hide;

// Create a label to show percentage
ExtractFile:= TLabel.Create(WizardForm);
ExtractFile.parent:=WizardForm.InstallingPage;
ExtractFile.autosize:=false;
ExtractFile.Width:= Width;
ExtractFile.top:=lblExtractFileName.Top + ScaleY(16);
ExtractFile.caption:= '';
ExtractFile.Hide;
end;

// Create a 'Cancel unpacking' button and hide it for now.
btnCancelUnpacking:=TButton.create(WizardForm);
btnCancelUnpacking.Parent:= WizardForm;
btnCancelUnpacking.SetBounds(WizardForm.CancelButton.Left, WizardForm.CancelButton.top, WizardForm.CancelButton.Width, WizardForm.CancelButton.Height);
btnCancelUnpacking.OnClick:= @btnCancelUnpackingOnClick;
btnCancelUnpacking.Hide;
end;

Sotonisto 04-02-2010 20:01 1339119

YURSHAT, ну тогда извиняюсь если я что-то не так сделал. Ну могли бы вы тогда на мое сообщение ответить (когда я просил скрипт инсталла).

Я написал что скрипт на ргосте от меня так как там были все файлы которые я сам достал и использовал и отредактированый мною скрипт.
Тем более все ж видели что скрипт изначально был от нфс, я и не думал что кто-то будет говорить что я автор оригинала.
Я еле 3 psd исходника достал и картинки флагов :( пришлось самому искать dll'ки и настраивать "под себя" установку озвучки.

В готовой версии скрипта (не той что выложена) для распаковки архива я использовал проверку выбора языка для реестра :) (у меня вообще случайно получилось)
Вы же видели сообщения где я просил что бы мне помогли с реализацией, а не ответили :( что так трудно было ответить?

Tukash, написали бы сначала что автор - YURSHAT я б ему все свои проблемы с инсталлом в личку писал а не на форум :(

user_123 04-02-2010 20:02 1339120

Прочитал в руководствах по Inno Setup о двух различных методах защиты инсталлятора от "вскрытия".

1. Автоматически заполняется поле ввода пароля.
2. Поле ввода пароля не заполняется вообще, а в функции проверки пароля пишем:
Код:

Result:= True
Первый метод я освоил и уже применял на практике... Но второй меня удивил... В руководстве, в котором я о нём прочёл, он назван "Невзламываемый экзешник".

Понятно, что раз поле ввода пароля не заполняется, значит и "вынуть" этот самый пароль не от куда...
Хочу узнать у опытных программистов, какой из этих двух методов надёжнее... а так же, что именно так хорошо защищает второй метод: запакованный контент или исходник, или и то и другое?

serega355 04-02-2010 20:03 1339121

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

Tukash 04-02-2010 20:06 1339123

Цитата:

Цитата Sotonisto
Tukash, написалибы чтоавтор YURSHAT я б ему все свои проблемы с инсталлом в личку писал а не на форум »

да я больше не буду так, хотел как лучше, а получилось...

YURSHAT 04-02-2010 20:20 1339135

Цитата:

Цитата Sotonisto
Я написал что скрипт на ргосте от меня так как там были все файлы которые я сам достал и использовал и отредактированый мною скрипт. »

Посмотрев скрипт, я не увидел там что-то нового.

Цитата:

Цитата Sotonisto
Тем более все ж видели что скрипт изначально был от нфс, я и не думал что кто-то будет говорить что я автор оригинала. »

А никто и не говорил. Просто я случайно глянул и увидел скрипт. Скачал, посмотрел - мой скрипт, а написано от Sotonisto.
Цитата:

Цитата Sotonisto

Я еле 3 psd исходника достал и картинки флагов пришлось самому искать dll'ки и настраивать "под себя" установку озвучки. »

PSD исходники и флаги думаю тоже мои (на скрине точно мои).

Цитата:

Цитата Sotonisto
Вы же видели сообщения где я просил что бы мне помогли с реализацией, а не ответили что так трудно было ответить? »

Если не ответил, значит на то были свои причины (не было времени или просто сообщение не увидил).

Думаю этот вопрос нужно закрыть!!! ОффТопа и так хватает...

user_123 04-02-2010 20:29 1339148

Цитата:

Прочитал в руководствах по Inno Setup о двух различных методах защиты инсталлятора от "вскрытия".

1. Автоматически заполняется поле ввода пароля.
2. Поле ввода пароля не заполняется вообще, а в функции проверки пароля пишем:
Код:

Result:= True
Первый метод я освоил и уже применял на практике... Но второй меня удивил... В руководстве, в котором я о нём прочёл, он назван "Невзламываемый экзешник".

Понятно, что раз поле ввода пароля не заполняется, значит и "вынуть" этот самый пароль не от куда...
Хочу узнать у опытных программистов, какой из этих двух методов надёжнее... а так же, что именно так хорошо защищает второй метод: запакованный контент или исходник, или и то и другое?
И ещё 1 вопрос, связанный с защитой инсталлятора...
Если зашифровать инсталлятор ([setup] Encryption=Yes), то возникают проблемы при использовании дополнительных dll ([Files] Flags: dontcopy).
Насколько хорошо защищён инсталлятор (в т.ч. его исходник) если использовать пароль без шифрования?

Подскажите, как использовать доп. библиотеки вместе с шифрованием, как их извлекать после подтверждения пароля (но до распаковки основных файлов)...

semiono 04-02-2010 20:54 1339169

Столкнулся с такой трудностью:
Код:

DefaultDirName={reg:HKLM32\Software\test,ID|{cf}\{{9EA325EA-2012-4EFD-83AA-1EF32414E39F}}
Данный код создаёт папку: {9EA325EA-2012-4EFD-83AA-1EF32414E39F}} в {cf}\

Вообщем выход нашёл такой:
Код:

DefaultDirName={reg:HKLM32\Software\VST,PID|{cf}\{code:CLSID}}

[код]
function CLSID(Param: String): String;
begin
  Result := ExpandConstant('{{9EA325EA-2012-4EFD-83AA-1EF32414E39F}');
end;

Так я решил проблему с квотированием. :)

semiono 04-02-2010 22:44 1339261

Опять загвоздка новая! Нужно в реестре перевернуть слеш...

"InstallDir" = D:\la-la-la
заменить на
"InstallDir" = D:/la-la-la/

Как это можно зделать? Слеш в конце обязателен!
Длина пути и вложенность директорий разумеется неопределены и могут быть разными.

----
Ну ежели в InnoSetup нету api ? Тогда я написал пару строк Aut2Exe zzz.au3 для [Run]

Код:

RegWrite("HKCU\Software\Nexus", "ContentPath", "REG_SZ", StringRegExpReplace( RegRead("HKCU\Software\Nexus", "ContentPath"), "\\", "/") & "/")
Но InnoSetup хотелось бы всё же тоже узнать. ??

serg aka lain 05-02-2010 00:06 1339316

Цитата:

Цитата semiono
Но InnoSetup хотелось бы всё же тоже узнать. ?? »

Можно так
Код:

procedure CurStepChanged(CurStep: TSetupStep);
var
  S: String;
begin
  if CurStep = ssPostInstall then
  begin
    S := AddBackSlash(ExpandConstant('{app}'));
    StringChangeEx(S, '\', '/', True);
    RegWriteStringValue(HKLM, 'Software\My Company\My Program', 'InstallDir', S);
  end;
end;


svensoft 05-02-2010 01:58 1339361

YURSHAT, скажи пожалуйста какой параметр нужно указать при загрузке скина, чтобы рамка скина была снаружи ?.. У меня при загрузке скина рамка вставляется внутрь WizardForm , тем самым сдвигая фон вместе со всем находящимся на нем и мне приходится размеры WizardForm подгонять вручную, т.е. фоновый рисунок предположим 790*533 , при этом размеры WizardForm приходится вручную корректировать - ровно на рамку больше 793*563 .. :unsure:

МИШАНЧИК 05-02-2010 04:17 1339396

Sotonisto, спасибо.
Цитата:

Цитата МИШАНЧИК
Подскажите пожалуйста, я сделал на финишной странице чекбокс, а как сделать чтоб он открывал ReadMe.txt находящийся в {app}? »

Цитата:

Цитата Sotonisto
Код:
[Run]
Filename: {app}\ReadMe.txt; Flags: shellexec postinstall skipifsilent »

Цитата:

Цитата Sotonisto
Ты примерно так хотел? »

Только я хотел не из [Run], а из секции [_Code]
Помогите пожалуйста, кто знает как это сделать.

Serega 05-02-2010 10:19 1339506

Цитата:

Цитата serega355
Может, кто- нибудь знает какой код надо ввести, чтобы на любой диск при её установке каталог был Rockstar Games\GTA »

Пример
Код:

[Setup]
AppName=Rockstar Games
AppVerName=Rockstar Games v 1.5
DefaultDirName={pf}\Rockstar Games\GTA
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
function LastPos(symbol, str: string): Integer;
var
  i: Integer;
begin
  for i:= Length(str) downto 1 do
    if str[i] = symbol then Break;
  Result:= i;
end;

procedure DirEditChange(Sender: TObject);
var
  n: Integer;
  s: string;
begin
  n:= LastPos('\', WizardForm.DirEdit.Text);
  s:= Copy(WizardForm.DirEdit.Text, 1, n);
  if Pos('Rockstar Games\GTA', WizardForm.DirEdit.Text) = 0 then
    WizardForm.DirEdit.Text:= s + 'Rockstar Games\GTA';
end;

procedure InitializeWizard();
begin
  WizardForm.DirEdit.OnChange:= @DirEditChange;
end;



Цитата:

Цитата serega355
Создаю инсталлятор, и когда устанавливаю игру в реестр заносится только один путь из двух. »

почитайте внимательно Справку
Цитата:

Цитата из Справки
deletekey
Когда установлен этот флаг, инсталлятор сначала попытается удалить ключ, если он существует, со всеми его параметрами и разделами. Если ValueType=none, после этого он создаст новый ключ и параметр.
Для предотвращения негативных последствий, этот флаг игнорируется при установке, если Subkey пустой или состоит только из бэкслешей.

т.е. у вас при внесении второго ключа, сначала удаляется первый.

Цитата:

Цитата semiono
Нужно в реестре перевернуть слеш... »

Почитайте справку, вам поможет function StringChange(var S: String; const FromStr, ToStr: String): Integer;

Цитата:

Цитата МИШАНЧИК
я сделал на финишной странице чекбокс, а как сделать чтоб он открывал ReadMe.txt находящийся в {app}? »

Каким образом сделали?
Если через [Соdе], то задаёте ему событие OnClick с ссылкой на процедуру, в которой проверяете, если чебокс отмечен, то запускаете свой файл через function ShellExec(const Verb, Filename, Params, WorkingDir: String; const ShowCmd: Integer; const Wait: TExecWait; var ErrorCode: Integer): Boolean;

МИШАНЧИК 05-02-2010 11:44 1339583

Serega, спасибо!
Цитата:

Цитата Serega
Каким образом сделали?
Если через [Соdе], то задаёте ему событие OnClick с ссылкой на процедуру »

А можно примером, короткий скрипт, для наглядности?
Заранее большое спасибо!
P.S. А если создать чекбокс на вкладке WizardForm Designer, на этой же вкладке можно к ниму как-то прицепить действие?

Serega 05-02-2010 13:58 1339717

Цитата:

Цитата МИШАНЧИК
А если создать чекбокс на вкладке WizardForm Designer, на этой же вкладке можно к ниму как-то прицепить действие? »

Нет, нужно писать в ручную.
Сделал обычную проверку на отмеченный чебокс при завершении инсталляции. Чебокс сделал в WizardForm Designer.
Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Files]
Source: compiler:Examples\Readme.txt; DestDir: {app}; Flags: ignoreversion

[Code]
{ RedesignWizardFormBegin } // Don't remove this line!
// Don't modify this section. It is generated automatically.
var
  NewCheckBox1: TNewCheckBox;

procedure RedesignWizardForm;
begin
  { NewCheckBox1 }
  NewCheckBox1 := TNewCheckBox.Create(WizardForm);
  with NewCheckBox1 do
  begin
    Parent := WizardForm.FinishedPage;
    Left := ScaleX(216);
    Top := ScaleY(192);
    Width := ScaleX(137);
    Height := ScaleY(17);
    Caption := 'Прочитать Readme.txt';
    Checked := True;
    State := cbChecked;
  end;

  NewCheckBox1.TabOrder := 5;

{ ReservationBegin }
  // This part is for you. Add your specialized code here.

{ ReservationEnd }
end;
// Don't modify this section. It is generated automatically.
{ RedesignWizardFormEnd } // Don't remove this line!

procedure InitializeWizard();
begin
  RedesignWizardForm;
end;

procedure DeinitializeSetup();
var
  ResultCode: Integer;
begin
  if NewCheckBox1.Checked then
    ShellExec('open', 'Readme.txt', '', ExpandConstant('{app}'), SW_SHOWNORMAL, ewNoWait, ResultCode);
end;

[ISFormDesigner]
WizardForm=FF0A005457495A415244464F524D003010CB01000054504630F10B5457697A617264466F726D0A57697A617264466F726D0C436C69656E744865696768740366010B436C69656E74576964746803EF010C4578706C696369744C65667402000B4578706C69636974546F7002000D4578706C69636974576964746803F7010E4578706C696369744865696768740383010D506978656C73506572496E636802600A54657874486569676874020D00F10C544E65774E6F7465626F6F6B0D4F757465724E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167650B57656C636F6D65506167650D4578706C69636974576964746803F1010E4578706C696369744865696768740339010000F110544E65774E6F7465626F6F6B506167650C46696E6973686564506167650D4578706C69636974576964746803F1010E4578706C69636974486569676874033901000C544E6577436865636B426F780C4E6577436865636B426F7831044C65667403D80003546F7003C0000557696474680389000648656967687402110743617074696F6E141D000000D09FD180D0BED187D0B8D182D0B0D182D18C20526561646D652E74787407436865636B65640905537461746507096362436865636B6564085461624F7264657202050000000000


МИШАНЧИК 05-02-2010 15:48 1339811

Serega, спасибо!
И ещё вопрос. В инсталшилде при установке дополнительного п.о. на фоне инсталятора появляется маленькая картинка на которой написано "Устанавливается DirectX". У меня DirectX устанавливается так:
Код:

procedure CurStepChanged(CurStep: TSetupStep);
Var
  ResultCode: integer;
  begin
    if CurStep = ssPostInstall then
      begin
    if DirectX.Checked then
      begin
      StatusLabel.Caption:=ExpandConstant('{cm:DirectXInstall}')
      Exec(ExpandConstant('{src}\Redist\DirectX\DXSETUP.exe'), '/silent', ExpandConstant('{src}\Redist\DirectX'), SW_SHOW, ewWaitUntilTerminated, ResultCode);
      end;
    end;
  end;

А можно ли как-то сделать чтоб на этом фоне тоже появлялась маленькая картинка?

svensoft 05-02-2010 22:16 1340113

Подскажите пожалуйста, как вот в этом коде можно поставить условие ?
Код:

procedure ButtonLabelClick(Sender: TObject);
var
Button: TButton;
begin

 //вот здесь как поставить условие, что данную музыку проиграть если нажата кнопка bidNext
 mciSendString('stop '+ExpandConstant('{tmp}\sound_Button1.wav'), 'NULL', 0, 0);
 mciSendString('play '+ExpandConstant('{tmp}\sound_Button1.wav'), 'NULL', 0, 0);
 //конец если

ButtonImage[TLabel(Sender).Tag].Left:=0
case TLabel(Sender).Tag of
bidBack: Button:=WizardForm.BackButton
bidNext: Button:=WizardForm.NextButton
bidCancel: Button:=WizardForm.CancelButton
bidDirBrowse: Button:=WizardForm.DirBrowseButton
bidGroupBrowse: Button:=WizardForm.GroupBrowseButton
else
Exit
end
Button.OnClick(Button)
end;

Все, уже не надо , уже сделал..))

YURSHAT 06-02-2010 05:46 1340308

Цитата:

Цитата svensoft
YURSHAT, скажи пожалуйста какой параметр нужно указать при загрузке скина, чтобы рамка скина была снаружи ?.. »

У тебя WizardForm.Width:=ScaleX(790);
WizardForm.Height:=ScaleY(533); а правильно так

WizardForm.ClientWidth:=ScaleX(790);
WizardForm.ClientHeight:=ScaleY(533);

serg aka lain 06-02-2010 05:56 1340311

Цитата:

Цитата МИШАНЧИК
А можно ли как-то сделать чтоб на этом фоне тоже появлялась маленькая картинка? »

Можно, надо воспользоваться CreateCustomForm, и на эту форму загрузить "маленькую картинку".

МИШАНЧИК 06-02-2010 05:59 1340312

serg aka lain, спасибо!
Не могли бы Вы пример набросать? Пожалуйста.

serg aka lain 06-02-2010 06:12 1340313

Цитата:

Цитата МИШАНЧИК
Не могли бы Вы пример набросать? »

Как-то так

Код:

[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
OutputDir=.

[Files]
Source: compiler:WizModernSmallImage.bmp; Flags: dontcopy;

[code]
var
  DirectX: TCheckBox;

procedure InitializeWizard();
begin
  DirectX := TCheckBox.Create(WizardForm);
  with DirectX do
  begin
    Top := WizardForm.InnerNotebook.Height div 2;
    Width := ScaleX(150);
    Caption := 'Установить DirectX';
    Parent := WizardForm.SelectDirPage;
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
  //ResultCode: Integer;
  MyForm: TSetupForm;
  MyPanel: TPanel;
begin
  if CurStep = ssPostInstall then
  begin
    if DirectX.Checked then
    begin
      MyForm := CreateCustomForm();
      ExtractTemporaryFile('WizModernSmallImage.bmp');
      with MyForm do
      begin
        BorderStyle := bsNone;
        ClientWidth := ScaleX(380);
        ClientHeight := ScaleY(59);
        Width := ClientWidth;
        Height := ClientHeight;
        Position := poScreenCenter;

        MyPanel := TPanel.Create(MyForm);
        with MyPanel do
        begin
          BorderStyle := bsNone;
          Width := MyForm.Width;
          Height := MyForm.Height;
          Caption := 'Установка DirectX, пожалуйста ждите ...';
          Alignment := taCenter;
          Parent := MyForm;
        end;

        with TBitmapImage.Create(MyForm) do
        begin
          SetBounds(ScaleX(2), ScaleY(2), ScaleX(55), ScaleY(55));
          Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizModernSmallImage.bmp'));
          Parent := MyPanel;
        end;

        Show();
        //Exec(ExpandConstant('{src}\Redist\DirectX\DXSETUP.exe'), '/silent', ExpandConstant('{src}\Redist\DirectX'), SW_SHOW, ewWaitUntilTerminated, ResultCode);
        MsgBox('Закрыть дополнительную форму', mbInformation, MB_OK);
        Free();
      end;
    end;
  end;
end;


yamaha 06-02-2010 12:14 1340426

Как сделать чтобы все данные при установке игры с оригинала внесённый в реестр при установки через inno тоже так внеслись?

user_123 06-02-2010 13:15 1340470

Цитата:

Цитата yamaha
Как сделать чтобы все данные при установке игры с оригинала внесённый в реестр при установки через inno тоже так внеслись? »

Узнать, какие записи в реестр вносит инсталлятор игры, можно сделав "снимок" реестра до и после установки, для этого есть спец. программы.
Смотрите также в справке Inno про секцию [registry].

Tukash 06-02-2010 18:05 1340693

всем привет, кому не жалко поделитесь ПОДРОБНЫМ примером того, как сделать что-бы доп ПО устанавливалось после распаковки Фриакр архивов!!

Sotonisto 06-02-2010 18:43 1340721

Наро, как внести изменения в ini файл после установки игры?
У меня есть скрипт, но он создает ini файл и вписует в нем строку, но это подходило раньше, сейчас же у меня
вот такоее:
читать дальше »
Код:

[Emulator]
CacheEnabled = False
Language = Russian
Logging=False
SteamDll=bin\steam\Steam.dll
SteamClient = True
SteamUser = L4D2

[steamclient]
PlayerName = Имя
Logging=False
ClientDll=bin\steam\steamclient.dll


Мне необходимо заменить только Имя.
Как это реализовать?

yamaha 06-02-2010 18:55 1340730

Написано если не указывать папку то будет по умолчанию в Мои рисунки, как только не пробовал и с С и без указывать путь всё равно просто чёрный фон.Как указать правильно?
читать дальше »
RegWriteStringValue(HKCU, 'Software\Serbis\SBSlideShow', 'fold', ExpandConstant('{src} \..\Slides')) else


Как поменять размер слайда?Поставить какой хочешь.
читать дальше »
ShowWindow(BackgroundForm.Handle, sw_Show)

Tukash 06-02-2010 20:17 1340788

кто-нибудь подскажет параметр для ярлыка задающий совместимость? например Win 98?

МИШАНЧИК 06-02-2010 22:10 1340880

serg aka lain, большое спасибо! Здорово!
Код:

Caption := 'Установка DirectX, пожалуйста ждите ...';
          Alignment := taCenter;

taCenter я так понимаю задаёт расположение надписи по центру, а можно ли как-то задать расположение со сдвигом вправо(или влево)?

serg aka lain 06-02-2010 23:59 1340973

Цитата:

Цитата МИШАНЧИК
taCenter я так понимаю задаёт расположение надписи по центру, а можно ли как-то задать расположение со сдвигом вправо(или влево)? »

TAlignment = (taLeftJustify, taRightJustify, taCenter);

svensoft 07-02-2010 00:32 1341000

Люди, такая ситуация, есть объект с идентификатором Panel_ProgrammGroup. Вопрос, как можно в какой-то либо функции или процедуре проверить этот объект на видимость, с учетем того что конечно же объект объявлен в глобальных переменных ?..

то есть нужно в какой-либо процедуре сделать условие на видимость этого объекта, что-то вроде :
if Panel_ProgrammGroup.Active = 1 then
или
if Panel_ProgrammGroup: Active : = True then
и это конечно все неправильно, подскажите если кто-то знает ... ))

МИШАНЧИК 07-02-2010 13:39 1341265

serg aka lain, большое спасибо!

Deen 07-02-2010 14:26 1341305

Как сделать чтобы при установке игры второй раз появлялось окно "удалить игру" но или что то подобное?

Подскажите где посматреть мануал на создание установщика с архивами FreeArc.

YURSHAT 07-02-2010 22:06 1341600

Цитата:

Цитата Deen
Как сделать чтобы при установке игры второй раз появлялось окно "удалить игру" но или что то подобное? »

Как то так
Пример
Код:

[Setup]
AppName=Need for Speed™ Undercover
AppVerName=Need for Speed™ Undercover
DefaultDirName={pf}\Need for Speed™ Undercover
DefaultGroupName=Need for Speed™ Undercover
AllowNoIcons=yes

[Code_]

function InitializeSetup(): Boolean;
var
  ResultCode: Integer;
  ResultStr:string;
begin
Result:=True;
begin
  If RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Need for Speed™ Undercover_is1', 'UninstallString', ResultStr)
then
 begin
  If ResultStr<>''
then
 begin
  ResultStr:=RemoveQuotes(ResultStr);
  if MsgBox('Игра Need for Speed™ Undercover уже установлена.' #13#13 'Вы хотите удалить существующую копию перед продолжением?', mbConfirmation, MB_YESNO) = idYes
then
  if not Exec(ResultStr, '/silent', '', SW_SHOW, ewWaitUntilTerminated, ResultCode)
then
  MsgBox('Ошибка удаления.' #13#13 '' + SysErrorMessage(ResultCode) + '.' #13#13 'Вероятно, деинсталлятор был перемещен, удален или переименован.', mbError, MB_OK);
end;
end;
end;
end;


Deen 07-02-2010 23:05 1341637

YURSHAT,
Ничего нипишут как было так и осталось.

Может что я нето делаю, вот посмотри
читать дальше »
[Setup]
DiskSpanning=true
DiskSliceSize=1457664000
AppId={{28E95C95-2094-4AAC-8D93-F5ACDB724359}
AppName=GTS
AppVerName=GTS 1.0
AppPublisher=DCore
DefaultDirName={pf}\GTS
DefaultGroupName=GTS
AllowNoIcons=yes
OutputDir=E:\Инсталяторы
OutputBaseFilename=setup
SetupIconFile=E:\Инсталяторы\icon.ico
Compression=lzma/ultra64
SolidCompression=true
InternalCompressLevel=ultra64

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

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: dxinstall; Description: Установить DirectX; Flags: unchecked
Name: C; Description: Установить С++ 2005 redistributable; Flags: unchecked

[Files]
Source: D:\Games\GTS\bin\win_x86\game.exe; DestDir: {app}\bin\win_x86\; Flags: ignoreversion
Source: D:\Games\GTS\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: {group}\GTS; Filename: {app}\bin\win_x86\game.exe; WorkingDir: {app}\bin\win_x86
Name: {group}\{cm:UninstallProgram,GTS}; Filename: {app}\bin\win_x86\game.exe; WorkingDir: {app}\bin\win_x86; IconIndex: 0
Name: {commondesktop}\GTS; Filename: {app}\bin\win_x86\game.exe; Tasks: desktopicon; WorkingDir: {app}\bin\win_x86; IconIndex: 0
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\GTS; Filename: {app}\bin\win_x86\game.exe; Tasks: quicklaunchicon; WorkingDir: {app}\bin\win_x86; IconIndex: 0

[Run]
Filename: {app}\bin\win_x86\game.exe; Description: {cm:LaunchProgram,GTS}; Flags: nowait postinstall skipifsilent
Filename: {src}\Redist\DXSETUP.exe; Parameters: /silent; Tasks: dxinstall
Filename: {src}\Redist\vcredist_x86.exe; Parameters: /q; Tasks: C

[Code_]
function InitializeSetup(): Boolean;
var
ResultCode: Integer;
ResultStr:string;
begin
Result:=True;
begin
If RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Need for Speed™ Undercover_is1', 'UninstallString', ResultStr)
then
begin
If ResultStr<>''
then
begin
ResultStr:=RemoveQuotes(ResultStr);
if MsgBox('Игра Need for Speed™ Undercover уже установлена.' #13#13 'Вы хотите удалить существующую копию перед продолжением?', mbConfirmation, MB_YESNO) = idYes
then
if not Exec(ResultStr, '/silent', '', SW_SHOW, ewWaitUntilTerminated, ResultCode)
then
MsgBox('Ошибка удаления.' #13#13 '' + SysErrorMessage(ResultCode) + '.' #13#13 'Вероятно, деинсталлятор был перемещен, удален или переименован.', mbError, MB_OK);
end;
end;
end;
end;



Подскажите где посматреть мануал на создание установщика с архивами FreeArc.

YURSHAT 08-02-2010 01:51 1341740

Цитата:

Цитата Deen
Может что я нето делаю, вот посмотри »

Правильно
так
Код:

#define MyAppName "GTS"
//укажите название игры

[Setup]
AppName={#MyAppName}
AppVerName=GTS 1.0
AppPublisher=DCore
DefaultDirName={pf}\GTS
DefaultGroupName=GTS
AllowNoIcons=yes
;OutputDir=E:\Инсталяторы
OutputBaseFilename=setup
;SetupIconFile=E:\Инсталяторы\icon.ico
Compression=lzma/ultra64
SolidCompression=true
InternalCompressLevel=ultra64
DiskSpanning=true
DiskSliceSize=1457664000

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

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: dxinstall; Description: Установить DirectX; Flags: unchecked
Name: C; Description: Установить С++ 2005 redistributable; Flags: unchecked

[Files]
;Source: D:\Games\GTS\bin\win_x86\game.exe; DestDir: {app}\bin\win_x86\; Flags: ignoreversion
;Source: D:\Games\GTS\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: {group}\GTS; Filename: {app}\bin\win_x86\game.exe; WorkingDir: {app}\bin\win_x86
Name: {group}\{cm:UninstallProgram,GTS}; Filename: {app}\bin\win_x86\game.exe; WorkingDir: {app}\bin\win_x86; IconIndex: 0
Name: {commondesktop}\GTS; Filename: {app}\bin\win_x86\game.exe; Tasks: desktopicon; WorkingDir: {app}\bin\win_x86; IconIndex: 0
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\GTS; Filename: {app}\bin\win_x86\game.exe; Tasks: quicklaunchicon; WorkingDir: {app}\bin\win_x86; IconIndex: 0

[Run]
Filename: {app}\bin\win_x86\game.exe; Description: {cm:LaunchProgram,GTS}; Flags: nowait postinstall skipifsilent
Filename: {src}\Redist\DXSETUP.exe; Parameters: /silent; Tasks: dxinstall
Filename: {src}\Redist\vcredist_x86.exe; Parameters: /q; Tasks: C

[Code_]

function InitializeSetup(): Boolean;
var
  ResultCode: Integer;
  ResultStr:string;
begin
Result:=True;
begin
  If RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#MyAppName}_is1', 'UninstallString', ResultStr)
then
 begin
  If ResultStr<>''
then
 begin
  ResultStr:=RemoveQuotes(ResultStr);
  if MsgBox('Игра {#MyAppName} уже установлена.' #13#13 'Вы хотите удалить существующую копию перед продолжением?', mbConfirmation, MB_YESNO) = idYes
then
  if not Exec(ResultStr, '/silent', '', SW_SHOW, ewWaitUntilTerminated, ResultCode)
then
  MsgBox('Ошибка удаления.' #13#13 '' + SysErrorMessage(ResultCode) + '.' #13#13 'Вероятно, деинсталлятор был перемещен, удален или переименован.', mbError, MB_OK);
end;
end;
end;
end;



Цитата:

Цитата Deen
Подскажите где посматреть мануал на создание установщика с архивами FreeArc. »

В шапке есть скрипт для распаковки FreeArc, в нем все расписано. Ссыль

Deen 08-02-2010 04:33 1341786

YURSHAT,
Сразу же ошибка в первой строчке.

Про freearc: Я хотел мануал с самых азов.
Во первых: как делить архив фриарк на части? У меня установленная игра размером 12Гб мне архивировать сразу всю папку в один архив или где есть в настройках (сам ненашол) разделить на части 5-6 частей или вообще сколько нужно?

Второе: Сделал я например 6 архивов в скрипте написано "поместите архивы в одну папку с инсталятором" тоесть туда же где игра или в папку назначения и исталятора в установленной игре нет. unarc.dll где должен быть? рядом с архивами или вообще в папке с IS? Тот же вопрос про InnoCallback.dll

Пока что всё, жду ответов.

YURSHAT 08-02-2010 04:53 1341788

Цитата:

Цитата Deen
Сразу же ошибка в первой строчке. »

А у тебя установлен preprocessor?

Цитата:

Цитата Deen
Про freearc: Я хотел мануал с самых азов. »

Такого вроде нету. Там в скрипте и так все расписано.

Цитата:

Цитата Deen
Во первых: как делить архив фриарк на части? »

Делишь непосредственно FreeArc'ом. (где в FreeArc разбивка на части не скажу, так как не пользуюсь)

Цитата:

Цитата Deen
Второе: Сделал я например 6 архивов в скрипте написано "поместите архивы в одну папку с инсталятором" »

архивы должны лежать рядом с исполняемым файлом инсталлятора (то есть рядом с setup.exe инсталла).

Цитата:

Цитата Deen
unarc.dll где должен быть? рядом с архивами или вообще в папке с IS? Тот же вопрос про InnoCallback.dll »

Все dll которые ты используешь в инно должны извлекатся в temp (временная папка). То есть запаковываешь dll вместе с остальными файлами (не путать с архивами), а в качестве папки назначения указываешь {tmp}

ViCK_kz 08-02-2010 05:00 1341790

Может быть тупой вопрос(ибо я полный нуб в установщиках),а может быть он уже здесь обсуждался,но всё равно задам можноли сделать так,чтобы картинки менялись при установке

YURSHAT 08-02-2010 05:05 1341791

Цитата:

Цитата ViCK_kz
Может быть тупой вопрос(ибо я полный нуб в установщиках),а может быть он уже здесь обсуждался,но всё равно задам можноли сделать так,чтобы картинки менялись при установке »

Вы имеете ввиду слайд-шоу?

Sotonisto 08-02-2010 06:38 1341806

Цитата:

Цитата ViCK_kz
Может быть тупой вопрос(ибо я полный нуб в установщиках),а может быть он уже здесь обсуждался,но всё равно задам можноли сделать так,чтобы картинки менялись при установке »

Вы наверно имели ввиду слайд шоу.

Deen 08-02-2010 11:25 1341933

YURSHAT,
Цитата:

Цитата YURSHAT
А у тебя установлен preprocessor? »

нет не установлен, это программа?
Цитата:

Цитата YURSHAT
Делишь непосредственно FreeArc'ом. (где в FreeArc разбивка на части не скажу, так как не пользуюсь) »

тоесть сам запаковываешь частями?
И архивы делать sfx или обычные?
Файлы запаковывать которые на дике или которые уже установленны?

Rodriguez 08-02-2010 11:28 1341936

Здравствуйте!

Скажите можно ли организовать средствами InnoSetup обновление компонентов программ с возможностью отката?

Было бы вообще замечательно если бы установленные обновления отображались в "Установка и удаление программ" при установленном значке "Показать обновления".

Спасибо.

Sotonisto 08-02-2010 12:47 1342003

Цитата:

Цитата Deen
нет не установлен, это программа? »

Можете скачать Inno Setup Pack v. 5.3.7 отсюда http://rghost.ru/953146
Во время установки Вам предложат скачать дополнительные программы.
После закачки они автоматически установятся.

Vengeance 08-02-2010 12:50 1342007

Народ помогите создать скрипт компонентов для игры :)

Итак сама папка с игрой в C:\hl

Пункты:

Установить Half-Life (если этот пункт не выбран остальные пункты заблокированы)

Ниже меню с подпунктами:

Установить модели(можно выбрать только один пункт):

1. Стандартные (C:\mdl1)
2. Улучшенные стандартные (C:\mdl2)
3. Бла-бла-бла (C:\mdl3)

НО: сами модели после установки должны находиться в C:\hl\valve\models

В папкках mdl1, mdl2, mdl3 у меня лежат файлы с одинаковыми именами, например - lol.mdl

То бишь допустим я выбрал пункт один, у мя из mdl1 поставился lol.mdl, выбрал пункт два у мя из mdl2.mdl поставиолсь и т.д.

3. Расширенные опции

1. Включить (C:\hm1)
2. Выключить (C:\hm1)

Файлы должны устанавливаться в C:\hl\valve

В hm1 у меня файл userconfig.cfg и файл в папках: gfx\shell\kb_act.lst
В hm2 у меня файл в папках: gfx\shell\kb_act.lst

Но это разные папки

4. Детальные текстуры

1. Включить (C:\lol1)
2. Выключить (C:\lol2)

Файлы из папок и папки в них должны устанавливаться в C:\hl\valve

5. Ag Mod

1. Установить (C:\ag)
2. Не ставить(ничего не ставиться дополнительного)

папка ag должна ставиться в C:\hl\

Кто разберется и сделает мне это безмозмездно тому почет

Deen 08-02-2010 13:23 1342038

С каким параметром устанавливается драйвер PhisX? Пробовал с /q и /silent неустанавливается.

svensoft 08-02-2010 13:47 1342058

Цитата:

Цитата Sotonisto
Вы наверно имели ввиду слайд шоу. »

Sotonisto, а эти слайд-шоу будут в окне инсталлятора, или на весь экран вне окна инсталлятора ?..

Sotonisto 08-02-2010 18:11 1342247

Цитата:

Цитата svensoft
Sotonisto, а эти слайд-шоу будут в окне инсталлятора, или на весь экран вне окна инсталлятора ? »

Так что конкретно нужно? Картинка на бекграунде или на инсталляторе?

svensoft 08-02-2010 19:21 1342319

Цитата:

Цитата Sotonisto
Так что конкретно нужно? Картинка на бекграунде или на инсталляторе? »

Sotonisto, нужно слайд-шоу в окне инсталлятора, на все окно инсталлятора, но размер окна инсталлятора при этом не на весь экран (предположим 790*533), ну а если еще слайд-шоу будет из картинок .jpg или из слайд-шоу сделаного в винде .exe , то тогда вообще будет очень приочень классно !!! вот как-то так... :)

YURSHAT 08-02-2010 20:25 1342391

Цитата:

Цитата svensoft
Sotonisto, а эти слайд-шоу будут в окне инсталлятора, или на весь экран вне окна инсталлятора ?.. »

Правильно говорить на mainForm (на весь экран вне окна :) )

Примеры которые выложил Sotonisto, уже давно устарели...

svensoft 08-02-2010 20:38 1342401

YURSHAT, загляни в лс, я там уже вторые сутки шлю письма по поводу проверки активности объекта ..

Добавил : Хотя уже не надо, все уже сделал !!! )))...
А вот это надо : Подскажи пожалуйста, нам всем, по поводу кода про слайд-шоу , который еще не устарел ... .(Code_New_Slide_Show_From_YURSHAT ))))

yamaha 08-02-2010 23:41 1342570

Как сделать просто бэкграунд в окне инсталятора?Ну тоесть именно в самом окне установке не на полный экран

Rodriguez 09-02-2010 09:43 1342767

Может кто-нибудь подскажет как можно организовать следующий функционал: суть установки - обновление в директории некоторых файлов, при этом обновляемые файлы нужно забэкапить, при удалении пакета забэкапленные файлы нужно восстановить. Как сделать бэкап в сети хорошо расписано, но вот как восстановить этот бэкап при удалении пакета не ясно.

morozov-ch 09-02-2010 10:32 1342808

Народ, подскажите как создать в InnoSetup ярлык *.pif или настроить запуск проги в полноэкранном режиме.
Прога досовая.

YURSHAT 09-02-2010 16:45 1343161

svensoft, извини но у меня просто нет ни минуты свободного времени, чтобы что-нибудь написать.

Цитата:

Цитата svensoft
одскажи пожалуйста, нам всем, по поводу кода про слайд-шоу , который еще не устарел »

isSlideShow v1.01 [20.10.2009] от ExpeditorR

Это dll для показа слайд-шоу с эффектами переходов в окне Inno Setup.
В новой версии добавлена возможность выбора эффекта перехода, возможно 12 вариантов (подробнее смотрите readme.rtf). В архиве имеются два примера использования, и подробное описание. isSlideShow.dll может работать в любой версии Windows.

Habetdin 09-02-2010 17:05 1343191

morozov-ch,
Код:

[Icons]
Name: {group}\My Program; Filename: {app}\main.exe; Flags: runmaximized


Jerichoman 09-02-2010 20:28 1343326

Root: HKLM; SubKey: SOFTWARE\2K Games\BioShock 2; ValueType: string; ValueName: InstallPath; ValueData: D:\Games\BioShock 2; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\2K Games\BioShock 2\SP; ValueType: string; ValueName: InstallPath; ValueData: D:\Games\BioShock 2\SP; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\2K Games\BioShock 2\SP; ValueType: string; ValueName: Working; ValueData: D:\Games\BioShock 2\SP\Builds\Binaries; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\2K Games\BioShock 2\SP; ValueType: string; ValueName: Launcher; ValueData: D:\Games\BioShock 2\SP\Builds\Binaries\Bioshock2Launcher.exe; Flags: uninsdeletevalue uninsdeletekeyifempty
Как здесь сделать ValueData, в первом случае это {app}, а дальше?

yamaha 09-02-2010 21:33 1343361

Есть скрипт ли для сначала распаковки фриарк архивов а потом сразу и precomp

Habetdin 09-02-2010 22:50 1343456

Jerichoman,
Код:

Root: HKLM; SubKey: SOFTWARE\2K Games\BioShock 2; ValueType: string; ValueName: InstallPath; ValueData: {app}; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\2K Games\BioShock 2\SP; ValueType: string; ValueName: InstallPath; ValueData: {app}\SP; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\2K Games\BioShock 2\SP; ValueType: string; ValueName: Working; ValueData: {app}\SP\Builds\Binaries; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\2K Games\BioShock 2\SP; ValueType: string; ValueName: Launcher; ValueData: {app}\SP\Builds\Binaries\Bioshock2Launcher.exe; Flags: uninsdeletevalue uninsdeletekeyifempty


Jerichoman 09-02-2010 23:02 1343462

Habetdin,
спасибо

morozov-ch 10-02-2010 08:36 1343638

Habetdin, извените уважаемый, но так не получается.
У меня DOS приложение, мне бы его загнать в полноэкранку.

Tukash 10-02-2010 14:30 1343880

всем привет, прошу помощи, скажите что надо редактировать что-бы подвинуть кнопки?
читать дальше »
const
ButtonWidth = 80; //Указываем размер кнопок
ButtonHeight = 23;

bidBack = 0;
bidNext = 1;
bidCancel = 2;
bidDirBrowse = 3;
bidGroupBrowse = 4;

var
ButtonPanel: array [0..4] of TPanel;
ButtonImage: array [0..4] of TBitmapImage;
ButtonLabel: array [0..4] of TLabel;

procedure ButtonLabelClick(Sender: TObject);
var
Button: TButton;
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
case TLabel(Sender).Tag of
bidBack: Button:=WizardForm.BackButton
bidNext: Button:=WizardForm.NextButton
bidCancel: Button:=WizardForm.CancelButton
bidDirBrowse: Button:=WizardForm.DirBrowseButton
bidGroupBrowse: Button:=WizardForm.GroupBrowseButton
else
Exit
end
Button.OnClick(Button)
end;

procedure ButtonLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if ButtonLabel[TLabel(Sender).Tag].Enabled then
ButtonImage[TLabel(Sender).Tag].Left:=-ButtonWidth
end;

procedure ButtonLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
end;

procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
Image: TBitmapImage;
Panel: TPanel;
Labl: TLabel;

begin
Panel:=TPanel.Create(WizardForm)
Panel.Left:=AButton.Left
Panel.Top:=AButton.Top
Panel.Width:=AButton.Width
Panel.Height:=AButton.Height
Panel.Tag:=AButtonIndex
Panel.Parent:=AButton.Parent
ButtonPanel[AButtonIndex]:=Panel

Image:=TBitmapImage.Create(WizardForm) //Рисунок который ложится на кнопку
Image.Width:=160 //Обязательно прописать оригинальный размер рисунка
Image.Height:=23
Image.Enabled:=False
Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\button.bmp'))
Image.Parent:=Panel
ButtonImage[AButtonIndex]:=Image

with TLabel.Create(WizardForm) do begin
Tag:=AButtonIndex
Parent:=Panel
Width:=Panel.Width
Height:=Panel.Height
Transparent:=True
OnClick:=@ButtonLabelClick
OnDblClick:=@ButtonLabelClick
OnMouseDown:=@ButtonLabelMouseDown
OnMouseUp:=@ButtonLabelMouseUp
end

Labl:=TLabel.Create(WizardForm) //Текст кнопок
Labl.Left:=23 //Указываем положение текста
Labl.Top:=5
Labl.Autosize:=True
Labl.Alignment:=taCenter
Labl.Tag:=AButtonIndex
Labl.Transparent:=True
Labl.Font.Color:=clWhite //Цвет текста
Labl.Caption:=AButton.Caption
Labl.OnClick:=@ButtonLabelClick
Labl.OnDblClick:=@ButtonLabelClick
Labl.OnMouseDown:=@ButtonLabelMouseDown
Labl.OnMouseUp:=@ButtonLabelMouseUp
Labl.Parent:=Panel
ButtonLabel[AButtonIndex]:=Labl
end;

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
ButtonLabel[AButtonIndex].Caption:=AButton.Caption
ButtonPanel[AButtonIndex].Visible:=AButton.Visible
ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=True
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=False
end;

procedure CurPageChanged(CurPageID: Integer);
begin
UpdateButton(WizardForm.BackButton,bidBack)
UpdateButton(WizardForm.NextButton,bidNext)
UpdateButton(WizardForm.CancelButton,bidCancel)
end;

procedure InitializeWizard();
begin
WizardForm.BackButton.Width:=ButtonWidth
WizardForm.BackButton.Height:=ButtonHeight

WizardForm.NextButton.Width:=ButtonWidth
WizardForm.NextButton.Height:=ButtonHeight

WizardForm.CancelButton.Width:=ButtonWidth
WizardForm.CancelButton.Height:=ButtonHeight

WizardForm.DirBrowseButton.Left:=337
WizardForm.DirBrowseButton.Width:=ButtonWidth
WizardForm.DirBrowseButton.Height:=ButtonHeight

WizardForm.GroupBrowseButton.Left:=337
WizardForm.GroupBrowseButton.Width:=ButtonWidth
WizardForm.GroupBrowseButton.Height:=ButtonHeight

WizardForm.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick

WizardForm.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick

ExtractTemporaryFile('button.bmp')
LoadButtonImage(WizardForm.BackButton,bidBack)
LoadButtonImage(WizardForm.NextButton,bidNext)
LoadButtonImage(WizardForm.CancelButton,bidCancel)
LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;


просто скажите куда здесь писать значения, что-бы подвинуть это изображение(кнопки) как видите, их надо приподнять!

ViCK_kz 10-02-2010 16:55 1344002

Не ,не слайды а когда в самом окне инсталляторя меняется картинка
и ещё подскажите пожалста я где то здесь видел пак inno с библиотеками и со всеми наворотами

kro44i 10-02-2010 18:53 1344073

Подскажите скрипт, чтобы был один установочный файл (Setup.exe+.arc).

svensoft 10-02-2010 18:56 1344076

Цитата:

Цитата Tukash
всем привет, прошу помощи, скажите что надо редактировать что-бы подвинуть кнопки? »

Tukash, вот это попробуй в своем коде подправить :
Код:

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
ButtonLabel[AButtonIndex].Caption:=AButton.Caption
ButtonPanel[AButtonIndex].Visible:=AButton.Visible
ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled
ButtonLabel[AButtonIndex].Top:=AButton.Top
end;

procedure CurPageChanged(CurPageID: Integer);
begin
UpdateButton(WizardForm.BackButton,bidBack)
UpdateButton(WizardForm.NextButton,bidNext)
UpdateButton(WizardForm.CancelButton,bidCancel)
If CurPageID=wpSelectDir then
  begin
    UpdateButton(WizardForm.DirBrowseButton,bidDirBrowse)
  end
  else
  If CurPageID=wpSelectProgramGroup then
  begin
    UpdateButton(WizardForm.GroupBrowseButton,bidGroupBrowse)
  end

end;


Tukash 10-02-2010 19:17 1344089

svensoft
во чувак, респект тебе, а то я уже от горя, кнопки по дефолту поставил!
правда обошелся только ButtonPanel[AButtonIndex].Top:=AButton.Top

A1EXXX 10-02-2010 19:48 1344114

Inno ISCmplr Setup 5.3.7 build 100210

Vengeance 11-02-2010 13:37 1344685

Подскажите тогда уж мн, а вернее дайте скрипт за основу.

Скрипт выбора компонентов, например:

Установить модели.

1. А
2. Б
3. С

И обьясните: как создавать возможность выбора только одного элемента из компонентов, как можно сделать установку по выбору(ставить компонент или нет, как сделать чтобы из опр. папок в опр. ставилось. К примеру я делаю инсталлятор папки C:/hl. А у меня модели компонентов в C:/s/1, C:/s/2, C:/s/3 и чтобы они поставились в C:/hl/valve/models :)

Tukash 11-02-2010 19:14 1344920

Здрасьтя всем!!!
такой вопрос, хочу вот тут=> изменить цвет,"всмысле" там где голубой сделать темно синий, можно-ли это сделать путем занесения чего-либо в секцию [КОД], без разных там ***.cjstyles?

South 12-02-2010 00:03 1345059

Цитата:

Цитата Tukash
изменить цвет,"всмысле" там где голубой сделать темно синий, можно-ли это сделать путем занесения чего-либо в секцию [КОД], без разных там ***.cjstyles? »

если без использования сторонних длл, то в принципе можно, только такой способ будет действовать на всех наследников EDIT (т.е. во всей винде поменяются цвета у Edit, Memo и т.д. + менюшки и т.п.). обычная подмена системных цветов
читать дальше »
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program

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

[code]
type
TM1 = array [0..1] of integer;
TM2 = array [0..1] of DWORD;

var
M1 : TM1;
M2 : TM2;
OldHighLightTextColor,
OldHighLightColor : DWORD;

function SetSysColors(cElements: Integer; lpaElements:TM1; lpaRgbValues:TM2): BOOL; external 'SetSysColors@user32.dll stdcall';
function GetSysColor(nIndex: Integer): DWORD; external 'GetSysColor@user32.dll stdcall';

procedure InitializeWizard();
begin
OldHighLightTextColor:=GetSysColor(14);
OldHighLightColor:=GetSysColor(13);
M1[0]:=14;
M1[1]:=13;
M2[0]:=$FF0000; // цвет выделенного текста
M2[1]:=$0000FF; // цвет фона выделенного текста
SetSysColors(2,M1,M2);
end;

procedure DeinitializeSetup();
begin
//вернем все взад, чтобы юзер не обиделся
M2[0]:=OldHighLightTextColor; //$FFFFFF;
M2[1]:=OldHighLightColor; //$C56A31;
SetSysColors(2,M1,M2);
end;

если нужно только для конкретного эдита, то это как минимум перехват оконной процедуры, т.е. тащить с собой стороннюю длл

Tukash 12-02-2010 12:32 1345354

South
вот блин, не надо нам такова,но за ответ спасибо!!!
___________________________________
кто подскажет, что надо приписать что-бы папка находящаяся в одном каталоге с инсталлятором,(например папка с видео(movie)) скопирывалась в {app}\data\* как напрямую скопирывалась в нужный каталог?(без запаковки и распаковки напрямую)
и еще, как уже готовый архив FreeArc разбить на части?(так как делают репакеры на трекерах, разбивают их по 700 метров, и они распаковываются?это делается Inno без сжатия?)

A1EXXX 12-02-2010 13:06 1345382

Inno Setup Compiler 5.3.7 build 100212 (English) by Restools

IgrikxXx 13-02-2010 15:25 1346199

Помогите пожайлуйста нада реализовать что бы чекбоксы били видны на картинке, вот в этом скрипте! Срочняк нужно надеюсь на вашу помощь!
Вот сам оригинал скрипта! http://www.forum.oszone.ru/post-1242285-250.html
читать дальше »
[Setup]
AppName=The Sims 3
AppVerName=The Sims 3 v 1.5
DefaultDirName={pf}\The Sims 3
DefaultGroupName=The Sims 3
AppCopyright=Copyright © 2009 IgrikxXx
;SetupIconFile=nfs.ico
OutputDir=.
;WizardImageFile=Left.bmp
Compression=lzma/ultra64
InternalCompressLevel=ultra
SolidCompression=yes
DiskSpanning=yes
SlicesPerDisk=1
DiskSliceSize=734000000

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

[Files]
;Source: D:\games\The sims 3\*; DestDir: {app}; Flags: ignoreversion createallsubdirs recursesubdirs

[Run]
Filename: {src}\Redist\DirectX\dxsetup.exe; Tasks: directx

[Tasks]
Name: desktopicon; Description: Создать ярлык на рабочем столе
Name: directx; Description: Установить DirectX 9.0c

[Icons]
Name: {group}\The Sims; Filename: {app}\nfshs.exe; WorkingDir: {app}
Name: {group}\Удалить игрy; Filename: {uninstallexe}
Name: {userdesktop}\Need For Speed IV SE; Filename: {app}\nfshs.exe; WorkingDir: {app}; Tasks: desktopicon


[Messages]
BeveledLabel=- Repack by IgrikxXx -


[code]
var
pnl: TPanel;

///////////////////////WelcomePage//////////////////////////////////////
procedure WelcomePage;
begin
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.WelcomeLabel1.AutoSize;
SetBounds(WizardForm.WelcomeLabel1.Left,WizardForm.WelcomeLabel1.Top,
WizardForm.WelcomeLabel1.Width,WizardForm.WelcomeLabel1.Height);
WordWrap:= WizardForm.WelcomeLabel1.WordWrap;
Caption:= WizardForm.WelcomeLabel1.Caption;
with Font do
begin
Color:= WizardForm.WelcomeLabel1.Font.Color;
Style:= WizardForm.WelcomeLabel1.Font.Style;
Name:= WizardForm.WelcomeLabel1.Font.Name;
Size:= WizardForm.WelcomeLabel1.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.WelcomeLabel2.AutoSize;
SetBounds(WizardForm.WelcomeLabel2.Left,WizardForm.WelcomeLabel2.Top,
WizardForm.WelcomeLabel2.Width,WizardForm.WelcomeLabel2.Height);
WordWrap:= WizardForm.WelcomeLabel2.WordWrap;
Caption:= WizardForm.WelcomeLabel2.Caption;
with Font do
begin
Color:= WizardForm.WelcomeLabel2.Font.Color;
Style:= WizardForm.WelcomeLabel2.Font.Style;
Name:= WizardForm.WelcomeLabel2.Font.Name;
Size:= WizardForm.WelcomeLabel2.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////SelectDirPage//////////////////////////////////////
procedure SelectDirPage;
begin
with WizardForm do
begin
with DirEdit do
begin
Left:= 40;
Top:= 137;
Parent:= pnl;
end;
with DirBrowseButton do
begin
Left:= WizardForm.DirEdit.Left + WizardForm.DirEdit.Width + 10;
Top:= WizardForm.DirEdit.Top - 1;
Parent:= pnl;
end;
with SelectDirBitmapImage do
begin
Left:= WizardForm.DirEdit.Left;
Top:= WizardForm.DirEdit.Top - 62;
Stretch:= True;
Parent:= pnl;
end;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.SelectDirBrowseLabel.AutoSize;
SetBounds(WizardForm.DirEdit.Left,WizardForm.DirEdit.Top - 30,
WizardForm.SelectDirBrowseLabel.Width, WizardForm.SelectDirBrowseLabel.Height);
WordWrap:= WizardForm.SelectDirBrowseLabel.WordWrap;
Caption:= WizardForm.SelectDirBrowseLabel.Caption;
with Font do
begin
Color:= WizardForm.SelectDirBrowseLabel.Font.Color;
Style:= WizardForm.SelectDirBrowseLabel.Font.Style;
Name:= WizardForm.SelectDirBrowseLabel.Font.Name;
Size:= WizardForm.SelectDirBrowseLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.SelectDirLabel.AutoSize;
SetBounds(WizardForm.SelectDirBitmapImage.Left + 50,WizardForm.SelectDirBitmapImage.Top + 10,
WizardForm.SelectDirLabel.Width,WizardForm.SelectDirLabel.Height);
WordWrap:= WizardForm.SelectDirLabel.WordWrap;
Caption:= WizardForm.SelectDirLabel.Caption;
with Font do
begin
Color:= WizardForm.SelectDirLabel.Font.Color;
Style:= WizardForm.SelectDirLabel.Font.Style;
Name:= WizardForm.SelectDirLabel.Font.Name;
Size:= WizardForm.SelectDirLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.DiskSpaceLabel.AutoSize;
SetBounds(WizardForm.DirEdit.Left,WizardForm.Bevel.Top - 25,
WizardForm.DiskSpaceLabel.Width,WizardForm.DiskSpaceLabel.Height);
WordWrap:= WizardForm.DiskSpaceLabel.WordWrap;
Caption:= WizardForm.DiskSpaceLabel.Caption;
with Font do
begin
Color:= WizardForm.DiskSpaceLabel.Font.Color;
Style:= WizardForm.DiskSpaceLabel.Font.Style;
Name:= WizardForm.DiskSpaceLabel.Font.Name;
Size:= WizardForm.DiskSpaceLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////ReadyPage//////////////////////////////////////
procedure ReadyPage;
var
ready_str: string;
begin
ready_str:= WizardForm.ReadyMemo.Text;
with TLabel.Create(pnl) do
begin
SetBounds(45,115,WizardForm.ReadyMemo.Width, WizardForm.ReadyMemo.Height);
Caption:= ready_str;
with Font do
begin
Color:= WizardForm.ReadyLabel.Font.Color;
Style:= WizardForm.ReadyLabel.Font.Style;
Name:= WizardForm.ReadyLabel.Font.Name;
Size:= WizardForm.ReadyLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TBevel.Create(WizardForm) do
begin
SetBounds(40,110, WizardForm.ReadyMemo.Width, WizardForm.ReadyMemo.Height);
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.ReadyLabel.AutoSize;
SetBounds(40,70, WizardForm.ReadyLabel.Width, WizardForm.ReadyLabel.Height);
WordWrap:= WizardForm.ReadyLabel.WordWrap;
Caption:= WizardForm.ReadyLabel.Caption;
with Font do
begin
Color:= WizardForm.ReadyLabel.Font.Color;
Style:= WizardForm.ReadyLabel.Font.Style;
Name:= WizardForm.ReadyLabel.Font.Name;
Size:= WizardForm.ReadyLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////InstallingPage//////////////////////////////////////
procedure InstallingPage;
begin
with WizardForm.ProgressGauge do
begin
Left:= 40;
Top:= 115;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.FilenameLabel.AutoSize;
SetBounds(WizardForm.ProgressGauge.Left,WizardForm.ProgressGauge.Top-20,
WizardForm.FilenameLabel.Width,WizardForm.FilenameLabel.Height);
WordWrap:= WizardForm.FilenameLabel.WordWrap;
Caption:= WizardForm.FilenameLabel.Caption;
with Font do
begin
Color:= WizardForm.FilenameLabel.Font.Color;
Style:= WizardForm.FilenameLabel.Font.Style;
Name:= WizardForm.FilenameLabel.Font.Name;
Size:= WizardForm.FilenameLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.StatusLabel.AutoSize;
SetBounds(WizardForm.StatusLabel.Left,WizardForm.StatusLabel.Top,
WizardForm.StatusLabel.Width,WizardForm.StatusLabel.Height);
WordWrap:= WizardForm.StatusLabel.WordWrap;
Caption:= WizardForm.StatusLabel.Caption;
with Font do
begin
Color:= WizardForm.StatusLabel.Font.Color;
Style:= WizardForm.StatusLabel.Font.Style;
Name:= WizardForm.StatusLabel.Font.Name;
Size:= WizardForm.StatusLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////FinishedPage//////////////////////////////////////
var
CheckBox: array of TNewCheckBox;

procedure CheckBoxClick(Sender: TObject);
begin
if TNewCheckBox(Sender).Checked then
WizardForm.RunList.Checked[TNewCheckBox(Sender).Tag]:= True
else WizardForm.RunList.Checked[TNewCheckBox(Sender).Tag]:= False;
end;

procedure LabelClick(Sender: TObject);
begin
if CheckBox[TLabel(Sender).Tag].Checked then
begin
WizardForm.RunList.Checked[TLabel(Sender).Tag]:= False;
CheckBox[TLabel(Sender).Tag].Checked:= False;
end
else
begin
WizardForm.RunList.Checked[TLabel(Sender).Tag]:= True;
CheckBox[TLabel(Sender).Tag].Checked:= True;
end;
end;

procedure HideRunList(Control: TWinControl);
var
i, t: Integer;
str: string;
begin
if WizardForm.RunList.Items.Count > 0 then
begin
WizardForm.RunList.Hide;
SetArrayLength(CheckBox, SizeOf(WizardForm.RunList.Items.Count));
for i:= 0 to WizardForm.RunList.Items.Count-1 do
begin
CheckBox[i]:= TNewCheckBox.Create(Control);
with CheckBox[i] do
begin
SetBounds(ScaleX(WizardForm.RunList.Left+2),ScaleY(WizardForm.RunList.Top+2+t),14,14);
Tag:= i;
Checked:= WizardForm.RunList.Checked[i];
Caption:= WizardForm.RunList.Items.Strings[i];
OnClick:= @CheckBoxClick;
Color:= clWhite;
Parent:= Control;
end;
str:= WizardForm.RunList.Items.Strings[i];
with TLabel.Create(WizardForm) do
begin
SetBounds(ScaleX(WizardForm.RunList.Left+20),ScaleY(WizardForm.RunList.Top+2+t),
WizardForm.RunList.Width,14);
Caption:= str;
Tag:= i;
OnClick:= @LabelClick;
Transparent:= True;
Parent:= Control;
end;
t:= t + 20;
end;
end;
end;

procedure FinishedPage;
begin
HideRunList(pnl);
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.FinishedHeadingLabel.AutoSize;
SetBounds(WizardForm.FinishedHeadingLabel.Left,WizardForm.FinishedHeadingLabel.Top,
WizardForm.FinishedHeadingLabel.Width,WizardForm.FinishedHeadingLabel.Height);
WordWrap:= WizardForm.FinishedHeadingLabel.WordWrap;
Caption:= WizardForm.FinishedHeadingLabel.Caption;
with Font do
begin
Color:= WizardForm.FinishedHeadingLabel.Font.Color;
Style:= WizardForm.FinishedHeadingLabel.Font.Style;
Name:= WizardForm.FinishedHeadingLabel.Font.Name;
Size:= WizardForm.FinishedHeadingLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.FinishedLabel.AutoSize;
SetBounds(WizardForm.FinishedLabel.Left,WizardForm.FinishedLabel.Top,
WizardForm.FinishedLabel.Width,WizardForm.FinishedLabel.Height);
WordWrap:= WizardForm.FinishedLabel.WordWrap;
Caption:= WizardForm.FinishedLabel.Caption;
with Font do
begin
Color:= WizardForm.FinishedLabel.Font.Color;
Style:= WizardForm.FinishedLabel.Font.Style;
Name:= WizardForm.FinishedLabel.Font.Name;
Size:= WizardForm.FinishedLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

procedure CurPageChanged(CurPageID: Integer);
begin
pnl:= TPanel.Create(WizardForm);
with pnl do
begin
Align:= alClient;
Parent:= WizardForm;
end;
with WizardForm do
begin
with WizardBitmapImage do
begin
Align:= alClient;
Stretch:= True;
Parent:= pnl;
end;
NextButton.Parent:= pnl;
CancelButton.Parent:= pnl;
BackButton.Parent:= pnl;
Bevel.Parent:= pnl;
pnl.Repaint;
end;

if (CurPageID > wpWelcome) and (CurPageID < wpFinished) then
begin
WizardForm.Bevel1.Parent:= pnl;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.PageNameLabel.AutoSize;
SetBounds(WizardForm.PageNameLabel.Left,WizardForm.PageNameLabel.Top,
WizardForm.PageNameLabel.Width,WizardForm.PageNameLabel.Height);
Caption:= WizardForm.PageNameLabel.Caption;
with Font do
begin
Color:= WizardForm.PageNameLabel.Font.Color;
Style:= WizardForm.PageNameLabel.Font.Style;
Name:= WizardForm.PageNameLabel.Font.Name;
Size:= WizardForm.PageNameLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.PageDescriptionLabel.AutoSize;
SetBounds(WizardForm.PageDescriptionLabel.Left,WizardForm.PageDescriptionLabel.Top,
WizardForm.PageDescriptionLabel.Width,WizardForm.PageDescriptionLabel.Height);
Caption:= WizardForm.PageDescriptionLabel.Caption;
with Font do
begin
Color:= WizardForm.PageDescriptionLabel.Font.Color;
Style:= WizardForm.PageDescriptionLabel.Font.Style;
Name:= WizardForm.PageDescriptionLabel.Font.Name;
Size:= WizardForm.PageDescriptionLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;

if CurPageID = wpWelcome then WelcomePage;
if CurPageID = wpSelectDir then SelectDirPage;
if CurPageID = wpReady then ReadyPage;
if CurPageID = wpInstalling then InstallingPage;
if CurPageID = wpFinished then FinishedPage;
end;

madpiton 14-02-2010 09:33 1346694

Привет народ ! Научите пожалуйста делать прекомп, очень хочеться научиться, но самостоятельно как-то не выходит. Есть такой скрипт:

Код:

[Files] 
Source: "precomp\*"; DestDir: "{tmp}"; Flags: ignoreversion overwritereadonly 
Source: "Data\*"; DestDir: "{app}"; Flags: overwritereadonly recursesubdirs ignoreversion createallsubdirs sortfilesbyextension; AfterInstall: RecompressPCF 
 
[_Code] 
procedure RecompressPCF; 
var 
  Tmp, Text, 
  InputFile, OutputFile: string; 
  n, ResultCode: Integer; 
begin 
  if ExtractFileExt(CurrentFileName)='.pcf' then 
  begin 
    InputFile:=ExpandConstant(CurrentFileName); 
    n:=Length(InputFile); 
    while InputFile[n]<>'.' do 
      n:=n-1; 
    OutputFile:=Copy(InputFile, 1, n-1); 
    Text:=WizardForm.StatusLabel.Caption; 
    WizardForm.StatusLabel.Caption:='Рекомпрессия извлеченного файла...'; 
    WizardForm.FileNameLabel.Caption:=OutputFile; 
    Tmp:=ExpandConstant('{tmp}\'); 
    Exec(Tmp+'precomp.exe', '-d -o"'+OutputFile+'" "'+InputFile+'"', Tmp, SW_HIDE, ewWaitUntilTerminated, ResultCode); 
    DeleteFile(InputFile); 
    WizardForm.StatusLabel.Caption:=Text; 
  end;
end;

В секции
Код:

Source: "precomp\*"; DestDir: "{tmp}"; Flags: ignoreversion overwritereadonly
как я понял должны быть *.dll но какие, и где их скачать я не знаю, подскажите пожалуйста что, где и как

В секции "code" опять же как я понял, приведён пример скрипта для распоковки прекомпрессионных файлов (Возвращение файлов *.PCF в их первоначальное состояние\расширение), но каким скриптом сделать такой прекомп, и как я уже написал выше, какие нужны для этого *.dll я не знаю.

Прошу помощи, очень на вас надеюсь.
P.S.
Респект создателям форума и извините за нубство или ещё если что не так...

madpiton 14-02-2010 12:38 1346773

Ещё вычитал что надо батничек создать с определённым именем и параматерами и запустить перед компиляцией в одной папке с обрабатываемыми файлами и необходимыми длл*ками, но чего-то не работает этот способ, ну помогите мне плиз

baikalchanen 14-02-2010 15:36 1346863

Извините,я понимаю что это наверняка не в первый раз задаётся такой вопрос,но ответьте пожалуйста столько страниц в облом читать!
Как в выделенные места вставить свои картинки?
Опишите подробнее если можно, в какую строку надо вставлять путь?
И ещё если не трудно вставить картинку в страницы инстала?(необязательно)

GrizzlyMK 14-02-2010 18:24 1346992

Добрый вечер всем.
Прошу помощи в скрепте нада соединить 2 скрипта на сому установку и на разархивиронание
FreeArc, зарание спасибо.
P.S код для FreeArc не смог вставить слишком много симворов но если нада я выложу.
Код:

#define MyAppName "BioShock 2"
#define PB_ImageFile  "progress1.bmp"

[Setup]
AppId={{E6D22FE1-AB5F-42CA-9480-7F799B96DDD88}
AppName=BioShock 2
AppVerName=BioShock 2
AppPublisher=2k Games
AppPublisherURL=http://www.2k.com/
AppVersion=1.0.0.1
;AppReadmeFile={group}\Readme.lnk
DefaultDirName={pf}\BioShock 2
DefaultGroupName=BioShock 2
OutputDir=D:\
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
DiskSpanning=yes
SlicesPerDisk=3
DiskSliceSize=1566000000
DisableReadyPage=True

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

[CustomMessages]
russian.Welcome1=Вас приветствует Мастер установки игры
russian.Welcome2=Программа установит игру {#MyAppName} на Ваш компьютер.%n%nРекомендуется закрыть антивирусные пакеты, а также все прочие приложения перед тем, как продолжить.%n%nНажмите «Далее», чтобы продолжить, или  «Отмена», чтобы выйти из программы установки.
russian.Space=Доступно места на диске:
russian.Space1=Требуется места на диске:
russian.Status=Пожалуйста, подождите, пока игра установится на Ваш компьютер.
russian.DescrLbl1=В какую папку Вы хотите установить {#MyAppName}?
russian.Language=Язык игры:
russian.StartMenuLbl=Нажмите «Установить», чтобы продолжить. Если Вы хотите выбрать другую папку, нажмите «Обзор».
russian.Finished1=Установка игры {#MyAppName} успешно завершена.
russian.Finished2=Игра {#MyAppName} была успешно установлена на Ваш компьютер. Для ее запуска выберите соответствующий значек в меню «Пуск» или ярлык на Рабочем столе.
russian.Finished3=Нажмите «Завершить», чтобы выйти из программы установки.
russian.DirectX=Обновить DirectX
russian.DirectXInstall=Идет обновление DirectX...
russian.Icons=Добавить ярлык на Рабочий стол
russian.Uninstall=Удалить {#MyAppName}

[Files]
Source: "button.bmp"; DestDir: {tmp}; Flags: dontcopy
Source: "sound.mp3"; DestDir: "{tmp}"; Flags: dontcopy noencryption nocompression
Source: "MusicButton.bmp"; DestDir: "{tmp}"; Flags: dontcopy
Source: "bass.dll"; DestDir: "{tmp}"; Flags: dontcopy
Source: "ISSkin.dll"; DestDir: {app}; Flags: dontcopy
Source: "InnoCallback.dll"; Flags: dontcopy ignoreversion
Source: "Tiger.cjstyles"; DestDir: {tmp}; Flags: dontcopy
Source: {#PB_ImageFile}; DestDir: "{tmp}"; Flags: recursesubdirs ignoreversion

Source: "1.bmp"; Flags: dontcopy
Source: "2.bmp"; Flags: dontcopy
Source: "3.bmp"; Flags: dontcopy
Source: "4.bmp"; Flags: dontcopy
Source: "5.bmp"; Flags: dontcopy

;Source: "C:\Program Files\EA Games\Need for Speed Undercover\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; BeforeInstall: ProgressExt();


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


[_Code]

type
    TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);

const
  ButtonWidth = 80;
  ButtonHeight = 23;

  bidBack = 0;
  bidNext = 1;
  bidCancel = 2;
  bidDirBrowse = 3;
  bidGroupBrowse = 4;
  BASS_ACTIVE_PLAYING = 1;
  BASS_ACTIVE_STALLED = 2;
  BASS_ACTIVE_PAUSED = 3;
  BASS_SAMPLE_LOOP = 4;

var
  ButtonPanel: array [0..4] of TPanel;
  ButtonImage: array [0..4] of TBitmapImage;
  ButtonLabel: array [0..4] of TLabel;
  SetupFormPanel: TPanel;
 
  TimerID: LongWord;
  intOldCurrWidth : Integer;
  ProgressBar_BitmapImage: TBitmapImage;
  ProgressBar_Edit : TEdit;
  ProgressBar_ImageHeight : integer;

  LanguageLabel1: TLabel;
  LanguageLabel2: TLabel;

  rus: Boolean;
  pnl_ru, pnl_us: TPanel;

  mp3Handle: HWND;
  mp3Name: String;

  PlayButton, PauseButton, StopButton: TPanel;
  PlayImage, PauseImage: TBitmapImage;
  PlayLabel, PauseLabel: TLabel;
  MouseLabel: Tlabel;

  Welcome, Parameters, StartMenu, Installing, Finish,
 
  IconsLabel, DirectXLabel, GroupLabel,
  SelectDirLabel, SelectDirBrowseLabel,
  PageNameLabel1, PageNameLabel2, PageNameLabel3,
  PageDescriptionLabel1, PageDescriptionLabel2, PageDescriptionLabel3,
  StatusLabel, FilenameLabel, NeedSpaceLabel,FreeSpaceLabel,
  WelcomeLabel1, WelcomeLabel2,FinishedLabel, FinishedHeadingLabel,
  SelectStartMenuFolderLabel, SelectStartMenuFolderBrowseLabel, ReadyLabel, NoIconsLabel: TLabel;
  DirectX, Icons, Group: TCheckBox;
  NeedSize:Integer;
  FreeMB, TotalMB: Cardinal;
  BmpFile: TBitmapImage;

function DetectPage(CurPageID: Integer): TNewNotebookPage;
begin
  case CurPageID of
    wpWelcome: Result:= WizardForm.WelcomePage;
    wpSelectDir: Result:= WizardForm.SelectDirPage;
    wpSelectProgramGroup: Result:= WizardForm.SelectProgramGroupPage;
    wpInstalling: Result:= WizardForm.InstallingPage;
    wpFinished: Result:= WizardForm.FinishedPage;
  end;
end;

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 InstallDirectX: Boolean;
begin
  Result:= DirectX.Checked;
end;

function CreateIcons: Boolean;
begin
Result:=Icons.Checked;
end;

function GroupIcons: Boolean;
begin
  Result:=Group.Checked;
end;

procedure DirectXLabelOnClick(Sender: TObject);
begin
  if DirectX.Checked = False then
    DirectX.Checked:= True else
    DirectX.Checked:= False;
end;

procedure IconsOnClick(Sender: TObject);
begin
  if Icons.Checked = False then
    Icons.Checked:= True else
    Icons.Checked:= False;
end;

procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
FreeSpaceLabel.Caption := ExpandConstant('{cm:SPACE} ')+ NumToStr(round(FreeMB/1024*100)/100) + ' GB' else
FreeSpaceLabel.Caption := ExpandConstant('{cm:SPACE} ')+ NumToStr(FreeMB)+ ' MB';
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False else
WizardForm.NextButton.Enabled := True;
end;

procedure GetNeedSpaceCaption;
begin
if NeedSize > 1024 then
NeedSpaceLabel.Caption := ExpandConstant('{cm:SPACE1} ')+ NumToStr(round(NeedSize/1024*100)/100) + ' GB' else
NeedSpaceLabel.Caption := ExpandConstant('{cm:SPACE1} ')+ NumToStr(NeedSize)+ ' MB';
end;

procedure ProgressExt();
begin
FilenameLabel.Caption:= ExpandConstant(ExtractFileDir(CurrentFilename)) + '\' + ExtractFilename(CurrentFilename);
end;

procedure ProgressExt2();
begin
FilenameLabel.Caption:= ExpandConstant('{cm:DirectXInstall}')
end;

procedure InitializeWizard1();
begin

  ExtractTemporaryFile('1.bmp');
  ExtractTemporaryFile('2.bmp');
  ExtractTemporaryFile('3.bmp');
  ExtractTemporaryFile('4.bmp');
  ExtractTemporaryFile('5.bmp');

  NeedSize:= 5428;

  BmpFile:= TBitmapImage.Create(WizardForm);
  BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
  BmpFile.Top:= ScaleY(0);
  BmpFile.Left:= ScaleX(0);
  BmpFile.Width:= ScaleX(790);
  BmpFile.Height:= ScaleY(533);
  BmpFile.Stretch:= true;
  BmpFile.Parent:= WizardForm.WelcomePage;

  BmpFile:= TBitmapImage.Create(WizardForm);
  BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\2.bmp'));
  BmpFile.Top:= ScaleY(0);
  BmpFile.Left:= ScaleX(0);
  BmpFile.Width:= ScaleX(790);
  BmpFile.Height:= ScaleY(533);
  BmpFile.Stretch:= true;
  BmpFile.Parent:= WizardForm.SelectDirPage;

  BmpFile:= TBitmapImage.Create(WizardForm);
  BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\3.bmp'));
  BmpFile.Top:= ScaleY(0);
  BmpFile.Left:= ScaleX(0);
  BmpFile.Width:= ScaleX(790);
  BmpFile.Height:= ScaleY(533);
  BmpFile.Stretch:= true;
  BmpFile.Parent:= WizardForm.SelectProgramGroupPage;

  BmpFile:= TBitmapImage.Create(WizardForm);
  BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\4.bmp'));
  BmpFile.Top:= ScaleY(0);
  BmpFile.Left:= ScaleX(0);
  BmpFile.Width:= ScaleX(790);
  BmpFile.Height:= ScaleY(533);
  BmpFile.Stretch:= true;
  BmpFile.Parent:= WizardForm.InstallingPage;

  BmpFile:= TBitmapImage.Create(WizardForm);
  BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\5.bmp'));
  BmpFile.Top:= ScaleY(0);
  BmpFile.Left:= ScaleX(0);
  BmpFile.Width:= ScaleX(790);
  BmpFile.Height:= ScaleY(533);
  BmpFile.Stretch:= true
  BmpFile.Parent:= WizardForm.FinishedPage;

  WizardForm.ClientWidth:=ScaleX(790);
  WizardForm.ClientHeight:=ScaleY(533);
  WizardForm.Font.Color:=$ffffff;
  WizardForm.Center;

with WizardForm do
begin
  PageNameLabel.Hide;
  PageDescriptionLabel.Hide;
  WelcomeLabel1.Hide;
  WelcomeLabel2.Hide;
  DiskSpaceLabel.Hide;
  SelectDirBitmapImage.Hide;
  SelectDirBrowseLabel.Hide;
  SelectDirLabel.Hide;
  FinishedHeadingLabel.Hide;
  FinishedLabel.Hide;
  MainPanel.Hide;
  FilenameLabel.Hide;
  StatusLabel.Hide;
  SelectStartMenuFolderLabel.Hide;
  SelectStartMenuFolderBrowseLabel.Hide;
  ReadyLabel.Hide;
end;

with WizardForm do
begin
  InnerNotebook.Left := ScaleX(0);
  InnerNotebook.Top := ScaleY(0);
  InnerNotebook.Width := ScaleX(790);
  InnerNotebook.Height := ScaleY(533);
  OuterNotebook.Left := ScaleX(0);
  OuterNotebook.Top := ScaleY(0);
  OuterNotebook.Width := ScaleX(790);
  OuterNotebook.Height := ScaleY(533);
end;


WelcomeLabel1:= TLabel.Create(WizardForm);
with WelcomeLabel1 do
begin
  Left:= ScaleX(70);
  Top:= ScaleY(180);
  Width:= ScaleX(650);
  Height:= ScaleY(65);
  AutoSize:= false;
  Alignment := taCenter;
  Transparent:= true;
  WordWrap:= true;
  Font.Name:='Georgia';
  Font.Size:= 16;
  Font.Color:=ClWhite;
  Font.Style := [fsBold];
  Parent:= WizardForm.WelcomePage;
  Caption:= ExpandConstant('{cm:Welcome1}')+#13+('{#MyAppName}');
end;

WelcomeLabel2:=TLabel.Create(WizardForm);
with WelcomeLabel2 do
begin
  Top:= ScaleY(270);
  Left:= ScaleX(70);
  Width:= ScaleX(650);
  Height:= ScaleY(200);
  AutoSize:= false;
  WordWrap:= true;
  Font.Name:= 'Georgia';
  Font.Size:= 11
  Font.Style := [fsBold, fsItalic];
  Font.Color:=ClWhite;
  Transparent:= true;
  Parent:= WizardForm.WelcomePage;
  Caption:= ExpandConstant('{cm:Welcome2}');
end;


  PageNameLabel1:= TLabel.Create(WizardForm);
  with PageNameLabel1 do
  begin
  Left:= ScaleX(65);
  Top:= ScaleY(185);
  Width:= ScaleX(300);
  Height:= ScaleY(30);
  AutoSize:= False;
  Font.Name:= 'Georgia'
  Font.Size:= 13;
  Font.Style:= [fsBold];
  Font.Color:= ClWhite;
  Transparent := True;
  Parent:= WizardForm.SelectDirPage;
  end;

  PageDescriptionLabel1:= TLabel.Create(WizardForm);
  with PageDescriptionLabel1 do
  begin
  Left:=ScaleX(95);
  Top:= ScaleY(215);
  Width:= ScaleX(600);
  Height:= ScaleY(50);
  AutoSize:= False;
  Font.Name:= 'Georgia'
  Font.Size:= 10;
  Font.Style:= [fsBold, fsItalic];
  Font.Color:= ClWhite;
  Wordwrap:= True;
  Transparent := True;
  Parent:= WizardForm.SelectDirPage;
  end;

  SelectDirBrowseLabel:= TLabel.Create(WizardForm);
  with SelectDirBrowseLabel do
  begin
  Caption:= WizardForm.SelectDirBrowseLabel.Caption;
  Left:= ScaleX(120);
  Top:= ScaleY(250);
  Width:= ScaleX(600);
  Height:= ScaleY(50);
  AutoSize:= False;
  WordWrap:= True;
  Font.Name:= 'Georgia'
  Font.Size:= 10;
  Font.Style:= [fsBold, fsItalic];
  Font.Color:= ClWhite;
  Transparent:= True;
  Parent:= WizardForm.SelectDirPage;
end;
 
  with WizardForm do
  begin
    DirBrowseButton.Top:= ScaleY(305);

    DirEdit.Left:= ScaleX(120);
    DirEdit.Top:= ScaleY(305);
    DirEdit.Width:= ScaleX(460);
    DirEdit.Font.Size:= 9;
  end;
 
  DirectX:= TCheckBox.Create(WizardForm);
  with DirectX do
  begin
  Parent:= WizardForm.SelectDirPage;
  Left:= ScaleX(65);
  Top:= ScaleY(340);
  Width:= ScaleX(14);
  Height:= ScaleY(14);
  TabOrder:= 0;
  Checked:= False;
end;

  DirectXLabel:= TLabel.Create(WizardForm);
  with DirectXLabel do
  begin
  Caption:= ExpandConstant('{cm:DirectX}');
  Left:= ScaleX(90);
  Top:= ScaleY(340);
  Width:= ScaleX(150);
  Height:= ScaleY(13);
  Font.Name:= 'Georgia';
  Font.Size:= 8;
  Font.Style:= [fsBold, fsItalic];
  Font.Color:= ClWhite;
  Transparent := True;
  Parent:= WizardForm.SelectDirPage;
  OnClick:= @DirectXLabelOnClick;
end;

  Icons:= TCheckBox.Create(WizardForm);
  with Icons do
  begin
  Parent:= WizardForm.SelectDirPage;
  Left:= ScaleX(65);
  Top:= ScaleY(360);
  Width:= ScaleX(14);
  Height:= ScaleY(14);
  TabOrder:= 2;
  Checked:= False;
end;

  IconsLabel:= TLabel.Create(WizardForm);
  with IconsLabel do
  begin
  Caption:=ExpandConstant('{cm:Icons}');
  Left:= ScaleX(90);
  Top:= ScaleY(360);
  Width:= ScaleX(150);
  Height:= ScaleY(13);
  Font.Name:= 'Georgia';
  Font.Size:= 8;
  Font.Style:= [fsBold, fsItalic];
  Font.Color:= ClWhite;
  Transparent := True;
  Parent:= WizardForm.SelectDirPage;
  OnClick:= @IconsOnClick;
end;

  NeedSpaceLabel:= TLabel.Create(WizardForm);
  with NeedSpaceLabel do
  begin
  Parent:= WizardForm.SelectDirPage;
  Left:= ScaleX(65);
  Top:= ScaleY(420);
  Width:= ScaleX(209);
  Height:= ScaleY(13);
  Font.Name:= 'Georgia';
  Font.Size:= 8;
  Font.Style:= [fsBold, fsItalic];
  Font.Color:= ClWhite;
  Transparent:= True;
  end;
 
  FreeSpaceLabel:= TLabel.Create(WizardForm);
  with FreeSpaceLabel do
  begin
  Parent:= WizardForm.SelectDirPage;
  Left:= ScaleX(65);
  Top:= ScaleY(440);
  Width:= ScaleX(209);
  Height:= ScaleY(13);
  Font.Name:= 'Georgia';
  Font.Size:= 8;
  Font.Style:= [fsBold, fsItalic];
  Font.Color:= ClWhite;
  Transparent:= True;
  end;
 
  WizardForm.DirEdit.OnChange:= @GetFreeSpaceCaption;
  WizardForm.DirEdit.Text:= WizardForm.DirEdit.Text + #0;


  PageNameLabel2:= TLabel.Create(WizardForm);
  with PageNameLabel2 do
  begin
  Left:= ScaleX(65);
  Top:= ScaleY(185);
  Width:= ScaleX(350);
  Height:= ScaleY(30);
  AutoSize:= False;
  Font.Name:= 'Georgia';
  Font.Size:= 13;
  Font.Style:= [fsBold];
  Font.Color:= ClWhite;
  Transparent := True;
  Parent:= WizardForm.SelectProgramGroupPage;
end;

  PageDescriptionLabel2:= TLabel.Create(WizardForm);
  with PageDescriptionLabel2 do
  begin
  Left:=ScaleX(95);
  Top:= ScaleY(215);
  Width:= ScaleX(600);
  Height:= ScaleY(50);
  AutoSize:= False;
  Font.Name:= 'Georgia'
  Font.Size:= 10;
  Font.Style:= [fsBold, fsItalic];
  Font.Color:= ClWhite;
  Wordwrap:= True;
  Transparent := True;
  Parent:= WizardForm.SelectProgramGroupPage;
  end;

  SelectStartMenuFolderBrowseLabel:=TLabel.Create(WizardForm)
  with SelectStartMenuFolderBrowseLabel do
  begin
  Left:= ScaleX(120);
  Top:= ScaleY(250);
  Width:= ScaleX(600);
  Height:= ScaleY(50);
  AutoSize:= False;
  WordWrap:= True;
  Font.Name:= 'Georgia';
  Font.Size:= 10;
  Font.Style:= [fsBold, fsItalic];
  Font.Color:= ClWhite;
  WordWrap:=True
  Transparent:=True
  Caption:=ExpandConstant('{cm:StartMenuLbl}')
  Parent:=WizardForm.SelectProgramGroupPage
  end;

  with WizardForm do
  begin
    GroupEdit.Left:= ScaleX(120);
    GroupEdit.Top:= ScaleY(305);
    GroupEdit.Width:= ScaleX(460);
    GroupEdit.Font.Size:=9

    GroupBrowseButton.Top:= ScaleY(305);
end;
 

  PageNameLabel3:= TLabel.Create(WizardForm);
  with PageNameLabel3 do
  begin
  Left:= ScaleX(65);
  Top:= ScaleY(185);
  Width:= ScaleX(150);
  Height:= ScaleY(20);
  AutoSize:= False;
  Font.Name:= 'Georgia';
  Font.Size:= 13;
  Font.Style:= [fsBold];
  Font.Color:= ClWhite;
  Transparent := True;
  Parent:= WizardForm.InstallingPage;
end;

  StatusLabel:= TLabel.Create(WizardForm);
  with StatusLabel do
  begin
  Left:=ScaleX(95);
  Top:= ScaleY(215);
  Width:= ScaleX(600);
  Height:= ScaleY(50);
  AutoSize:= False;
  Font.Name:= 'Georgia';
  Font.Size:= 10;
  Font.Style:= [fsBold, fsItalic];
  Font.Color:= ClWhite;
  Transparent := True;
  Parent:= WizardForm.InstallingPage;
  Caption:= ExpandConstant('{cm:Status}')
end;

  FilenameLabel:= TLabel.Create(WizardForm);
  with FilenameLabel do
  begin
  Left:= ScaleX(65);
  Top:= ScaleY(275);
  Width:= ScaleX(625);
  Height:= ScaleY(20);
  AutoSize:= False;
  Font.Name:= 'Georgia'
  Font.Size:= 10;
  Font.Style:= [fsBold, fsItalic];
  Font.Color:= ClWhite;
  Transparent := True;
  Parent:= WizardForm.InstallingPage;
end;

  with WizardForm do
  begin
    ProgressGauge.Top:=ScaleY(310);
    ProgressGauge.Left:=ScaleX(100);
    ProgressGauge.Width:=ScaleX(590);
  end;


  FinishedHeadingLabel:=TLabel.Create(WizardForm);
  with FinishedHeadingLabel do
  begin
  Left:= ScaleX(70);
  Top:= ScaleY(180);
  Width:= ScaleX(650);
  Height:= ScaleY(65)
  AutoSize:= false;
  Alignment := taCenter;
  WordWrap:= true;
  Font.Name:='Georgia';
  Font.Size:= 16;
  Font.Color:=ClWhite;
  Font.Style := [fsBold];
  Transparent:= true;
  Parent:= WizardForm.FinishedPage;
  Caption:= ExpandConstant('{cm:Finished1}');
end;

  FinishedLabel:= TLabel.Create(WizardForm);
  with FinishedLabel do
  begin
  Top:= ScaleY(270);
  Left:= ScaleX(70);
  Width:= ScaleX(650);
  Height:= ScaleY(200);
  AutoSize:= false;
  WordWrap:= true;
  Font.Name:= 'Georgia'
  Font.Size:= 11;
  Font.Style := [fsBold, fsItalic];
  Font.Color:=ClWhite;
  Transparent:= true;
  Parent:= WizardForm.FinishedPage;
  Caption:= ExpandConstant('{cm:Finished2}')+#13#13+ExpandConstant('{cm:Finished3}');
end;
end;


procedure CurPageChanged1(CurPageID: Integer);
begin
  PageNameLabel1.Caption:= WizardForm.PageNameLabel.Caption;
  PageDescriptionLabel1.Caption:= WizardForm.PageDescriptionLabel.Caption;
  PageNameLabel2.Caption:= WizardForm.PageNameLabel.Caption;
  PageDescriptionLabel2.Caption:= WizardForm.PageDescriptionLabel.Caption;
  PageNameLabel3.Caption:= WizardForm.PageNameLabel.Caption;

  if CurPageID=wpSelectProgramGroup then
  begin
  If WizardForm.FindComponent('NextButton') is TButton
  then
  TButton(WizardForm.FindComponent('NextButton')).Caption:='Установить';
end;
end;


procedure ButtonLabelClick(Sender: TObject);
var
  Button: TButton;
begin
  ButtonImage[TLabel(Sender).Tag].Left := 0;
  case TLabel(Sender).Tag of
    bidBack: Button := WizardForm.BackButton;
    bidNext: Button := WizardForm.NextButton;
    bidCancel: Button := WizardForm.CancelButton;
    bidDirBrowse: Button := WizardForm.DirBrowseButton;
    bidGroupBrowse: Button := WizardForm.GroupBrowseButton;
  else
    Exit
  end
  Button.OnClick(Button);
end;

procedure ButtonLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if ButtonLabel[TLabel(Sender).Tag].Enabled then
    ButtonImage[TLabel(Sender).Tag].Left := -ScaleX(ButtonWidth);
end;

procedure ButtonLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  ButtonImage[TLabel(Sender).Tag].Left := 0;
end;

procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
  Image: TBitmapImage;
  Panel: TPanel;
  Labl: TLabel;

begin
  Panel := TPanel.Create(WizardForm);
  Panel.Left := AButton.Left;
  Panel.Top := AButton.Top;
  Panel.Width := AButton.Width;
  Panel.Height := AButton.Height;
  Panel.Tag := AButtonIndex;
  Panel.Parent := AButton.Parent;
  ButtonPanel[AButtonIndex] := Panel;

  Image := TBitmapImage.Create(WizardForm);
  Image.Width := ScaleX(160);
  Image.Height := ScaleY(23);
  Image.Enabled := False;
  Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\button.bmp'));
  Image.Stretch := True;
  Image.Parent := Panel;
  ButtonImage[AButtonIndex] := Image;

  with TLabel.Create(WizardForm) do begin
    Tag := AButtonIndex;
    Parent := Panel;
    Width := Panel.Width;
    Height := Panel.Height;
    Transparent := True;
    OnClick := @ButtonLabelClick;
    OnDblClick := @ButtonLabelClick;
    OnMouseDown := @ButtonLabelMouseDown;
    OnMouseUp := @ButtonLabelMouseUp;
  end;

  Labl := TLabel.Create(WizardForm);
  Labl.Autosize := True;
  Labl.Alignment := taCenter;
  Labl.Tag := AButtonIndex;
  Labl.Transparent := True;
  Labl.Font.Color := clWhite;
  Labl.Font.Style := [fsBold];
  Labl.Caption := AButton.Caption;
  Labl.OnClick := @ButtonLabelClick;
  Labl.OnDblClick := @ButtonLabelClick;
  Labl.OnMouseDown := @ButtonLabelMouseDown;
  Labl.OnMouseUp := @ButtonLabelMouseUp;
  Labl.Parent := Panel;
  ButtonLabel[AButtonIndex] := Labl;
end;

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
  ButtonLabel[AButtonIndex].Caption := AButton.Caption;
  ButtonPanel[AButtonIndex].Visible := AButton.Visible;
  ButtonLabel[AButtonIndex].Enabled := Abutton.Enabled;
end;

procedure InitializeWizard2();
begin
  WizardForm.BackButton.SetBounds(WizardForm.ClientWidth - ScaleX(8) * 37,
    WizardForm.ClientHeight - ScaleY(ButtonHeight) * 2, ScaleX(ButtonWidth), ScaleY(ButtonHeight));

  WizardForm.NextButton.SetBounds(WizardForm.ClientWidth - ScaleX(8) * 26,
    WizardForm.ClientHeight - ScaleY(ButtonHeight) * 2, ScaleX(ButtonWidth), ScaleY(ButtonHeight));

  WizardForm.CancelButton.SetBounds(WizardForm.ClientWidth - ScaleX(8)* 15,
    WizardForm.ClientHeight - ScaleY(ButtonHeight) * 2, ScaleX(ButtonWidth), ScaleY(ButtonHeight));
 
  WizardForm.DirBrowseButton.SetBounds(WizardForm.ClientWidth - ScaleX(5) * 30,
    WizardForm.ClientHeight - ScaleY(ButtonHeight) * 10, ScaleX(ButtonWidth), ScaleY(ButtonHeight));

  WizardForm.GroupBrowseButton.SetBounds(WizardForm.ClientWidth - ScaleX(5) * 30,
    WizardForm.ClientHeight - ScaleY(ButtonHeight) * 10, ScaleX(ButtonWidth), ScaleY(ButtonHeight));

  ExtractTemporaryFile('button.bmp')
  LoadButtonImage(WizardForm.BackButton,bidBack)
  LoadButtonImage(WizardForm.NextButton,bidNext)
  LoadButtonImage(WizardForm.CancelButton,bidCancel)
  LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
  LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;

procedure CurPageChanged2(CurPageID: Integer);
begin

  UpdateButton(WizardForm.BackButton,bidBack)
  UpdateButton(WizardForm.NextButton,bidNext)
  UpdateButton(WizardForm.CancelButton,bidCancel)

  ButtonLabel[bidBack].Left := ButtonPanel[bidBack].Width div 2 - ButtonLabel[bidBack].Width div 2;
  ButtonLabel[bidBack].Top := ButtonPanel[bidBack].Height div 2 - ButtonLabel[bidBack].Height div 2;
  ButtonLabel[bidNext].Left := ButtonPanel[bidNext].Width div 2 - ButtonLabel[bidNext].Width div 2;
  ButtonLabel[bidNext].Top := ButtonPanel[bidNext].Height div 2 - ButtonLabel[bidNext].Height div 2;
  ButtonLabel[bidCancel].Left := ButtonPanel[bidCancel].Width div 2 - ButtonLabel[bidCancel].Width div 2;
  ButtonLabel[bidCancel].Top := ButtonPanel[bidCancel].Height div 2 - ButtonLabel[bidCancel].Height div 2;
  ButtonLabel[bidDirBrowse].Left := ButtonPanel[bidDirBrowse].Width div 2 - ButtonLabel[bidDirBrowse].Width div 2;
  ButtonLabel[bidDirBrowse].Top := ButtonPanel[bidDirBrowse].Height div 2 - ButtonLabel[bidDirBrowse].Height div 2;
  ButtonLabel[bidGroupBrowse].Left := ButtonPanel[bidGroupBrowse].Width div 2 - ButtonLabel[bidGroupBrowse].Width div 2;
  ButtonLabel[bidGroupBrowse].Top := ButtonPanel[bidGroupBrowse].Height div 2 - ButtonLabel[bidGroupBrowse].Height div 2;

  if CurPageID = wpSelectDir then
  begin
  GetNeedSpaceCaption;
end;
end;



Procedure InitializeWizard3();
Var
CurPageID: Integer;
begin
  Welcome := TLabel.Create(WizardForm);
  Welcome.Top := ScaleY(94);
  Welcome.Left := ScaleX(35);
  Welcome.Caption := 'Приветствие';
  Welcome.Transparent := True;
  Welcome.Font.Size := 10;
  Welcome.Font.Name := 'Arial';
  Welcome.Font.Style:= [fsBold];

  Parameters := TLabel.Create(WizardForm);
  Parameters.Top := ScaleY(94);
  Parameters.Left := ScaleX(201);
  Parameters.Caption:= 'Параметры';
  Parameters.Transparent := True;
  Parameters.Font.Size := 10;
  Parameters.Font.Name := 'Arial';
  Parameters.Font.Style:= [fsBold];

  StartMenu := TLabel.Create(WizardForm);
  StartMenu.Top := ScaleY(94);
  StartMenu.Left := ScaleX(355);
  StartMenu.Caption := 'Меню "Пуск"';
  StartMenu.Transparent := True;
  StartMenu.Font.Size := 10;
  StartMenu.Font.Name := 'Arial';
  StartMenu.Font.Style:= [fsBold];

  Installing := TLabel.Create(WizardForm);
  Installing.Top := ScaleY(94);
  Installing.Left := ScaleX(520);
  Installing.Caption := 'Установка';
  Installing.Transparent := True;
  Installing.Font.Size := 10;
  Installing.Font.Name := 'Arial';
  Installing.Font.Style:= [fsBold];


  Finish := TLabel.Create(WizardForm);
  Finish.Left := 400;
  Finish.Top := ScaleY(94);
  Finish.Left := ScaleX(670);
  Finish.Caption := 'Завершение';
  Finish.Transparent := True;
  Finish.Font.Size := 10;
  Finish.Font.Name := 'Arial';
  Finish.Font.Style:= [fsBold];
end;

procedure CurPageChanged3(CurPageID: Integer);
begin
  Welcome.Font.Color := -16777199;
  Parameters.Font.Color := -16777199;
  StartMenu.Font.Color := -16777199;
  Installing.Font.Color := -16777199;
  Finish.Font.Color := -16777199;


  if (CurPageID= wpWelcome)or(CurPageID= wpSelectDir)or (CurPageID= wpSelectProgramGroup)or(CurPageID= wpInstalling)or(CurPageID= wpFinished) then
  Welcome.Parent := DetectPage(CurPageID);
  Parameters.Parent := DetectPage(CurPageID);
  StartMenu.Parent :=  DetectPage(CurPageID);
  Installing.Parent := DetectPage(CurPageID);
  Finish.Parent := DetectPage(CurPageID);

if CurPageID = wpWelcome then
begin
  Welcome.Font.Color := clWhite;
end;

if CurPageID = wpSelectDir then
begin
  Parameters.Font.Color := clWhite;
end;

if CurPageID = wpSelectProgramGroup then
begin
  StartMenu.Font.Color := clWhite;
end;

if CurPageID = wpInstalling then
begin
  Installing.Font.Color := clWhite;
end;

if CurPageID = wpFinished then
begin
  Finish.Font.Color := clWhite;
end;
end;



procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
  external 'LoadSkin@files:isskin.dll stdcall';

procedure UnloadSkin();
  external 'UnloadSkin@files:isskin.dll stdcall';

function ShowWindow(hWnd: Integer; uType: Integer): Integer;
  external 'ShowWindow@user32.dll stdcall';

function InitializeSetup(): Boolean;
begin
  ExtractTemporaryFile('BASS.dll');
  Result := True;
  ExtractTemporaryFile('Tiger.cjstyles');
        LoadSkin(ExpandConstant('{tmp}\Tiger.cjstyles'), '');
        Result := True;
end;


function WrapTimerProc(callback:TProc; paramcount:integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
if CurPageID = wpInstalling then
ProgressBar_Edit.Show;
end;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
var
    CurrWidth : single;
begin
    with WizardForm.ProgressGauge do
    begin
        CurrWidth := ( Position * Width ) / Max;
        if intOldCurrWidth <> Round( CurrWidth ) then
        begin
            intOldCurrWidth := Round( CurrWidth );
            ProgressBar_BitmapImage.SetBounds( 0, 0, intOldCurrWidth, ProgressBar_ImageHeight );
            ProgressBar_BitmapImage.Show();
    end;
  end;
end;

procedure CurPageChanged4(CurPageID: Integer);
var
    pfunc: LongWord;
begin
    if CurPageID = wpInstalling then
    begin
        pfunc := WrapTimerProc( @OnTimer, 4 );
        TimerID := SetTimer( 0, 0, 100, pfunc );
        intOldCurrWidth := 0;
    end;

    if CurPageID = wpFinished then
        KillTimer( 0, TimerID );
end;

Procedure InitializeWizard6();
begin
    ProgressBar_Edit := TEdit.Create( WizardForm );
    with ProgressBar_Edit do
    begin
        Left := WizardForm.ProgressGauge.Left;
        Top := WizardForm.ProgressGauge.Top;
        Width := WizardForm.ProgressGauge.Width;
        Height := WizardForm.ProgressGauge.Height;
        Enabled := False;
        ReadOnly := True;
        Color := 10789024;
        Parent := WizardForm.InstallingPage;
    end;

    ExtractTemporaryFile( '{#PB_ImageFile}' );
    ProgressBar_BitmapImage := TBitmapImage.Create( WizardForm );
    with ProgressBar_BitmapImage do
    begin
        Bitmap.LoadFromFile( ExpandConstant( '{tmp}\' ) + '{#PB_ImageFile}' );
        Parent := ProgressBar_Edit;
        Stretch := True;
        Hide;
    end;
   
    ProgressBar_ImageHeight := ProgressBar_Edit.Height - 2;
    WizardForm.ProgressGauge.Hide;
end;

procedure DeinitializeSetup();
begin
  KillTimer( 0, TimerID );
  ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
        UnloadSkin();
end;



procedure CurPageChanged(CurPageID: Integer);
begin
  CurPageChanged1(CurPageID);
  CurPageChanged2(CurPageID);
  CurPageChanged3(CurPageID);
  CurPageChanged4(CurPageID);
end;

Procedure InitializeWizard();
begin
  InitializeWizard1();
  InitializeWizard2();
  InitializeWizard3();
  InitializeWizard6();
end;


Bond01 14-02-2010 18:54 1347014

GrizzlyMK, какой то странный скрипт, разве это inno?

GrizzlyMK 14-02-2010 18:58 1347018

Если-б был он не Inno то я бы обратился в другой форум ))

kro44i 15-02-2010 02:56 1347317

Мне кто-нибудь ответит на мой вопрос?
Цитата:

Цитата kro44i
Подскажите скрипт, чтобы был один установочный файл (Setup.exe+.arc).»


Merlin_jr 15-02-2010 05:04 1347341

Приветствую.

Подскажите как средствами Inno Setup
  1. определить версию ЕХЕ-файла лежащего в каталоге назначения
  2. вытащить первую строку из текстового файла и сравнить её значение с "эталоном".

Serega 15-02-2010 12:10 1347487

Цитата:

Цитата Merlin_jr
Подскажите как средствами Inno Setup »

Пример скрипта
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
function GetFileVersion(const FileName: string): string;
// выводит версию файла в виде строки
var
  Version: string;
begin
  Result:= 'не определена.';
  if GetVersionNumbersString(FileName, Version) then
  Result:= Version;
end;

function SelectFileName: string;
// получим имя выбранного пользователем файла
var
  FileName: string;
begin
  FileName:= '';
  GetOpenFileName('Выберите файл для обработки...',
                  FileName,
                  ExtractFilePath(ExpandConstant('srcexe')),
                  'Текстовый документ (*.txt)|*.txt|Все файлы|*.*',
                  'txt');
  Result:= FileName;
end;

function ReadFileName(const FileName, SearchString: string): string;
// получим искомую строку
var
  S: TArrayOfString;
  i: Integer;
begin
  Result:= '';
  if not FileExists(FileName) then Exit; // если файла нет, выходим
  LoadStringsFromFile(FileName, S); // загружаем файл
  for i:= 0 to GetArrayLength(S)-1 do // пробежимся по строкам
    if Pos(SearchString, S[i]) > 0 then
      begin
        Result:= S[i];
        Exit;
      end;
end;

function InitializeSetup(): Boolean;
var
  Search, FileName: string;
begin
  // получение версии файла
  FileName:= ExpandConstant('{pf}\Inno Setup 5\Examples\MyProg.exe');
  MsgBox('Версия ' + ExtractFileName(FileName) + ' - ' + GetFileVersion(FileName), mbInformation, MB_OK);

  // обработка текстового файла
  Search:= ReadFileName(SelectFileName, 'карандаш');
  if Search <> '' then
    MsgBox(Search, mbInformation, MB_OK);
end;


Пример текстового файла
Код:

fast батут
begin go easter черный
mother happy транквилизатор сигнализация green суспензия diablo rocet
карандаш пистолет автомат
kaspersky fusion черенок
столб application


svensoft 15-02-2010 19:35 1347853

Вчера посредством inno сделал своей милой электронный подарок. Если кому интересно данное произведение, вот тут можно взять (ссылка актуальна 3 дня)

BooSla 16-02-2010 07:58 1348282

Подскажите, пожалуйста, как отключить сообщение о завершении деинсталляции (в секции [messages] оно называется UninstalledAll). То, которое "Программа %1 была успешно удалена с Вашего компьютера". Спасибо!

Vengeance 16-02-2010 12:07 1348435

Код:

[Setup]
SourceDir=.
OutputDir=Setup
AppName=Half-Life Games
AppVerName=Half-Life Games
AppVersion=Half-Life Games
DefaultDirName={pf}\C \Games\Half-Life
DefaultGroupName=Half-Life Games
AllowNoIcons=yes
OutputBaseFilename=setup
WindowVisible=no
WindowShowCaption=no
WindowResizable=no
Compression=lzma/normal
DiskSpanning=yes
DiskSliceSize=2100000000
SlicesPerDisk=1

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

[Types]
Name: "full";  Description: "Полная установка"
Name: "custom"; Description: "Выборочная установка"; Flags: iscustom

[Components]
Name: g0; Description: Half-Life; Types: full custom; Flags: disablenouninstallwarning checkablealone
Name: g1; Description: Ricochet; Types: full custom; Flags: disablenouninstallwarning checkablealone

[Files]

Source: "C:\Documents and Settings\Админ\Мои документы\Downloads\s\zepsa\*"; DestDir: "{app}\half-life"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: g0

Source: "C:\Documents and Settings\Админ\Мои документы\Downloads\s\ricochet\*"; DestDir: "{app}\half-life\ricochet"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: g1

[Icons]
Name: "{group}\{cm:UninstallProgram,Half-Life Games}"; Filename: "{uninstallexe}"

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

Как сделать чтобы компонент g0 нельзя было удалять? А то просто без g0, g1 файлы не запустятся. ?

Merlin_jr 16-02-2010 13:28 1348503

Цитата:

Цитата Serega
Цитата Merlin_jr:
Подскажите как средствами Inno Setup »
Пример скрипта
Пример текстового файла

С версией все получилось, а вот с текстом из файла не совсем понятно :sorry: забыл уже программирование :cry:

Уточню из файла следующей структуры:
Код:

15V44
надо вытащить только текст, что в начале.

UPD
Как правильно полностью завершить работу инсталлятора по событию. Точнее какой функцией или оператором.

Habetdin 16-02-2010 13:48 1348517

Vengeance,
Цитата:

Цитата Vengeance
Как сделать чтобы компонент g0 нельзя было удалять? »

Код:

[Components]
Name: g0; Description: Half-Life; Flags: fixed disablenouninstallwarning; Types: custom full


Serega 16-02-2010 20:52 1348855

Цитата:

Цитата BooSla
как отключить сообщение о завершении деинсталляции »

Стандартными средствами - никак (по крайней мере, мне не известно), а если перехватывать через поиск окна и скрывать его, то на долю секунды сообщение всё равно моргает.

Цитата:

Цитата Merlin_jr
надо вытащить только текст, что в начале. »

Так укажите в ReadFileName(имя файла, '15V44'), результат будет - строка. Потом работаете с этой строкой.

beaverBox 17-02-2010 09:21 1349161

Добрый день, знатоки инсталлов :)
Только начал осваиваться с Inno, сразу вопрос: ограничено ли количество диалогов? И как переходить от одного к другому?
Поясняю. В процессе установки пользователь должен ввести n-ое количество параметров, исходя из которых выполняются определенные действия (создание БД, модификация, и т.д., не суть). Использую инструкции CreateInputQueryPage, CreateInputOptionPage и т.д.
Всё делаю в InitializeWizard.
Не могу понять, как переходить от окна к окну... Я так понимаю, первый параметр AfterID - это идентификатор диалога, который появится по "Далее".
Помогите новичку. Горю по срокам.
Спасибо.

South 17-02-2010 10:06 1349186

beaverBox, AfterID - идентификатор страницы после которой появится созданная тобой страница.
т.е. если напишешь
Код:

MyPage:=CreateInputQueryPage(wpWelcome,'caption','description','subcaption');
, то MyPage появится после страницы приветствия

beaverBox 17-02-2010 10:08 1349189

Да, раскурил много форумов, вроде так.
Сейчас попробую пошаманить.
South, спасибо!

Мозг взрывается.
Как мне вставить страничку лицензии в "определенное" место?
И можно ли использовать значение AfterID в пределах диапазона Integer? (например 100, 500...).
Извините за нубство, просто я не дельфист/паскалевед :)

Погодите, вроде работает.
:)

beaverBox 17-02-2010 10:45 1349212

Вопрос по GUI.
Есть ли стандартное средство для создания в одном окне диалога поля выбора UNC-пути с кнопкой "Обзор" и других полей?
Т.е. объединение в одном окне диалога "разношерстных" компонентов.

Merlin_jr 17-02-2010 15:22 1349434

Цитата:

Цитата Serega
Цитата Merlin_jr:
надо вытащить только текст, что в начале. »
Так укажите в ReadFileName(имя файла, '15V44'), результат будет - строка. Потом работаете с этой строкой. »

Так дело в том, что этот самый текст неизвестен и соответственно предложенный вариант не совсем подходит.
Структура файла такая какую указал.

beaverBox 18-02-2010 08:08 1350051

Сунул файлы инсталлятора Фаерберда:
Код:

[Files]
Source: Firebird-2.1.3.18185_0_Win32.exe; Flags: dontcopy
Source: fbinst.inf; Flags: dontcopy

В function NextButtonClick() делаю:
Код:

  if CurPageID = FirebirdQueryPage.ID then begin
    if FirebirdQueryPage.SelectedValueIndex = 0 then begin
      if Exec(ExpandConstant('{tmp}\Firebird-2.1.3.18185_0_Win32.exe'), ' /loadinf="{tmp}\fbinst.inf" /silent', '', SW_SHOW, ewWaitUntilTerminated, resCodeFB) then begin
        if not (resCodeFB = 0) then begin
          MsgBox('Бла-бла, типа ошибка', mbError, MB_OK);
          Result := false;
        end;
      end;
    end;
  end;

Код не отрабатывает, в дебаге просто пролетает мимо.
Что не так?

beaverBox 18-02-2010 08:44 1350074

Решилось
Код:

      ExtractTemporaryFile('Firebird-2.1.3.18185_0_Win32.exe');
      ExtractTemporaryFile('fbinst.inf');


beaverBox 18-02-2010 12:39 1350229

Выставил
Код:

Encryption=yes
Password=blabla

Теперь инсталлятор ругается ошибкой Cannot read an encrypted file before the key has been set..
Как запустить закриптованный инсталлятор?

beaverBox 18-02-2010 13:37 1350264

Нашел решение: в диалоге wpPassword в textBox установить значение пароля, диалог пользователю не показывать.
P.S.: монолог какой-то получается :)

Serega 18-02-2010 16:15 1350362

Цитата:

Цитата Merlin_jr
Так дело в том, что этот самый текст неизвестен и соответственно предложенный вариант не совсем подходит. »

Ну так переделайте функцию ReadFileName как вам надо, я только привёл пример загрузки текстового файла с дальнейшей его обработкой.
Вы точно уверены, что требуемуе значение будет первой строкой? Если да, то:
Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
function ReadFirstLine(const FileName: string): string;
var
  S: array of string;
begin
  Result:= '';
  if LoadStringsFromFile(FileName, S) then Result:= S[0]; // первая строка
end;

function InitializeSetup(): Boolean;
begin
  MsgBox(ReadFirstLine(ExpandConstant('{pf}\Inno Setup 5\Examples\Readme.txt')), mbInformation, MB_OK);
end;



Цитата:

Цитата beaverBox
монолог какой-то получается »

Естественно, днём все на работе.

beaverBox 18-02-2010 16:42 1350376

Сам и отвечу тогда, раз уж так повелось :)

Код:

procedure InitializeWizard;
begin
  WizardForm.PasswordEdit.Text := 'blabla';
  ...
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  If CurPageID = wpPassword then begin
    SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
    SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
  end;
end;

и добавить флаг noencryption к файлам в секции [Files].

Serega 18-02-2010 19:09 1350502

Цитата:

Цитата beaverBox
Сам и отвечу тогда, раз уж так повелось »

Так вы и не спрашивали, из вашего предыдущего сообщения было понятно, что вы разобрались...
Цитата:

Цитата beaverBox
Нашел решение: »

Цитата:

Цитата beaverBox
и добавить флаг noencryption к файлам в секции [Files] »

Только к тем, которые вы извлекаете с помощью ExtractTemporaryFile.
Ну а нажать на кнопку Далее, можно и проще:
Код:

//////////////////////////////////////////////////////////////////////////////
  if CurPageID = wpPassword then
    WizardForm.NextButton.OnClick(WizardForm.NextButton);
/////////////////////////////////////////////////////////////////////////////


semiono 18-02-2010 19:24 1350514

Нужно найти файл:
Варианты: (чем больше тем лучше - [имя]**.exe)
{pf}\папка с_пробелом\Cubase.exe
{pf}\папка с_пробелом\Cubase4.exe
{pf}\папка с_пробелом\Cubase 4.exe
{pf}\папка с_пробелом\Nuendo.exe
{pf}\папка с_пробелом\Nuendo4.exe
{pf}\папка с_пробелом\Nuendo 4.exe

и дополнительно:
{sys}\Cubase.cmd ; здесь имя без вариантов ; файл может вообще отсутствовать
{sys}\Nuendo.cmd ; здесь имя без вариантов ; тоже самое

и запустить первый файл который существует, затем сразу выйти и завершить поиск.
В случае error просто завершить поиск итд...
Другими словами, надо запустить одно из двух приложений которые не точно известны инсталлеру.
Выполнить я имею ввиду так -
[Run]
FileName: {Code:Result}; Flag: Nowait

{pf}\папка с_пробелом\ -- другими словами --> {pf}\*\*\*... рекурсивно

тема перекликается с автоит разделом где это уже было решённым, но я не сразу подумал что мне это в iss более нужно,
тем более что и API здесь вроде бы подходящие имеются, но сам я не потяну


Если есть какие-то сложности, зделайте хотябы упрощённый вариант по выбору
или {pf}\папка с_пробелом\Cubase.exe
или {pf}\папка с_пробелом\Nuendo.exe

A1EXXX 18-02-2010 19:52 1350545

Inno Setup 5.3.8

(changelog)

:)

Скачать: ANSI или UNICODE

vint56 18-02-2010 21:02 1350597

Serega, ты не подскажеш как на второй процесбар наложить текстуру
Вот код
читать дальше »
[Setup]
AppName=zz
DefaultGroupName=group
AppVerName=zzz
DefaultDirName={pf}\test
SolidCompression=false
InternalCompressLevel=none
Compression=none

#define PB_ImageFile "progress1.bmp"

[Files]
Source: IMAGE\{#PB_ImageFile}; DestDir: {tmp}; Flags: recursesubdirs ignoreversion
Source: Files\packjpg_dll.dll; DestDir: {sys}; Flags: deleteafterinstall
Source: Files\precomp.dll; DestDir: {sys}; Flags: deleteafterinstall
Source: Files\zlib1.dll; DestDir: {sys}; Flags: deleteafterinstall
Source: Files\innocallback.dll; Flags: dontcopy
Source: Files\isprecomp.dll; Flags: dontcopy
Source: animations2.pcf; DestDir: {tmp}; Flags: ignoreversion nocompression


[code]
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);
TPrecompCallback = procedure(progress: integer);
TMessage = record hWnd: HWND; msg, wParam: Word; lParam: LongWord; Time: TFileTime; pt: TPoint; end;

var
TimerID: LongWord;
intOldCurrWidth : Integer;
ProgressBar_BitmapImage: TBitmapImage;
ProgressBar_Edit : TEdit;
ProgressBar_ImageHeight : integer;
ProgressLabel: TLabel;
ProgressBar: TNewProgressBar;
btnCancelRecompress: TButton;

// Функции для работы с таймером
function WrapTimerProc(callback:TProc; paramcount:integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';

function PeekMessage(var lpMsg: TMessage; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMessage): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: TMessage): Longint; external 'DispatchMessageA@user32.dll stdcall';

function WrapPrecompCallback(callback:TPrecompCallback; paramcount:integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
procedure PrecompExtract(in_file, extract_path: PAnsiChar; callback: longword); external 'precomp_extract@files:isprecomp.dll,precomp.dll,zlib1.dll,packjpg_dll.dll stdcall';
procedure PrecompBreak; external 'precomp_break@files:isprecomp.dll stdcall delayload';

procedure AppProcessMessage;
var
Msg: TMessage;
begin
if not PeekMessage(Msg, {WizardForm.Handle} 0, 0, 0, {PM_REMOVE} 1) then Exit;
TranslateMessage(Msg); DispatchMessage(Msg);
end;

// эта процедура будет вызыватся 100 раз в секунду
procedure PrecompCallback(progress: integer);
begin
ProgressBar.Position := progress;
ProgressLabel.Caption := 'Recompression: ' + IntToStr(progress) + '%';
AppProcessMessage;
end;

procedure btnCancelRecompressOnClick(Sender: TObject);
begin
PrecompBreak;
WizardForm.FinishedHeadingLabel.Caption:= 'Setup aborted';
WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted);
end;

// Обработчик нажатия кнопки Отмена
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
if CurPageID = wpInstalling then // Просто спрячем наш Прогресс Бар
ProgressBar_Edit.Show;
end;

// Функция вызываемая по таймеру
procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
var
CurrWidth : single;
begin
// Используем текущее состояние стандартного Прогресс Бара (ПБ)
with WizardForm.ProgressGauge do
begin
CurrWidth := ( Position * Width ) / Max; // Вычисляем какой ширины должен быть наш ПБ
if intOldCurrWidth <> Round( CurrWidth ) then // Если ширина пока что такая же, то не будем пока что рисовать, чтобы избежать лишних обновлений формы
begin
intOldCurrWidth := Round( CurrWidth );
// Теперича "рисуем" наш ПБ
ProgressBar_BitmapImage.SetBounds( 0, 0, intOldCurrWidth, ProgressBar_ImageHeight );
ProgressBar_BitmapImage.Show(); // Показываем его во всей красе
end;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
var
pfunc: LongWord;
begin
if CurPageID = wpInstalling then
begin
// Устанавливаем таймер
pfunc := WrapTimerProc( @OnTimer, 4 );
TimerID := SetTimer( 0, 0, 100, pfunc );
intOldCurrWidth := 0;
end;

// Убираем таймер, когда находимся на последней странице.
if CurPageID = wpFinished then
KillTimer( 0, TimerID );
end;

Procedure InitializeWizard1;
begin
// Создаем наш Edit, чтобы у нашего ПБ была более-менее нормальная рамка.
ProgressBar_Edit := TEdit.Create( WizardForm );
with ProgressBar_Edit do
begin
// Создаем его на месте стандартного ПБ
Left := WizardForm.ProgressGauge.Left;
Top := WizardForm.ProgressGauge.Top;
Width := WizardForm.ProgressGauge.Width;
Height := WizardForm.ProgressGauge.Height;
Enabled := False;
ReadOnly := True;
// Фоновый цвет делаем точно такой же как у формы.
Color := WizardForm.Color;
Parent := WizardForm.InstallingPage;
end;

// Распаковываем картинку для нашего ПБ
ExtractTemporaryFile( '{#PB_ImageFile}' );

ProgressBar_BitmapImage := TBitmapImage.Create( WizardForm );
with ProgressBar_BitmapImage do
begin
// Загружаем картинку
Bitmap.LoadFromFile( ExpandConstant( '{tmp}\' ) + '{#PB_ImageFile}' );
Parent := ProgressBar_Edit;
Stretch := True; // Он должен растягиваться
Hide; // Прячем его до поры до времени
end;

// Получаем высоту для картинки
ProgressBar_ImageHeight := ProgressBar_Edit.Height - 2;
// Прячем стандартный ПБ
WizardForm.ProgressGauge.Hide;
end;

procedure DeinitializeSetup();
begin
// Убираем таймер
KillTimer( 0, TimerID );
end;



procedure InitializeWizard2;
begin
ProgressBar := TNewProgressBar.Create(WizardForm);
with ProgressBar do begin
Left := WizardForm.ProgressGauge.Left;
Top := WizardForm.ProgressGauge.Top + ScaleX(30);
Width := WizardForm.ProgressGauge.Width;
Height := WizardForm.ProgressGauge.Height;
Parent := WizardForm.InstallingPage;
Min := 0;
Max := 100;
Position := 0;
Hide;
end;
ProgressLabel := TLabel.Create(WizardForm);
with ProgressLabel do begin
Left := ProgressBar.Left;
Top := ProgressBar.Top + ProgressBar.Height + ScaleX(5);
AutoSize:= True;
Caption:= 'Recompression: 0%';
Parent := WizardForm.InstallingPage;
Transparent:= True;
Hide;
end;
btnCancelRecompress:=TButton.create(WizardForm);
with btnCancelRecompress do begin
SetBounds(WizardForm.CancelButton.Left, WizardForm.CancelButton.top, WizardForm.CancelButton.Width, WizardForm.CancelButton.Height);
OnClick:= @btnCancelRecompressOnClick;
Parent := WizardForm;
Hide;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
callback: longword;
begin
if CurStep = ssPostInstall then
begin
ProgressBar.Show;
ProgressLabel.Show;
btnCancelRecompress.Caption := WizardForm.CancelButton.Caption;
btnCancelRecompress.Show;
callback:=WrapPrecompCallback(@PrecompCallback,1);
PrecompExtract(ExpandConstant('{tmp}\animations2.PCF'), ExpandConstant('{app}'), Callback);
btnCancelRecompress.Hide;
end;
end;

Procedure InitializeWizard();
begin
InitializeWizard1();
InitializeWizard2();
end;

beaverBox 19-02-2010 11:19 1350963

Цитата:

Цитата Serega
Так вы и не спрашивали, из вашего предыдущего сообщения было понятно, что вы разобрались... »

Я не волшебник, я только учусь(с) :)
Спасибо.

Цитата:

Цитата Serega
Ну а нажать на кнопку Далее, можно и проще: »

Я поступил еще проще. У меня есть function ShouldSkipPage(PageID: Integer): Boolean;, туда и сунул
Код:

  if PageID = wpPassword then
    Result := true;


D_Rix 19-02-2010 21:35 1351485

Вопрос:
Как в скрипте распаковки FreeArc сделать чтобы он распаковывал более одного архива.
Вот сам код:
Код:

;строки распаковки архивов
Source: {src}\data.arc; DestDir: {app}\data; Flags: external dontcopy
Source: {src}\bin.arc; DestDir: {app}\bin; Flags: external dontcopy
{#SourceToProgress}

Но при этом коде распаковывается только bin.arc а data.arc НЕ распаковывается.
Как сделать чтобы и тот и тот распаковывались ?

И еще, подскажите где взять скрипт вот такого инсталлера:


Заранее большое спасибо.

МИШАНЧИК 20-02-2010 03:54 1351673

D_Rix,
Цитата:

Цитата D_Rix
чтобы он распаковывал более одного архива. »

Код:

;строки распаковки архивов
Source: {src}\data.arc; DestDir: {app}\data; Flags: external dontcopy
{#SourceToProgress}
Source: {src}\bin.arc; DestDir: {app}\bin; Flags: external dontcopy
{#SourceToProgress}

или в секции код:
Код:

const 
Archives = '{src}\*.arc';


YURSHAT 20-02-2010 04:01 1351675

Цитата:

Цитата D_Rix
И еще, подскажите где взять скрипт вот такого инсталлера: »

Здесь

Vengeance 20-02-2010 09:06 1351712

Код:

Components]
Name: g0; Description: Half-Life; Flags: fixed disablenouninstallwarning; Types: custom full
Name: g1; Description: Rcochet; Types: full custom; Flags: disablenouninstallwarning checkablealone

[Files]

Source: "C:\Documents and Settings\Админ\Мои документы\Downloads\s\zepsa\*"; DestDir: "{app}\half-life"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: g0
Source: "C:\Documents and Settings\Админ\Мои документы\Downloads\s\ricochet\*"; DestDir: "{app}\half-life\ricochet"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: g1

Как мне сделать, чтобы g3 компонент если выбрать, он заменял определённые файлы g1. Я пробЫвал чтобы g3 устанавливался в ...\valve\models, но он говорит что-то про директорию и выдаёт ошибку.

Мне сказали, что вроде надо батник как-то писать?

Serega 20-02-2010 11:04 1351758

Цитата:

Цитата semiono
Нужно найти файл »

Пример поиска по маске
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
var
  // задаём переменную глобально, для всего скрипта
  Mask: string;

procedure RunMyProg(FileNeme: string);
begin
  // здесь что нибудь делаем с найденым файлом
  MsgBox(FileNeme, mbInformation, MB_OK );
end;

function FindFile(Path: string): Boolean;
var
  FSR, DSR: TFindRec;
  FindResult: Boolean;
begin
  Result:= False;
  if Path[Length(Path)] <> '\' then Path:= Path + '\';
  FindResult:= FindFirst(Path + Mask, FSR);
  try
    while FindResult do
      begin
        if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
          begin
            RunMyProg(Path + FSR.Name);
            Result:= True;
            Exit;
          end;
        FindResult:= FindNext(FSR);
      end;
    FindResult:= FindFirst(Path + '*.*', DSR);
    while FindResult do
      begin
        if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and
          not ((DSR.Name = '.') or (DSR.Name = '..')) then
        FindFile(Path + DSR.Name);
        FindResult:= FindNext(DSR);
      end;
  finally
    FindClose(FSR);
    FindClose(DSR);
  end;
end;

function InitializeSetup(): Boolean;
var
  i: Integer;
  ArrayOfMask: TArrayOfString;
  StartFolder: string;
begin
  StartFolder:= ExpandConstant('{pf}\Inno Setup 5'); // задаём папку откуда начинать поиск
  ArrayOfMask:= ['*n*.txt', 'R*.txt', '*m*.txt']; // заполняем массив масок для поиска
  for i:= 0 to GetArrayLength(ArrayOfMask)-1 do // перебираем весь масив масок
    begin
      Mask:= ArrayOfMask[i];
      if FindFile(StartFolder) then Break;
    end;
end;



Цитата:

Цитата vint56
не подскажеш как на второй процесбар наложить текстуру »

честно говоря не знаю.

Цитата:

Цитата Vengeance
чтобы g3 компонент если выбрать, он заменял определённые файлы g1 »

Поподробней раскажите.
Цитата:

Цитата Vengeance
но он говорит что-то про директорию и выдаёт ошибку. »

Покажите пример как делаете.
Цитата:

Цитата Vengeance
Мне сказали, что вроде надо батник как-то писать? »

Зачем, всё можно сделать в секции [Сode]

Молодой 20-02-2010 11:44 1351778

Всем доброго времени суток, как известно файлы сжимаемые freearcom, сжимаються в архив с расширением .arc, но в репаках игр файлы с расширением .bin. как это сделать так что бы распаковывалась игра, потому что после того как перевожу в другой фармат меняеться расширение, и с помошью скрипта не распаковываеться! Надеюсь на помощь.

vint56 20-02-2010 12:15 1351794

Молодой, надо в скрипте менять тоже на .bin
как известно файлы сжимаемые freearcom, сжимаються в архив с расширением.arc поменяй на .bin

Молодой 20-02-2010 12:47 1351826

vint56, Спасибо попробуем!

D_Rix 20-02-2010 13:06 1351837

Подскажите как сменить цвет всего шрифта во всех пунктах меню на черный ?


vint56 20-02-2010 13:29 1351855

D_Rix,
DirEdit.Font.Color:= Clblack;
GroupEdit.Font.Color:= Clblack;

D_Rix 20-02-2010 15:09 1351915

vint56,
Спасибо.
Остался один вопросик:
Как сделать чтобы посде распаковки data1.ark он начал распаковывать data2.ark и т.д.
Как правильно дописать это ?

Код:

//--- указываем расположение архивов FreeArc;
Archives = '{src}\data.arc';


vint56 20-02-2010 16:07 1351963

D_Rix,
Archives = '{src}\*.arc'; // указываем расположение архивов FreeArc;
* означает data1.ark и data2.ark и т.д. он распакует

semiono 20-02-2010 21:09 1352164

Цитата:

Цитата Serega
Пример поиска по маске »

Warning Line 57, Column 10:[hint] variable 'Result' never used

тут проблема:
function InitializeSetup(): Boolean;

но я не могу додумать, помоги?

у меня даже MsgBox не открылся

----
Это мне не надо:
[Languages]
; Name: rus; MessagesFile: compiler:Languages\Russian.isl

Serega 20-02-2010 22:38 1352222

Цитата:

Цитата semiono
Warning Line 57, Column 10:[hint] variable 'Result' never used »

Здесь только предупреждение, что Result никогда не будет использован.
По умолчанию, в любой функции должен стоять Result, т.е. мы тем самым указываем какое значение должо быть на выходе.
Я же писал для примера, т.е. поставьте в конце функции InitializeSetup Result:= True;
Цитата:

Цитата semiono
у меня даже MsgBox не открылся »

Значит этого файла нет, который вы задаёте в маске. Я вроде в скрипте везде написал коментарии, что и где. Где-то видимо ошиблись, проверьте внимательно скрипт.

svensoft 20-02-2010 23:59 1352278

Подскажите, чем можно посмотреть\распаковать CompiledCode.bin из всрытого инсталлятора. ?.

Serega 21-02-2010 00:52 1352314

Цитата:

Цитата svensoft
чем можно посмотреть\распаковать CompiledCode.bin »

Любым Hex редактором, но ничего похожего на скрипт вы там не увидите.

svensoft 21-02-2010 02:03 1352355

Цитата:

Цитата Serega
Любым Hex редактором, но ничего похожего на скрипт вы там не увидите. »

Получается имеем скрипт install_script.iss в котором есть все, кроме секции Code. Возможно-ли каким-то способом вытащить ее из вскрытого инсталлятора ?..

Serega 21-02-2010 02:28 1352361

Цитата:

Цитата svensoft
Возможно-ли каким-то способом вытащить ее из вскрытого инсталлятора ? »

Нет. Можно лишь отследить что делает оригинальный инсталлятор и потом, чего нет в распакованном скрипте, дописывать руками.

Floopik 21-02-2010 09:54 1352412

Здравствуйте, у меня несколько вопросов:
(Всё отмечено на рисунке)









1. У кого-нибудь есть такой music button?
2.У кого-нибудь есть такой скин?
3.Как сделать такую панельку?

A1EXXX 21-02-2010 16:54 1352650

Inno Setup Compiler 5.3.8 build 100221 (English) by Restools

svensoft 21-02-2010 20:01 1352773

Serega,
Цитата:

Цитата Serega
Можно лишь отследить что делает оригинальный инсталлятор и потом, чего нет в распакованном скрипте, дописывать руками. »

А под словом отследить вы имели ввиду, что можно как-то прочитать код, т.е выдернуть нельзя, а прочитать можно ? Или говоря отследить , вы имели ввиду, что просто визуально понаблюдать за ходом работы инсталлятора и потом придумав секцию Code руками туда ее заполнить, или может еще чего ?.. До конца про "отследить" не понял.. :unsure:

Serega 21-02-2010 22:45 1352899

Цитата:

Цитата svensoft
А под словом отследить вы имели ввиду, что можно как-то прочитать код, т.е выдернуть нельзя, а прочитать можно ? »

Прочитать код конечно можно.
Запускаете в отладчике, допустим OllyDbg, инсталлятор и перемещаетесь по его коду, в поиске нужных вам вещей. Здесь единственная сложность, нужно разбираться в ассемблере.
В своём же сообщении, я имел ввиду, что отследить можно, что конкретно делает инсталлятор в системе пользователя. Т.е. делаем снимки системы с помощью RegShot'а, до установки и после. Затем сравниваем снимки и получаем результат действий инсталлятора в системе.
Ну а по внешнему оформлению, это только – справка + примеры скриптов + опыт.

Jerichoman 22-02-2010 20:37 1353533

Если я делаю антологию, как сделать так, чтобы каждая игра распаковалась в свою папку и была возможность выбора установки каждой игры по отдельности?

tiylar 22-02-2010 23:18 1353630

Привет всем я навичёк обьясните пожалуста как пользоватся Inno Setup. Можно ли с помошью Inno Setup установить любую программу?

Sotonisto 22-02-2010 23:48 1353647

Floopik,
Цитата:

Цитата Floopik
1. У кого-нибудь есть такой music button?
2. У кого-нибудь есть такой скин?
3. Как сделать такую панельку? »

1. Скачай этот архив.
2. А ты можешь и сам такой скин сделать :) .
3. Эта панелька нарисованная - на каждой странице bmp рисунок. PSD исходник для фотошота можно качнуть отсюда.

Автор оигинального скрипта YURSHAT. По всем вопросам обращайся к нему :)

Цитата:

Цитата tiylar
Привет всем я навичёк обьясните пожалуста как пользоватся Inno Setup. Можно ли с помошью Inno Setup установить любую программу? »

Не та тема :) Тут обсуждение написания скриптов, тебе нужно сюда.

----

Всем, кто знает как такое cделать.
Есть оригинальный Half-Life c модом Paranoia. Для запуска мода нужно запустить exe фал халфы с такими параметрами -game paranoia -32bpp -gl.
Как сделать что бы во время создания ярлыка на рабочем столе эти параметры "дописывались" к нему. Примерно что б было вот так D:/Half-Life Paranoia/hl.exe -game paranoia -32bpp -gl?

baikalchanen 23-02-2010 06:25 1353731

Я тоже давно искал скрипт как в инстале Resident Evil 4 от YURSHAT,но при запуске даёт такую вот ошибку,как исправить?

vint56 23-02-2010 07:09 1353735

baikalchanen, у тебя нету progress1.bmp если все картинки лежат в папке image то должно быть так
Source: Image\{#PB_ImageFile}; DestDir: "{tmp}"; Flags: recursesubdirs ignoreversion

Sotonisto 23-02-2010 08:24 1353749

baikalchanen, у тебя установлен Preprocessor?
Правильно указал путь к файлу?

baikalchanen 23-02-2010 16:53 1354016

Вложений: 1
Sotonisto, vint56,
Так эту значит проблему я решил.
Появились новые проблемы!!!Вот они!!!
1. -это нужно убрать!
2.-Языки озвучки тоже нужно убрать!(Под стрелочкой ничего не надо,но на всякий случай ,если не трудно тоже как убрать если DirectX ненужен?(НЕОБЯЗАТЕЛЬНО!!!)
3.-Вот какая ошибка вылезла при попытке обновления DirectX (Тут конечно видно что написано "Неверно задано имя папки",но я не пойму как исправить?
Скрипт прикрепил ниже!!!

Floopik 23-02-2010 19:06 1354125

Sotonisto сэнкс за ответ.

Sotonisto 23-02-2010 19:40 1354152

baikalchanen,
1. Проблема в этом Caption:= ExpandConstant('{cm:Welcome1}')+#13+('{#MyAppName}');. Удали у себя +#13+('{#MyAppName}')
2. Удали эту секцию.
читать дальше »
Код:

//************************************************ [Начало - Язык игры] ***************************************************//

function Lang: Boolean;
begin
  Result:= rus;
end;

procedure ImageClick(Sender: TObject);
begin
  case TLabel(Sender).Tag of
  0: begin
        pnl_ru.BevelInner:= bvLowered;
        pnl_ru.Top:= ScaleY(381);
        pnl_ru.Left:= ScaleX(320);
        pnl_ru.Width:= ScaleX(42);
        pnl_ru.Height:= ScaleY(30);

        pnl_us.BevelInner:= bvSpace;
        pnl_us.Top:= ScaleY(381);
        pnl_us.Left:= ScaleX(380);
        pnl_us.Width:= ScaleX(46);
        pnl_us.Height:= ScaleY(33);
        LanguageLabel2.Caption:= 'Русский';
        rus:= True;
      end;
  1: begin
        pnl_ru.BevelInner:= bvSpace;
        pnl_ru.Top:= ScaleY(381);
        pnl_ru.Left:= ScaleX(319);
        pnl_ru.Width:= ScaleX(46);
        pnl_ru.Height:= ScaleY(33);

        pnl_us.BevelInner:= bvLowered;
        pnl_us.Top:= ScaleY(381);
        pnl_us.Left:= ScaleX(381);
        pnl_us.Width:= ScaleX(42);
        pnl_us.Height:= ScaleY(30);

        LanguageLabel2.Caption:= 'Английский';
        rus:= False;
      end;
  end;
end;

procedure InitializeWizard5();
begin
  ExtractTemporaryFile('ru.bmp');
  ExtractTemporaryFile('us.bmp');

  LanguageLabel1 := TLabel.Create(WizardForm);
  with LanguageLabel1 do
    begin
      Parent := WizardForm.SelectDirPage;
      Top:= ScaleY(390);
      Left:= ScaleX(90);
      Width:= ScaleX(50);
      Height:= ScaleY(15);
      Font.Name:= 'Georgia'
      Font.Size:= 8;
      Font.Style:= [fsBold, fsItalic];
      Transparent:= True;
      Caption:= ExpandConstant('{cm:Language}');
    end;

  LanguageLabel2 := TLabel.Create(WizardForm);
  with LanguageLabel2 do
    begin
      Parent := WizardForm.SelectDirPage;
      Top:= ScaleY(390);
      Left:= ScaleX(250);
      Width:= ScaleX(50);
      Height:= ScaleY(15);
      Font.Name:= 'Georgia'
      Font.Size:= 8;
      Font.Style:= [fsBold, fsItalic];
      Font.Color:= ClYellow;
      Transparent:= True;
      Caption:= 'Русский';
    end;

  pnl_ru:= TPanel.Create(WizardForm);
  with pnl_ru do
    begin
      BevelInner:= bvLowered;
      Top:= ScaleY(381);
      Left:= ScaleX(320);
      Width:= ScaleX(42);
      Height:= ScaleY(30);
      Parent:= WizardForm.SelectDirPage;
      with TBitmapImage.Create(pnl_ru) do
        begin
          Align:= alClient;
          Bitmap.LoadFromFile(ExpandConstant('{tmp}\ru.bmp'));
          Stretch:= True;
          Parent:= pnl_ru;
        end;
      with TLabel.Create(pnl_ru) do
        begin
          Align:= alClient;
          Transparent:= True;
          OnClick:= @ImageClick;
          Parent:= pnl_ru;
          Cursor:= crHand;
          Tag:= 0;
        end;
    end;

  pnl_us:= TPanel.Create(WizardForm);
  with pnl_us do
    begin
      BevelInner:= bvSpace;
      Top:= ScaleY(381);
      Left:= ScaleX(380);
      Width:= ScaleX(46);
      Height:= ScaleY(33);
      Parent:= WizardForm.SelectDirPage;
      with TBitmapImage.Create(pnl_us) do
        begin
          Align:= alClient;
          Bitmap.LoadFromFile(ExpandConstant('{tmp}\us.bmp'));
          Stretch:= True;
          Parent:= pnl_us;
        end;
      with TLabel.Create(pnl_us) do
        begin
          Align:= alClient;
          Transparent:= True;
          OnClick:= @ImageClick;
          Parent:= pnl_us;
          Cursor:= crHand;
          Tag:= 1;
        end;
    end;
  rus:= True;
end;

//************************************************ [Конец - Язык игры] ***************************************************//


Во время удаления секции ты удалишь InitializeWizard5(), так что после ее удаления тебе необходимо:
- Найди в скрипте (Ctr+F в помощь) InitializeWizard6 и переименуй его в InitializeWizard5.
- Прямо в конце скрипта есть это:
читать дальше »
Код:

Procedure InitializeWizard();
begin
  InitializeWizard1();
  InitializeWizard2();
  InitializeWizard3();
  InitializeWizard4();
  InitializeWizard5();
  InitializeWizard6();
end;


Удали оттуда InitializeWizard6(). Также не забудь "подправить" [CustomMessages].
3. DirectX должен находится в папке рядом с готовым инсталлом (у меня папка директа была в паке support, поэтому к нему и был такой путь - support\directx\dxsetup.exe).

Так же:
1. Ты не используешь текстуру прогресс-бара. Удали секцию кода за который она отвечает и картинку прогресс-бара.
2. Вниматель посмотри секцию [Icons] - там все для RE4, а не для Rainbow Six :)

P.S.: Подправь скрипт и все будет "пучком" :)

baikalchanen 24-02-2010 08:24 1354502

Sotonisto,ОГРОМНЕЙШЕЕ СПАСИБО!!!!
Ты просто афигенно помог,скоро буду править скрипт!!!! :) :yahoo: :applause: :super:

baikalchanen 24-02-2010 12:02 1354684

Sotonisto, Вот так не задача!!!DirectX всё равно никак не хочет обновляться!"Неверно задано имя папки",я уже и положил его в папку к инсталу.

Sotonisto 24-02-2010 13:22 1354734

Омг :) Кароч, смотри.
Создадим рядом c готовым инсталлом, например, папку ZZZ - в ней лежит директ (куча архивов и файл запуска). Тебе необходимо указать путь к файлу запуска DirectX и рабочую папку, в которой он находится (у нас это ZZZ).
В скрипте это будет выгляеть так:
Код:

Filename: {src}\ZZZ\dxsetup.exe; WorkingDir: {src}\ZZZ; Parameters: /silent; StatusMsg: ExpandConstant('{cm:DirectXInstall}'); Check: InstallDirectX; Flags: waituntilterminated; BeforeInstall: ProgressExt2()
читать дальше »
{src} - директория в которой находится инсталл (папка или диск), {src} заменять на что-либо другое не нужно.
ZZZ - название папки с директом
dxsetup.exe - файл запуска директа

Filename: {src}\ZZZ\dxsetup.exe - путь к файлу запуска DirectX
WorkingDir: {src}\ZZZ - папка в которой находится DirectX (кароч тож самое что и Filename, только без \dxsetup.exe :) )

Понял? :)

baikalchanen 24-02-2010 14:09 1354780

Sotonisto, Спасибо,я просто до этого путь полностью указывал,а {src} оставлял!!!

Merlin_jr 24-02-2010 15:13 1354833

Подскажите как правильно завершить работу установщика из любых сложностей логических конструкций.

A1EXXX 24-02-2010 17:00 1354949

Inno ISCmplr Setup 5.3.8 build 100224 от Restools

ImAge 24-02-2010 23:14 1355200

Доброго времени суток у меня несколько вопросов,начал пользоватся 7z,упаковал в архив папки из игры,при компиляции и установке все нормально архивы распаковываются,НО при удалении,эти папки не удаляются а так и остаются в папке,подскажите пожалуйса что сделать?И еще один вопросик можно ли интегрировать эту распаковку 7z архивов в скрипт от YURSHAT ?Заранее спасибо,буду весьма признателен

Вот скрипт 7z
читать дальше »
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
Compression=zip

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

[Files]
Source: c:\game\*; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: is7z.dll; DestDir: {tmp}; Flags: dontcopy

[Icons]
Name: "{group}\Удалить"; IconFilename: "{app}\unins000.exe"; Filename: "{app}\unins000.exe"

[code]
var
ProgressBar : TNewProgressBar;
ExtractFile:TNewStaticText;
Button1:TButton;

procedure Extract7z (hWnd, hpb, hst: THandle; fpath, extractPath, pass:pchar); external 'Extract7z@files:is7z.dll stdcall';
procedure CancelExtract; external 'CancelExtract@files:is7z.dll stdcall';

procedure InitializeWizard();
begin
ProgressBar := TNewProgressBar.Create(WizardForm);
ExtractFile:=TNewStaticText.Create(WizardForm);
with WizardForm.ProgressGauge do
begin
ProgressBar.Left := Left;
ProgressBar.Top := Top + ScaleX(55);
ProgressBar.Width := Width;
ProgressBar.Height := Height;
ProgressBar.Parent := WizardForm.InstallingPage;
ProgressBar.max := 100;
ProgressBar.Position := 0;
ExtractFile.parent:=WizardForm.InstallingPage;
ExtractFile.autosize:=false;
ExtractFile.Width := Width;
ExtractFile.top:=Top + ScaleX(35);
ExtractFile.caption:='Распаковка архива 7zip';
end;
end;

procedure Button1OnClick(Sender: TObject);
begin
CancelExtract;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep=ssPostInstall then
begin
Button1:=TButton.create(WizardForm);
Button1.parent:=WizardForm;
Button1.width:=135;
Button1.caption:='Отменить распаковку';
Button1.left:=260;
Button1.top:=WizardForm.cancelbutton.top;
Button1.OnClick:=@Button1OnClick;
try
Extract7z (wizardform.handle, progressbar.handle, ExtractFile.handle, ExpandConstant('{src}') + '\1.7z', ExpandConstant('{app}'), '');
Button1.visible:=false;
except
MsgBox('Неверный пароль!', mbInformation, MB_OK);
Button1.visible:=false;
end;
end;
end;

YURSHAT 25-02-2010 07:08 1355375

Цитата:

Цитата ImAge
упаковал в архив папки из игры,при компиляции и установке все нормально архивы распаковываются,НО при удалении,эти папки не удаляются а так и остаются в папке,подскажите пожалуйса что сделать? »

Код:

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

Цитата:

Цитата ImAge
И еще один вопросик можно ли интегрировать эту распаковку 7z архивов в скрипт от YURSHAT ? »

Конечно можно

Jerichoman 25-02-2010 09:30 1355440

Если я делаю антологию, как сделать так, чтобы каждая игра распаковалась в свою папку и была возможность выбора установки каждой игры по отдельности?

YURSHAT 25-02-2010 10:32 1355467

Цитата:

Цитата Jerichoman
Если я делаю антологию, как сделать так, чтобы каждая игра распаковалась в свою папку и была возможность выбора установки каждой игры по отдельности? »

:read: Почитайте справку. Особенно обратите внимание на секцию [Components]

Jerichoman 25-02-2010 16:09 1355723

YURSHAT, справку к Inno?

A1EXXX 25-02-2010 16:20 1355730

Цитата:

Цитата Jerichoman
YURSHAT, справку к Inno? »

к микроволновке :lol:

Jerichoman 25-02-2010 16:38 1355747

Цитата:

Цитата A1EXXX
к микроволновке »

Да ну вас :tongue:

A1EXXX 25-02-2010 16:59 1355764

Jerichoman, извини, не удержался ;) :)

Jerichoman 25-02-2010 17:04 1355768

A1EXXX, Да ладно, сам понял что тупо получилось :)

baikalchanen 25-02-2010 17:06 1355771

Вложений: 1
При попытке удалить игру вылетает такая ошибка--
Скрипт прикрепил ниже.

vint56 25-02-2010 17:21 1355792

baikalchanen, вот так должно быть
Source: "Files\ISSkin.dll"; DestDir: "{app}"; Flags: ignoreversion;
Source: "Files\Tiger.cjstyles"; DestDir: "{app}"; Flags: ignoreversion;
а что вышла ошибка там есть уже старая версия
unins000.dat
unins000.exe
удали их

Sotonisto 25-02-2010 18:40 1355837

Код:

Source: "Files\ISSkin.dll"; DestDir: "{app}"; Flags: ignoreversion;
Source: "Files\Tiger.cjstyles"; DestDir: "{app}"; Flags: ignoreversion;



У baikalchanen'а и так все правильно было, для чего эти исправления?

-----

baikalchanen, ошибка из-за того что ты упаковал файлы для удаления от другого инсталла.
Установив оригинальную игру (Руссобит-М использует инсталлы Inno Setup) в папке с игрой создались unins000.dat и unins000.exe.
Когда ты собирал инсталл они тоже "вошли" в него, и после установки (естественно) новые файлы деинсталляции не создались а остались старые :)
Просто сделай инсталл заново, ток перед сборкой удали из папки с игрой unins000.dat и unins000.exe :)

P.S.: Вот как прописывается Vegas 2 в реестре (если версия от Руссобит-М). У тебя почему-то только 9 записей (хотя тебе виднее).

читать дальше »
Код:

Root: HKLM; Subkey: "SOFTWARE\Ubisoft"; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: "SOFTWARE\Ubisoft\Tom Clancy's Rainbow Six Vegas 2"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Ubisoft\Tom Clancy's Rainbow Six Vegas 2"; ValueType: string; ValueName: "InstallDir"; ValueData: "{app}"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Ubisoft\Tom Clancy's Rainbow Six Vegas 2"; ValueType: string; ValueName: "Language"; ValueData: "Russian"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Ubisoft\Tom Clancy's Rainbow Six Vegas 2"; ValueType: string; ValueName: "MasterType"; ValueData: "DVD"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Ubisoft\Tom Clancy's Rainbow Six Vegas 2"; ValueType: string; ValueName: "MasterLang"; ValueData: "RUS"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Ubisoft\Tom Clancy's Rainbow Six Vegas 2"; ValueType: string; ValueName: "MasterComcast"; ValueData: "FALSE"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Ubisoft\Tom Clancy's Rainbow Six Vegas 2\Russian"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Ubisoft\Tom Clancy's Rainbow Six Vegas 2\1.00"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Ubisoft\Tom Clancy's Rainbow Six Vegas 2\1.02"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Ubisoft\Tom Clancy's Rainbow Six Vegas 2\GameUpdate"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Ubisoft\Tom Clancy's Rainbow Six Vegas 2\GameUpdate"; ValueType: string; ValueName: "execPath"; ValueData: "{app}\Binaries\R6Vegas2_Game.exe"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Ubisoft\Tom Clancy's Rainbow Six Vegas 2\GameUpdate"; ValueType: string; ValueName: "info"; ValueData: "f118a34d81976a20d530115cb076da0a"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Ubisoft\Tom Clancy's Rainbow Six Vegas 2\GameUpdate"; ValueType: string; ValueName: "installdir"; ValueData: "{app}"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Ubisoft\Tom Clancy's Rainbow Six Vegas 2\GameUpdate"; ValueType: string; ValueName: "language"; ValueData: "us"; Flags: uninsdeletekey


vint56 25-02-2010 19:16 1355866

Sotonisto, просто у многих выходила ошибка удаления

Sotonisto 25-02-2010 20:07 1355911

Цитата:

Цитата vint56
Sotonisto, просто у многих выходила ошибка удаления »

Так при чем тут скин?
Он просто "впихнул" файлы старого инсталла вот и все.
А если исправлять, то - Flags: dontcopy ignoreversion (да и то только для dll) + скин в tmp.

mikrotok 26-02-2010 01:54 1356170

народ помогите со скриптом, чтобы перед установкой программы появлялось ЛОГО проги, а затем уже начиналась сама установка, например как в переведённых модификациях от игромании, сначала появляется надпись ИГРОМАНИЯ, затем картинка самого мода, а уже после начинается процесс установки

Sotonisto 26-02-2010 03:18 1356197

Цитата:

Цитата mikrotok
народ помогите со скриптом, чтобы перед установкой программы появлялось ЛОГО проги, а затем уже начиналась сама установка, например как в переведённых модификациях от игромании, сначала появляется надпись ИГРОМАНИЯ, затем картинка самого мода, а уже после начинается процесс установки »

mikrotok, это скорей всего сплэш (но утверждать не буду).
читать дальше »
[Files]
Source: "isgsg.dll"; DestDir: {tmp}; Flags: dontcopy nocompression
Source: "splash.png"; DestDir: {tmp}; Flags: dontcopy nocompression

[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 InitializeWizard();
begin
ExtractTemporaryFile('splash.png');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\splash.png',1000,3000,1000,0,255,False, $FFFFFF,10);
end;

Размер картинки может быть любым.

YURSHAT 26-02-2010 03:19 1356198

Цитата:

Цитата mikrotok
народ помогите со скриптом, чтобы перед установкой программы появлялось ЛОГО проги »

Пробуйте

ImAge 26-02-2010 12:48 1356423

Помогите обьеденить скрипты 7z и скрипт от YURSHAT,а то я уже 2 день мучаюсь,заранее спасибо


[code]
[Setup]
AppName=My Program
AppVerName=My Program version 1.5
OutputDir=D:\New
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
Compression=none
InternalCompressLevel=none
DiskSpanning=true
DiskSliceSize=1457664000

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

[Files]
Source: is7z.dll; DestDir: {tmp}; Flags: dontcopy
Source: D:\New\Dirt.7z; DestDir: {app}; Flags: external deleteafterinstall

[Icons]
Name: {group}\Удалить; IconFilename: {app}\unins000.exe; Filename: {app}\unins000.exe

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

Код:

var
ProgressBar : TNewProgressBar;
ExtractFile:TNewStaticText;
Button1:TButton;

procedure Extract7z (hWnd, hpb, hst: THandle; fpath, extractPath, pass:pchar); external 'Extract7z@files:is7z.dll stdcall';
procedure CancelExtract; external 'CancelExtract@files:is7z.dll stdcall';

procedure InitializeWizard();
begin
  ProgressBar := TNewProgressBar.Create(WizardForm);
  ExtractFile:=TNewStaticText.Create(WizardForm);
  with WizardForm.ProgressGauge do
    begin
      ProgressBar.Left := Left;
      ProgressBar.Top := Top + ScaleX(55);
      ProgressBar.Width := Width;
      ProgressBar.Height := Height;
      ProgressBar.Parent := WizardForm.InstallingPage;
      ProgressBar.max := 100;
      ProgressBar.Position := 0;
      ExtractFile.parent:=WizardForm.InstallingPage;
      ExtractFile.autosize:=false;
      ExtractFile.Width := Width;
      ExtractFile.top:=Top + ScaleX(35);
      ExtractFile.caption:='Распаковка архива 7zip';
    end;
end;

procedure Button1OnClick(Sender: TObject);
begin
 CancelExtract;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  If CurStep=ssPostInstall then
  begin
    Button1:=TButton.create(WizardForm);
    Button1.parent:=WizardForm;
    Button1.width:=135;
    Button1.caption:='Отменить распаковку';
    Button1.left:=260;
    Button1.top:=WizardForm.cancelbutton.top;
    Button1.OnClick:=@Button1OnClick;
    try
    Extract7z (wizardform.handle, progressbar.handle, ExtractFile.handle, ExpandConstant('{src}') + '\Dirt.7z', ExpandConstant('{app}'), '');
    Button1.visible:=false;
    except
    MsgBox('Неверный пароль!', mbInformation, MB_OK);
    Button1.visible:=false;
    end;
  end;
end;


Молодой 27-02-2010 13:14 1357305

Подскажите как бороться с этой проблемой?

Молодой 27-02-2010 13:42 1357325

Цитата:

Цитата Молодой
Подскажите как бороться с этой проблемой? »

Все вопрос отклоняеться, разобрался. . .

Молодой 27-02-2010 14:15 1357357

Подскажите как в конце установки, убрать вот такой запрос " Запустить prog.exe" и стоит галочка!
Надеюсь на помощь!

YURSHAT 27-02-2010 15:38 1357435

Молодой,
Цитата:

Цитата Молодой
Подскажите как в конце установки, убрать вот такой запрос " Запустить prog.exe" и стоит галочка! »

Удалите из секции [Run] строчку

Код:

[Run]
Filename: "{app}\MyProg.exe"; Description: "{cm:LaunchProgram,My Program}"; Flags: nowait postinstall skipifsilent


paravozik2009 27-02-2010 17:29 1357507

Присоеденяюсь к ImAge,!!

Молодой 27-02-2010 20:23 1357601

YURSHAT, спасибо за помощь!

svensoft 28-02-2010 03:17 1357840

Как можно изменить надпись "Установка" в панели задач ?.. (когда инсталлятор работает).

svensoft 28-02-2010 04:03 1357844

Sotonisto,
Цитата:

Цитата Sotonisto
splash.rar »

YURSHAT,
Цитата:

Цитата YURSHAT
manialogo.rar »

А музыку в них проиграть возможно, подобно как в AdvSplash.dll ?

mikrotok 28-02-2010 05:08 1357851

Sotonisto, YURSHAT, благодарю за помощь

МИШАНЧИК 28-02-2010 05:24 1357852

Подскажите пожалуйста!
Как сделать вот это:
Код:

[Tasks]
Name: task1; Description: Доп. программное обеспечение
Name: task1\task2; Description: DirectX
Name: task1\task3; Description: Visual C++

только через секцию [_Code]?

YURSHAT 28-02-2010 13:33 1358030

Цитата:

Цитата svensoft
А музыку в них проиграть возможно, подобно как в AdvSplash.dll ? »

Нет ничего невозможного :). Правда пример который я выложил это не самый лучший вариант сделать сплэш. Просто mikrotok, хотел как у игромании, вот я и выложил скрипт (наверное вытянут из инсталла игромании).

Вот сделал пример: сплэш с проигрыванием музыки через IsSplash.dll от ExpeditoR. Лови

Cartmans 28-02-2010 16:20 1358136

Мне нужно сделать так, чтоб 2 скрипта вместе работали, а то при компилировании, выскакивает ошибка InitializeWizard
Вот первый скрипт - http://forum.oszone.net/post-1241045-224.html
Вот второй -
Код:

const
Color = clblack;

procedure InitializeWizard();
begin
WizardForm.PageNameLabel.Font.Color:=clWhite;
WizardForm.Font.Color:=clWhite;
WizardForm.Color:=Color;
WizardForm.WelcomePage.Color:=Color;
WizardForm.InnerPage.Color:=Color;
WizardForm.FinishedPage.Color:=Color;
WizardForm.LicensePage.Color:=Color;
WizardForm.PasswordPage.Color:=Color;
WizardForm.InfoBeforePage.Color:=Color;
WizardForm.UserInfoPage.Color:=Color;
WizardForm.SelectDirPage.Color:=Color;
WizardForm.SelectComponentsPage.Color:=Color;
WizardForm.SelectProgramGroupPage.Color:=Color;
WizardForm.SelectTasksPage.Color:=Color;
WizardForm.ReadyPage.Color:=Color;
WizardForm.PreparingPage.Color:=Color;
WizardForm.InstallingPage.Color:=Color;
WizardForm.InfoAfterPage.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.DiskSpaceLabel.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.GroupEdit.Color:=Color;
WizardForm.PasswordLabel.Color:=Color;
WizardForm.PasswordEdit.Color:=Color;
WizardForm.PasswordEditLabel.Color:=Color;
WizardForm.ReadyMemo.Color:=Color;
WizardForm.TypesCombo.Color:=Color;
WizardForm.WelcomeLabel1.Color:=Color;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.Color:=Color;
WizardForm.YesRadio.Color:=Color;
WizardForm.NoRadio.Color:=Color;
WizardForm.WelcomeLabel2.Color:=Color;
WizardForm.LicenseLabel1.Color:=Color;
WizardForm.InfoAfterClickLabel.Color:=Color;
WizardForm.ComponentsList.Color:=Color;
WizardForm.ComponentsDiskSpaceLabel.Color:=Color;
WizardForm.BeveledLabel.Color:=Color;
WizardForm.StatusLabel.Color:=Color;
WizardForm.FilenameLabel.Color:=Color;
WizardForm.SelectDirLabel.Color:=Color;
WizardForm.SelectStartMenuFolderLabel.Color:=Color;
WizardForm.SelectComponentsLabel.Color:=Color;
WizardForm.SelectTasksLabel.Color:=Color;
WizardForm.LicenseAcceptedRadio.Color:=Color;
WizardForm.LicenseNotAcceptedRadio.Color:=Color;
WizardForm.UserInfoNameLabel.Color:=Color;
WizardForm.UserInfoNameEdit.Color:=Color;
WizardForm.UserInfoOrgLabel.Color:=Color;
WizardForm.UserInfoOrgEdit.Color:=Color;
WizardForm.PreparingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Color:=Color;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;


YURSHAT 28-02-2010 16:31 1358143

Цитата:

Цитата Cartmans
Мне нужно сделать так, чтоб 2 скрипта вместе работали, а то при компилировании, выскакивает ошибка »

Пробуйте
Код:

[Setup]
AppId={{DB546B3D-B6ED-4E06-AA36-F051380E03CC}
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program

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

[Files]
Source: "C:\Program Files\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "DirBitmap.bmp"; DestDir: "{tmp}"; Flags: ignoreversion
Source: "GroupBitmap.bmp"; DestDir: "{tmp}"; Flags: ignoreversion
Source: button.bmp; DestDir: {tmp}; Flags: dontcopy

[Icons]
Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"
Name: "{group}\{cm:UninstallProgram,My Program}"; Filename: "{uninstallexe}"

[Run]
Filename: "{app}\MyProg.exe"; Description: "{cm:LaunchProgram,My Program}"; Flags: nowait postinstall skipifsilent

[code_]
const
Color = clblack;
  ButtonWidth = 80;    //Указываем размер кнопок
  ButtonHeight = 23;

  bidBack = 0;
  bidNext = 1;
  bidCancel = 2;
  bidDirBrowse = 3;
  bidGroupBrowse = 4;
var
  ButtonPanel: array [0..4] of TPanel;
  ButtonImage: array [0..4] of TBitmapImage;
  ButtonLabel: array [0..4] of TLabel;
procedure ButtonLabelClick(Sender: TObject);
var
  Button: TButton;
begin
  ButtonImage[TLabel(Sender).Tag].Left:=0
  case TLabel(Sender).Tag of
    bidBack: Button:=WizardForm.BackButton
    bidNext: Button:=WizardForm.NextButton
    bidCancel: Button:=WizardForm.CancelButton
    bidDirBrowse: Button:=WizardForm.DirBrowseButton
    bidGroupBrowse: Button:=WizardForm.GroupBrowseButton
  else
    Exit
  end
  Button.OnClick(Button)
end;

procedure ButtonLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if ButtonLabel[TLabel(Sender).Tag].Enabled then
    ButtonImage[TLabel(Sender).Tag].Left:=-ButtonWidth
end;

procedure ButtonLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  ButtonImage[TLabel(Sender).Tag].Left:=0
end;

procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
  Image: TBitmapImage;
  Panel: TPanel;
  Labl: TLabel;

begin
  Panel:=TPanel.Create(WizardForm)
  Panel.Left:=AButton.Left
  Panel.Top:=AButton.Top
  Panel.Width:=AButton.Width
  Panel.Height:=AButton.Height
  Panel.Tag:=AButtonIndex
  Panel.Parent:=AButton.Parent
  ButtonPanel[AButtonIndex]:=Panel

  Image:=TBitmapImage.Create(WizardForm)    //Рисунок который ложится на кнопку
  Image.Width:=160                          //Обязательно прописать оригинальный размер рисунка
  Image.Height:=23
  Image.Enabled:=False
  Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\button.bmp'))
  Image.Parent:=Panel
  ButtonImage[AButtonIndex]:=Image

  with TLabel.Create(WizardForm) do begin
    Tag:=AButtonIndex
    Parent:=Panel
    Width:=Panel.Width
    Height:=Panel.Height
    Transparent:=True
    OnClick:=@ButtonLabelClick
    OnDblClick:=@ButtonLabelClick
    OnMouseDown:=@ButtonLabelMouseDown
    OnMouseUp:=@ButtonLabelMouseUp
  end

  Labl:=TLabel.Create(WizardForm)        //Текст кнопок
  Labl.Left:=23                          //Указываем положение текста
  Labl.Top:=5
  Labl.Autosize:=True
  Labl.Alignment:=taCenter
  Labl.Tag:=AButtonIndex
  Labl.Transparent:=True
  Labl.Font.Color:=clWhite              //Цвет текста
  Labl.Caption:=AButton.Caption
  Labl.OnClick:=@ButtonLabelClick
  Labl.OnDblClick:=@ButtonLabelClick
  Labl.OnMouseDown:=@ButtonLabelMouseDown
  Labl.OnMouseUp:=@ButtonLabelMouseUp
  Labl.Parent:=Panel
  ButtonLabel[AButtonIndex]:=Labl
end;

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
  ButtonLabel[AButtonIndex].Caption:=AButton.Caption
  ButtonPanel[AButtonIndex].Visible:=AButton.Visible
  ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
  ButtonLabel[bidNext].Enabled:=True
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
  ButtonLabel[bidNext].Enabled:=False
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  UpdateButton(WizardForm.BackButton,bidBack)
  UpdateButton(WizardForm.NextButton,bidNext)
  UpdateButton(WizardForm.CancelButton,bidCancel)
  ButtonLabel[bidBack].Left := (ButtonPanel[bidBack].Width / 2 - ButtonLabel[bidBack].Width / 2);
  ButtonLabel[bidNext].Left := (ButtonPanel[bidNext].Width / 2 - ButtonLabel[bidNext].Width / 2);
  ButtonLabel[bidCancel].Left := (ButtonPanel[bidCancel].Width / 2 - ButtonLabel[bidCancel].Width / 2);
  ButtonLabel[bidDirBrowse].Left := (ButtonPanel[bidDirBrowse].Width / 2 - ButtonLabel[bidDirBrowse].Width / 2);
  ButtonLabel[bidGroupBrowse].Left := (ButtonPanel[bidGroupBrowse].Width / 2 - ButtonLabel[bidGroupBrowse].Width / 2);
end;
 
procedure InitializeWizard();
begin
ExtractTemporaryFile('DirBitmap.bmp');
ExtractTemporaryFile('GroupBitmap.bmp');

WizardForm.SelectDirBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\DirBitmap.bmp'));
WizardForm.SelectDirBitmapImage.AutoSize:=true;
WizardForm.SelectGroupBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\GroupBitmap.bmp'));
WizardForm.SelectGroupBitmapImage.AutoSize:=true;
WizardForm.Font.Color:=clWhite;

WizardForm.Color:=Color;
WizardForm.WelcomePage.Color:=Color;
WizardForm.InnerPage.Color:=Color;
WizardForm.FinishedPage.Color:=Color;
WizardForm.LicensePage.Color:=Color;
WizardForm.PasswordPage.Color:=Color;
WizardForm.InfoBeforePage.Color:=Color;
WizardForm.UserInfoPage.Color:=Color;
WizardForm.SelectDirPage.Color:=Color;
WizardForm.SelectComponentsPage.Color:=Color;
WizardForm.SelectProgramGroupPage.Color:=Color;
WizardForm.SelectTasksPage.Color:=Color;
WizardForm.ReadyPage.Color:=Color;
WizardForm.PreparingPage.Color:=Color;
WizardForm.InstallingPage.Color:=Color;
WizardForm.InfoAfterPage.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.DiskSpaceLabel.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.GroupEdit.Color:=Color;
WizardForm.PasswordLabel.Color:=Color;
WizardForm.PasswordEdit.Color:=Color;
WizardForm.PasswordEditLabel.Color:=Color;
WizardForm.ReadyMemo.Color:=Color;
WizardForm.ReadyMemo.ScrollBars:= ssNone
WizardForm.TypesCombo.Color:=Color;
WizardForm.WelcomeLabel1.Color:=Color;
WizardForm.WelcomeLabel1.Font.Color:=clWhite;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.Color:=Color;
WizardForm.YesRadio.Color:=Color;
WizardForm.NoRadio.Color:=Color;
WizardForm.WelcomeLabel2.Color:=Color;
WizardForm.LicenseLabel1.Color:=Color;
WizardForm.InfoAfterClickLabel.Color:=Color;
WizardForm.ComponentsList.Color:=Color;
WizardForm.ComponentsDiskSpaceLabel.Color:=Color;
WizardForm.BeveledLabel.Color:=Color;
WizardForm.StatusLabel.Color:=Color;
WizardForm.FilenameLabel.Color:=Color;
WizardForm.SelectDirLabel.Color:=Color;
WizardForm.SelectStartMenuFolderLabel.Color:=Color;
WizardForm.SelectComponentsLabel.Color:=Color;
WizardForm.SelectTasksLabel.Color:=Color;
WizardForm.LicenseAcceptedRadio.Color:=Color;
WizardForm.LicenseNotAcceptedRadio.Color:=Color;
WizardForm.UserInfoNameLabel.Color:=Color;
WizardForm.UserInfoNameEdit.Color:=Color;
WizardForm.UserInfoOrgLabel.Color:=Color;
WizardForm.UserInfoOrgEdit.Color:=Color;
WizardForm.PreparingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Font.Color:=clWhite;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
WizardForm.PageNameLabel.Font.Color:=clWhite;

  WizardForm.BackButton.Width:=ButtonWidth
  WizardForm.BackButton.Height:=ButtonHeight

  WizardForm.NextButton.Width:=ButtonWidth
  WizardForm.NextButton.Height:=ButtonHeight

  WizardForm.CancelButton.Width:=ButtonWidth
  WizardForm.CancelButton.Height:=ButtonHeight

  WizardForm.DirBrowseButton.Left:=337
  WizardForm.DirBrowseButton.Width:=ButtonWidth
  WizardForm.DirBrowseButton.Height:=ButtonHeight

  WizardForm.GroupBrowseButton.Left:=337
  WizardForm.GroupBrowseButton.Width:=ButtonWidth
  WizardForm.GroupBrowseButton.Height:=ButtonHeight

  WizardForm.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick

  WizardForm.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick

  ExtractTemporaryFile('button.bmp')
  LoadButtonImage(WizardForm.BackButton,bidBack)
  LoadButtonImage(WizardForm.NextButton,bidNext)
  LoadButtonImage(WizardForm.CancelButton,bidCancel)
  LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
  LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;


svensoft 28-02-2010 16:46 1358150

YURSHAT, спасибо !!! Раз нет ничего невозможного :) , то может помнишь YURSHAT, тему про слайд-шоу по ходу всех страниц инсталлятора с переходами, можно ли как-то сделать ? (проблемы там с лейблами были, уходили под слайды). и вот еще : Как можно изменить надпись "Установка" в панели задач ?.. (когда инсталлятор работает). И : mciSendString('play '+ExpandConstant('{tmp}\sound.mp3'), 'NULL', 0, 0) - Есть ли здесь параметр, отвечающий за повтор проигрывания ? .. :)

South 28-02-2010 18:35 1358222

Цитата:

Цитата YURSHAT
сплэш с проигрыванием музыки через IsSplash.dll от ExpeditoR »

у этой библиотеки есть 1 плюс
работает под win9x
и есть 3 минуса
1. сплэш имеет кнопку на панели задач
2. gif, png не поддерживает прозрачность (рабочего стола не будет видно под сплэшем)
3. при двух установленных мониторах (у меня телек как второй монитор подключен) сплэш выводится "между" мониторами

YURSHAT 28-02-2010 18:49 1358227

Цитата:

Цитата South
у этой библиотеки есть 1 плюс
работает под win9x
и есть 3 минуса »

Вывод: используйте isgsg.dll от South :wink:

YURSHAT 28-02-2010 20:05 1358267

Цитата:

Цитата svensoft
то может помнишь YURSHAT, тему про слайд-шоу по ходу всех страниц инсталлятора с переходами, можно ли как-то сделать ? (проблемы там с лейблами были, уходили под слайды). »

Подожди немного, через пару дней доделаю свой новый инсталл, и эти вопросы улетучатся...

Цитата:

Цитата svensoft
Как можно изменить надпись "Установка" в панели задач ? »

Код:

[Messages]
SetupAppTitle=Инсталляция

Цитата:

Цитата svensoft
mciSendString('play '+ExpandConstant('{tmp}\sound.mp3'), 'NULL', 0, 0) - Есть ли здесь параметр, отвечающий за повтор проигрывания ? .. »

Описание функции

mciSendString(lpstrCommand, lpstrReturnString: PAnsiChar; uReturnLength: Cardinal; hWndCallback: HWND)

lpstrCommand - указывает на завершающуюся нулем строку с командой в следующей форме:
[команда][устройство][параметры]

lpstrReturnString - указывает на буфер для получения информации о результате. Если такая информация не нужна, то этот параметр устанавливается в NULL

uReturnLength - этот параметр указывает размер в символах определенного предыдущим параметром буфера. Если он не нужен, то устанавливается в 0

hwndCallback - указывает на окно отклика "возврата", если в командной строке указан параметр 'notify'. Если 'notify' не указан, то этот параметр устанавливается в NULL.

svensoft 28-02-2010 21:16 1358329

YURSHAT
Цитата:

Цитата YURSHAT
Подожди немного, через пару дней доделаю свой новый инсталл, и эти вопросы улетучатся... »

Потрясающая новость, буду очень очень ждать его появления !!! Можно просто сказать "ждунимагу" :cool:
Цитата:

Цитата YURSHAT
[Messages]
SetupAppTitle=Инсталляция »

Спасибо !!! :up
Цитата:

Цитата YURSHAT
lpstrCommand - указывает на завершающуюся нулем строку с командой в следующей форме:
[команда][устройство][параметры] »

Опиши пожалуйста, если не трудно [параметры] :)

YURSHAT 28-02-2010 22:06 1358361

Цитата:

Цитата svensoft
Опиши пожалуйста, если не трудно [параметры] »

Читай

Cartmans 28-02-2010 23:20 1358409

YURSHAT, Возможно ты сможешь решить мою проблему
Проблема заключается в том, что я не могу убрать это окно -
В общем мне нужно зделать так, что бы это окно не выскакивало. Что нужно прописать в скрипте?

YURSHAT 01-03-2010 06:22 1358535

Цитата:

Цитата Cartmans
Возможно ты сможешь решить мою проблему
Проблема заключается в том, что я не могу убрать это окно - »

Нужно убрать из секции [Icons] строки сознания иконок в меню пуск

Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"
Name: "{group}\{cm:UninstallProgram,My Program}"; Filename: "{uninstallexe}"

За создание иконок в меню пуск отвечает константа {group}.

Cartmans 01-03-2010 08:41 1358571

YURSHAT, Спасибо тебе огромное!

South 01-03-2010 09:56 1358623

Цитата:

Цитата YURSHAT
Вывод: используйте isgsg.dll от South »

не совсем так
isgsg.dll тоже имеет проблему
под win9x/me/2k возможен показ сплэшей только из .bmp в отличие от IsSplash.dll
с остальным проблем вроде нет

т.е. здесь каждый сам для себя должен решить, что ему нужно и в зависимости от этого выбирать чем пользоваться

YURSHAT 01-03-2010 15:52 1358865

Цитата:

Цитата South
не совсем так
isgsg.dll тоже имеет проблему
под win9x/me/2k возможен показ сплэшей только из .bmp в отличие от IsSplash.dll
с остальным проблем вроде нет »

Ну, win9x/me/2k уже давно не актульны, так что мне кажется это вовсе не проблема.

ЗЫ. Поддержка windows 2000 заканчивается 13 июля 2010. Так, что эти оси можно сбросить со счетов...

Cartmans 01-03-2010 18:31 1358966

Обьясните как правильно сделать скрипт фрииарка, что где прописать что бы не было ошибок при отмене установки и т.д. скрипт фрииакра(стандартный) у меня есть
Upd: Помогите! Срочно нужно!

solvador 01-03-2010 19:42 1359013

Доброго времени.
Подскажите пожалуйста, как работать в инно со множествами?
Варианты вида
type
M= Set of 'A'..'D';
var
MS: M;
Не проходят. Жалуется на отсутствие идентификатора...

zzzombie89 01-03-2010 23:07 1359169

Добрый вечер, нужна ваша помощь, есть секция ->

[Run]
Filename: {tmp}\precomp.exe; Parameters: "-r ""{app}\Assets.pcf"""; WorkingDir: {app}; StatusMsg: Восстановление игровых архивов...
Filename: cmd.exe; Parameters: /C del /F /Q Assets.pcf; WorkingDir: {app}; StatusMsg: Удаление временных файлов...

Нужно выполнить через секцию [code], чтобы выполнялись команды после распаковки FreeArc архивов . . .

alex2010 02-03-2010 01:36 1359234

подскажите пожалуйста код, чтоб было как на скрине(подсчитывало свободное место на ЖД)
http://radikal.ru/F/s006.radikal.ru/...c609f.png.html

svensoft 02-03-2010 08:07 1359282

Cartmans,
Цитата:

Цитата Cartmans
Обьясните как правильно сделать скрипт фрииарка, что где прописать что бы не было ошибок при отмене установки и т.д. скрипт фрииакра(стандартный) у меня есть »

alex2010,
Цитата:

Цитата Cartmans
подскажите пожалуйста код, чтоб было как на скрине(подсчитывало свободное место на ЖД)

Вот скрипт с настроеным фриарком и реализованым подсчетом свободного места на жд : http://upwap.ru/757248

South 02-03-2010 11:01 1359359

Цитата:

Цитата solvador
Подскажите пожалуйста, как работать в инно со множествами? »

есть смутное подозрение, что никак
хоть инно и определяет set как служебное слово, но свое множество я так и не смог определить
тоже самое в отношении in

solvador 02-03-2010 13:00 1359434

South, такая же беда.
Написал такой код:
Код:

procedure DBBackup();
var
  C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z: String;
begin
CreateBackup; {вызов процедуры создания резервных копий}
C:= 'c'; D:= 'd'; E:= 'e'; F:= 'f'; G:= 'g'; H:= 'h'; I:= 'i'; J:= 'j'; K:= 'k'; L:= 'l'; M:= 'm'; N:= 'n'; O:= 'j'; P:= 'p'; Q:= 'q'; R:= 'r'; S:= 's'; T:= 't'; U:= 'u'; V:= 'v'; W:= 'w'; X:= 'x'; Y:= 'y'; Z:= 'z';
  if FindFirst(ExpandConstant('{app}\gamedata.db*'), FindFiles) then {ищем по маске файлы в директории}
  begin repeat
    Delete(FindFiles.Name, 1, 11); {режем строку до одной последней буквы}
    case FindFiles.Name of {сравнение и результат}
      C: CreateDBBackup; D: CreateDBBackup; E: CreateDBBackup; F: CreateDBBackup; G: CreateDBBackup; H: CreateDBBackup;
      I: CreateDBBackup; J: CreateDBBackup; K: CreateDBBackup; L: CreateDBBackup; M: CreateDBBackup; N: CreateDBBackup;
      O: CreateDBBackup; P: CreateDBBackup; Q: CreateDBBackup; R: CreateDBBackup; S: CreateDBBackup; T: CreateDBBackup;
      U: CreateDBBackup; V: CreateDBBackup; W: CreateDBBackup; X: CreateDBBackup; Y: CreateDBBackup; Z: CreateDBBackup;
//      else MsgBox(FindFiles.Name, mbCriticalError, mb_OK); {выводим имя пропущенного файла для проверки}
    end;
      until not FindNext(FindFiles);
      FindClose(FindFiles);
  end;
end;

Он рабочий, но хоть я ни капли не программист, но уж больно глаза режет. Как мне кажется, через множества он был бы намного проще и правильней.
По крайней мере для реализации её таким способом :)

South 02-03-2010 13:42 1359468

Цитата:

Цитата solvador
Написал такой код: »

а так не проще?
Код:

procedure DBBackup();
var
//  C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z: String;
  FindFiles : TFindRec;
  LastChar  : Char;
begin
  CreateBackup; {вызов процедуры создания резервных копий}
//C:= 'c'; D:= 'd'; E:= 'e'; F:= 'f'; G:= 'g'; H:= 'h'; I:= 'i'; J:= 'j'; K:= 'k'; L:= 'l'; M:= 'm'; N:= 'n'; O:= 'j'; P:= 'p'; Q:= 'q'; R:= 'r'; S:= 's'; T:= 't'; U:= 'u'; V:= 'v'; W:= 'w'; X:= 'x'; Y:= 'y'; Z:= 'z';
  if FindFirst(ExpandConstant('{app}\gamedata.db*'), FindFiles) then begin {ищем по маске файлы в директории}
    repeat
//      Delete(FindFiles.Name, 1, 11); {режем строку до одной последней буквы}
      LastChar:=UpperCase(FindFiles.Name)[Length(FindFiles.Name)];
      if (LastChar<>'A') and (LastChar<>'B') then CreateDBBackup;
//      case FindFiles.Name of {сравнение и результат}
//        C: CreateDBBackup; D: CreateDBBackup; E: CreateDBBackup; F: CreateDBBackup; G: CreateDBBackup; H: CreateDBBackup;
//        I: CreateDBBackup; J: CreateDBBackup; K: CreateDBBackup; L: CreateDBBackup; M: CreateDBBackup; N: CreateDBBackup;
//        O: CreateDBBackup; P: CreateDBBackup; Q: CreateDBBackup; R: CreateDBBackup; S: CreateDBBackup; T: CreateDBBackup;
//        U: CreateDBBackup; V: CreateDBBackup; W: CreateDBBackup; X: CreateDBBackup; Y: CreateDBBackup; Z: CreateDBBackup;
        //else MsgBox(FindFiles.Name, mbCriticalError, mb_OK); {выводим имя пропущенного файла для проверки}
//      end;
    until not FindNext(FindFiles);
    FindClose(FindFiles);
  end;
end;


solvador 02-03-2010 14:06 1359484

South, ну разумеется проще :up
Я же говорю, что ни капли не программист. Хотя и LastChar (хотел сказать аналогичный пример) всё время был на виду пока листал руководства, но использовать его ума не хватило :unsure:
Спасибо!
Правда там есть архивы заканчивающиеся на 1...9. Но думаю это решается быстро.
Хм... посмотрел статьи Ерёмина, где как мне казалось видел аналогичный пример. Там такого нет, видимо ошибся...

South 02-03-2010 14:44 1359517

кое-что смог сделать со множествами, оказывается они все-таки есть, только вот работать с ними как-то не очень удобно
Код:

var
  c:Char;
  b:byte;
  MySet1: set of char;
  MySet2: set of byte;
begin
  MySet1:=['a','b','x','y'];
  MySet2:=[byte(1),byte(2),byte(3),byte(4),byte(5),byte(6),byte(7),byte(8),byte(9)];
  c:='a';
  if c in MySet1 then MsgBox('c in MySet1; c = '+c, mbCriticalError, mb_OK);
  b:=0;
  if b in MySet2 then MsgBox('b in MySet2; b = '+IntToStr(b), mbCriticalError, mb_OK);
end;


A1EXXX 02-03-2010 15:18 1359540

Inno ISCmplr Setup 5.3.8 build 100301 by Restools

solvador 02-03-2010 15:21 1359543

South, ещё раз Спасибо. Пригодится.
Попробовал опираясь на ваш код слегка его подправить :) Получилось так:
Код:

const
  Symbol = 'cdefghijklmnopqrstuvwxyz';

procedure DBBackup();
var
  FindFiles : TFindRec;
begin
  CreateBackup; {вызов процедуры создания резервных копий}
  if FindFirst(ExpandConstant('{app}\gamedata.db*'), FindFiles) then begin {ищем по маске файлы в директории}
    repeat
        if Pos(FindFiles.Name[Length(FindFiles.Name)],Symbol) > 0 then CreateDBBackup;
    until not FindNext(FindFiles);
    FindClose(FindFiles);
  end;
end;

Вроде робит... Правда нужно наверное вместо [Length(FindFiles.Name) поставить фиксированную цифру, чтобы исключить файлы типа gamedata.dbb.bak . так как они удовлетворяют маске поиска и содержат последнюю букву включённую в symbol.

South 02-03-2010 16:02 1359567

solvador,
можно и так, только, если пишешь
Код:

Symbol = 'cdefghijklmnopqrstuvwxyz';
, то
Код:

Pos(FindFiles.Name[Length(FindFiles.Name)],Symbol)
лучше написать как
Код:

Pos(LowerCase(FindFiles.Name)[Length(FindFiles.Name)],Symbol)
. вдруг расширение в верхнем регистре будет написано
Цитата:

Цитата solvador
чтобы исключить файлы типа gamedata.dbb.bak »

попробуй задать маску "gamedata.db?", правда не знаю будет ли работать инно с такой маской

Cartmans 02-03-2010 16:36 1359589

svensoft, мне нужен скрипт без наворотов))

solvador 02-03-2010 16:36 1359591

Цитата:

Цитата South
лучше написать как »

не должно быть, но советом воспользуюсь.
Цитата:

Цитата South
попробуй задать маску "gamedata.db?" »

да, работает без проблем.
Теперь это то, что я хотел. Спасибо.

Cartmans 02-03-2010 16:44 1359596

кто может прицепить к моему скрипту, скрипт FreeArc'a?

alex2010 02-03-2010 17:05 1359628

svensoft, за скрипт спасибо. :clapping: только я в скриптах почти нуб :( , не мог бы выложить отдельно код для подсчета места на ЖД?(или какой-нить не такой громоздкий скрипт,но с подсчетом места)?

Cartmans 02-03-2010 17:55 1359674

Цитата:

Цитата Cartmans
кто может прицепить к моему скрипту, скрипт FreeArc'a? »

АП!!!

Jerichoman 02-03-2010 18:22 1359681

помогите со скриптом, вылетает такая ошибка (их три, появляются друг за другом при нажатии ОК, там меняются только цифры) во время омены установки + хотелось бы чтоб DirectX устанавливался после установки, а не до нее http://upwap.ru/768586

svensoft 02-03-2010 19:01 1359709

alex2010,
Цитата:

Цитата alex2010
не мог бы выложить отдельно код для подсчета места на ЖД?(или какой-нить не такой громоздкий скрипт,но с подсчетом места)? »

Вот : http://upwap.ru/768634 Компилите этот скрипт и смотрите. Если размер распакованного инсталлятора превышает размер доступного места на диске, то кнопка "Далее" становится недоступной. Размер распакованного инсталлятора указываете в NeedSize:= ???;, в скрипте увидите.

Cartmans
Цитата:

Цитата Cartmans
кто может прицепить к моему скрипту, скрипт FreeArc'a? » »

Выложите свой скрипт, и объясните, вы хотите фриарк-архив держать внутри инсталлятора или рядом, и распаковка когда будет происходить, перед распаковкой основных файлов инсталла или после..

alex2010 02-03-2010 19:43 1359741

svensoft, огромное СПАСИБО. :yahoo:

svensoft 02-03-2010 21:09 1359791

Cartmans
Цитата:

Вот мой скрипт - http://upwap.ru/768682
фри-арк архив должен быть возле инсталятора
и распаковка должна быть после основных файлов.
Вот : http://upwap.ru/768863 Туда-же вложил две библиотеки нужные для распаковки фриарка. В сеции Files нужно будет открорректировать путь их расположения у вас на компе. В срипте найдете строчку Archives = '{src}\setup1.arc'; , здесь необходимо указать имя и расположение вашего фриарк-архива (в моем случае setup1.arc лежит в одном каталоге с инсталлятором). Вообщем смотрите в скрипт, комментарии по поводу фриарка. Распаковка фриарка привязана на второй прогресс-бар.
Цитата:

И еще хотелось бы спросить, как изменить размер который показан на картинке - http://xmages.net/upload/2a9eb40c.bmp
Мне нужно например что бы требовало не 1 гб с копейками, а например 3.5ГБ
Смотрите чуть выше на пост alex2010, там все что касается этого вопроса.


П.с : В следующий раз выкладывайте все сюда, а не в личку. То что нужно вам, может быть полезно и другим. Там ничего секретного нет. Самый обычный скрипт.

Cartmans 02-03-2010 21:23 1359800

Цитата:

Цитата svensoft
Вот : http://upwap.ru/768863 Туда-же вложил две библиотеки нужные для распаковки фриарка. В сеции Files нужно будет открорректировать путь их расположения у вас на компе. В срипте найдете строчку Archives = '{src}\setup1.arc'; , здесь необходимо указать имя и расположение вашего фриарк-архива. Вообщем смотрите в скрипт, комментарии по поводу фриарка. »

Ошибка при компилировании скрипта - http://xmages.net/upload/3f7a5c9a.bmp

svensoft 02-03-2010 21:51 1359833

Cartmans,
Цитата:

Цитата Cartmans
Ошибка при компилировании скрипта - http://xmages.net/upload/3f7a5c9a.bmp »

Выложите ошибку в .jpg , инет у меня не супер скоростной.. пока бмп откроет - уже завтра настанет.

Cartmans 02-03-2010 21:57 1359838

svensoft,
Держи - http://xmages.net/upload/fb321f1b.jpg

Jerichoman 02-03-2010 22:14 1359850

svensoft, Можете помочь?
Цитата:

Цитата Jerichoman
помогите со скриптом, вылетает такая ошибка (их три, появляются друг за другом при нажатии ОК, там меняются только цифры) во время омены установки + хотелось бы чтоб DirectX устанавливался после установки, а не до нее http://upwap.ru/768586 »


svensoft 02-03-2010 22:24 1359861

Cartmans,
Цитата:

Цитата Cartmans

раскоментируйте вот эту строку в своем скрипте : // PAnsiChar = PChar; // Required for Inno Setup 5.3.0 and higher. (требуется для Inno Setup версии 5.3.0 и ниже) , уберите // в начале этой строки , старая версия у вас видимо инно, до конца рисунок ошибки так и не смог открыть.
Jerichoman,
Цитата:

Цитата Jerichoman
svensoft, Можете помочь? »

Позже смогу посмотреть, через пару часов. занят сейчас..

Cartmans 02-03-2010 22:27 1359865

у меня версия инно 5.3.5

Jerichoman 02-03-2010 22:28 1359867

svensoft, Заранее спасибо

Cartmans 02-03-2010 22:29 1359868

svensoft, помогло) спасибо тебе огромное)

Цитата:

Цитата svensoft
Вот : http://upwap.ru/768634 Компилите этот скрипт и смотрите. Если размер распакованного инсталлятора превышает размер доступного места на диске, то кнопка "Далее" становится недоступной. Размер распакованного инсталлятора указываете в NeedSize:= ???;, в скрипте увидите. »

Не могу склеить этот скрипт со своим)) раньше как-то получалось склеивать, а теперь не получается... кто может прицепите:
это - http://upwap.ru/768634
к этому - http://upwap.ru/768863
Срочно нужно... уже затянулось на второй день!!!

svensoft 02-03-2010 22:48 1359884

Cartmans
Цитата:

Цитата Cartmans
у меня версия инно 5.3.5 »

значит версия Unicode

Cartmans 02-03-2010 23:21 1359902

svensoft,
Цитата:

Цитата Cartmans
Не могу склеить этот скрипт со своим)) раньше как-то получалось склеивать, а теперь не получается... кто может прицепите:
это - http://upwap.ru/768634
к этому - http://upwap.ru/768863
Срочно нужно... уже затянулось на второй день!!! »

Не затруднит?

svensoft 03-03-2010 01:54 1359988

Cartmans
Цитата:

Цитата Cartmans
Не затруднит? »

Вот : http://upwap.ru/769318 , что и где менять читайте несколько постов выше, в посте alex2010, где подобный скрипт выложил.

Jerichoman
Цитата:

Цитата Jerichoman
svensoft, Можете помочь? »

Посмотрел ваш скрипт, там чего-то понавтыкали вы все до кучи, у меня даже не все библиотеки ( .dll) есть в наличие, чтобы его пустить и посмотреть, выложите библиотеки, да и вообще опишите все цели, которые вы преследуете в этом скрипте. Если будет завтра время посмотрю.

Jerichoman 03-03-2010 07:27 1360060

svensoft
Цели: красивый инсталл+перевод прекомпенсированных файлов в исходный вид+установка Доп. ПО http://upwap.ru/769367

Lol2xD. 03-03-2010 13:29 1360276

Подскажите как пользоваться скриптом ExecAndWait.iss
у меня не получается добавить
ExecAndWait(ExpandConstant('{sys}\notepad.exe'), '', '', SW_SHOW, True);
плохо разбираюсь

A1EXXX 03-03-2010 17:02 1360452

Lol2xD, ну для начала должен быть установлен препроцессор (ISPP)... Затем кладёшь скрипт ExecAndWait.iss рядом со своим.
А в своём прописываешь #include "ExecAndWait.iss" и куда надо ExecAndWait(ExpandConstant('{sys}\notepad.exe'), '', '', SW_SHOW, True);
Пример...
Код:

   
    if CurStep = ssPostInstall then
    begin
      ExecAndWait(ExpandConstant('{app}\unpacker.exe'), '', '', SW_SHOW, True);
    end;


З.Ы. в описание всё подробнейшим образом описано... :)

Cartmans 03-03-2010 17:48 1360488

Цитата:

Цитата svensoft
Вот : http://upwap.ru/769318 , что и где менять читайте несколько постов выше, в посте alex2010, где подобный скрипт выложил. »

Когда скомпилировал зашол в инсталятор, нажал далее, а потом пошли ошибки:
1-я (ошибка) - http://xmages.net/upload/7f2fc029.jpg
после нажатия кнопки "ОК"
2-я (ошибка) - http://xmages.net/upload/81f4d09a.jpg
и после нажатия кнопки "ОК" во второй ошибке
3-я (ошибка) - http://xmages.net/upload/7aa72006.jpg

svensoft, Не могли бы посмотреть где в скрипте ошибки?

svensoft 03-03-2010 20:54 1360649

Cartmans
Цитата:

Цитата Cartmans
Когда скомпилировал зашол в инсталятор, нажал далее, а потом пошли ошибки: »

Вот : http://upwap.ru/770120

Jerichoman
Цитата:

Цитата Jerichoman
Цели: красивый инсталл+перевод прекомпенсированных файлов в исходный вид+установка »

Чуть позже гляну

comsun 03-03-2010 20:58 1360655

Добрый вечер всем!
Подскажите как добавить в инсталлятор двоичные данные реестра?

Пробовал reg2iss но не хочет инсталлятор компилировать скрипт с двоичными данными никак.
Может как-то это можно сделать?

Cartmans 03-03-2010 21:16 1360673

svensoft, Спасибо!

Cartmans 03-03-2010 21:47 1360689

как сделать что бы это окно не вылазило? - http://xmages.net/upload/303a8d8e.jpg

Serega 03-03-2010 23:01 1360727

Цитата:

Цитата comsun
Подскажите как добавить в инсталлятор двоичные данные реестра? »

Подробней объясните, а лучше экспортируйте из реестра данные, которые хотите внести и покажите сам reg файл.

svensoft 04-03-2010 01:02 1360790

Jerichoman
Скомпилил ваш скрипт, у меня все нормально запускается, никаких ошибок при открытие не выпадает.

Jerichoman 04-03-2010 08:49 1360899

svensoft,
а при отмене в процессе установки?

Chelluga 04-03-2010 14:28 1361155

YURSHAT
У Вас превышено допустимое кол-во лс :)
Я по поводу скрипта (помните, я передал Вам на прошлой недели). У Вас нашлось на него время, или надо ещё ждать? И, если ждать, то сколько?
Заранее спасибо.

Lol2xD. 04-03-2010 15:06 1361178

A1EXXX,

Цитата:

Lol2xD, ну для начала должен быть установлен препроцессор (ISPP)... Затем кладёшь скрипт ExecAndWait.iss рядом со своим.
А в своём прописываешь #include "ExecAndWait.iss" и куда надо ExecAndWait(ExpandConstant('{sys}\notepad.exe'), '', '', SW_SHOW, True);

Пример...
читать дальше »
if CurStep = ssPostInstall then
begin
ExecAndWait(ExpandConstant('{app}\unpacker.exe'), '', '', SW_SHOW, True);
end;


З.Ы. в описание всё подробнейшим образом описано...
Спасибо за помощь,но твой пример у меня что то не работает =((

Serega 04-03-2010 15:32 1361191

Цитата:

Цитата Lol2xD.
твой пример у меня что то не работает »

Ошибка в 56 строке... покажите свой скрипт, здесь ведь телепатов нет.

Lol2xD. 04-03-2010 16:52 1361249

Serega,
if CurStep = ssPostInstall then
begin
ExecAndWait(ExpandConstant('{app}\unpacker.exe'), '', '', SW_SHOW, True);
end;

svensoft 04-03-2010 18:32 1361307

Jerichoman,
Цитата:

Цитата Jerichoman
а при отмене в процессе установки? »

Вот : http://upwap.ru/771393
Деинсталл кривой был и в процедуре CurStepChanged2(CurStep) децл подправил

Jerichoman 04-03-2010 18:33 1361309

Кто-нибудь может отсюда вытащить код преобразования файлов обработанных precomp? http://upwap.ru/771398
svensoft,
спасибо, потестим

svensoft,
УРА!!!РАБОТАЕТ!!!прям даже не знаю как тебе благодарен :yahoo: :up :clapping: (не удержался)

zzzombie89 04-03-2010 18:53 1361319

svensoft, посмотри пожалуйста скрипт, выдаёт ошибку, если не за комментировать - {#SourceToProgress}:

#expr FileClose(faAnyFile)

при этом архив(ы) *arc лежат рядом с инсталлом и при установке не распаковываются . . . только *dll'ки в {tmp} . . .

http://upwap.ru/771436

Serega 04-03-2010 19:21 1361333

Lol2xD., я надеюсь это не весь ваш скрипт? ;)
Я думал, что подробно расписал как использовать, вот простой пример использования:
Пример
Код:

; говорим компилятору, что будем использовать внешний скрипт - ExecAndWait.iss
; в данном случае он должен находится в одном каталоге с данным скриптом
#include "ExecAndWait.iss"

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssPostInstall then
    ExecAndWait(ExpandConstant('{sys}\notepad.exe'), '', '', SW_SHOW, True);
end;


svensoft 04-03-2010 19:42 1361349

zzzombie89,
Цитата:

Цитата zzzombie89
выдаёт ошибку, если не за комментировать »

Скрин ошибки покажите.

zzzombie89 04-03-2010 20:00 1361356

svensoft, вот скрин собственно, надеюсь на вашу помощь . . .

http://imglink.ru/show-image.php?id=...a1899f9697fcc9

svensoft 04-03-2010 20:39 1361381

zzzombie89,
Цитата:

Цитата zzzombie89
svensoft, вот скрин собственно, надеюсь на вашу помощь . . . »

Значит так :
Попробуйте после #expr FileClose(faAnyFile) поставить ";", то есть получается вот так #expr FileClose(faAnyFile);
Если сработает, то выложите скрин ошибки по поводу {#SourceToProgress}. Если же нет, то могу предложить или сменить версию инно (так как у меня ваш скрипт нормально компилится, не на что не ругается и все распаковывает), или как вариант юзать вот этот скрипт : http://upwap.ru/771651

Добавил:
если вот это #expr FileClose(faAnyFile); не поможет, то попробуйте в этой строке :
#for {faAnyFile = FileOpen(Current); !FileEof(faAnyFile); LastLine = FileRead(faAnyFile)} NULL
тоже в конце поставить ";"

zzzombie89 04-03-2010 20:58 1361389

svensoft, я пробовал ещё тогда ставить ";" . . . всё равно не проходит компиляцию . . .

тот скрипт я давно уже пользую, но он без прекомпилятора . . . был бы признателен если бы предложили мне другой скрипт с прекомпилятором . . . если нет такового, то на какую версию инно предложите перейти . . .

Lol2xD. 04-03-2010 21:05 1361394

Serega, не весь конечно ))спасибо большое =))

zzzombie89 04-03-2010 21:27 1361403

svensoft, пробовал как вы посоветовали . . . три комбинации и всё равно не компилируется . . .

svensoft 04-03-2010 21:29 1361405

Цитата:

Цитата zzzombie89
то на какую версию инно предложите перейти »

У меня : Inno Setup Compiler version 5.3.7.ee1 (a) - ISPP 5.3.6.e1 (a) , брал где то на http://restools.hanzify.org

zzzombie89 04-03-2010 21:44 1361418

svensoft, спасибо, попробую щас на другую перейти версию . . . не знаю что из этого получится

zzzombie89 04-03-2010 22:23 1361434

svensoft, сменил версию . . . теперь вот такая ошибка появилась при компиляции . . . всё в той же секции . . . :(

http://imglink.ru/show-image.php?id=...b23cf8fdcdd576

svensoft 04-03-2010 23:25 1361455

zzzombie89,
Цитата:

Цитата zzzombie89
теперь вот такая ошибка появилась при компиляции »

Ставте себе другую версию инно, чтобы брала этот код, больше ничем помочь тут не могу. Скрипт полностью рабочий, написан спецами.. все проблема в вашем случае - это версия инно

Akella2007 04-03-2010 23:35 1361462

Подскажите такой вопрос. При запуске моей инсталляхи выводится
Цитата:

Издатель: не известно
Как сделать, чтобы вместо неизвестно стоял какой-нибудь другой текст?

serg aka lain 05-03-2010 00:32 1361475

Цитата:

Цитата Akella2007
Как сделать, чтобы вместо неизвестно стоял какой-нибудь другой текст? »

Никак, для этого нужна действительная цифровая подпись издателя.
Издатели программного обеспечения

NZeee 05-03-2010 15:51 1361812

Привет всем. Захотел сделать инсталляция игры, но с Inno Setup работаю в первый раз. Какой код нужно добавить в скрипт, чтобы при установки шло извлечение архива .arc (в нём запакована игра)? Заранее спасибо :)

zzzombie89 05-03-2010 16:43 1361848

svensoft, спасибо за помощь . . . я думал дело в скрипте . . .

NZeee, посмотри на сайте FreeArc . . . скачай скрипт для Inno с него . . . ну и сам FreeArc 0.60 -> http://freearc.org/ru/default.aspx

alex2010 05-03-2010 18:44 1361920

а как сделать так, как у RG Механики?(если можно только код для вставки изображения)

Tukash 05-03-2010 20:57 1362000

кто подскажет вот такой код: при запуске setup.exe программа устанавливалась, а при повторном запуске setup.exe , запускался деинсталлятор

vint56 05-03-2010 22:14 1362047

Tukash, вот код на повторный запуск
читать дальше »
function InitializeSetup(): Boolean;
var
ResultCode: Integer;
s, ResultStr:string;
begin
Result:=True;
If not RegKeyExists(HKLM, 'SOFTWARE\MY_PROGRAM')
then
begin
MsgBox('Программа MY_PROGRAM не установлена или установлена неверно.' #13#13 'Дальнейшая работа мастера невозможна.', mbError, mb_Ok);
Result:=False;
end
else
begin
MsgBox('Программа MY_PROGRAM успешно обнаружена.' #13#13 'Установка полностью автоматическая.', mbInformation, mb_Ok);
begin
If RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My_Program_v1.0_is1', 'UninstallString', ResultStr)
then
begin
If ResultStr<>''
then
begin
ResultStr:=RemoveQuotes(ResultStr);
if MsgBox('Программа установки обнаружила уже установленную программу ранней версии.' #13#13 'Вы желаете предварительно удалить ее?', mbInformation, MB_YESNO) = idYes
then
if not Exec(ResultStr, '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode)
then
MsgBox('Ошибка удаления. ' #13#13 '' + SysErrorMessage(ResultCode) + '.' #13#13 'Вероятно, деинсталлятор был перемещен, удален или переименован.', mbError, MB_OK);
end;
end;
end;
end;
end;

Habetdin 05-03-2010 22:37 1362059

Tukash,
Код:

[code]
function InitializeSetup(): Boolean;
var
    UnStr: String;
    ErrorCode: Integer;
begin
  if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\<тут вставляем значение AppName>_is1', 'UninstallString', UnStr) then
  begin
    If UnStr <> '' then
    begin
        UnStr := RemoveQuotes(UnStr);
        Exec(UnStr, '/silent', '', SW_Show, ewWaitUntilTerminated, ErrorCode);
    end;
  end;
  Result:= True;
end;

vint56, а при первом запуске:
Цитата:

Цитата vint56
MsgBox('Программа MY_PROGRAM не установлена или установлена неверно.' #13#13 'Дальнейшая работа мастера невозможна.', mbError, mb_Ok); »

? :lol:

Tukash 06-03-2010 07:54 1362200

Habetdin
vint56

спасибо ребята! правда со скриптом винта были проблемы...

Akella2007 06-03-2010 12:38 1362287

Цитата:

Цитата serg aka lain
Никак, для этого нужна действительная цифровая подпись издателя.
Издатели программного обеспечения »

Я догадывался, что нужна цифровая подпись. По ссылке информация для простого юзера, а не для разработчика.

SuperDan 06-03-2010 16:22 1362387

првет, ВСЕМ!
извините если этот вопрос уже был, он, как сделать WizardImageFile 310х310 pics! охота по шире...

YURSHAT 06-03-2010 21:51 1362574

Цитата:

Цитата SuperDan
как сделать WizardImageFile 310х310 pics! охота по шире... »

Код:

Procedure InitializeWizard();
begin
  with WizardForm.WizardBitmapImage do
  begin
    Width := ScaleX(310);
  end;


Lol2xD. 07-03-2010 11:28 1362817

Serega, привет))я опять по тому скрипту))
Хотелось бы мой скрипт
читать дальше »
#include "ExecAndWait.iss"

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
ExecAndWait(ExpandConstant('{sys}\notepad.exe'), '', '', SW_SHOW, True);
end;


объединить со скриптом FreeArc_Example.iss
читать дальше »
[Setup]
AppName=FreeArc Example
AppVerName=FreeArc Example 3.3
DefaultDirName={pf}\FreeArc Example
UsePreviousAppDir=false
DirExistsWarning=no
ShowLanguageDialog=auto
OutputBaseFilename=FreeArc_Example
OutputDir=.
VersionInfoCopyright=Bulat Ziganshin, Victor Dobrov, SotM, CTACKo

[Languages]
Name: eng; MessagesFile: compiler:Default.isl
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[CustomMessages]
eng.ArcBreak=Installation cancelled!
eng.ExtractedInfo=Extracted %1 Mb of %2 Mb
eng.ArcInfo=Archive: %1 of %2
eng.ArcTitle=Extracting FreeArc archive
eng.ArcError=Decompression failed with error code %1
eng.ArcFail=Decompression failed!
eng.AllProgress=Overall extraction progress: %1%%
eng.ArcBroken=Archive %1 is damaged%nor not enough free space.
eng.Extracting=Extracting: %1
eng.taskbar=%1%%, %2 remains
eng.remains=Remaining time: %1
eng.LongTime=at no time
eng.ending=ending
eng.hour=hours
eng.min=mins
eng.sec=secs

rus.ArcBreak=Установка прервана!
rus.ExtractedInfo=Распаковано %1 Мб из %2 Мб
rus.ArcInfo=Архив: %1 из %2
rus.ArcTitle=Распаковка архивов FreeArc
rus.ArcError=Распаковщик FreeArc вернул код ошибки: %1
rus.ArcFail=Распаковка не завершена!
rus.AllProgress=Общий прогресс распаковки: %1%%
rus.ArcBroken=Возможно, архив %1 повреждён%nили недостаточно места на диске назначения.
rus.Extracting=Распаковывается: %1
rus.taskbar=%1%%, жди %2
rus.remains=Осталось ждать %1
rus.LongTime=вечно
rus.ending=завершение
rus.hour=часов
rus.min=мин
rus.sec=сек

[Files]
;Source: *.arc; DestDir: {app}; Flags: nocompression
Source: unarc.dll; DestDir: {tmp}; Flags: dontcopy deleteafterinstall
Source: compiler:InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy

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

[code]
const
Archives = '{src}\*.arc'; // укажите расположение архивов FreeArc; для внешних файлов строку в [Files] добавлять необязательно

PM_REMOVE = 1;
CP_ACP = 0; CP_UTF8 = 65001;
oneMb = 1048576;

type
#ifdef UNICODE ; если у вас ошибка на этой строке, то установите препроцессор или исправьте скрипт для вашей версии Inno Setup
#define A "W"
#else
#define A "A" ; точка входа в SetWindowText, {#A} меняется на A или W в зависимости от версии
PAnsiChar = PChar; // Required for Inno Setup 5.3.0 and higher. (требуется для Inno Setup версии 5.3.0 и ниже)
#endif
#if Ver < 84018176
AnsiString = String; // There is no need for this line in Inno Setup 5.2.4 and above (для Inno Setup версий 5.2.4 и выше эта строка не нужна)
#endif

TMyMsg = record
hwnd: HWND;
message: UINT;
wParam: Longint;
lParam: Longint;
time: DWORD;
pt: TPoint;
end;

TFreeArcCallback = function (what: PAnsiChar; int1, int2: Integer; str: PAnsiChar): Integer;
TArc = record Path: string; OrigSize: Integer; Size: Extended; end;

var
ExtractFile: TLabel;
lblExtractFileName: TLabel;
btnCancelUnpacking: TButton;
CancelCode, n, UnPackError, StartInstall: Integer;
Arcs: array of TArc;
msgError: string;
lastMb: Integer;
baseMb: Integer;
totalUncompressedSize: Integer; // total uncompressed size of archive data in mb
LastTimerEvent: DWORD;

Function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: string; cbMultiByte: integer; lpWideCharStr: string; cchWideChar: integer): longint; external 'MultiByteToWideChar@kernel32.dll stdcall';
Function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: string; cchWideChar: integer; lpMultiByteStr: string; cbMultiByte: integer; lpDefaultChar: integer; lpUsedDefaultChar: integer): longint; external 'WideCharToMultiByte@kernel32.dll stdcall';

function PeekMessage(var lpMsg: TMyMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMyMsg): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: TMyMsg): Longint; external 'DispatchMessageA@user32.dll stdcall';

Function OemToChar(lpszSrc, lpszDst: AnsiString): longint; external 'OemToCharA@user32.dll stdcall';
function GetWindowLong(hWnd, nIndex: Integer): Longint; external 'GetWindowLongA@user32 stdcall delayload';
function SetWindowText(hWnd: Longint; lpString: String): Longint; external 'SetWindowText{#A}@user32 stdcall delayload';

function GetTickCount: DWord; external 'GetTickCount@kernel32';
function WrapFreeArcCallback (callback: TFreeArcCallback; paramcount: integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function FreeArcExtract (callback: longword; cmd1,cmd2,cmd3,cmd4,cmd5,cmd6,cmd7,cmd8,cmd9,cmd10: PAnsiChar): integer; external 'FreeArcExtract@files:unarc.dll cdecl';

procedure AppProcessMessage;
var
Msg: TMyMsg;
begin
while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;

// Перевод числа в строку с точностью 3 знака (%.3n) с округлением дробной части, если она есть
Function NumToStr(Float: Extended): String;
Begin
Result:= Format('%.3n', [Float]); StringChange(Result, ',', '.');
while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Length(Result) > 1) do
SetLength(Result, Length(Result)-1);
End;

function cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;

Function Size64(Hi, Lo: Integer): Extended;
Begin
Result:= Lo;
if Lo<0 then Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
for Hi:= Hi-1 Downto 0 do
Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
End;

// Converts OEM encoded string into ANSI
// Преобразует OEM строку в ANSI кодировку
function OemToAnsiStr( strSource: AnsiString): AnsiString;
var
nRet : longint;
begin
SetLength( Result, Length( strSource ) );
nRet:= OemToChar( strSource, Result );
end;

// Converts ANSI encoded string into UTF-8
// Преобразует строку из ANSI в UTF-8 кодировку
function AnsiToUtf8( strSource: string ): string;
var
nRet : integer;
WideCharBuf: string;
MultiByteBuf: string;
begin
strSource:= strSource + chr(0);
SetLength( WideCharBuf, Length( strSource ) * 2 );
SetLength( MultiByteBuf, Length( strSource ) * 2 );

nRet:= MultiByteToWideChar( CP_ACP, 0, strSource, -1, WideCharBuf, Length(WideCharBuf) );
nRet:= WideCharToMultiByte( CP_UTF8, 0, WideCharBuf, -1, MultiByteBuf, Length(MultiByteBuf), 0, 0);

Result:= MultiByteBuf;
end;

// OnClick event function for btnCancel
procedure btnCancelUnpackingOnClick(Sender: TObject);
begin
if MsgBox( SetupMessage( msgExitSetupMessage ), mbInformation, MB_YESNO ) = IDYES then
CancelCode:= -127;
end;

var origsize: Integer;
// The callback function for getting info about FreeArc archive
function FreeArcInfoCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
begin
if string(what)='origsize' then origsize := Mb else
if string(what)='compsize' then else
if string(what)='total_files' then else
Result:= CancelCode;
end;

// Returns decompressed size of files in archive
function ArchiveOrigSize(arcname: string): Integer;
var
callback: longword;
Begin
callback:= WrapFreeArcCallback(@FreeArcInfoCallback,4); //FreeArcInfoCallback has 4 arguments
CancelCode:= 0;
AppProcessMessage;
try
// Pass the specified arguments to 'unarc.dll'
Result:= FreeArcExtract (callback, 'l', '--', AnsiToUtf8(arcname), '', '', '', '', '', '', '');
if CancelCode < 0 then Result:= CancelCode;
if Result >= 0 then Result:= origsize;
except
Result:= -63; // ArcFail
end;
end;

// Scans the specified folders for archives and add them to list
function FindArcs(dir: string): Extended;
var
FSR: TFindRec;
Begin
Result:= 0;
if FindFirst(ExpandConstant(dir), FSR) then begin
try
repeat
// Skip everything but the folders
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then CONTINUE;
n:= GetArrayLength(Arcs);
// Expand the folder list
SetArrayLength(Arcs, n +1);
Arcs[n].Path:= ExtractFilePath(ExpandConstant(dir)) + FSR.Name;
Arcs[n].Size:= Size64(FSR.SizeHigh, FSR.SizeLow);
Result:= Result + Arcs[n].Size;
Arcs[n].OrigSize := ArchiveOrigSize(Arcs[n].Path)
totalUncompressedSize := totalUncompressedSize + Arcs[n].OrigSize
until not FindNext(FSR);
finally
FindClose(FSR);
end;
end;
End;

// Sets the TaskBar title
Procedure SetTaskBarTitle(Title: String); var h: Integer;
Begin
h:= GetWindowLong(MainForm.Handle, -8); if h <> 0 then SetWindowText(h, Title);
End;

// Converts milliseconds to human-readable time
// Конвертирует милисекунды в человеко-читаемое изображение времени
Function TicksToTime(Ticks: DWord; h,m,s: String; detail: Boolean): String;
Begin
if detail {hh:mm:ss format} then
Result:= PADZ(IntToStr(Ticks/3600000), 2) +':'+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +':'+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2)
else if Ticks/3600 >= 1000 {more than hour} then
Result:= IntToStr(Ticks/3600000) +h+' '+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +m
else if Ticks/60 >= 1000 {1..60 minutes} then
Result:= IntToStr(Ticks/60000) +m+' '+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2) +s
else Result:= IntToStr(Ticks/1000) +s {less than one minute}
End;

// The main callback function for unpacking FreeArc archives
function FreeArcCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
var
percents, Remaining: Integer;
s: String;
begin
if GetTickCount - LastTimerEvent > 1000 then begin
// This code will be executed once each 1000 ms (этот код будет выполняться раз в 1000 миллисекунд)
// ....
// End of code executed by timer
LastTimerEvent := LastTimerEvent+1000;
end;

if string(what)='filename' then begin
// Update FileName label
lblExtractFileName.Caption:= FmtMessage( cm( 'Extracting' ), [OemToAnsiStr( str )] )
end else if (string(what)='write') and (totalUncompressedSize>0) and (Mb>lastMb) then begin
// Assign to Mb *total* amount of data extracted to the moment from all archives
lastMb := Mb;
Mb := baseMb+Mb;

// Update progress bar
WizardForm.ProgressGauge.Position:= Mb;

// Show how much megabytes/archives were processed up to the moment
percents:= (Mb*1000) div totalUncompressedSize;
s := FmtMessage(cm('ExtractedInfo'), [IntToStr(Mb), IntToStr(totalUncompressedSize)]);
if GetArrayLength(Arcs)>1 then
s := s + '. '+FmtMessage(cm('ArcInfo'), [IntToStr(n+1), IntToStr(GetArrayLength(Arcs))])
ExtractFile.Caption := s

// Calculate and show current percents
percents:= (Mb*1000) div totalUncompressedSize;
s:= FmtMessage(cm('AllProgress'), [Format('%.1n', [Abs(percents/10)])]);
if Mb > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((totalUncompressedSize - Mb)/Mb)) else Remaining:= 0;
if Remaining = 0 then SetTaskBarTitle(cm('ending')) else begin
s:= s + '. '+FmtMessage(cm('remains'), [TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)])
SetTaskBarTitle(FmtMessage(cm('taskbar'), [IntToStr(percents/10), TicksToTime(Remaining, 'h', 'm', 's', false)]))
end;
WizardForm.FileNameLabel.Caption := s
end;
AppProcessMessage;
Result:= CancelCode;
end;

// Extracts all found archives
function UnPack(Archives: string): Integer;
var
totalCompressedSize: Extended;
callback: longword;
FreeMB, TotalMB: Cardinal;
begin
// Display 'Extracting FreeArc archive'
lblExtractFileName.Caption:= '';
lblExtractFileName.Show;
ExtractFile.caption:= cm('ArcTitle');
ExtractFile.Show;
// Show the 'Cancel unpacking' button and set it as default button
btnCancelUnpacking.Caption:= WizardForm.CancelButton.Caption;
btnCancelUnpacking.Show;
WizardForm.ActiveControl:= btnCancelUnpacking;
WizardForm.ProgressGauge.Position:= 0;
// Get the size of all archives
totalUncompressedSize := 0;
totalCompressedSize := FindArcs(Archives);
WizardForm.ProgressGauge.Max:= totalUncompressedSize;
// Other initializations
callback:= WrapFreeArcCallback(@FreeArcCallback,4); //FreeArcCallback has 4 arguments
StartInstall:= GetTickCount; {время начала распаковки}
LastTimerEvent:= GetTickCount;
baseMb:= 0

for n:= 0 to GetArrayLength(Arcs) -1 do
begin
lastMb := 0
CancelCode:= 0;
AppProcessMessage;
try
// Pass the specified arguments to 'unarc.dll'
Result:= FreeArcExtract (callback, 'x', '-o+', '-dp' + AnsiToUtf8( ExpandConstant('{app}') ), '--', AnsiToUtf8(Arcs[n].Path), '', '', '', '', '');
if CancelCode < 0 then Result:= CancelCode;
except
Result:= -63; // ArcFail
end;
baseMb:= baseMb+lastMb

// Error occured
if Result <> 0 then
begin
msgError:= FmtMessage(cm('ArcError'), [IntToStr(Result)]);
GetSpaceOnDisk(ExtractFileDrive(ExpandConstant('{app}')), True, FreeMB, TotalMB);
case Result of
-1: if FreeMB < 32 {Мб на диске} then msgError:= SetupMessage(msgDiskSpaceWarningTitle)
else msgError:= msgError + #13#10 + FmtMessage(cm('ArcBroken'), [ExtractFileName(Arcs[n].Path)]);
-127: msgError:= cm('ArcBreak'); //Cancel button
-63: msgError:= cm('ArcFail');
end;
// MsgBox(msgError, mbInformation, MB_OK); //сообщение показывается на странице завершения
Log(msgError);
Break; //прервать цикл распаковки
end;
end;
// Hide labels and button
WizardForm.FileNameLabel.Caption:= '';
lblExtractFileName.Hide;
ExtractFile.Hide;
btnCancelUnpacking.Hide;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
UnPackError:= UnPack(Archives)
if UnPackError = 0 then
SetTaskBarTitle(SetupMessage(msgSetupAppTitle))
else
begin
// Error occured, uninstall it then
Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n); //откат установки из-за ошибки unarc.dll
SetTaskBarTitle(SetupMessage(msgErrorTitle))
WizardForm.Caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
end;
end;
end;

// стандартный способ отката (не нужна CurPageChanged), но архивы распаковываются до извлечения файлов инсталлятора
// if CurStep = ssInstall then
// if UnPack(Archives) <> 0 then Abort;

Procedure CurPageChanged(CurPageID: Integer);
Begin
if (CurPageID = wpFinished) and (UnPackError <> 0) then
begin // Extraction was unsuccessful (распаковщик вернул ошибку)
// Show error message
WizardForm.FinishedLabel.Font.Color:= $0000C0; // red (красный)
WizardForm.FinishedLabel.Height:= WizardForm.FinishedLabel.Height * 2;
WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) + #13#10#13#10 + msgError;
end;
End;

procedure InitializeWizard();
begin
with WizardForm.ProgressGauge do
begin
// Create a label to show current FileName being extracted
lblExtractFileName:= TLabel.Create(WizardForm);
lblExtractFileName.parent:=WizardForm.InstallingPage;
lblExtractFileName.autosize:=false;
lblExtractFileName.Width:= Width;
lblExtractFileName.top:=Top + ScaleY(35);
lblExtractFileName.Caption:= '';
lblExtractFileName.Hide;

// Create a label to show percentage
ExtractFile:= TLabel.Create(WizardForm);
ExtractFile.parent:=WizardForm.InstallingPage;
ExtractFile.autosize:=false;
ExtractFile.Width:= Width;
ExtractFile.top:=lblExtractFileName.Top + ScaleY(16);
ExtractFile.caption:= '';
ExtractFile.Hide;
end;

// Create a 'Cancel unpacking' button and hide it for now.
btnCancelUnpacking:=TButton.create(WizardForm);
btnCancelUnpacking.Parent:= WizardForm;
btnCancelUnpacking.SetBounds(WizardForm.CancelButton.Left, WizardForm.CancelButton.top, WizardForm.CancelButton.Width, WizardForm.CancelButton.Height);
btnCancelUnpacking.OnClick:= @btnCancelUnpackingOnClick;
btnCancelUnpacking.Hide;
end;

так что бы cначала распаковывались фриарк архивы а потом запускалось то что мне надо
(например: ExecAndWait(ExpandConstant('{sys}\notepad.exe'), '', '', SW_SHOW, True); )
Пытался объединить через Join scripts,но получалось совсем наоборот =( сначала запускался notepad.exe а потом только распаковывались фа архивы.

Sotonisto 07-03-2010 19:37 1363132

Люди, кто знает:
1. Можно ли удалить иконку возле надписи (Установка...) из шапки (рамки) инсталла (я такое видел в InstallShield)?
2. Во время установки игры в шапке (рамке) инсталла всегда такая надпись: Установка - Название игры.
Можно ли сделать так, что бы название игры не выводилось - было просто слово Установка?

Chelluga 07-03-2010 22:02 1363229

Приветствую всех знающих людей.
У меня вопрос такого рода: Кто может показать пример скрипта с прогресс-баром??
Все примеры, которые отрыл в шапке темы - либо не работают вообще, либо стабильно показывают 0%.
Заранее спасибо.

Habetdin 07-03-2010 22:15 1363238

Sotonisto,
Цитата:

Цитата Sotonisto
Во время установки игры в шапке (рамке) инсталла всегда такая надпись: Установка - Название игры. »

Код:

[Messages]
SetupWindowTitle=Установка %1


Serega 07-03-2010 23:12 1363282

Цитата:

Цитата Lol2xD.
объединить со скриптом FreeArc_Example.iss »

Просто не поверите, я устал уже от FreeArc_Example.iss, обычно я игнорирую такие вопросы...
У меня иногда складывается впечатление, что просто какое-то FreeArc-помешательство или может быть это обычный стадный инстинкт, одним словом не знаю...
На мой взгляд 7z лучше и проще, но как говорят для саморазвития:
Пример
Код:

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssPostInstall then
    begin
      UnPackError:= UnPack(Archives)
      if UnPackError = 0 then
        SetTaskBarTitle(SetupMessage(msgSetupAppTitle))
      else
        begin
          // Error occured, uninstall it then
          Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n); //откат установки из-за ошибки unarc.dll
          SetTaskBarTitle(SetupMessage(msgErrorTitle))
          WizardForm.Caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
        end;
      ExecAndWait(ExpandConstant('{sys}\notepad.exe'), '', '', SW_SHOW, True);
    end;
end;



Цитата:

Цитата Chelluga
Кто может показать пример скрипта с прогресс-баром?? »

Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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



Цитата:

Цитата Chelluga
Все примеры, которые отрыл в шапке темы - либо не работают вообще, либо стабильно показывают 0%. »

Что у вас не работает конкретно? Может расскажите подробней?

Chelluga 07-03-2010 23:36 1363296

Цитата:

Цитата Serega
Что у вас не работает конкретно? Может расскажите подробней? »

В шапке темы я нашел четире версии прогресс-бара. Обычный, с размером файлов, двойной и для внешних файлов. Последний я не стал трогать ибо не нужен.
Остальные пытался добавить к скрипту и в итоге - с размером и двойной вообще ничего не делают (не видать процентов и вообще изменений), а обычный стабильно показывает 0% при установке.
Скорее всего я чего-то не догоняю, что меня очень волнует.

Serega 08-03-2010 00:47 1363337

Цитата:

Цитата Chelluga
В шапке темы я нашел четире версии прогресс-бара. »

Лучше всегда конкретика, т.е. ссылку на пример...
Вот вам простой пример:
Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Files]
Source: C:\Program Files\Inno Setup 5\*; DestDir: {app}; AfterInstall: Progress

[Code]
var
  ProgressLabel, SizeLabel: TLabel;

procedure Progress;
var
  size: Integer;
begin
  with WizardForm.ProgressGauge do
    ProgressLabel.Caption:= IntToStr((Position-Min)/((Max - Min)/100)) + ' %';
  FileSize(ExpandConstant(CurrentFileName), size);
  SizeLabel.Caption:= 'Размер ' + ExtractFileName(ExpandConstant(CurrentFileName)) + ': ' +
                      IntToStr(size) + ' байт';
end;

procedure InitializeWizard();
begin
  ProgressLabel:= TLabel.Create(WizardForm);
  with WizardForm.ProgressGauge do
    begin
      ProgressLabel.Top := Top + Height + ScaleY(8);
      ProgressLabel.Left:= Left + Width/2 - ScaleX(8);
      ProgressLabel.AutoSize := True;
      ProgressLabel.Parent := WizardForm.InstallingPage;
    end;
  SizeLabel:= TLabel.Create(WizardForm);
  with WizardForm.ProgressGauge do
    begin
      SizeLabel.Top := Top + Height + ScaleY(8);
      SizeLabel.Left:= Left;
      SizeLabel.AutoSize := True;
      SizeLabel.Parent := WizardForm.InstallingPage;
    end;
end;


South 08-03-2010 01:01 1363344

Цитата:

Цитата Serega
Просто не поверите, я устал уже от FreeArc_Example.iss, обычно я игнорирую такие вопросы... »

та же кака на руборде, поэтому интерес к этим темам пропадает

ЗЫ сорри за оффтоп

A1EXXX 08-03-2010 01:45 1363361

South, согласен. Тут благо "почище"... хотя видать не на долго... :(

Chelluga 08-03-2010 12:03 1363495

Цитата:

Цитата Serega
Лучше всегда конкретика, т.е. ссылку на пример...
Вот вам простой пример: »

Ну не отображаются проценты. Ни в какую. Единственное, что приходит на ум: зависит ли отображение, этих самых процентов от темы в Винде? Если нет, тогда не знаю.

Serega 08-03-2010 13:10 1363529

Цитата:

Цитата Chelluga
Единственное, что приходит на ум: зависит ли отображение, этих самых процентов от темы в Винде? »

Никак не зависит, т.е. вы компилируете приведённый мной пример, без изменений и у вас не отображаются проценты?
При этом используете стандартный, родной компилятор, без каких либо изменений...
Скажу сразу, что такого быть не может...

Chelluga 08-03-2010 14:35 1363590

Цитата:

Цитата Serega
Никак не зависит, т.е. вы компилируете приведённый мной пример, без изменений и у вас не отображаются проценты?
При этом используете стандартный, родной компилятор, без каких либо изменений...
Скажу сразу, что такого быть не может... »

Я вставляю Ваш пример в мой скрипт (окромя названия и версии). Использую Инно 5.3.5. с ISPP. Никаких апгрейдов Инно не проводил. Проценты не отображаются.
(Сам скрипт сделал с помощью проги за авторством South + два скрипта почерпнутых в шапке (они работают). Соединял всё без Инновского Джойнера.

Serega 08-03-2010 15:07 1363606

Цитата:

Цитата Chelluga
Я вставляю Ваш пример в мой скрипт (окромя названия и версии). »

Прежде чем заявлять, что тот или иной скрипт наработает, попробуйте сначала скомпилировать предложенный вам пример, без всяких изменений и уже после этого можно заявить, что тот или иной пример не работает.
Если же вы изначально, что-то пытаетесь с ним сделать или изменяете под себя и в результате компиляции он у вас не работает, то уж точно не стоит говорить, что пример не работает... а это обычный результат безграмотных действий и вопрос нужно ставить по другому:
В результате объединения того и этого скрипта у меня не работает то и то...
или
Я изменил данный скрипт и почему-то не идёт то… и то...
но в результате, всё равно нужно показать ваш скрипт, чтоб люди могли вам указать, где вы могли сделать ошибку.

Chelluga 08-03-2010 15:45 1363618

Цитата:

Цитата Serega
Прежде чем заявлять, что тот или иной скрипт наработает, »

Я не говорил, что сам скрипт не работает. Я написал:
Цитата:

Цитата Chelluga
Ну не отображаются проценты. Ни в какую »

И что тогда? Выкладывать весь скрипт?? И у кого-то найдёться желание его просмотреть?

Serega 08-03-2010 16:33 1363646

Цитата:

Цитата Chelluga
Я не говорил, что сам скрипт не работает. Я написал: »

Но до этого:
Цитата:

Цитата Chelluga
Все примеры, которые отрыл в шапке темы - либо не работают вообще, либо стабильно показывают 0%. »

и как это понимать?
Цитата:

Цитата Chelluga
И что тогда? Выкладывать весь скрипт?? »

Необязательно, просто закомментируйте 36 строку и исправьте ошибку в 38 строке и тогда всё будет окей ;)
Цитата:

Цитата Chelluga
И у кого-то найдёться желание его просмотреть? »

Так вы покажите, те места, где объёдинили скрипты...

Chelluga 08-03-2010 16:44 1363656

Прошу прощения. Видимо мы друг друга недопоняли. Я ничуть не имел ввиду, что сами скрипты не работают. Я имел ввиду, что не работают они у меня.
Цитата:

Цитата Serega
Необязательно, просто закомментируйте 36 строку и исправьте ошибку в 38 строке и тогда всё будет окей »

Я нахимичил большой скрипт. Насоединял, точнее. В шапке я нашёл скрипт прогресс-бара
читать дальше »
[code]
var
ProgressLabel: TLabel;

procedure ExtLog();
begin
with WizardForm.ProgressGauge do begin
ProgressLabel.Caption:=IntToStr((Position-Min)/((Max - Min)/100)) + '%'
end
end;

procedure InitializeWizard4;
begin
ProgressLabel:=TLabel.Create(WizardForm)
with WizardForm.ProgressGauge do
begin
ProgressLabel.Top:=4
ProgressLabel.Left:=200
ProgressLabel.Caption:='0%'
ProgressLabel.AutoSize:=True
ProgressLabel.Font.Color:=clRed
ProgressLabel.Font.Style:=[fsBold]
ProgressLabel.Transparent:=True
ProgressLabel.Parent:=WizardForm.ProgressGauge
end;
end;

Он единственный выводит надпись, но эта надпись - стабильные 0%.
Собственно весь скрипт:
читать дальше »

; Скрипт создан с помощью
; IS GameScript Generator by South
; специально для www.csmania.ru

[Setup]
SourceDir=.
OutputDir=Setup
AppName=Disciples III
AppVerName=Disciples III
AppVersion=1.04
AppPublisher=.dat
AppCopyright=.dat
AppPublisherURL=www.Chel-VasilOK.lamer
AppSupportURL=www.Chel-VasilOK.lamer
AppUpdatesURL=www.Chel-VasilOK.lamer
DefaultDirName={pf}\Disciples III
DefaultGroupName=Disciples III
AllowNoIcons=yes
InfoAfterFile=F:\Different\Техподдержка.txt
OutputBaseFilename=setup
WizardImageFile=F:\Different\Logo.bmp
WizardSmallImageFile=F:\Different\Disciples III.bmp
SetupIconFile=F:\Different\Disciples3.ico
WindowVisible=no
WindowShowCaption=no
WindowResizable=no
Compression=lzma/ultra
DiskSpanning=yes
DiskSliceSize=1073741824
SlicesPerDisk=1



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

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

[Files]
Source: F:\Different\install.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: F:\Different\Disciples III 0009.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: F:\Different\Disciples III 0012.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: F:\Different\Disciples III 0013.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: F:\Different\Disciples III 0015.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: F:\Different\Disciples III 0019.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: F:\Different\Disciples III 0022.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: F:\Different\Disciples III 0024.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: F:\Different\Disciples III 0026.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: F:\Different\Disciples III 0041.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: F:\Different\Disciples III 0042.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: F:\Different\Disciples III 0051.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: F:\Different\Disciples III 0057.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: F:\Different\Disciples III 0058.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: F:\Different\Disciples III 0064.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: F:\Different\Disciples III 0065.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: F:\Different\Disciples III 0070.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: F:\Different\Disciples III 0073.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: F:\Different\Disciples III 0077.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: F:\Different\DisciplesIII 2010-01-22 16-37-13-17.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: F:\Different\DisciplesIII 2010-01-22 16-37-27-04.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: F:\Different\DisciplesIII 2010-01-22 16-38-49-14.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: F:\Different\DisciplesIII 2010-01-22 16-38-52-84.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: F:\Different\DisciplesIII 2010-01-22 16-39-03-42.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: F:\Different\DisciplesIII 2010-01-22 16-48-03-43.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: F:\Different\Disciples III 0023.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: isgsg.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: bass.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: innocallback.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: F:\Different\elves_battle2.mp3; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: F:\Different\humans_battle1.mp3; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: F:\Different\humans_battle2.mp3; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression

Source: H:\Games\Akella Games\Disciples III\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension

[Icons]
Name: {group}\Disciples III; Filename: {app}\DisciplesIII.exe; WorkingDir: {app}
Name: {userdesktop}\Disciples III; Filename: {app}\DisciplesIII.exe; WorkingDir: {app}; Tasks: desktopicon
Name: {group}\{cm:UninstallProgram,Disciples III}; Filename: {uninstallexe}

[Registry]
Root: HKLM; SubKey: Software\Disciples III; ValueType: string; ValueName: Version; ValueData: 1.04; Flags: CreateValueIfDoesntExist UnInsClearValue deletevalue noerror
Root: HKLM; SubKey: Software\Disciples III; ValueType: string; ValueName: InstallPath; ValueData: {app}; Flags: CreateValueIfDoesntExist UnInsClearValue deletevalue noerror

[Run]
Description: {cm:LaunchProgram, Disciples III}; Filename: {app}\DisciplesIII.exe; WorkingDir: {app}; Flags: nowait postinstall skipifsilent unchecked

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

[code]
type
HSTREAM=DWORD;
TTimerProc=procedure(uTimerID,uMessage:UINT;dwUser,dw1,dw2:DWORD);
const
Indent=25;
dURL=2;

var
URLLabel,URLLabelShadow:TLabel;
MP3List:TStringList;
CurrentMP3:integer;
hMP3:HWND;
TimerID:LongWord;

function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall delayload';
function ssInitialize(hParent:HWND;ssTimeShow:integer;FadeOut:boolean;StretchMode:integer;BkgColor:DWORD):boo lean; external 'ssInitialize@files:isgsg.dll stdcall delayload';
procedure ssDeInitialize; external 'ssDeInitialize@files:isgsg.dll stdcall delayload';
procedure ssSetBkgImage(FileName:PChar); external 'ssSetBkgImage@files:isgsg.dll stdcall delayload';
procedure ssAddImage(FileName:PChar); external 'ssAddImage@files:isgsg.dll stdcall delayload';
procedure ssStartShow; external 'ssStartShow@files:isgsg.dll stdcall delayload';
procedure ssStopShow; external 'ssStopShow@files:isgsg.dll stdcall delayload';
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';
function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';
function SetTimer(hWnd:HWND;nIDEvent,uElapse:UINT;lpTimerFunc:LongWord{TFNTimerProc}):UINT; external 'SetTimer@user32.dll stdcall delayload';
function KillTimer(hWnd:HWND;uIDEvent:UINT):BOOL; external 'KillTimer@user32.dll stdcall delayload';
function BASS_ChannelIsActive(Handle:HWND):DWORD; external 'BASS_ChannelIsActive@files:bass.dll stdcall';
function BASS_SetConfig(Option,Value:DWORD):DWORD; external 'BASS_SetConfig@files:bass.dll stdcall';
function BASS_Init(Device:integer;Freq,Flags:DWORD;Win:HWND;CLSID:integer):boolean; external 'BASS_Init@files:bass.dll stdcall delayload';
function BASS_StreamCreateFile(Mem:BOOL;f:PChar;Offset:DWORD;Length:DWORD;Flags:DWORD):HSTREAM; external 'BASS_StreamCreateFile@files:bass.dll stdcall';
function BASS_StreamFree(Handle:HWND):boolean; external 'BASS_StreamFree@files:bass.dll stdcall';
function BASS_ChannelPlay(Handle:HWND;Restart:boolean):boolean; external 'BASS_ChannelPlay@files:bass.dll stdcall';
function BASS_Start: Boolean; external 'BASS_Start@files:bass.dll stdcall';
function BASS_Stop: Boolean; external 'BASS_Stop@files:bass.dll stdcall';
function BASS_Free: Boolean; external 'BASS_Free@files:bass.dll stdcall delayload';
function WrapTimerProc(CallBack:TTimerProc;ParamCount:integer):LongWord; external 'wrapcallback@files:innocallback.dll stdcall';

procedure TimerTick(uTimerID,uMessage:UINT;dwUser,dw1,dw2:DWORD);
begin
if BASS_ChannelIsActive(hMP3)=0 then begin
BASS_Stop;
BASS_StreamFree(hMP3);
hMP3:=BASS_StreamCreateFile(False,PChar(MP3List.Strings[CurrentMP3]),0,0,0);
BASS_Start;
if hMP3<>0 then
if BASS_ChannelPlay(hMP3,True) then begin
CurrentMP3:=CurrentMP3+1;
if CurrentMP3>MP3List.Count-1 then CurrentMP3:=0;
end;
end;
end;

procedure URLLabelClick(Sender: TObject);
var
ErrorCode:integer;
begin
ShellExec('open','www.Chel-VasilOK.lamer','','',SW_SHOWNORMAL,ewNoWait,ErrorCode);
end;

procedure URLLabelMouseDown(Sender:TObject;Button:TMouseButton;Shift:TShiftState;X,Y:Integer);
begin
URLLabel.Top:=URLLabel.Top+dURL;
URLLabel.Left:=URLLabel.Left+dURL;
URLLabel.Font.Style:=URLLabel.Font.Style+[fsUnderline];
URLLabel.Font.Color:=clBlue;
URLLabelShadow.Visible:=False;
end;

procedure URLLabelMouseUp(Sender:TObject;Button:TMouseButton;Shift:TShiftState;X,Y:Integer);
begin
URLLabel.Top:=URLLabel.Top-dURL;
URLLabel.Left:=URLLabel.Left-dURL;
URLLabel.Font.Style:=URLLabel.Font.Style-[fsUnderline];
URLLabel.Font.Color:=clYellow;
URLLabelShadow.Visible:=True;
end;

function InitializeSetup1:boolean;
begin
ExtractTemporaryFile('elves_battle2.mp3');
ExtractTemporaryFile('humans_battle1.mp3');
ExtractTemporaryFile('humans_battle2.mp3');
MP3List:=TStringList.Create;
MP3List.Add(ExpandConstant('{tmp}')+'\elves_battle2.mp3');
MP3List.Add(ExpandConstant('{tmp}')+'\humans_battle1.mp3');
MP3List.Add(ExpandConstant('{tmp}')+'\humans_battle2.mp3');
CurrentMP3:=0;
Result:=True;
end;

procedure InitializeWizard1;
begin
URLLabelShadow:=TLabel.Create(WizardForm);
with URLLabelShadow do begin
Top:=ScaleY(331);
Left:=ScaleX(25);
Caption:='www.Chel-VasilOK.lamer';
AutoSize:=True;
Parent:=WizardForm;
Transparent:=True;
Font.Color:=$7FFFD4;
Font.Size:=9;
Font.Style:=Font.Style+[fsBold];
end;
URLLabel:=TLabel.Create(WizardForm);
with URLLabel do begin
Top:=ScaleY(331)-dURL;
Left:=ScaleX(25)-dURL;
Caption:='www.Chel-VasilOK.lamer';
AutoSize:=True;
Parent:=WizardForm;
Cursor:=crHand;
Transparent:=True;
Font.Color:=clGreen;
Font.Size:=9;
Font.Style:=Font.Style+[fsBold];
BringToFront;
OnClick:=@URLLabelClick;
OnMouseDown:=@URLLabelMouseDown;
OnMouseUp:=@URLLabelMouseUp;
end;
ExtractTemporaryFile('Disciples III 0023.jpg');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\Disciples III 0023.jpg',1000,3000,1000,0,255,False,$FFFFFF,10);
TimerID:=SetTimer(0,0,500,WrapTimerProc(@TimerTick,5));
BASS_Init(-1,44100,0,0,0);
BASS_SetConfig(5,100);
BASS_SetConfig(6,100);
ssInitialize(GetWindowLong(MainForm.Handle,-8),10,True,2,$FF000000);
ExtractTemporaryFile('install.jpg');
ssSetBkgImage(ExpandConstant('{tmp}')+'\install.jpg');
end;

procedure CurStepChanged1(CurStep: TSetupStep);
begin
if CurStep=ssInstall then begin
ExtractTemporaryFile('Disciples III 0009.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Disciples III 0009.jpg');
ExtractTemporaryFile('Disciples III 0012.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Disciples III 0012.jpg');
ExtractTemporaryFile('Disciples III 0013.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Disciples III 0013.jpg');
ExtractTemporaryFile('Disciples III 0015.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Disciples III 0015.jpg');
ExtractTemporaryFile('Disciples III 0019.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Disciples III 0019.jpg');
ExtractTemporaryFile('Disciples III 0022.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Disciples III 0022.jpg');
ExtractTemporaryFile('Disciples III 0024.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Disciples III 0024.jpg');
ExtractTemporaryFile('Disciples III 0026.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Disciples III 0026.jpg');
ExtractTemporaryFile('Disciples III 0041.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Disciples III 0041.jpg');
ExtractTemporaryFile('Disciples III 0042.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Disciples III 0042.jpg');
ExtractTemporaryFile('Disciples III 0051.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Disciples III 0051.jpg');
ExtractTemporaryFile('Disciples III 0057.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Disciples III 0057.jpg');
ExtractTemporaryFile('Disciples III 0058.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Disciples III 0058.jpg');
ExtractTemporaryFile('Disciples III 0064.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Disciples III 0064.jpg');
ExtractTemporaryFile('Disciples III 0065.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Disciples III 0065.jpg');
ExtractTemporaryFile('Disciples III 0070.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Disciples III 0070.jpg');
ExtractTemporaryFile('Disciples III 0073.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Disciples III 0073.jpg');
ExtractTemporaryFile('Disciples III 0077.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Disciples III 0077.jpg');
ExtractTemporaryFile('DisciplesIII 2010-01-22 16-37-13-17.bmp');
ssAddImage(ExpandConstant('{tmp}')+'\DisciplesIII 2010-01-22 16-37-13-17.bmp');
ExtractTemporaryFile('DisciplesIII 2010-01-22 16-37-27-04.bmp');
ssAddImage(ExpandConstant('{tmp}')+'\DisciplesIII 2010-01-22 16-37-27-04.bmp');
ExtractTemporaryFile('DisciplesIII 2010-01-22 16-38-49-14.bmp');
ssAddImage(ExpandConstant('{tmp}')+'\DisciplesIII 2010-01-22 16-38-49-14.bmp');
ExtractTemporaryFile('DisciplesIII 2010-01-22 16-38-52-84.bmp');
ssAddImage(ExpandConstant('{tmp}')+'\DisciplesIII 2010-01-22 16-38-52-84.bmp');
ExtractTemporaryFile('DisciplesIII 2010-01-22 16-39-03-42.bmp');
ssAddImage(ExpandConstant('{tmp}')+'\DisciplesIII 2010-01-22 16-39-03-42.bmp');
ExtractTemporaryFile('DisciplesIII 2010-01-22 16-48-03-43.bmp');
ssAddImage(ExpandConstant('{tmp}')+'\DisciplesIII 2010-01-22 16-48-03-43.bmp');
ssStartShow;
end;
if CurStep=ssPostInstall then ssStopShow;
end;

procedure CurPageChanged1(CurPageID: Integer);
begin
if CurPageID=wpInstalling then begin
WizardForm.MainPanel.Visible:=False;
WizardForm.Bevel1.Visible:=False;
WizardForm.Width:=ScaleX(395);
WizardForm.Height:=ScaleY(142);
WizardForm.Left:=ScaleX(GetSystemMetrics(0)-WizardForm.Width-Indent);
WizardForm.Top:=ScaleY(GetSystemMetrics(1)-WizardForm.Height-Indent);
WizardForm.InnerNotebook.Left:=ScaleX(10);
WizardForm.InnerNotebook.Top:=ScaleY(10);
WizardForm.InnerNotebook.Width:=ScaleX(370);
WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(20);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(40);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(154);
WizardForm.CancelButton.Top:=ScaleY(80);
end;
if (CurPageID=wpFinished) or (CurPageID=wpInfoAfter) then begin
if WizardForm.Width<>502 then begin
WizardForm.Visible:=False;
WizardForm.Width:=ScaleX(502);
WizardForm.Height:=ScaleY(392);
WizardForm.Left:=(GetSystemMetrics(0)-WizardForm.Width) div 2;
WizardForm.Top:=(GetSystemMetrics(1)-WizardForm.Height) div 2;
WizardForm.MainPanel.Visible:=True;
WizardForm.Bevel1.Visible:=True;
WizardForm.InnerNotebook.Left:=ScaleX(40);
WizardForm.InnerNotebook.Top:=ScaleY(72);
WizardForm.InnerNotebook.Width:=ScaleX(417);
WizardForm.Visible:=True;
end;
end;
end;

procedure DeinitializeSetup1;
begin
KillTimer(0,TimerID);
BASS_Stop;
BASS_Free;
MP3List.Free;
ssDeInitialize;
end;

\\\\\тут был скрипт на проверку устройств, но пришлось вырезать из-за ограничения форума в 30000 символов\\\\\\

var
NeedSize:Integer;
FreeMB, TotalMB: Cardinal;
NeedSpaceLabel: TLabel;

VolumeName, FileSystemName: String;
VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint;
ListBox: TListBox;
StartMenuTreeView: TStartMenuFolderTreeView;

procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False else
WizardForm.NextButton.Enabled := True; end;

procedure GetNeedSpaceCaption;
begin
if NeedSize > 1024 then
NeedSpaceLabel.Caption := 'Требуется как минимум '+ FloatToStr(round(NeedSize/1024*100)/100) + ' Гб свободного дискового пространства.' else
NeedSpaceLabel.Caption := 'Требуется как минимум '+ IntToStr(NeedSize)+ ' Мб свободного дискового пространства.';end;


function GetLogicalDrives: DWord; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(nDrive: String): Longint; external 'GetDriveTypeA@kernel32.dll stdcall';
function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';
function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';

Function ByteOTB(Bytes: Extended; noMB: Boolean): String; { Перевод числа в значение бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)}
Begin
if not noMB then Result:= FloatToStr(Int(Bytes)) +' Мб' else
if Bytes < 1024 then Result:= FloatToStr(Int(Bytes)) +' Бт' else
if Bytes/1024 < 1024 then Result:= FloatToStr(round((Bytes/1024)*10)/10) +' Кб' else
If Bytes/oneMB < 1024 then Result:= FloatToStr(round(Bytes/oneMB*100)/100) +' Мб' else
If Bytes/oneMB/1000 < 1024 then Result:= FloatToStr(round(Bytes/oneMB/1024*1000)/1000) +' Гб' else
Result:= FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Тб'
StringChange(Result, ',', '.')
End;

Function DellSP(String: String): String; { Удаление начальных, конечных и повторных пробелов }
Begin while (Pos(' ', String) > 0) do Delete(String, Pos(' ', String), 1); Result:= Trim(String); End;

Function CutString(String: String; MaxLength: Longint): String; { Обрезать строку до заданного кол-ва символов}
Begin
if Length(String) > MaxLength then Result:= Copy(String, 1, 6) +'...'+ Copy(String, Length(String) - MaxLength +9, MaxLength)
else Result:= String;
End;

Procedure GetDiskInfo(Disk: String);
Begin
FileSystemName:= StringOfChar(' ', 32); VolumeName:= StringOfChar(' ', 256);
GetVolumeInformation(Disk, VolumeName, 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, 31);
FileSystemName:= DelSp(FileSystemName); VolumeName:= DelSp(VolumeName); if VolumeName='' then VolumeName:='без метки';
End;

Procedure ListBoxRefresh; var FreeB, TotalB: Cardinal; Path, String: string; Begin
ListBox.Items.Clear
for n:= 1 to 31 do // диск 'А' пропустить
if (GetLogicalDrives and (1 shl n)) > 0 then
if (GetDriveType(Chr(ord('A') + n) +':\') = 2) or (GetDriveType(Chr(ord('A') + n) +':\') = 3) then
if GetSpaceOnDisk(Chr(ord('A') + n) +':\', True, FreeMB, TotalMB) then ListBox.Items.Add(Chr(ord('A') + n) +':');
for n:= 0 to ListBox.Items.Count -1 do begin
Path:= Copy(ListBox.Items[n],1,2) +'\' { если в накопителе нет диска, пропустить обновление }
if GetSpaceOnDisk(Path, False, FreeB, TotalB) and GetSpaceOnDisk(Path, True, FreeMB, TotalMB) then begin GetDiskInfo(Path);
if FreeB >= $7FFFFFFF then String:= PadL(ByteOrTB(FreeMB*oneMB, true),10) else String:= PadL(ByteOrTB(FreeB, true),10);
if TotalB >= $7FFFFFFF then begin TotalB:= TotalMB; FreeB:= FreeMB; String:= PadL(ByteOrTB(TotalMB*oneMB, true),11) +' всего -'+ String end else String:= PadL(ByteOrTB(TotalB, true),11) +' всего| '+ String;
ListBox.Items[n]:= Copy(Path,1,2) + String + PadL(FloatToStr(round(FreeB/TotalB*100)),3)+ '% своб|'+ PadL(FileSystemName,5)+ '| '+ CutString(VolumeName,9); end; end;
End;

Procedure ObjectOnClick(Sender: TObject); Begin
Case TObject(Sender) of
ListBox: for n:= 0 to ListBox.Items.Count-1 do if ListBox.Selected[n] then WizardForm.DirEdit.Text:= Copy(ListBox.Items[n],1,1) +Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text))
StartMenuTreeView: if StartMenuTreeView.Directory <> '' then WizardForm.GroupEdit.Text:= StartMenuTreeView.Directory else WizardForm.GroupEdit.Text:= '{#SetupSetting("DefaultGroupName")}'
WizardForm.NoIconsCheck: begin WizardForm.GroupEdit.Enabled:= not(WizardForm.GroupEdit.Enabled); StartMenuTreeView.Enabled:= WizardForm.GroupEdit.Enabled; WizardForm.GroupBrowseButton.Enabled:= WizardForm.GroupEdit.Enabled end;
end; End;

procedure InitializeWizard3();
begin
NeedSize := 6100; //Здесь указывается место для приложения
WizardForm.DiskSpaceLabel.Hide;
NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(220);
Width := ScaleX(209);
Height := ScaleY(13);
end;
ListBox:= TListBox.Create(WizardForm)
ListBox.SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 8, WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left, WizardForm.DiskSpaceLabel.Top - (WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 12))
ListBox.Font.Size:= 9
ListBox.Font.Style:= []
ListBox.Font.Name:= 'Courier New';
ListBox.OnClick:= @ObjectOnClick;
ListBox.Parent:= WizardForm.SelectDirPage;
WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;

procedure CurPageChanged3(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then
begin
GetNeedSpaceCaption;
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled:=False
ListBoxRefresh
end;
end;

[Files]
Source: H:\Games\Akella Games\Disciples III\Disciples III\*; DestDir: {app}; AfterInstall: ExtLog(); Flags: recursesubdirs

[code]
var
ProgressLabel: TLabel;

procedure ExtLog();
begin
with WizardForm.ProgressGauge do begin
ProgressLabel.Caption:=IntToStr((Position-Min)/((Max - Min)/100)) + '%'
end
end;

procedure InitializeWizard4;
begin
ProgressLabel:=TLabel.Create(WizardForm)
with WizardForm.ProgressGauge do
begin
ProgressLabel.Top:=4
ProgressLabel.Left:=200
ProgressLabel.Caption:='0%'
ProgressLabel.AutoSize:=True
ProgressLabel.Font.Color:=clRed
ProgressLabel.Font.Style:=[fsBold]
ProgressLabel.Transparent:=True
ProgressLabel.Parent:=WizardForm.ProgressGauge
end;
end;





function InitializeSetup(): Boolean;
begin
Result := InitializeSetup1(); if not Result then exit;
end;

procedure InitializeWizard();
begin
InitializeWizard1();
InitializeWizard2();
InitializeWizard3();
InitializeWizard4();
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
CurStepChanged1(CurStep);

end;

procedure CurPageChanged(CurPageID: Integer);
begin
CurPageChanged1(CurPageID);
CurPageChanged2(CurPageID);
CurPageChanged3(CurPageID);
end;

procedure DeinitializeSetup();
begin
DeinitializeSetup1();
end;

Serega 08-03-2010 17:03 1363663

Цитата:

Цитата Chelluga
Я нахимичил большой скрипт. »

Просто напросто, вы не совсем внимательно изучили пример, а именно добавьте ссылку на procedure ExtLog(); в секцию [Files], т.е.:
Код:

..........................
[Files]
..........................
Source: H:\Games\Akella Games\Disciples III\*; DestDir: {app}; AfterInstall: ExtLog; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
..........................


Chelluga 08-03-2010 17:22 1363679

Всё это есть, там где и весь код примера. Но на всяк поставил в начало...и оно заработало. Жииеесть. Весь косяк, точнее все неработающие (у меня) скрипты не работали только потому, что это: "AfterInstall: ExtLog;" и ему подобное я ставил в конце а не в начале.

В любом случае спасибо Вам за помощь.

alex2010 08-03-2010 18:42 1363736

а как сделать так, как у RG Механики?(если можно только код для вставки изображения)

Cartmans 08-03-2010 18:44 1363738

Вопрос:
что нужно делать что бы добиться максимального сжатия, но при этом что бы при распаковке требовало 1ГБ. Была игра, весила 6.17 ГБ, получилось ужать только до 5.36ГБ, но это очень мало, другие ужимали эту игру до 3ГБ

Выше сказанное о FreeArc'e

comsun 08-03-2010 22:30 1363873

Цитата:

Цитата Serega
Цитата comsun:
Подскажите как добавить в инсталлятор двоичные данные реестра? »
Подробней объясните, а лучше экспортируйте из реестра данные, которые хотите внести и покажите сам reg файл.
------- »

вот например рег-код
читать дальше »

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Licenses]

"{I4381D080AD75646D}"=hex(3):10,00,00,00
"{04381D080AD75646D}"=hex(3):5B,3E,86,0F,EF,81,A3,B4,26,6F,27,FF,5A,C4,29,D8,B4,\ 5E,E1,0C,BD,D2,64,D8,9F,CA,D1,0E,45,A4,67,63,6F,77,E8,9E,CE,12,0F,AB,1A,E6,8C,\ 6C,5C,C9,16,4C,71,CE,1E,E9,36,45,4E,B7,76,62,49,7C,81,22,65,A7,42,47,2F,7F,94,\ B6,D1,2F,6E,1B,13,AE,9E,52,76,8D,33,0B,EB,A9,E1,BA,48,D5,8B,79,97,39,2E,97,40,\ 43,8E,A8,22,C4,DE,0C,97,9B,EC,F5,40,6B,C2,AC,00,73,20,03,54,C7,BA,66,62,E0,F8,\ 86,2C,31,72,CA,F8,E5,89,67,4F,D6,30,31,C5,C1,54,C2,BB,97,B8,E1,3F,C8,21,52,8C,\ CF,18,C4,72,F6,2C,9D,B1,EB,1D,9D,EC,1B,EE,1F,17,23,DD,5C,86,37,65,7B,D8,4E,2F,\
9F,72,B5,42,EE,A7,40,68

Habetdin 09-03-2010 00:19 1363916

comsun,
Код:

[Registry]
Root: HKCU; SubKey: Software\Licenses; ValueType: binary; ValueName: {I4381D080AD75646D}; ValueData: 10,00,00,00

импорт через ISTool: Project - Import from file - Registry

Serega 09-03-2010 07:36 1364021

Цитата:

Цитата comsun
вот например рег-код »

Спасибо, в следующей версии программы, эту ошибку исправлю...
Цитата:

Цитата Habetdin
импорт через ISTool »

У вас ошибка, должно быть так:
Код:

[Registry]
Root: HKCU; SubKey: Software\Licenses; ValueType: binary; ValueName: {{I4381D080AD75646D}; ValueData: 10 00 00 00; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKCU; SubKey: Software\Licenses; ValueType: binary; ValueName: {{04381D080AD75646D}; ValueData: 5B 3E 86 0F EF 81 A3 B4 26 6F 27 FF 5A C4 29 D8 B4 5E E1 0C BD D2 64 D8 9F CA D1 0E 45 A4 67 63 6F 77 E8 9E CE 12 0F AB 1A E6 8C 6C 5C C9 16 4C 71 CE 1E E9 36 45 4E B7 76 62 49 7C 81 22 65 A7 42 47 2F 7F 94 B6 D1 2F 6E 1B 13 AE 9E 52 76 8D 33 0B EB A9 E1 BA 48 D5 8B 79 97 39 2E 97 40 43 8E A8 22 C4 DE 0C 97 9B EC F5 40 6B C2 AC 00 73 20 03 54 C7 BA 66 62 E0 F8 86 2C 31 72 CA F8 E5 89 67 4F D6 30 31 C5 C1 54 C2 BB 97 B8 E1 3F C8 21 52 8C CF 18 C4 72 F6 2C 9D B1 EB 1D 9D EC 1B EE 1F 17 23 DD 5C 86 37 65 7B D8 4E 2F 9F 72 B5 42 EE A7 40 68; Flags: uninsdeletevalue uninsdeletekeyifempty


comsun 09-03-2010 10:49 1364133

Serega, Работает!!!
Как всегда после Ваших ответов!
Спасибо!
Когда можно ждать новой версии Вашей программы?
Очень удобная и нужная.
Где будет релиз,в этой теме?
Ещё раз Огромное Спасибо!

Cartmans 09-03-2010 12:39 1364213

Кто-то ответит на мой вопрос?

Serega 09-03-2010 12:52 1364220

Цитата:

Цитата comsun
Когда можно ждать новой версии Вашей программы? »

Надеюсь в ближайшее время, работы проделано уже очень много, т.е. думаю на днях будет...

alex2010 09-03-2010 14:03 1364294

кто ответит на мой вопрос?
Цитата:

а как сделать так, как у RG Механики?(если можно только код для вставки изображения)


Cartmans 09-03-2010 16:15 1364427

alex2010, У меня скрипт на подобии. Вот скрин - http://xmages.net/upload/b3c0ea9d.png
Только вот скрипт случайно удалил, сейчас пишу заново.

Upd:
Цитата:

Цитата Cartmans
Вопрос:
что нужно делать что бы добиться максимального сжатия, но при этом что бы при распаковке требовало 1ГБ. Была игра, весила 6.17 ГБ, получилось ужать только до 5.36ГБ, но это очень мало, другие ужимали эту игру до 3ГБ
Выше сказанное о FreeArc'e »


alex2010 09-03-2010 16:51 1364459

Cartmans, как сделаешь, выложи плиз(если можно) только код для вставки изборбажения :)

Jerichoman 09-03-2010 18:36 1364562

Опять ошибки в том же скрипте, но уже другие

помогите http://upwap.ru/779001
Причем это появляется при попытке восстановить файлы обработанные precomp

Cartmans 09-03-2010 20:03 1364639

Цитата:

Цитата Cartmans
Вопрос:
что нужно делать что бы добиться максимального сжатия, но при этом что бы при распаковке требовало 1ГБ. Была игра, весила 6.17 ГБ, получилось ужать только до 5.36ГБ, но это очень мало, другие ужимали эту игру до 3ГБ
Выше сказанное о FreeArc'e »

Ну подскажите, я уже не могу ждать...

patrion 09-03-2010 20:26 1364663

Всем привет!
У кого есть скрип для распаковки perecomp + freearc ?
Нужно, что бы сначала распаковался freearc потом perecomp
Буду рад любым скриптам ( примерам)
Спс за внимание!

Lol2xD. 09-03-2010 20:27 1364664

Cartmans, какая игра?

Serega, спасибо тебе еще раз за помощь =))только вот одна проблема =(
не хочет запускаться бат файл =((

читать дальше »
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
UnPackError:= UnPack(Archives)
if UnPackError = 0 then
SetTaskBarTitle(SetupMessage(msgSetupAppTitle))
else
begin
// Error occured, uninstall it then
Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n); //откат установки из-за ошибки unarc.dll
SetTaskBarTitle(SetupMessage(msgErrorTitle))
WizardForm.Caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
end;
WizardForm.StatusLabel.Caption:='Распаковка файлов...';
ExecAndWait(ExpandConstant('{app}\rep.bat'), '', '', SW_SHOW, True);

батник

читать дальше »
@echo off
mode con cols=95 lines=3
color 0f
echo.
srep.exe -d WarGame.srep WarGame.rep
del /F /Q WarGame.srep
del /F /Q srep.dll

echo on
cls



Всё необходимое.На всякий случай

читать дальше »
http://rghost.ru/1130065

patrion 09-03-2010 20:28 1364666

Цитата:

Цитата Cartmans
Вопрос:
что нужно делать что бы добиться максимального сжатия, но при этом что бы при распаковке требовало 1ГБ. Была игра, весила 6.17 ГБ, получилось ужать только до 5.36ГБ, но это очень мало, другие ужимали эту игру до 3ГБ
Выше сказанное о FreeArc'e » »

Впиши это в категорию сжатия!
-mx -lc2gb -ld1gb (где lc2gb это ск у тебя на компе ОЗУ, ld1gb ск нужно для распаковки)

Cartmans 09-03-2010 20:40 1364674

patrion, Во спасибо!

vint56 10-03-2010 05:50 1364979

Lol2xD., у тебя вскрипте написано
ExecAndWait(ExpandConstant('{app}\1.bat'), '', '', SW_SHOW, True); а у тебя сам батник rep.bat измени на ExecAndWait(ExpandConstant('{app}\rep.bat'), '', '', SW_SHOW, True);

Lol2xD. 10-03-2010 13:49 1365216

vint56, ды я ошибся не тот скрипт в архив кинул.ДАже если всё правильно прописано не хочет работать=((

Можешь как нибудь помочь?

читать дальше »
http://rghost.ru/1130065



правильный скрипт
читать дальше »

#include "ExecAndWait.iss"

[Setup]
AppName=Gears of War
AppVerName=Gears of War v.1.2 RUS
DefaultDirName={pf}\Gears of War
UsePreviousAppDir=false
DirExistsWarning=no
ShowLanguageDialog=auto
OutputBaseFilename=setup
OutputDir=.
VersionInfoCopyright=
VersionInfoCompany=Navvy
DefaultGroupName=Gears of War
UsePreviousGroup=false
UsePreviousSetupType=false
WizardImageFile=G:\rep\gow\Gears_of_W_2m.bmp
WizardSmallImageFile=G:\rep\gow\Gears_of_W_9m.bmp
SetupIconFile=G:\rep\gow\Icon_1.ico
AppID={{30800035-9A34-4975-8138-B0ED67D394D1}
InternalCompressLevel=ultra64
SolidCompression=true
Compression=lzma/ultra64
AppCopyright=Navvy
PrivilegesRequired=none

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

[CustomMessages]


rus.ArcBreak=Установка прервана!
rus.ExtractedInfo=Распаковано %1 Мб из %2 Мб
rus.ArcInfo=Архив: %1 из %2
rus.ArcTitle=Распаковка архивов FreeArc
rus.ArcError=Распаковщик FreeArc вернул код ошибки: %1
rus.ArcFail=Распаковка не завершена!
rus.AllProgress=Общий прогресс распаковки: %1%%
rus.ArcBroken=Возможно, архив %1 повреждён%nили недостаточно места на диске назначения.
rus.Extracting=Распаковывается: %1
rus.taskbar=%1%%, жди %2
rus.remains=Осталось ждать %1
rus.LongTime=вечно
rus.ending=завершение
rus.hour=часов
rus.min=мин
rus.sec=сек

[Files]
;Source: *.arc; DestDir: {app}; Flags: nocompression
Source: unarc.dll; DestDir: {tmp}; Flags: dontcopy deleteafterinstall
Source: InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy

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

[code]
const
Archives = '{src}\*.arc'; // укажите расположение архивов FreeArc; для внешних файлов строку в [Files] добавлять необязательно


CP_ACP = 0; CP_UTF8 = 65001;
oneMb = 1048576;

type
#ifdef UNICODE ; если у вас ошибка на этой строке, то установите препроцессор или исправьте скрипт для вашей версии Inno Setup
#define A "W"
#else
#define A "A" ; точка входа в SetWindowText, {#A} меняется на A или W в зависимости от версии

#endif
#if Ver < 84018176
AnsiString = String; // There is no need for this line in Inno Setup 5.2.4 and above (для Inno Setup версий 5.2.4 и выше эта строка не нужна)
#endif

TMyMsg = record
hwnd: HWND;
message: UINT;
wParam: Longint;
lParam: Longint;
time: DWORD;
pt: TPoint;
end;

TFreeArcCallback = function (what: PAnsiChar; int1, int2: Integer; str: PAnsiChar): Integer;
TArc = record Path: string; OrigSize: Integer; Size: Extended; end;

var
ExtractFile: TLabel;
lblExtractFileName: TLabel;
btnCancelUnpacking: TButton;
CancelCode, n, UnPackError, StartInstall: Integer;
Arcs: array of TArc;
msgError: string;
lastMb: Integer;
baseMb: Integer;
totalUncompressedSize: Integer; // total uncompressed size of archive data in mb
LastTimerEvent: DWORD;

Function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: string; cbMultiByte: integer; lpWideCharStr: string; cchWideChar: integer): longint; external 'MultiByteToWideChar@kernel32.dll stdcall';
Function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: string; cchWideChar: integer; lpMultiByteStr: string; cbMultiByte: integer; lpDefaultChar: integer; lpUsedDefaultChar: integer): longint; external 'WideCharToMultiByte@kernel32.dll stdcall';

function PeekMessage(var lpMsg: TMyMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMyMsg): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: TMyMsg): Longint; external 'DispatchMessageA@user32.dll stdcall';

Function OemToChar(lpszSrc, lpszDst: AnsiString): longint; external 'OemToCharA@user32.dll stdcall';
function GetWindowLong(hWnd, nIndex: Integer): Longint; external 'GetWindowLongA@user32 stdcall delayload';
function SetWindowText(hWnd: Longint; lpString: String): Longint; external 'SetWindowText{#A}@user32 stdcall delayload';

function GetTickCount: DWord; external 'GetTickCount@kernel32';
function WrapFreeArcCallback (callback: TFreeArcCallback; paramcount: integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function FreeArcExtract (callback: longword; cmd1,cmd2,cmd3,cmd4,cmd5,cmd6,cmd7,cmd8,cmd9,cmd10: PAnsiChar): integer; external 'FreeArcExtract@files:unarc.dll cdecl';

procedure AppProcessMessage;
var
Msg: TMyMsg;
begin
while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;

// Перевод числа в строку с точностью 3 знака (%.3n) с округлением дробной части, если она есть
Function NumToStr(Float: Extended): String;
Begin
Result:= Format('%.3n', [Float]); StringChange(Result, ',', '.');
while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Length(Result) > 1) do
SetLength(Result, Length(Result)-1);
End;

function cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;

Function Size64(Hi, Lo: Integer): Extended;
Begin
Result:= Lo;
if Lo<0 then Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
for Hi:= Hi-1 Downto 0 do
Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
End;

// Converts OEM encoded string into ANSI
// Преобразует OEM строку в ANSI кодировку
function OemToAnsiStr( strSource: AnsiString): AnsiString;
var
nRet : longint;
begin
SetLength( Result, Length( strSource ) );
nRet:= OemToChar( strSource, Result );
end;

// Converts ANSI encoded string into UTF-8
// Преобразует строку из ANSI в UTF-8 кодировку
function AnsiToUtf8( strSource: string ): string;
var
nRet : integer;
WideCharBuf: string;
MultiByteBuf: string;
begin
strSource:= strSource + chr(0);
SetLength( WideCharBuf, Length( strSource ) * 2 );
SetLength( MultiByteBuf, Length( strSource ) * 2 );

nRet:= MultiByteToWideChar( CP_ACP, 0, strSource, -1, WideCharBuf, Length(WideCharBuf) );
nRet:= WideCharToMultiByte( CP_UTF8, 0, WideCharBuf, -1, MultiByteBuf, Length(MultiByteBuf), 0, 0);

Result:= MultiByteBuf;
end;

// OnClick event function for btnCancel
procedure btnCancelUnpackingOnClick(Sender: TObject);
begin
if MsgBox( SetupMessage( msgExitSetupMessage ), mbInformation, MB_YESNO ) = IDYES then
CancelCode:= -127;
end;

var origsize: Integer;
// The callback function for getting info about FreeArc archive
function FreeArcInfoCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
begin
if string(what)='origsize' then origsize := Mb else
if string(what)='compsize' then else
if string(what)='total_files' then else
Result:= CancelCode;
end;

// Returns decompressed size of files in archive
function ArchiveOrigSize(arcname: string): Integer;
var
callback: longword;
Begin
callback:= WrapFreeArcCallback(@FreeArcInfoCallback,4); //FreeArcInfoCallback has 4 arguments
CancelCode:= 0;
AppProcessMessage;
try
// Pass the specified arguments to 'unarc.dll'
Result:= FreeArcExtract (callback, 'l', '--', AnsiToUtf8(arcname), '', '', '', '', '', '', '');
if CancelCode < 0 then Result:= CancelCode;
if Result >= 0 then Result:= origsize;
except
Result:= -63; // ArcFail
end;
end;

// Scans the specified folders for archives and add them to list
function FindArcs(dir: string): Extended;
var
FSR: TFindRec;
Begin
Result:= 0;
if FindFirst(ExpandConstant(dir), FSR) then begin
try
repeat
// Skip everything but the folders
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then CONTINUE;
n:= GetArrayLength(Arcs);
// Expand the folder list
SetArrayLength(Arcs, n +1);
Arcs[n].Path:= ExtractFilePath(ExpandConstant(dir)) + FSR.Name;
Arcs[n].Size:= Size64(FSR.SizeHigh, FSR.SizeLow);
Result:= Result + Arcs[n].Size;
Arcs[n].OrigSize := ArchiveOrigSize(Arcs[n].Path)
totalUncompressedSize := totalUncompressedSize + Arcs[n].OrigSize
until not FindNext(FSR);
finally
FindClose(FSR);
end;
end;
End;

// Sets the TaskBar title
Procedure SetTaskBarTitle(Title: String); var h: Integer;
Begin
h:= GetWindowLong(MainForm.Handle, -8); if h <> 0 then SetWindowText(h, Title);
End;

// Converts milliseconds to human-readable time
// Конвертирует милисекунды в человеко-читаемое изображение времени
Function TicksToTime(Ticks: DWord; h,m,s: String; detail: Boolean): String;
Begin
if detail {hh:mm:ss format} then
Result:= PADZ(IntToStr(Ticks/3600000), 2) +':'+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +':'+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2)
else if Ticks/3600 >= 1000 {more than hour} then
Result:= IntToStr(Ticks/3600000) +h+' '+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +m
else if Ticks/60 >= 1000 {1..60 minutes} then
Result:= IntToStr(Ticks/60000) +m+' '+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2) +s
else Result:= IntToStr(Ticks/1000) +s {less than one minute}
End;

// The main callback function for unpacking FreeArc archives
function FreeArcCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
var
percents, Remaining: Integer;
s: String;
begin
if GetTickCount - LastTimerEvent > 1000 then begin
// This code will be executed once each 1000 ms (этот код будет выполняться раз в 1000 миллисекунд)
// ....
// End of code executed by timer
LastTimerEvent := LastTimerEvent+1000;
end;

if string(what)='filename' then begin
// Update FileName label
lblExtractFileName.Caption:= FmtMessage( cm( 'Extracting' ), [OemToAnsiStr( str )] )
end else if (string(what)='write') and (totalUncompressedSize>0) and (Mb>lastMb) then begin
// Assign to Mb *total* amount of data extracted to the moment from all archives
lastMb := Mb;
Mb := baseMb+Mb;

// Update progress bar
WizardForm.ProgressGauge.Position:= Mb;

// Show how much megabytes/archives were processed up to the moment
percents:= (Mb*1000) div totalUncompressedSize;
s := FmtMessage(cm('ExtractedInfo'), [IntToStr(Mb), IntToStr(totalUncompressedSize)]);
if GetArrayLength(Arcs)>1 then
s := s + '. '+FmtMessage(cm('ArcInfo'), [IntToStr(n+1), IntToStr(GetArrayLength(Arcs))])
ExtractFile.Caption := s

// Calculate and show current percents
percents:= (Mb*1000) div totalUncompressedSize;
s:= FmtMessage(cm('AllProgress'), [Format('%.1n', [Abs(percents/10)])]);
if Mb > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((totalUncompressedSize - Mb)/Mb)) else Remaining:= 0;
if Remaining = 0 then SetTaskBarTitle(cm('ending')) else begin
s:= s + '. '+FmtMessage(cm('remains'), [TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)])
SetTaskBarTitle(FmtMessage(cm('taskbar'), [IntToStr(percents/10), TicksToTime(Remaining, 'h', 'm', 's', false)]))
end;
WizardForm.FileNameLabel.Caption := s
end;
AppProcessMessage;
Result:= CancelCode;
end;

// Extracts all found archives
function UnPack(Archives: string): Integer;
var
totalCompressedSize: Extended;
callback: longword;
FreeMB, TotalMB: Cardinal;
begin
// Display 'Extracting FreeArc archive'
lblExtractFileName.Caption:= '';
lblExtractFileName.Show;
ExtractFile.caption:= cm('ArcTitle');
ExtractFile.Show;
// Show the 'Cancel unpacking' button and set it as default button
btnCancelUnpacking.Caption:= WizardForm.CancelButton.Caption;
btnCancelUnpacking.Show;
WizardForm.ActiveControl:= btnCancelUnpacking;
WizardForm.ProgressGauge.Position:= 0;
// Get the size of all archives
totalUncompressedSize := 0;
totalCompressedSize := FindArcs(Archives);
WizardForm.ProgressGauge.Max:= totalUncompressedSize;
// Other initializations
callback:= WrapFreeArcCallback(@FreeArcCallback,4); //FreeArcCallback has 4 arguments
StartInstall:= GetTickCount; {время начала распаковки}
LastTimerEvent:= GetTickCount;
baseMb:= 0

for n:= 0 to GetArrayLength(Arcs) -1 do
begin
lastMb := 0
CancelCode:= 0;
AppProcessMessage;
try
// Pass the specified arguments to 'unarc.dll'
Result:= FreeArcExtract (callback, 'x', '-o+', '-dp' + AnsiToUtf8( ExpandConstant('{app}') ), '--', AnsiToUtf8(Arcs[n].Path), '', '', '', '', '');
if CancelCode < 0 then Result:= CancelCode;
except
Result:= -63; // ArcFail
end;
baseMb:= baseMb+lastMb

// Error occured
if Result <> 0 then
begin
msgError:= FmtMessage(cm('ArcError'), [IntToStr(Result)]);
GetSpaceOnDisk(ExtractFileDrive(ExpandConstant('{app}')), True, FreeMB, TotalMB);
case Result of
-1: if FreeMB < 32 {Мб на диске} then msgError:= SetupMessage(msgDiskSpaceWarningTitle)
else msgError:= msgError + #13#10 + FmtMessage(cm('ArcBroken'), [ExtractFileName(Arcs[n].Path)]);
-127: msgError:= cm('ArcBreak'); //Cancel button
-63: msgError:= cm('ArcFail');
end;
// MsgBox(msgError, mbInformation, MB_OK); //сообщение показывается на странице завершения
Log(msgError);
Break; //прервать цикл распаковки
end;
end;
// Hide labels and button
WizardForm.FileNameLabel.Caption:= '';
lblExtractFileName.Hide;
ExtractFile.Hide;
btnCancelUnpacking.Hide;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
UnPackError:= UnPack(Archives)
if UnPackError = 0 then
SetTaskBarTitle(SetupMessage(msgSetupAppTitle))
else
begin
// Error occured, uninstall it then
Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n); //откат установки из-за ошибки unarc.dll
SetTaskBarTitle(SetupMessage(msgErrorTitle))
WizardForm.Caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
end;
WizardForm.StatusLabel.Caption:='Распаковка файлов...';
ExecAndWait(ExpandConstant('{app}\rep.bat'), '', '', SW_SHOW, True);

end;
end;

// стандартный способ отката (не нужна CurPageChanged), но архивы распаковываются до извлечения файлов инсталлятора
// if CurStep = ssInstall then
// if UnPack(Archives) <> 0 then Abort;

Procedure CurPageChanged(CurPageID: Integer);
Begin
if (CurPageID = wpFinished) and (UnPackError <> 0) then
begin // Extraction was unsuccessful (распаковщик вернул ошибку)
// Show error message
WizardForm.FinishedLabel.Font.Color:= $0000C0; // red (красный)
WizardForm.FinishedLabel.Height:= WizardForm.FinishedLabel.Height * 2;
WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) + #13#10#13#10 + msgError;
end;
End;

procedure InitializeWizard();
begin
with WizardForm.ProgressGauge do
begin
// Create a label to show current FileName being extracted
lblExtractFileName:= TLabel.Create(WizardForm);
lblExtractFileName.parent:=WizardForm.InstallingPage;
lblExtractFileName.autosize:=false;
lblExtractFileName.Width:= Width;
lblExtractFileName.top:=Top + ScaleY(35);
lblExtractFileName.Caption:= '';
lblExtractFileName.Hide;

// Create a label to show percentage
ExtractFile:= TLabel.Create(WizardForm);
ExtractFile.parent:=WizardForm.InstallingPage;
ExtractFile.autosize:=false;
ExtractFile.Width:= Width;
ExtractFile.top:=lblExtractFileName.Top + ScaleY(16);
ExtractFile.caption:= '';
ExtractFile.Hide;
end;

// Create a 'Cancel unpacking' button and hide it for now.
btnCancelUnpacking:=TButton.create(WizardForm);
btnCancelUnpacking.Parent:= WizardForm;
btnCancelUnpacking.SetBounds(WizardForm.CancelButton.Left, WizardForm.CancelButton.top, WizardForm.CancelButton.Width, WizardForm.CancelButton.Height);
btnCancelUnpacking.OnClick:= @btnCancelUnpackingOnClick;
btnCancelUnpacking.Hide;
end;

vint56 10-03-2010 14:03 1365224

Lol2xD., вот так попробуй
ExecAndWait(ExpandConstant('{app}\rep.bat'),'',ExpandConstant('{app}'), SW_SHOW,true);

Lol2xD. 10-03-2010 20:40 1365555

vint56, спс )))работает ))

skeptik007 11-03-2010 08:34 1365944

Кто нибудь знает, как использовать BitmapHelper.dll в InnoSetup???

ChVL 11-03-2010 19:26 1366408

Каким образом прописать действенную защиту скомпилированного файла от распаковки? Добавление рекомендуемых строчек в секцию [setup] Encryption и Password с соответствующей секцией [code] у распаковщиков вызывает только смех. Мало того, они ещё и Password показывают в явном виде.
Понимаю, что для специалистов не составит большого труда вскрыть любую защиту, но может всё-таки есть способ защититься хотя бы от стандартных распаковщиков?

Habetdin 11-03-2010 20:12 1366433

ChVL, используйте расширенную версию Inno Setup от Restools »

alex2010 11-03-2010 20:42 1366449

подскажите код для вставки изображения, вот как здесь:

Habetdin 11-03-2010 20:49 1366452

alex2010, http://slil.ru/28778952
Скрипт для Inno Setup от Restools
Размер и расположение картинки можно изменить на вкладке "WizardForm Designer"

alex2010 11-03-2010 21:26 1366473

Habetdin, вот что пишет:

как исправить?

Habetdin 11-03-2010 23:53 1366579

alex2010,
Цитата:

Цитата alex2010
как исправить? »

использовать Inno Setup от Restools :)

ChVL 12-03-2010 09:01 1366722

Habetdin,
Спасибо!
Работает. Надеюсь, какое-то время будет защищать...

Jerichoman 12-03-2010 10:00 1366748

Помогите
Цитата:

Цитата Jerichoman
ошибки в скрипте http://upwap.ru/779001
Причем это появляется при попытке восстановить файлы обработанные precomp »


alex2010 12-03-2010 12:42 1366887

Habetdin, спасибо, работает. только Вы меня немного не поняли, я хотел код, чтобы изображение было на весь инсталятор?

МИШАНЧИК 12-03-2010 12:52 1366893

Serega, подскажите пожалуйста!
При использовании в инсталяторе сторонних архивов в "Установка и удаление программ" размер установленного приложения определяется размером самого инсталятора без учёта архивов. Можно ли как-то сделать чтоб они плюсовались?

Habetdin 12-03-2010 13:25 1366919

alex2010, надо было выделить это на скрине, я думал, что вам баннер нужен :)
Вам нужно вот это:
Цитата:

Цитата Serega
Картинка на страницах инсталлятора - пример скрипта, показывающий как растянуть стандартную картинку на всю страницу »

;)

alex2010 12-03-2010 14:07 1366937

Habetdin, спасибо! :) только вот вылетает такая ошибка: (и еще на одном коде - тоже самое)
как исправить?
и еще по поводу
Цитата:

Цитата Serega
Картинка на страницах инсталлятора - пример скрипта, показывающий как растянуть стандартную картинку на всю страницу »

а откуда он будет брать файл самого изображения, или где прописывать файл изображения, в секции [Files]?

Habetdin 12-03-2010 14:12 1366946

Цитата:

Цитата alex2010
как исправить? »

Правильно объединить "CurPageChanged" :)
Выложите весь скрипт
Цитата:

Цитата alex2010
а откуда он будет брать файл самого изображения, или где прописывать файл изображения, в секции [Files]? »

Параметр WizardImageFile в секции Setup, пример:
Код:

[Setup]
WizardImageFile=D:\Setup\Image.bmp


alex2010 12-03-2010 14:22 1366962

Habetdin, вот сам скрипт:
читать дальше »

[Setup]
AppName=GTA SA + MP 0.3a
AppVerName=GTA SA + MP 0.3a
AppPublisher=RockStar, Inc.
AppPublisherURL=http://www.gta-sanandreas.com/
AppSupportURL=http://www.gta-sanandreas.com/
AppUpdatesURL=http://www.gta-sanandreas.com/
DefaultDirName={pf}\GTA SA + MP 0.3a
DefaultGroupName=GTA SA + MP 0.3a
OutputDir=D:\repack
OutputBaseFilename=GTA
Compression=lzma/ultra64
SolidCompression=true
InternalCompressLevel=ultra64
ShowLanguageDialog=no
DiskSpanning=true
DiskSliceSize=757664000
WizardImageFile=D:\image.bmp

[Languages]
Name: rus; MessagesFile: compiler:Default.isl

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

[Files]
Source: D:\Games\GTA San Andreas\gta_sa.exe; DestDir: {app}; Flags: ignoreversion
Source: D:\Games\GTA San Andreas\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs

[Icons]
Name: {group}\GTA SA + MP 0.3a; Filename: {app}\gta_sa.exe; WorkingDir: {app}; IconIndex: 0
Name: {commondesktop}\GTA SA + MP 0.3a; Filename: {app}\gta_sa.exe; Tasks: desktopicon; WorkingDir: {app}; IconIndex: 0

[Run]
Filename: {app}\gta_sa.exe; Description: {cm:LaunchProgram,GTA SA + MP 0.3a}; Flags: nowait postinstall skipifsilent

[CustomMessages]
rus.Space_1=Òðåáóåòñÿ ìåñòà íà äèñêå:
rus.Space_2=Äîñòóïíî ìåñòà íà äèñêå:

[code]
var
SelectDirText_1: TLabel;
FreeMB, TotalMB: Cardinal;
NeedSize: Integer;

//=================
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;
//=================
procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
SelectDirText_1.Caption := ExpandConstant('{cm:SPACE_2} ')+ NumToStr(round(FreeMB/1024*100)/100) + ' GB'
else
SelectDirText_1.Caption := ExpandConstant('{cm:SPACE_2} ')+ NumToStr(FreeMB)+ ' MB';
//---------------------------
if FreeMB < NeedSize then
begin
SelectDirText_1.Font.Color:= ClRed;
WizardForm.NextButton.Enabled := False;
end else
begin
SelectDirText_1.Font.Color:= ClBlack;
WizardForm.NextButton.Enabled := True;
end
end;
//===================
procedure GetNeedSpaceCaption;
begin
if NeedSize > 1024 then
WizardForm.DiskSpaceLabel.Caption := ExpandConstant('{cm:SPACE_1} ')+ NumToStr(round(NeedSize/1024*100)/100) + ' GB' else
WizardForm.DiskSpaceLabel.Caption := ExpandConstant('{cm:SPACE_1} ')+ NumToStr(NeedSize)+ ' MB';
//-----------------------
if FreeMB < NeedSize then
begin
SelectDirText_1.Font.Color:= ClRed;
WizardForm.NextButton.Enabled := False;
end else
begin
SelectDirText_1.Font.Color:= ClBlack;
WizardForm.NextButton.Enabled := True;
end
end;
//===================
procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID=wpSelectDir then
begin

NeedSize:= 4054; // óêàçûâàåì ðàçìåð ðàñïàêîâàííîãî ìíñòàëëÿòîðà â MB

SelectDirText_1:= TLabel.Create(WizardForm);
with SelectDirText_1 do
begin
Parent:= WizardForm.SelectDirPage;
Top:= ScaleY(220);
Width:= ScaleX(209);
Height:= ScaleY(13);
Font.Size:= 8;
Font.Color:= ClBlack;
Transparent:= True;
end;

WizardForm.DiskSpaceLabel.Top:= ScaleY(200);
WizardForm.DirEdit.OnChange:= @GetFreeSpaceCaption;
WizardForm.DirEdit.Text:= WizardForm.DirEdit.Text + #0;

GetNeedSpaceCaption;
end
end;
var
pnl: TPanel;

///////////////////////WelcomePage//////////////////////////////////////
procedure WelcomePage;
begin
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.WelcomeLabel1.AutoSize;
SetBounds(WizardForm.WelcomeLabel1.Left,WizardForm.WelcomeLabel1.Top,
WizardForm.WelcomeLabel1.Width,WizardForm.WelcomeLabel1.Height);
WordWrap:= WizardForm.WelcomeLabel1.WordWrap;
Caption:= WizardForm.WelcomeLabel1.Caption;
with Font do
begin
Color:= WizardForm.WelcomeLabel1.Font.Color;
Style:= WizardForm.WelcomeLabel1.Font.Style;
Name:= WizardForm.WelcomeLabel1.Font.Name;
Size:= WizardForm.WelcomeLabel1.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.WelcomeLabel2.AutoSize;
SetBounds(WizardForm.WelcomeLabel2.Left,WizardForm.WelcomeLabel2.Top,
WizardForm.WelcomeLabel2.Width,WizardForm.WelcomeLabel2.Height);
WordWrap:= WizardForm.WelcomeLabel2.WordWrap;
Caption:= WizardForm.WelcomeLabel2.Caption;
with Font do
begin
Color:= WizardForm.WelcomeLabel2.Font.Color;
Style:= WizardForm.WelcomeLabel2.Font.Style;
Name:= WizardForm.WelcomeLabel2.Font.Name;
Size:= WizardForm.WelcomeLabel2.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////SelectDirPage//////////////////////////////////////
procedure SelectDirPage;
begin
with WizardForm do
begin
with DirEdit do
begin
Left:= 40;
Top:= 137;
Parent:= pnl;
end;
with DirBrowseButton do
begin
Left:= WizardForm.DirEdit.Left + WizardForm.DirEdit.Width + 10;
Top:= WizardForm.DirEdit.Top - 1;
Parent:= pnl;
end;
with SelectDirBitmapImage do
begin
Left:= WizardForm.DirEdit.Left;
Top:= WizardForm.DirEdit.Top - 62;
Stretch:= True;
Parent:= pnl;
end;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.SelectDirBrowseLabel.AutoSize;
SetBounds(WizardForm.DirEdit.Left,WizardForm.DirEdit.Top - 30,
WizardForm.SelectDirBrowseLabel.Width, WizardForm.SelectDirBrowseLabel.Height);
WordWrap:= WizardForm.SelectDirBrowseLabel.WordWrap;
Caption:= WizardForm.SelectDirBrowseLabel.Caption;
with Font do
begin
Color:= WizardForm.SelectDirBrowseLabel.Font.Color;
Style:= WizardForm.SelectDirBrowseLabel.Font.Style;
Name:= WizardForm.SelectDirBrowseLabel.Font.Name;
Size:= WizardForm.SelectDirBrowseLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.SelectDirLabel.AutoSize;
SetBounds(WizardForm.SelectDirBitmapImage.Left + 50,WizardForm.SelectDirBitmapImage.Top + 10,
WizardForm.SelectDirLabel.Width,WizardForm.SelectDirLabel.Height);
WordWrap:= WizardForm.SelectDirLabel.WordWrap;
Caption:= WizardForm.SelectDirLabel.Caption;
with Font do
begin
Color:= WizardForm.SelectDirLabel.Font.Color;
Style:= WizardForm.SelectDirLabel.Font.Style;
Name:= WizardForm.SelectDirLabel.Font.Name;
Size:= WizardForm.SelectDirLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.DiskSpaceLabel.AutoSize;
SetBounds(WizardForm.DirEdit.Left,WizardForm.Bevel.Top - 25,
WizardForm.DiskSpaceLabel.Width,WizardForm.DiskSpaceLabel.Height);
WordWrap:= WizardForm.DiskSpaceLabel.WordWrap;
Caption:= WizardForm.DiskSpaceLabel.Caption;
with Font do
begin
Color:= WizardForm.DiskSpaceLabel.Font.Color;
Style:= WizardForm.DiskSpaceLabel.Font.Style;
Name:= WizardForm.DiskSpaceLabel.Font.Name;
Size:= WizardForm.DiskSpaceLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////ReadyPage//////////////////////////////////////
procedure ReadyPage;
var
ready_str: string;
begin
ready_str:= WizardForm.ReadyMemo.Text;
with TLabel.Create(pnl) do
begin
SetBounds(45,115,WizardForm.ReadyMemo.Width, WizardForm.ReadyMemo.Height);
Caption:= ready_str;
with Font do
begin
Color:= WizardForm.ReadyLabel.Font.Color;
Style:= WizardForm.ReadyLabel.Font.Style;
Name:= WizardForm.ReadyLabel.Font.Name;
Size:= WizardForm.ReadyLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TBevel.Create(WizardForm) do
begin
SetBounds(40,110, WizardForm.ReadyMemo.Width, WizardForm.ReadyMemo.Height);
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.ReadyLabel.AutoSize;
SetBounds(40,70, WizardForm.ReadyLabel.Width, WizardForm.ReadyLabel.Height);
WordWrap:= WizardForm.ReadyLabel.WordWrap;
Caption:= WizardForm.ReadyLabel.Caption;
with Font do
begin
Color:= WizardForm.ReadyLabel.Font.Color;
Style:= WizardForm.ReadyLabel.Font.Style;
Name:= WizardForm.ReadyLabel.Font.Name;
Size:= WizardForm.ReadyLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////InstallingPage//////////////////////////////////////
procedure InstallingPage;
begin
with WizardForm.ProgressGauge do
begin
Left:= 40;
Top:= 115;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.FilenameLabel.AutoSize;
SetBounds(WizardForm.ProgressGauge.Left,WizardForm.ProgressGauge.Top-20,
WizardForm.FilenameLabel.Width,WizardForm.FilenameLabel.Height);
WordWrap:= WizardForm.FilenameLabel.WordWrap;
Caption:= WizardForm.FilenameLabel.Caption;
with Font do
begin
Color:= WizardForm.FilenameLabel.Font.Color;
Style:= WizardForm.FilenameLabel.Font.Style;
Name:= WizardForm.FilenameLabel.Font.Name;
Size:= WizardForm.FilenameLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.StatusLabel.AutoSize;
SetBounds(WizardForm.StatusLabel.Left,WizardForm.StatusLabel.Top,
WizardForm.StatusLabel.Width,WizardForm.StatusLabel.Height);
WordWrap:= WizardForm.StatusLabel.WordWrap;
Caption:= WizardForm.StatusLabel.Caption;
with Font do
begin
Color:= WizardForm.StatusLabel.Font.Color;
Style:= WizardForm.StatusLabel.Font.Style;
Name:= WizardForm.StatusLabel.Font.Name;
Size:= WizardForm.StatusLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////FinishedPage//////////////////////////////////////
var
CheckBox: array of TNewCheckBox;

procedure CheckBoxClick(Sender: TObject);
begin
if TNewCheckBox(Sender).Checked then
WizardForm.RunList.Checked[TNewCheckBox(Sender).Tag]:= True
else WizardForm.RunList.Checked[TNewCheckBox(Sender).Tag]:= False;
end;

procedure LabelClick(Sender: TObject);
begin
if CheckBox[TLabel(Sender).Tag].Checked then
begin
WizardForm.RunList.Checked[TLabel(Sender).Tag]:= False;
CheckBox[TLabel(Sender).Tag].Checked:= False;
end
else
begin
WizardForm.RunList.Checked[TLabel(Sender).Tag]:= True;
CheckBox[TLabel(Sender).Tag].Checked:= True;
end;
end;

procedure HideRunList(Control: TWinControl);
var
i, t: Integer;
str: string;
begin
if WizardForm.RunList.Items.Count > 0 then
begin
WizardForm.RunList.Hide;
SetArrayLength(CheckBox, SizeOf(WizardForm.RunList.Items.Count));
for i:= 0 to WizardForm.RunList.Items.Count-1 do
begin
CheckBox[i]:= TNewCheckBox.Create(Control);
with CheckBox[i] do
begin
SetBounds(ScaleX(WizardForm.RunList.Left+2),ScaleY(WizardForm.RunList.Top+2+t),14,14);
Tag:= i;
Checked:= WizardForm.RunList.Checked[i];
Caption:= WizardForm.RunList.Items.Strings[i];
OnClick:= @CheckBoxClick;
Color:= clWhite;
Parent:= Control;
end;
str:= WizardForm.RunList.Items.Strings[i];
with TLabel.Create(WizardForm) do
begin
SetBounds(ScaleX(WizardForm.RunList.Left+20),ScaleY(WizardForm.RunList.Top+2+t),
WizardForm.RunList.Width,14);
Caption:= str;
Tag:= i;
OnClick:= @LabelClick;
Transparent:= True;
Parent:= Control;
end;
t:= t + 20;
end;
end;
end;

procedure FinishedPage;
begin
HideRunList(pnl);
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.FinishedHeadingLabel.AutoSize;
SetBounds(WizardForm.FinishedHeadingLabel.Left,WizardForm.FinishedHeadingLabel.Top,
WizardForm.FinishedHeadingLabel.Width,WizardForm.FinishedHeadingLabel.Height);
WordWrap:= WizardForm.FinishedHeadingLabel.WordWrap;
Caption:= WizardForm.FinishedHeadingLabel.Caption;
with Font do
begin
Color:= WizardForm.FinishedHeadingLabel.Font.Color;
Style:= WizardForm.FinishedHeadingLabel.Font.Style;
Name:= WizardForm.FinishedHeadingLabel.Font.Name;
Size:= WizardForm.FinishedHeadingLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.FinishedLabel.AutoSize;
SetBounds(WizardForm.FinishedLabel.Left,WizardForm.FinishedLabel.Top,
WizardForm.FinishedLabel.Width,WizardForm.FinishedLabel.Height);
WordWrap:= WizardForm.FinishedLabel.WordWrap;
Caption:= WizardForm.FinishedLabel.Caption;
with Font do
begin
Color:= WizardForm.FinishedLabel.Font.Color;
Style:= WizardForm.FinishedLabel.Font.Style;
Name:= WizardForm.FinishedLabel.Font.Name;
Size:= WizardForm.FinishedLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

procedure CurPageChanged(CurPageID: Integer);
begin
pnl:= TPanel.Create(WizardForm);
with pnl do
begin
Align:= alClient;
Parent:= WizardForm;
end;
with WizardForm do
begin
with WizardBitmapImage do
begin
Align:= alClient;
Stretch:= True;
Parent:= pnl;
end;
NextButton.Parent:= pnl;
CancelButton.Parent:= pnl;
BackButton.Parent:= pnl;
Bevel.Parent:= pnl;
pnl.Repaint;
end;

if (CurPageID > wpWelcome) and (CurPageID < wpFinished) then
begin
WizardForm.Bevel1.Parent:= pnl;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.PageNameLabel.AutoSize;
SetBounds(WizardForm.PageNameLabel.Left,WizardForm.PageNameLabel.Top,
WizardForm.PageNameLabel.Width,WizardForm.PageNameLabel.Height);
Caption:= WizardForm.PageNameLabel.Caption;
with Font do
begin
Color:= WizardForm.PageNameLabel.Font.Color;
Style:= WizardForm.PageNameLabel.Font.Style;
Name:= WizardForm.PageNameLabel.Font.Name;
Size:= WizardForm.PageNameLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.PageDescriptionLabel.AutoSize;
SetBounds(WizardForm.PageDescriptionLabel.Left,WizardForm.PageDescriptionLabel.Top,
WizardForm.PageDescriptionLabel.Width,WizardForm.PageDescriptionLabel.Height);
Caption:= WizardForm.PageDescriptionLabel.Caption;
with Font do
begin
Color:= WizardForm.PageDescriptionLabel.Font.Color;
Style:= WizardForm.PageDescriptionLabel.Font.Style;
Name:= WizardForm.PageDescriptionLabel.Font.Name;
Size:= WizardForm.PageDescriptionLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;

if CurPageID = wpWelcome then WelcomePage;
if CurPageID = wpSelectDir then SelectDirPage;
if CurPageID = wpReady then ReadyPage;
if CurPageID = wpInstalling then InstallingPage;
if CurPageID = wpFinished then FinishedPage;
end;

Habetdin 12-03-2010 14:29 1366968

alex2010, попробуйте:
читать дальше »
Код:

[code]
var
SelectDirText_1: TLabel;
FreeMB, TotalMB: Cardinal;
NeedSize: Integer;
pnl: TPanel;

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;
//=================
procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
SelectDirText_1.Caption := ExpandConstant('{cm:SPACE_2} ')+ NumToStr(round(FreeMB/1024*100)/100) + ' GB'
else
SelectDirText_1.Caption := ExpandConstant('{cm:SPACE_2} ')+ NumToStr(FreeMB)+ ' MB';
//---------------------------
if FreeMB < NeedSize then
begin
SelectDirText_1.Font.Color:= ClRed;
WizardForm.NextButton.Enabled := False;
end else
begin
SelectDirText_1.Font.Color:= ClBlack;
WizardForm.NextButton.Enabled := True;
end
end;
//===================
procedure GetNeedSpaceCaption;
begin
if NeedSize > 1024 then
WizardForm.DiskSpaceLabel.Caption := ExpandConstant('{cm:SPACE_1} ')+ NumToStr(round(NeedSize/1024*100)/100) + ' GB' else
WizardForm.DiskSpaceLabel.Caption := ExpandConstant('{cm:SPACE_1} ')+ NumToStr(NeedSize)+ ' MB';
//-----------------------
if FreeMB < NeedSize then
begin
SelectDirText_1.Font.Color:= ClRed;
WizardForm.NextButton.Enabled := False;
end else
begin
SelectDirText_1.Font.Color:= ClBlack;
WizardForm.NextButton.Enabled := True;
end
end;

///////////////////////WelcomePage//////////////////////////////////////
procedure WelcomePage;
begin
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.WelcomeLabel1.AutoSize;
SetBounds(WizardForm.WelcomeLabel1.Left,WizardForm.WelcomeLabel1.Top,
WizardForm.WelcomeLabel1.Width,WizardForm.WelcomeLabel1.Height);
WordWrap:= WizardForm.WelcomeLabel1.WordWrap;
Caption:= WizardForm.WelcomeLabel1.Caption;
with Font do
begin
Color:= WizardForm.WelcomeLabel1.Font.Color;
Style:= WizardForm.WelcomeLabel1.Font.Style;
Name:= WizardForm.WelcomeLabel1.Font.Name;
Size:= WizardForm.WelcomeLabel1.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.WelcomeLabel2.AutoSize;
SetBounds(WizardForm.WelcomeLabel2.Left,WizardForm.WelcomeLabel2.Top,
WizardForm.WelcomeLabel2.Width,WizardForm.WelcomeLabel2.Height);
WordWrap:= WizardForm.WelcomeLabel2.WordWrap;
Caption:= WizardForm.WelcomeLabel2.Caption;
with Font do
begin
Color:= WizardForm.WelcomeLabel2.Font.Color;
Style:= WizardForm.WelcomeLabel2.Font.Style;
Name:= WizardForm.WelcomeLabel2.Font.Name;
Size:= WizardForm.WelcomeLabel2.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////SelectDirPage//////////////////////////////////////
procedure SelectDirPage;
begin
with WizardForm do
begin
with DirEdit do
begin
Left:= 40;
Top:= 137;
Parent:= pnl;
end;
with DirBrowseButton do
begin
Left:= WizardForm.DirEdit.Left + WizardForm.DirEdit.Width + 10;
Top:= WizardForm.DirEdit.Top - 1;
Parent:= pnl;
end;
with SelectDirBitmapImage do
begin
Left:= WizardForm.DirEdit.Left;
Top:= WizardForm.DirEdit.Top - 62;
Stretch:= True;
Parent:= pnl;
end;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.SelectDirBrowseLabel.AutoSize;
SetBounds(WizardForm.DirEdit.Left,WizardForm.DirEdit.Top - 30,
WizardForm.SelectDirBrowseLabel.Width, WizardForm.SelectDirBrowseLabel.Height);
WordWrap:= WizardForm.SelectDirBrowseLabel.WordWrap;
Caption:= WizardForm.SelectDirBrowseLabel.Caption;
with Font do
begin
Color:= WizardForm.SelectDirBrowseLabel.Font.Color;
Style:= WizardForm.SelectDirBrowseLabel.Font.Style;
Name:= WizardForm.SelectDirBrowseLabel.Font.Name;
Size:= WizardForm.SelectDirBrowseLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.SelectDirLabel.AutoSize;
SetBounds(WizardForm.SelectDirBitmapImage.Left + 50,WizardForm.SelectDirBitmapImage.Top + 10,
WizardForm.SelectDirLabel.Width,WizardForm.SelectDirLabel.Height);
WordWrap:= WizardForm.SelectDirLabel.WordWrap;
Caption:= WizardForm.SelectDirLabel.Caption;
with Font do
begin
Color:= WizardForm.SelectDirLabel.Font.Color;
Style:= WizardForm.SelectDirLabel.Font.Style;
Name:= WizardForm.SelectDirLabel.Font.Name;
Size:= WizardForm.SelectDirLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.DiskSpaceLabel.AutoSize;
SetBounds(WizardForm.DirEdit.Left,WizardForm.Bevel.Top - 25,
WizardForm.DiskSpaceLabel.Width,WizardForm.DiskSpaceLabel.Height);
WordWrap:= WizardForm.DiskSpaceLabel.WordWrap;
Caption:= WizardForm.DiskSpaceLabel.Caption;
with Font do
begin
Color:= WizardForm.DiskSpaceLabel.Font.Color;
Style:= WizardForm.DiskSpaceLabel.Font.Style;
Name:= WizardForm.DiskSpaceLabel.Font.Name;
Size:= WizardForm.DiskSpaceLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////ReadyPage//////////////////////////////////////
procedure ReadyPage;
var
ready_str: string;
begin
ready_str:= WizardForm.ReadyMemo.Text;
with TLabel.Create(pnl) do
begin
SetBounds(45,115,WizardForm.ReadyMemo.Width, WizardForm.ReadyMemo.Height);
Caption:= ready_str;
with Font do
begin
Color:= WizardForm.ReadyLabel.Font.Color;
Style:= WizardForm.ReadyLabel.Font.Style;
Name:= WizardForm.ReadyLabel.Font.Name;
Size:= WizardForm.ReadyLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TBevel.Create(WizardForm) do
begin
SetBounds(40,110, WizardForm.ReadyMemo.Width, WizardForm.ReadyMemo.Height);
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.ReadyLabel.AutoSize;
SetBounds(40,70, WizardForm.ReadyLabel.Width, WizardForm.ReadyLabel.Height);
WordWrap:= WizardForm.ReadyLabel.WordWrap;
Caption:= WizardForm.ReadyLabel.Caption;
with Font do
begin
Color:= WizardForm.ReadyLabel.Font.Color;
Style:= WizardForm.ReadyLabel.Font.Style;
Name:= WizardForm.ReadyLabel.Font.Name;
Size:= WizardForm.ReadyLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////InstallingPage//////////////////////////////////////
procedure InstallingPage;
begin
with WizardForm.ProgressGauge do
begin
Left:= 40;
Top:= 115;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.FilenameLabel.AutoSize;
SetBounds(WizardForm.ProgressGauge.Left,WizardForm.ProgressGauge.Top-20,
WizardForm.FilenameLabel.Width,WizardForm.FilenameLabel.Height);
WordWrap:= WizardForm.FilenameLabel.WordWrap;
Caption:= WizardForm.FilenameLabel.Caption;
with Font do
begin
Color:= WizardForm.FilenameLabel.Font.Color;
Style:= WizardForm.FilenameLabel.Font.Style;
Name:= WizardForm.FilenameLabel.Font.Name;
Size:= WizardForm.FilenameLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.StatusLabel.AutoSize;
SetBounds(WizardForm.StatusLabel.Left,WizardForm.StatusLabel.Top,
WizardForm.StatusLabel.Width,WizardForm.StatusLabel.Height);
WordWrap:= WizardForm.StatusLabel.WordWrap;
Caption:= WizardForm.StatusLabel.Caption;
with Font do
begin
Color:= WizardForm.StatusLabel.Font.Color;
Style:= WizardForm.StatusLabel.Font.Style;
Name:= WizardForm.StatusLabel.Font.Name;
Size:= WizardForm.StatusLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////FinishedPage//////////////////////////////////////
var
CheckBox: array of TNewCheckBox;

procedure CheckBoxClick(Sender: TObject);
begin
if TNewCheckBox(Sender).Checked then
WizardForm.RunList.Checked[TNewCheckBox(Sender).Tag]:= True
else WizardForm.RunList.Checked[TNewCheckBox(Sender).Tag]:= False;
end;

procedure LabelClick(Sender: TObject);
begin
if CheckBox[TLabel(Sender).Tag].Checked then
begin
WizardForm.RunList.Checked[TLabel(Sender).Tag]:= False;
CheckBox[TLabel(Sender).Tag].Checked:= False;
end
else
begin
WizardForm.RunList.Checked[TLabel(Sender).Tag]:= True;
CheckBox[TLabel(Sender).Tag].Checked:= True;
end;
end;

procedure HideRunList(Control: TWinControl);
var
i, t: Integer;
str: string;
begin
if WizardForm.RunList.Items.Count > 0 then
begin
WizardForm.RunList.Hide;
SetArrayLength(CheckBox, SizeOf(WizardForm.RunList.Items.Count));
for i:= 0 to WizardForm.RunList.Items.Count-1 do
begin
CheckBox[i]:= TNewCheckBox.Create(Control);
with CheckBox[i] do
begin
SetBounds(ScaleX(WizardForm.RunList.Left+2),ScaleY(WizardForm.RunList.Top+2+t),14,14);
Tag:= i;
Checked:= WizardForm.RunList.Checked[i];
Caption:= WizardForm.RunList.Items.Strings[i];
OnClick:= @CheckBoxClick;
Color:= clWhite;
Parent:= Control;
end;
str:= WizardForm.RunList.Items.Strings[i];
with TLabel.Create(WizardForm) do
begin
SetBounds(ScaleX(WizardForm.RunList.Left+20),ScaleY(WizardForm.RunList.Top+2+t),
WizardForm.RunList.Width,14);
Caption:= str;
Tag:= i;
OnClick:= @LabelClick;
Transparent:= True;
Parent:= Control;
end;
t:= t + 20;
end;
end;
end;

procedure FinishedPage;
begin
HideRunList(pnl);
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.FinishedHeadingLabel.AutoSize;
SetBounds(WizardForm.FinishedHeadingLabel.Left,WizardForm.FinishedHeadingLabel.Top,
WizardForm.FinishedHeadingLabel.Width,WizardForm.FinishedHeadingLabel.Height);
WordWrap:= WizardForm.FinishedHeadingLabel.WordWrap;
Caption:= WizardForm.FinishedHeadingLabel.Caption;
with Font do
begin
Color:= WizardForm.FinishedHeadingLabel.Font.Color;
Style:= WizardForm.FinishedHeadingLabel.Font.Style;
Name:= WizardForm.FinishedHeadingLabel.Font.Name;
Size:= WizardForm.FinishedHeadingLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.FinishedLabel.AutoSize;
SetBounds(WizardForm.FinishedLabel.Left,WizardForm.FinishedLabel.Top,
WizardForm.FinishedLabel.Width,WizardForm.FinishedLabel.Height);
WordWrap:= WizardForm.FinishedLabel.WordWrap;
Caption:= WizardForm.FinishedLabel.Caption;
with Font do
begin
Color:= WizardForm.FinishedLabel.Font.Color;
Style:= WizardForm.FinishedLabel.Font.Style;
Name:= WizardForm.FinishedLabel.Font.Name;
Size:= WizardForm.FinishedLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

procedure CurPageChanged(CurPageID: Integer);
begin
pnl:= TPanel.Create(WizardForm);
with pnl do
begin
Align:= alClient;
Parent:= WizardForm;
end;
with WizardForm do
begin
with WizardBitmapImage do
begin
Align:= alClient;
Stretch:= True;
Parent:= pnl;
end;
NextButton.Parent:= pnl;
CancelButton.Parent:= pnl;
BackButton.Parent:= pnl;
Bevel.Parent:= pnl;
pnl.Repaint;
end;

if (CurPageID > wpWelcome) and (CurPageID < wpFinished) then
begin
WizardForm.Bevel1.Parent:= pnl;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.PageNameLabel.AutoSize;
SetBounds(WizardForm.PageNameLabel.Left,WizardForm.PageNameLabel.Top,
WizardForm.PageNameLabel.Width,WizardForm.PageNameLabel.Height);
Caption:= WizardForm.PageNameLabel.Caption;
with Font do
begin
Color:= WizardForm.PageNameLabel.Font.Color;
Style:= WizardForm.PageNameLabel.Font.Style;
Name:= WizardForm.PageNameLabel.Font.Name;
Size:= WizardForm.PageNameLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.PageDescriptionLabel.AutoSize;
SetBounds(WizardForm.PageDescriptionLabel.Left,WizardForm.PageDescriptionLabel.Top,
WizardForm.PageDescriptionLabel.Width,WizardForm.PageDescriptionLabel.Height);
Caption:= WizardForm.PageDescriptionLabel.Caption;
with Font do
begin
Color:= WizardForm.PageDescriptionLabel.Font.Color;
Style:= WizardForm.PageDescriptionLabel.Font.Style;
Name:= WizardForm.PageDescriptionLabel.Font.Name;
Size:= WizardForm.PageDescriptionLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
If CurPageID=wpSelectDir then
begin
SelectDirPage;
NeedSize:= 4054; // óêàçûâàåì ðàçìåð ðàñïàêîâàííîãî ìíñòàëëÿòîðà â MB

SelectDirText_1:= TLabel.Create(WizardForm);
with SelectDirText_1 do
begin
Parent:= WizardForm.SelectDirPage;
Top:= ScaleY(220);
Width:= ScaleX(209);
Height:= ScaleY(13);
Font.Size:= 8;
Font.Color:= ClBlack;
Transparent:= True;
end;

WizardForm.DiskSpaceLabel.Top:= ScaleY(200);
WizardForm.DirEdit.OnChange:= @GetFreeSpaceCaption;
WizardForm.DirEdit.Text:= WizardForm.DirEdit.Text + #0;

GetNeedSpaceCaption;
end

if CurPageID = wpWelcome then WelcomePage;
if CurPageID = wpReady then ReadyPage;
if CurPageID = wpInstalling then InstallingPage;
if CurPageID = wpFinished then FinishedPage;
end;


alex2010 12-03-2010 14:33 1366978

Habetdin, все работает :yahoo: , еще раз спасибо


еще вопрос, а как сделать шрифт инталлятора белым(ну или каким-либо другим) цветом?

patrion 12-03-2010 16:49 1367094

Font.Color:=ClWhite

alex2010 12-03-2010 17:13 1367106

patrion, в какой секции это прописать?

NigthWarrior 12-03-2010 17:28 1367117

Подскажите, как реализовать чтобы в TEdit можно было вводить только латинские символы...

patrion 12-03-2010 18:58 1367190

Цитата:

patrion, в какой секции это прописать?
Просто пропиши в поиске! и все =)

Serega 12-03-2010 19:11 1367205

Цитата:

Цитата МИШАНЧИК
Можно ли как-то сделать чтоб они плюсовались? »

Честно говоря, ни разу не задавался таким вопросом, пробежавшись по справке, нашёл UninstallDisplaySize, но она работает только для Win7 и выше, а на XP апплет "Установка и удаление программ", ищет место расположение папки установленной программы в реестре, а затем подсчитывает её размер (определил экспериментальным путём), отсюда вывод - извлекайте архивы в папку своего приложения.

Цитата:

Цитата NigthWarrior
чтобы в TEdit можно было вводить только латинские символы »

Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
procedure EditKeyPress(Sender: TObject; var Key: Char);
begin
  if ((Key < #65) or (Key > #90)) and ((Key < #97) or (Key > #122)) then Key:= #0;
end;

procedure InitializeWizard();
begin
  with TNewEdit.Create(WizardForm) do
    begin
      Parent:= WizardForm;
      SetBounds(ScaleX(16), ScaleY(327), ScaleX(209), ScaleY(21));
      OnKeyPress:= @EditKeyPress;
    end;
end;


alex2010 12-03-2010 19:18 1367210

как сделать шрифт инталлятора белым цветом?

Serega 12-03-2010 19:31 1367219

Цитата:

Цитата alex2010
как сделать шрифт инталлятора белым цветом? »

В шапке темы есть скрипт Ultimate Test, там это реализовано.

P.S.
Я всегда конечно удивлялся, но чтоб из 128 скачиваний ни одного спасибо...

patrion 12-03-2010 19:40 1367225

Цитата:

как сделать шрифт инталлятора белым цветом?
Я же писал)))

vint56 12-03-2010 20:38 1367287

alex2010,
Font.Color:=ClWhite;

Serega 12-03-2010 21:54 1367338

Здравствуйте, обновил Converter, ссылка прежняя.

alex2010 12-03-2010 22:42 1367371

Serega, я так понял, что этот скрипт для проверки характеристики компа?, а мне надо как здесь:

patrion, vint56, куда имеено вставлять это
Код:

Font.Color:=ClWhite;
??

YURSHAT 12-03-2010 22:50 1367380

Цитата:

Цитата Serega
Здравствуйте, обновил Converter, ссылка прежняя. »

Обновил шапку на ru-board

Цитата:

Цитата alex2010
patrion, vint56, куда имеено вставлять это »

в секцию [Icons] :lol:

а если серъезно, то так

Код:

[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program

[code_]
procedure InitializeWizard();
begin
  WizardForm.Font.Color:=ClBlue;
  WizardForm.WelcomeLabel1.Font.Color:=ClBlue;
  WizardForm.FinishedHeadingLabel.Font.Color:=ClBlue;
  WizardForm.PageNameLabel.Font.Color:=ClBlue;
end;


МИШАНЧИК 13-03-2010 01:29 1367442

Serega, спасибо!
Цитата:

Цитата Serega
пробежавшись по справке, нашёл UninstallDisplaySize »

Я его уже пробовал, но почему-то у меня если выставить его девятизначным(чтоб было 1 Гб и больше) скрипт при компиляции выдаёт ошибку в этой строке, если же число восьмизначное, или ещё меньше - то компилируется нормально.
Цитата:

Цитата Serega
отсюда вывод - извлекайте архивы в папку своего приложения »

Так я их туда и извлекаю, а размер установленной программы всё-равно равен размеру инсталятора без архивов.

Jerichoman 13-03-2010 10:46 1367544

Кто-нибудь хелп!!!!
Цитата:

Цитата Jerichoman
помогите http://upwap.ru/779001
появляется при попытке восстановить файлы обработанные precomp »

Все, не надо, спасибо всем за помощь!!!

Deen 13-03-2010 17:53 1367825

Подскажите где можно подглядеть как писать скрипт на распаковку архивов *.7z через секцию [RUN]. И какие для этова нужны дополнительные файлы и dll?

Serega 13-03-2010 19:35 1367907

Цитата:

Цитата МИШАНЧИК
но почему-то у меня если выставить его девятизначным(чтоб было 1 Гб и больше) скрипт при компиляции выдаёт ошибку в этой строке »

Использую расширенную версию от Restools+дополнения, попробовал с UninstallDisplaySize=1073741824, что составляет 1Гб, компиляция прошла нормально, т.е. никаких ошибок, а вот при UninstallDisplaySize=2147483648, что составляет 2Гб, выскачила ошибка, хотя в справке написано:
Цитата:

Цитата из Справки
Valid values:
1 through 4294967295

т.е. максимальный размер 4Гб, но на практике получается только 1Гб, возможно это глюк, который думаю позже исправят, но в любом случае она действует только на Win7 и выше.
Цитата:

Цитата МИШАНЧИК
а размер установленной программы всё-равно равен размеру инсталятора без архивов »

Я объясню, как проверял, т.е. произвожу установку полностью пустого скрипта, захожу в апплет "Установка и удаление программ", вижу размер 0,87МБ, закрываю апплет, копирую в эту же папку программы архив размером 43,7МБ, запускаю снова апплет "Установка и удаление программ" и вижу... упс... интересно вчера размер менялся, а сегодня остаётся прежний, видимо апплет читает размер по другому, чем я думал...

Цитата:

Цитата Deen
где можно подглядеть как писать скрипт на распаковку архивов *.7z »

Скачайте из шапки темы Inno Setup Scripting 5.1, там есть пример.

semiono 13-03-2010 21:08 1367965

Срочно! :)
Никогда не заморачивался над внешним видом, но такое очень хочется повторить!


Подскажите как, я думаю это не сложный код!? Битмэп во всю ширину.

Serega 13-03-2010 22:20 1368018

Цитата:

Цитата semiono
я думаю это не сложный код!? »

Строк так на пятьсот, с учётом, что вы не все страницы будите использовать.
В шапке темы есть ссылка на скрипт Картинка на страницах инсталлятора.

semiono 13-03-2010 22:56 1368039

О! Спасибо, я не думал что так много! Но раз есть готовое, то не важно сколько строк. :)
---
Немного поясню, может не совсем правильно понят был. Картинку буквально не надо растягивать,
достаточно только показать готовую широкую картинку по площади окна. И только на StartPage
и на FinishPage. Нижнее поле кнопок не надо покрывать картинкой, это хотелось бы поправить.
Может сам справлюсь, я пока удалил другие страницы, но диалоги тоже какие-то остались
со "скином", пока думаю...

Типичный мой инсталлер -
Welcome! | сразу > Redy to Install | Installing... | Complete! - больше ничего!

Картинка в области кнопок ещё и плохо тем что стили WinXP там обычно плохо прорисовываются.

Deen 13-03-2010 23:18 1368064

Serega, а поточнее можно, я понимаю что это уже наверное обсуждали и где на форуме это есть. Я осилил только 28 стр. и научился делать простейшие репаки без внешних упаковщиков, но иногда выходит размер не тот что надо и я пошол дальше учиться.

Посуветуйте чем проще сжимать, я сам решил что 7зип проще чем фриарк, я извлекал много разных скриптов, но в основном попадаются с ФА, а не с 7зип.

Вот например из скрипта игры AvP от механиков:
Код:

[Files]
Source: {tmp}\button.bmp; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\logo.bmp; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\papka.bmp; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\ac.dll; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\sr.dll; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\msvcr80.dll; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\packjpg_dll.dll; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\pp.dll; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\zlib1.dll; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy

и где тут прописаны архивы, где сама игра, одни темп файлы.

Или вот от игры Dirt 2:
Код:

[Files]
Source: {tmp}\BitmapHelper.dll; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\InnoCallback.dll; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\Background.bmp; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\Buttons.bmp; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\Flags.bmp; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\FolderImage.bmp; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\arc.exe; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy

arc.exe это из корня папки ФА, а что за dll? и опять где сами архивы?

semiono 13-03-2010 23:37 1368071

Есть ещё один вопрос для меня актуальный.
Я давно ещё хотел зделать запуск программы "taskkill.exe", но только самодельной утилиты.
Проблема в том, что даже если зделать запуск из секции [code] перед началом установки,
то остаётся не решённым то что надо заранее иметь утилиту в папке {tmp}
А как её туда скопировать из инсталятора перед установкой? Получается замкнутый круг.

Но я придумал тогда зделать один инсталятор внутри другого. Но может быть есть более
красивый способ?

Системный taskkill.exe не годится, на него надежды мало, так как он может просто не работать
если в системе не установленна WBEM - такое просто запорет установку за зря.

Очень плохо что этап распаковки происходит в один раз без контроля из секции [code]
А может есть способ всётаки?

semiono 14-03-2010 04:54 1368145

Мои изобретения -

Кампилируем первый файл: (stubz.exe)
Код:

[Setup]
AppName=stub
AppVerName=stub 1.1.1.1
AllowUNCPath=yes
DefaultDirName={win}
DirExistsWarning=no
DisableDirPage=yes
DisableFinishedPage=no
DisableProgramGroupPage=yes
DisableReadyMemo=yes
DisableReadyPage=no
ArchitecturesInstallIn64BitMode=x64
Compression=lzma
SolidCompression=yes
OutputDir=.
OutputBaseFilename=stubz
TouchDate=2001-01-01
TouchTime=00:00
MinVersion=4.1,4.0
VersionInfoCompany=Semiono
VersionInfoCopyright=2001-2005 GmbH
VersionInfoDescription=stub
VersionInfoTextVersion=1.1.1.1
VersionInfoVersion=1.1.1.1
Uninstallable=no
UsePreviousAppDir=no

[Kode]  // < защита от html тэга
procedure InitializeWizard();
begin
  try
  DelTree(ExpandConstant('{sd}\Test\*'), False, True, True);
  except
  Beep; Exit;
  end;
end;

[Files]
Source: "pkill.exe"; DestDir: "{sd}\Test"; Flags: touch; Permissions: admins-full

Кампилируем второй файл: (stub.exe)
Код:

[Setup]
AppName=stub
AppVerName=stub 1.1.1.1
AllowUNCPath=yes
DefaultDirName={win}
DirExistsWarning=no
DisableDirPage=yes
DisableFinishedPage=no
DisableProgramGroupPage=yes
DisableReadyMemo=yes
DisableReadyPage=no
ArchitecturesInstallIn64BitMode=x64
Compression=lzma
SolidCompression=yes
OutputDir=.
OutputBaseFilename=stub
TouchDate=2001-01-01
TouchTime=00:00
MinVersion=4.1,4.0
VersionInfoCompany=Semiono
VersionInfoCopyright=2001-2005 GmbH
VersionInfoDescription=stub
VersionInfoTextVersion=1.1.1.1
VersionInfoVersion=1.1.1.1
Uninstallable=no
UsePreviousAppDir=no

[Kode]
procedure InitializeWizard();

var
  ErrorCode: Integer;
  begin
    FileCopy(ExpandConstant('{sys}\calc.exe'), ExpandConstant('{sd}\Test\calc.exe'), true);
      ShellExec('', ExpandConstant('{sd}\Test\calc.exe'), '', '', SW_SHOW, ewNoWait, ErrorCode);
      ShellExec('', ExpandConstant('{sd}\Test\calc.exe'), '', '', SW_SHOW, ewNoWait, ErrorCode);
      ShellExec('', ExpandConstant('{sd}\Test\calc.exe'), '', '', SW_SHOW, ewNoWait, ErrorCode);
end;

[Run]
Filename: "{tmp}\pkill.exe"; Parameters: "calc.exe"; Flags: runhidden
Filename: "{tmp}\stubz.exe"; Parameters: "/verysilent"; Flags: waituntilterminated

[Files]
Source: "pkill.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall touch; Permissions: admins-full
Source: "stubz.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall touch; Permissions: admins-full

На словах здесь копируется калькулятор в директорию {app} и запускается три раза,
чтобы не было возможно удалить директорию. После чего запускается pkill.exe
который закрывает калькуляторы и затем чистится целевая директория, и для теста
туда копируется pkill.exe

:)

solvador 14-03-2010 22:00 1368652

Мне недавно понадобилось найти в файле нужный параметр и дописать к нему своё значение. Функция замены строки в файле в "чистом" виде не подошла. Пришлось слегка доработать его. Собственно сам скрипт:
Код:

Procedure StrInsert ();
var
  S: TArrayOfString;
  F: String;
  i:integer;
begin
  F := ExpandConstant('{app}')+'\file.txt';
  if not FileExists(F) then Exit;
  LoadStringsFromFile(F, S);
  for i:=0 to GetArrayLength(S)-1 do begin
    if Pos('param',S[i])>0 then
      begin
        if Pos('=', S[i])>0 then Insert('insParam ', S[i], Pos('=', S[i])+2) else Exit;
      end;
  end;
  SaveStringsToFile(F, S, False);
end;

В этом примере скрипт ищет в файле file.txt строку содержащую param, потом в полученной строке ищет знак равенства = Если такой знак имеется, то через один символ дописывает insParam.
Результат работы: было "bla bla param = bla bla" стало "bla bla param = insParam bla bla"
Может кому нибудь пригодится :)

semiono 14-03-2010 22:51 1368689

Неожиданно с кодом загрузки большой картинки увидел следущее:
begin
ExtractTemporaryFile('img.bmp');

Значит все мои шаманства с двумя инсталлерами бред! :)
Я не знал что из кода можно распаковать!


Правильно ли так будет или можно оптимизировать?
Код:

procedure InitializeWizard();
begin 
ExtractTemporaryFile('pkill.exe');
ShellExec('', ExpandConstant('{tmp}\pkill.exe'),'calc.exe', '',
SW_SHOW, ewNoWait, ErrorCode);
end;

И чем отличается Exec() от ShellExec(), первый я так и не смог использовать
из-за безчисленных BEGIN IF THEN в примере.

South 14-03-2010 23:14 1368702

semiono, на все вопросы
сначала читаем хэлп, потом пишем код
есть еще вариант, к сожалению наиболее часто используемый, тупо копируем чужой код и не вникаем

ЗЫ в хэлпе есть ответы процентов на 60 вопросов. на твой
Цитата:

Цитата semiono
И чем отличается Exec() от ShellExec() »

в том числе. с примерами использования

semiono 14-03-2010 23:45 1368730

Из хелпа

Код:

Example:
var
  ResultCode: Integer;
begin
  // Launch Notepad and wait for it to terminate
  if Exec(ExpandConstant('{win}\notepad.exe'), '', '', SW_SHOW,
    ewWaitUntilTerminated, ResultCode) then
  begin
    // handle success if necessary; ResultCode contains the exit code
  end
  else begin
    // handle failure if necessary; ResultCode contains the error code
  end;
end;

begin
// мне было бы понятнее и достаточным так -
Exec(ExpandConstant('{win}\notepad.exe'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
// и всё!!! Но бывает что это тоже не работает, а я паскаль не знаю к сожалению.
end;

А такое меня обычно вообще в ступор приводит :)
function ShellExec(const Verb, Filename, Params, WorkingDir: String; const ShowCmd: Integer; const Wait: TExecWait; var ErrorCode: Integer): Boolean;
Если взять современный ассемблер, то все эти безумные типы на паскаль приводяться лишь к dd dw db ;- а классов вообще нет ))))

Ответ знаю, надо учиться!

YURSHAT 14-03-2010 23:49 1368733

Цитата:

Цитата semiono
И чем отличается Exec() от ShellExec(), первый я так и не смог использовать »

Exec - запускает исполняемый файл

ShellExec используется для запуска не исполняемого файла (не .exe и не .bat файла) (например открыть файл readMe.txt)

function Exec (const Filename, Params, WorkingDir: String; const ShowCmd: Integer; const Wait: TExecWait; var ResultCode: Integer): Boolean;

Описание:

Выполняет указанные исполняемые файлы. Параметр Wait указывает, возвратить значение функции немедленно или подождать, пока запущенный процесс завершится или освободится. Возвращает True если выполнение файла прошло успешно, иначе False. Если возвращено True и Wait=ewWaitUntilTerminated, то ResultCode возвращает код выхода для процесса. Если возвращено False, ResultCode выдает ошибку. Используй SysErrorMessage(ResultCode) для получения описания ошики.

function ShellExec (const Verb, Filename, Params, WorkingDir: String; const ShowCmd: Integer; const Wait: TExecWait; var ErrorCode: Integer): Boolean;

Описание:

Открывает указанный файл или выполняет другое действие, указанное в Verb. В Filename может быть указан документ или папка. Параметр Wait указывает, возвратить значение функции немедленно или подождать, пока запущенный процесс завершится или освободится. Возвращает True, если файл открыт успешно, иначе False. Если возвращено False, ErrorCode выдаст ошибку. Используй SysErrorMessage(ErrorCode) для получения описания ошики.

semiono 15-03-2010 04:32 1368859

Я пожалуй всё написал! Наверное без логических ошибок.

Код:

[Kode]
procedure InitializeWizard();
begin
  try DeleteFile(ExpandConstant('{sd}\dopuslib.tmp'))
  except Exit; end;
end;

procedure CurPageChanged(CurPageID: Integer);
var
ResultCode: Integer;
begin
  ExtractTemporaryFile('pkill.exe');
  if CurPageID = wpReady then
  begin
  Exec(ExpandConstant('{tmp}\pkill.exe'), 'dopus.exe', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
  Exec(ExpandConstant('{tmp}\pkill.exe'), 'dopusrt.exe', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);

      if FileExists(ExpandConstant('{reg:HKLM32\Software\VST,Proton.bin|{pf}}\DOpus\dopuslib.dll')) then
      try
      RenameFile(ExpandConstant('{reg:HKLM32\Software\VST,Proton.bin|{pf}}\DOpus\dopuslib.dll'), ExpandConstant('{sd}\dopuslib.tmp'))
      except Exit; end;

          try
          DelTree(ExpandConstant('{reg:HKLM32\Software\VST,Proton.bin|{pf}}\DOpus'), False, True, True);
          except
          Beep; Beep; Exit; end; end;
end;

procedure DeinitializeSetup();
...

Хотя я бы хотел ещё циклы подключить, вообще не знаю как это зделать.
Например, чтобы троекратно запустить
Exec(ExpandConstant('{tmp}\pkill.exe'), 'dopus.exe', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
но при этом не писать три раза эту строку.

Или например вызвать эту строку после такого кода -
RenameFile(ExpandConstant('{reg:HKLM32\Software\VST,Proton.bin|{pf}}\DOpus\dopuslib.dll'), ExpandConstant('{sd}\dopuslib.tmp'))
except

Для усиления работы. Или задержки при выполнении практически невозможны? Я имею ввиду, что если
файл должен быть переименован, то это выполниться безкомпрописно?

Я даже на autoit подстраховывался, хотя так никто не делает, но для скриптов это возможно оправдано -
WinWait()
WinWait()
WinWait()
Send()
:) ?

Ещё по существу, можно ли отпралять файл в корзину?
RenameFile(ExpandConstant('{pf}\DOpus\dopuslib.dll'), ExpandConstant('{sd}\Recycled\dopuslib.tmp'))

Или это заглючит? Причём тут лучше бы переменная была {Recycled} иначе для NTFS не валидно!

brodovski 15-03-2010 10:19 1368973

здравствуйте у меня такая проблема "#ifdef UNICODE ; если у вас ошибка на этой строке, то установите препроцессор или исправьте скрипт для вашей версии Inno Setup " вообще незнаю что уже делать,и другие версии Inno Setup ставил,это скрипт для разархивирования FreeArc,помогите пожалуйста(((

alex2010 15-03-2010 16:00 1369208

вот код на цвет изменения цвета инстала:
Код:

[code_]
procedure InitializeWizard();
begin
WizardForm.Font.Color:=Clgreen;
WizardForm.WelcomeLabel1.Font.Color:=ClRed;
WizardForm.FinishedHeadingLabel.Font.Color:=ClRed;
WizardForm.PageNameLabel.Font.Color:=ClRed;
end;

но "Доступно места на диске" не меняется:

может стоит еще что-нибудь дописать, чтобы цвет изменился?

YURSHAT 15-03-2010 17:32 1369276

Цитата:

Цитата alex2010
вот код на цвет изменения цвета инстала: »

Ну так этот код для стандартных элементов инсталла, а у вас создан кастомный.

Измените цвет текста этого лейбла и все (FreeSpaceLabel:= TLabel.Create(WizardForm))

alex2010 15-03-2010 19:03 1369336

YURSHAT, спасибо. только я все равно не понял где это прописывать :), но просмотрел код "подсчет свободного места на ЖД"
и увидел там:
Код:

begin
  SelectDirText_1.Font.Color:= ClBlack;

. изменил black на green и все стало как надо

semiono 15-03-2010 19:59 1369369

Цитата:

Цитата solvador
Мне недавно понадобилось найти в файле нужный параметр и дописать к нему своё значение. »

Спасибо! Как можно этот код использовать вызывая его многократно!!?
Например, грубо говоря я читаю реестр
$1 = RegRead(HKLM\Software\Classes\exefile\DefaultIcon)
$2 = RegRead(HKLM\Software\Classes\dllfile\DefaultIcon)
$3 = RegRead(HKLM\Software\Classes\sysfile\DefaultIcon)
(пишу наугад, на синтаксис не обращайте внимание)
Как мне эти переменные $(1,2,3) поочерёдно вписывать в файл с заменой,
найти A и заменить на $1, найти B и заменить на $2...
То-есть условие поиска должно изменятся разумеется...
Но ведь весь код поиска для этого глупо переписывать, особенно если переменных штук десять и более.
??? Очень хотелось бы такой код поглядеть! Это было бы ещё полезнее для пользования.
И пожалуйста полный пример напишите вместе с RegRead() кодом корректно?
Процедура может быть DeInitializate Install ~ в конце кароче установки...
?!

Chelluga 15-03-2010 23:46 1369540

Вложений: 1
Здравствуй народ.

Кто знает, где найти такую тему (см. вложение)?

alex2010 16-03-2010 01:07 1369576

Вложений: 1
что нужно подправить в скрипте, чтоб при выборе "создать ярлык на рабочем столе" создавались ярлыки?
СКРИПТ НИЖЕ

с созданием ярлыков на рабочем столе разобрался:
косяк в том, если даже поставить галку на создание ярлыков на раб. столе и в след. меню("меню папки пуск") убрать галку с "не создавать ярлыки в меню пуск", то ярлыки не создадутся ни в меню пуск, ни на рабочем столе. почему так?

mariolast 16-03-2010 23:41 1370267

Подскажите пример скриптика, который бы при выборе Удаления программы вызывал бы окошко с чекбоксами,в которых можно проставлять галочки напротив компонентов или файлов, которые нужно удалить или выполнить программу какую то после нажатия кнопки Далее.

И еще подспутно поинтересуюсь, кто то пробовал обьединить скрипты по разпаковке Фриарк и 7z файлов?

ffa 17-03-2010 21:45 1371028

alex2010,
будут создаваться только те ярлыки, которые можно выбрать через Tasks.. как то так.

Код:

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

[Icons]
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

в этом случае можно создавать ярлыки через секцию [Сode]

nik1967 18-03-2010 11:42 1371386

Здравствуйте! Подскажите, пожалуйста, простейший пример переименования файла в папке назначения? Я так понял, это делается с помощью функции RenameFile, но как?
function RenameFile(const OldName, NewName: string): Boolean;

Habetdin 18-03-2010 14:42 1371532

nik1967, пример, переименование файла main.dll в backup.dll после установки:
Код:

[code]
procedure CurPageChanged(CurPageID: Integer);
begin
        if CurPageID = wpFinished then
                if FileExists(ExpandConstant('{app}\main.dll')) then
                        RenameFile(ExpandConstant('{app}\main.dll'), ExpandConstant('{app}\backup.dll'));
end;


nik1967 18-03-2010 15:00 1371551

Habetdin, спасибо большое :good:! Чуть-чуть переделал:
Код:

[_code]
procedure CurPageChanged(CurPageID: Integer);
begin
        if CurPageID = wpInstalling then
begin               
        if FileExists(ExpandConstant('{app}\main.dll')) then               
        RenameFile(ExpandConstant('{app}\main.dll'), ExpandConstant('{app}\name.dll'))       
end;

а то ошибку выдавало.

alex2010 18-03-2010 19:52 1371755

подскажите код, чтоб было вот так:

или почему это не работает в моем скрипте?(см. 6 постов выше)

YURSHAT 18-03-2010 21:20 1371822

Цитата:

Цитата alex2010
или почему это не работает в моем скрипте?(см. 6 постов выше) »

Посмотрите мой оригинальный скрипт Need for Speed™ Undercover+ FreeArc

alex2010 18-03-2010 22:01 1371849

Вложений: 1
YURSHAT,в твоем скрипте работает.
скопировал код с твоего скрипта:
читать дальше »
Код:

//************************************************ [Начало - FreeArc] ***************************************************//

type
#ifdef UNICODE  ; если у вас ошибка на этой строке, то установите препроцессор или исправьте скрипт для вашей версии Inno Setup
    #define A "W"
#else
    #define A "A"  ; точка входа в SetWindowText, {#A} меняется на A или W в зависимости от версии
    PAnsiChar = PChar;  // Required for Inno Setup 5.3.0 and higher. (требуется для Inno Setup версии 5.3.0 и ниже)
#endif
#if Ver < 84018176
    AnsiString = String; // There is no need for this line in Inno Setup 5.2.4 and above (для Inno Setup версий 5.2.4 и выше эта строка не нужна)
#endif

    TMyMsg = record
        hwnd: HWND;
        message: UINT;
        wParam: Longint;
        lParam: Longint;
        time: DWORD;
        pt: TPoint;
    end;

    TFreeArcCallback = function (what: PAnsiChar; int1, int2: Integer; str: PAnsiChar): Integer;
    TArc = record Path: string; OrigSize: Integer; Size: Extended; end;

var
    FileNamelbl, ExtractFile: TLabel;
    lblExtractFileName: TLabel;
    CancelCode, n, UnPackError, StartInstall: Integer;
    Arcs: array of TArc;
    msgError: string;
    lastMb: Integer;
    baseMb: Integer;
    totalUncompressedSize: Integer;            // total uncompressed size of archive data in mb
    LastTimerEvent: DWORD;

Function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: string; cbMultiByte: integer; lpWideCharStr: string; cchWideChar: integer): longint; external 'MultiByteToWideChar@kernel32.dll stdcall';
Function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: string; cchWideChar: integer; lpMultiByteStr: string; cbMultiByte: integer; lpDefaultChar: integer; lpUsedDefaultChar: integer): longint; external 'WideCharToMultiByte@kernel32.dll stdcall';

function PeekMessage(var lpMsg: TMyMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMyMsg): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: TMyMsg): Longint; external 'DispatchMessageA@user32.dll stdcall';

Function OemToChar(lpszSrc, lpszDst: AnsiString): longint; external 'OemToCharA@user32.dll stdcall';
function GetWindowLong(hWnd, nIndex: Integer): Longint; external 'GetWindowLongA@user32 stdcall delayload';
function SetWindowText(hWnd: Longint; lpString: String): Longint; external 'SetWindowText{#A}@user32 stdcall delayload';

function GetTickCount: DWord; external 'GetTickCount@kernel32';
function WrapFreeArcCallback (callback: TFreeArcCallback; paramcount: integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function FreeArcExtract (callback: longword; cmd1,cmd2,cmd3,cmd4,cmd5,cmd6,cmd7,cmd8,cmd9,cmd10: PAnsiChar): integer; external 'FreeArcExtract@files:unarc.dll cdecl';

procedure AppProcessMessage;
var
    Msg: TMyMsg;
begin
    while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do begin
        TranslateMessage(Msg);
        DispatchMessage(Msg);
    end;
end;

function cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;

Function Size64(Hi, Lo: Integer): Extended;
Begin
    Result:= Lo;
    if Lo<0 then Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
    for Hi:= Hi-1 Downto 0 do
        Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
End;

// Converts OEM encoded string into ANSI
// Преобразует OEM строку в ANSI кодировку
function OemToAnsiStr( strSource: AnsiString): AnsiString;
var
    nRet : longint;
begin
    SetLength( Result, Length( strSource ) );
    nRet:= OemToChar( strSource, Result );
end;

// Converts ANSI encoded string into UTF-8
// Преобразует строку из ANSI в UTF-8 кодировку
function AnsiToUtf8( strSource: string ): string;
var
    nRet : integer;
    WideCharBuf: string;
    MultiByteBuf: string;
begin
    strSource:= strSource + chr(0);
    SetLength( WideCharBuf, Length( strSource ) * 2 );
    SetLength( MultiByteBuf, Length( strSource ) * 2 );

    nRet:= MultiByteToWideChar( CP_ACP, 0, strSource, -1, WideCharBuf, Length(WideCharBuf) );
    nRet:= WideCharToMultiByte( CP_UTF8, 0, WideCharBuf, -1, MultiByteBuf, Length(MultiByteBuf), 0, 0);

    Result:= MultiByteBuf;
end;

// OnClick event function for btnCancel
procedure btnCancelUnpackingOnClick(Sender: TObject);
begin
    if MsgBox( SetupMessage( msgExitSetupMessage ), mbInformation, MB_YESNO ) = IDYES then
        CancelCode:= -127;
end;

var origsize: Integer;
// The callback function for getting info about FreeArc archive
function FreeArcInfoCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
begin
    if string(what)='origsize'    then origsize := Mb else
    if string(what)='compsize'    then                else
    if string(what)='total_files' then                else
    Result:= CancelCode;
end;

// Returns decompressed size of files in archive
function ArchiveOrigSize(arcname: string): Integer;
var
    callback: longword;
Begin
    callback:= WrapFreeArcCallback(@FreeArcInfoCallback,4);  //FreeArcInfoCallback has 4 arguments
    CancelCode:= 0;
    AppProcessMessage;
    try
        // Pass the specified arguments to 'unarc.dll'
        Result:= FreeArcExtract (callback, 'l', '--', AnsiToUtf8(arcname), '', '', '', '', '', '', '');
        if CancelCode < 0 then Result:= CancelCode;
        if Result >= 0 then Result:= origsize;
    except
        Result:= -63;  //    ArcFail
    end;
end;

// Scans the specified folders for archives and add them to list
function FindArcs(dir: string): Extended;
var
    FSR: TFindRec;
Begin
    Result:= 0;
    if FindFirst(ExpandConstant(dir), FSR) then begin
        try
            repeat
                // Skip everything but the folders
                if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then CONTINUE;
                n:= GetArrayLength(Arcs);
                // Expand the folder list
                SetArrayLength(Arcs, n +1);
                Arcs[n].Path:= ExtractFilePath(ExpandConstant(dir)) + FSR.Name;
                Arcs[n].Size:= Size64(FSR.SizeHigh, FSR.SizeLow);
                Result:= Result + Arcs[n].Size;
                Arcs[n].OrigSize := ArchiveOrigSize(Arcs[n].Path)
                totalUncompressedSize := totalUncompressedSize + Arcs[n].OrigSize
            until not FindNext(FSR);
        finally
            FindClose(FSR);
        end;
    end;
End;

// Sets the TaskBar title
Procedure SetTaskBarTitle(Title: String); var h: Integer;
Begin
    h:= GetWindowLong(MainForm.Handle, -8); if h <> 0 then SetWindowText(h, Title);
End;

// Converts milliseconds to human-readable time
// Конвертирует милисекунды в человеко-читаемое изображение времени
Function TicksToTime(Ticks: DWord; h,m,s: String; detail: Boolean): String;
Begin
    if detail                              {hh:mm:ss format} then
        Result:= PADZ(IntToStr(Ticks/3600000), 2) +':'+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +':'+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2)
    else if Ticks/3600 >= 1000              {more than hour}  then
        Result:= IntToStr(Ticks/3600000) +h+' '+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +m
    else if Ticks/60 >= 1000                {1..60 minutes}  then
        Result:= IntToStr(Ticks/60000) +m+' '+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2) +s
  else Result:= IntToStr(Ticks/1000) +s    {less than one minute}
End;

// The main callback function for unpacking FreeArc archives
function FreeArcCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
var
    percents, Remaining: Integer;
    s: String;
begin
    if GetTickCount - LastTimerEvent > 1000 then begin
        // This code will be executed once each 1000 ms (этот код будет выполняться раз в 1000 миллисекунд)
        //  ....
        // End of code executed by timer
        LastTimerEvent := LastTimerEvent+1000;
    end;

    if string(what)='filename' then begin
        // Update FileName label
        lblExtractFileName.Caption:= FmtMessage( cm( 'Extracting' ), [OemToAnsiStr( str )] )
    end else if (string(what)='write') and (totalUncompressedSize>0) and (Mb>lastMb) then begin
        // Assign to Mb *total* amount of data extracted to the moment from all archives
        lastMb := Mb;
        Mb := baseMb+Mb;

        // Update progress bar
        WizardForm.ProgressGauge.Position:= Mb;

        // Show how much megabytes/archives were processed up to the moment
        percents:= (Mb*1000) div totalUncompressedSize;
        s := FmtMessage(cm('ExtractedInfo'), [IntToStr(Mb), IntToStr(totalUncompressedSize)]);
        if GetArrayLength(Arcs)>1 then
            s := s + '. '+FmtMessage(cm('ArcInfo'), [IntToStr(n+1), IntToStr(GetArrayLength(Arcs))])
        ExtractFile.Caption := s

        // Calculate and show current percents
        percents:= (Mb*1000) div totalUncompressedSize;
        s:= FmtMessage(cm('AllProgress'), [Format('%.1n', [Abs(percents/10)])]);
        if Mb > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((totalUncompressedSize - Mb)/Mb)) else Remaining:= 0;
        if Remaining = 0 then SetTaskBarTitle(cm('ending')) else begin
            s:= s + '.  '+FmtMessage(cm('remains'), [TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)])
            SetTaskBarTitle(FmtMessage(cm('taskbar'), [IntToStr(percents/10), TicksToTime(Remaining, 'h', 'm', 's', false)]))
        end;
        FileNameLbl.Caption := s
    end;
    AppProcessMessage;
    Result:= CancelCode;
end;

// Extracts all found archives
function UnPack(Archives: string): Integer;
var
    totalCompressedSize: Extended;
    callback: longword;
    FreeMB, TotalMB: Cardinal;
begin
    // Display 'Extracting FreeArc archive'
    lblExtractFileName.Caption:= '';
    lblExtractFileName.Show;
    ExtractFile.caption:= cm('ArcTitle');
    ExtractFile.Show;
    FileNamelbl.Caption:= '';
    FileNamelbl.Show;

    // Show the 'Cancel unpacking' button and set it as default button
    btnCancelUnpacking.Caption:= WizardForm.CancelButton.Caption;
    btnCancelUnpacking.Show;
    LoadButtonImage(btnCancelUnpacking,bidbtnCancelUnpacking);
    ButtonLabel[bidbtnCancelUnpacking].Left := ButtonPanel[bidbtnCancelUnpacking].Width div 2 - ButtonLabel[bidbtnCancelUnpacking].Width div 2;
    ButtonLabel[bidbtnCancelUnpacking].Top := ButtonPanel[bidbtnCancelUnpacking].Height div 2 - ButtonLabel[bidbtnCancelUnpacking].Height div 2;
    WizardForm.ActiveControl:= btnCancelUnpacking;
    WizardForm.ProgressGauge.Position:= 0;
    // Get the size of all archives
    totalUncompressedSize := 0;
    totalCompressedSize := FindArcs(Archives);
    WizardForm.ProgressGauge.Max:= totalUncompressedSize;
    // Other initializations
    callback:= WrapFreeArcCallback(@FreeArcCallback,4);  //FreeArcCallback has 4 arguments
    StartInstall:= GetTickCount;    {время начала распаковки}
    LastTimerEvent:= GetTickCount;
    baseMb:= 0

    for n:= 0 to GetArrayLength(Arcs) -1 do
    begin
        lastMb := 0
        CancelCode:= 0;
        AppProcessMessage;
        try
            // Pass the specified arguments to 'unarc.dll'
            Result:= FreeArcExtract (callback, 'x', '-o+', '-dp' + AnsiToUtf8( ExpandConstant('{app}') ), '--', AnsiToUtf8(Arcs[n].Path), '', '', '', '', '');
            if CancelCode < 0 then Result:= CancelCode;
        except
            Result:= -63;  //    ArcFail
        end;
        baseMb:= baseMb+lastMb

        // Error occured
        if Result <> 0 then
        begin
            msgError:= FmtMessage(cm('ArcError'), [IntToStr(Result)]);
            GetSpaceOnDisk(ExtractFileDrive(ExpandConstant('{app}')), True, FreeMB, TotalMB);
            case Result of
                -1: if FreeMB < 32 {Мб на диске} then msgError:= SetupMessage(msgDiskSpaceWarningTitle)
                    else msgError:= msgError + #13#10 + FmtMessage(cm('ArcBroken'), [ExtractFileName(Arcs[n].Path)]);
                -127:  msgError:= cm('ArcBreak');    //Cancel button
                -63:    msgError:= cm('ArcFail');
            end;
//          MsgBox(msgError, mbInformation, MB_OK);    //сообщение показывается на странице завершения
            Log(msgError);
            Break;    //прервать цикл распаковки
        end;
    end;
    // Hide labels and button
    FileNamelbl.Hide;
    lblExtractFileName.Hide;
    ExtractFile.Hide;
    btnCancelUnpacking.Hide;
    ButtonPanel[bidbtnCancelUnpacking].Hide;
    ButtonImage[bidbtnCancelUnpacking].Hide;
    ButtonLabel[bidbtnCancelUnpacking].Hide;
end;

procedure CurStepChanged2(CurStep: TSetupStep);
begin
    if CurStep = ssPostInstall then
    begin
        FileNameLabel.Hide
        UnPackError:= UnPack(Archives)
        if UnPackError = 0 then
            SetTaskBarTitle(SetupMessage(msgSetupAppTitle))
        else
        begin
            // Error occured, uninstall it then
            Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n);    //откат установки из-за ошибки unarc.dll
            SetTaskBarTitle(SetupMessage(msgErrorTitle))
            WizardForm.Caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
        end;
    end;
end;

//    стандартный способ отката (не нужна CurPageChanged), но архивы распаковываются до извлечения файлов инсталлятора
//    if CurStep = ssInstall then
//      if UnPack(Archives) <> 0 then Abort;

Procedure CurPageChanged5(CurPageID: Integer);
Begin
    if (CurPageID = wpFinished) and (UnPackError <> 0) then
    begin // Extraction was unsuccessful (распаковщик вернул ошибку)
        // Show error message
        FinishedHeadingLabel.Caption:= ExpandConstant('{cm:Finished4}');
        FinishedLabel.Caption:= SetupMessage(msgSetupAborted)+#13#13+ExpandConstant('{cm:Finished3}');
    end;
End;

procedure InitializeWizard7();
begin
    with WizardForm.ProgressGauge do
    begin
        // Create a label to show current FileName being extracted
        lblExtractFileName:= TLabel.Create(WizardForm);
        lblExtractFileName.parent:=WizardForm.InstallingPage;
        lblExtractFileName.autosize:=false;
        lblExtractFileName.Left:= ScaleX(65);
        lblExtractFileName.Top:= ScaleY(275);
        lblExtractFileName.Width:= ScaleX(625);
        lblExtractFileName.Height:= ScaleY(20);
        lblExtractFileName.Caption:= '';
        lblExtractFileName.Transparent := True;
        lblExtractFileName.Font.Name:= 'Georgia'
        lblExtractFileName.Font.Size:= 10;
        lblExtractFileName.Font.Style:= [fsBold, fsItalic];
        lblExtractFileName.Hide;

        // Create a label to show percentage
        ExtractFile:= TLabel.Create(WizardForm);
        ExtractFile.parent:=WizardForm.InstallingPage;
        ExtractFile.autosize:=false;
        ExtractFile.Left:= ScaleX(82);
        ExtractFile.Top:= ScaleY(350);
        ExtractFile.Width:= ScaleX(625);
        ExtractFile.Height:= ScaleY(20);
        ExtractFile.Alignment := taCenter;
        ExtractFile.caption:= '';
        ExtractFile.Transparent := True;
        ExtractFile.Font.Name:= 'Georgia'
        ExtractFile.Font.Size:= 10;
        ExtractFile.Font.Style:= [fsBold, fsItalic];
        ExtractFile.Hide;

        FileNamelbl:= TLabel.Create(WizardForm);
        FileNamelbl.parent:=WizardForm.InstallingPage;
        FileNamelbl.autosize:=false;
        FileNamelbl.Left:= ScaleX(82);
        FileNamelbl.Top:= ScaleY(380);
        FileNamelbl.Width:= ScaleX(625);
        FileNamelbl.Height:= ScaleY(20);
        FileNamelbl.Alignment := taCenter;
        FileNamelbl.caption:= '';
        FileNamelbl.Transparent := True;
        FileNamelbl.Font.Name:= 'Georgia'
        FileNamelbl.Font.Size:= 10;
        FileNamelbl.Font.Style:= [fsBold, fsItalic];
        FileNamelbl.Hide;
    end;

    // Create a 'Cancel unpacking' button and hide it for now.
    btnCancelUnpacking:=TButton.create(WizardForm);
    btnCancelUnpacking.Parent:= WizardForm;
    btnCancelUnpacking.SetBounds(WizardForm.CancelButton.Left, WizardForm.CancelButton.top, WizardForm.CancelButton.Width, WizardForm.CancelButton.Height);
    btnCancelUnpacking.OnClick:= @btnCancelUnpackingOnClick;
    btnCancelUnpacking.Hide;
end;

//************************************************ [Конец - FreeArc] ***************************************************//



при установке, там где должна начаться распаковка архива, сразу появляется "программа установлена на ваш комп. Нажмите завершить, чтобы продолжить". т.е. распаковка архива не происходит. где допущена ошибка?

YURSHAT 19-03-2010 12:07 1372246

Цитата:

Цитата alex2010
при установке, там где должна начаться распаковка архива, сразу появляется "программа установлена на ваш комп. Нажмите завершить, чтобы продолжить". т.е. распаковка архива не происходит. где допущена ошибка? »

Судя по признакам скрипт просто не цепляет архивы

ЗЫ. Сегодня этот скрипт будет уже не актуальным, так как я выложу новую версию...

Serega 19-03-2010 21:53 1372735

Цитата:

Цитата mariolast
Подскажите пример скриптика, который бы при выборе Удаления программы вызывал бы окошко с чекбоксами,в которых можно проставлять галочки напротив компонентов или файлов, которые нужно удалить или выполнить программу какую то после нажатия кнопки Далее. »

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

alex2010 20-03-2010 00:32 1372855

Вложений: 1
как исправить вот такой небольшой баг:????

YURSHAT 21-03-2010 23:28 1374097

Need for Speed™ Undercover.iss [v 2.0]



Пароль: ru-board | временно без скачивания

Что нового:

• Весь скрипт переписан с нуля (сходство только визуальное)
• Отсутствуют .bmp изображения (только .jpg и .png)
• Больше не нужно использовать Photoshop!!!

• Встроенный Autorun, содержащий бегущую строку в виде заголовка, описание игры с «эффектом печатной машинки», есть возможность запуска и удаления игры если она присутствует в системе.
• Новый способ текстурирования кнопок и прогрессБара (теперь они прозрачные). Также кастомные чекбоксы. Кнопки имеют 8 состояний (могут быть включенными и выключенными). Присутствует озвучка кнопок и чекбоксов при наведении и нажатии, а также изменения цвета шрифта.
• Установка и использование временного шрифта.
• Проверка системных требований
• Информация о выбранном жестком диске
• Прозрачные DirEdit и GroupEdit.
• Слайд-шоу во время установки, а также процент распаковки и оставшееся время.
• Деинсталлятор также выполнен в стиле установщика (текстурированный прогрессБар, процент удаления и т.д.).
• Удаление игровых сохранений и многое другое.

Страницы Мастера:

WelcomePage, SystemPage*, SelectDirPage, SelectProgramGroupPage, SelectTasksPage*, InstallingPage, FinishedPage, UninstallingPage.

Огромную благодарность выражаю South (htuos) , за создание прекрасной библиотеки botva2.dll, и за попомощь в написании скрипта.

PS. Просьба: не писать сообщения с просьбой добавить FreeArc. FreeArc будет добавлен после теста основного скрипта. Прошу протестить скрипт и сообщить о выявленых глюках\багах

mariolast 22-03-2010 00:34 1374127

Как вносить изменения в Ini файл? Использование функции SetIniString затирает все строки в нем :(

А мне надо именно подредактировать его

Habetdin 22-03-2010 02:03 1374166

YURSHAT, не компилилось в unicode-версии Inno Setup, заменил везде PAnsiChar на PChar и убрал строку "PChar = PAnsiChar;" - правильно? :)
В секции [Files] прописано:
Код:

Source: {win}\help\*.hlp; DestDir: {app}\Files; Flags: external
Это ведь для проверки прогрессбара и не входит в необходимые файлы?

YURSHAT 22-03-2010 02:20 1374171

Цитата:

Цитата Habetdin
YURSHAT, не компилилось в unicode-версии Inno Setup, заменил везде PAnsiChar на PChar и убрал строку "PChar = PAnsiChar;" - правильно? »

У меня на 5.3.8 (u) все нормально компилится (только что проверил). А PAnsiChar не нужно менять. Например в ImgPBCreate нужно передавать строки только в ANSI-кодировке, так как
function ImgLoad(Wnd :HWND; FileName :PAnsiChar ; Left, Top, Width, Height :integer; Stretch, IsBkg :boolean) :Longint;

Цитата:

Цитата Habetdin
Это ведь для проверки прогрессбара и не входит в необходимые файлы? »

Да, это для демонстрации работы прогресса и слайд-шоу

ЗЫ. В каких строчках выдавало ошибку?

Habetdin 22-03-2010 02:27 1374173

YURSHAT,
Цитата:

Цитата YURSHAT
У меня на 5.3.8 (u) все нормально компилится (только что проверил) »

Версия от ResTools или стандартная?
Цитата:

Цитата YURSHAT
PAnsiChar »

У меня выдает "Unknown type: PAnsiChar" :(

YURSHAT 22-03-2010 02:41 1374178

Цитата:

Цитата Habetdin
ерсия от ResTools или стандартная? »

Стандартная

Habetdin 22-03-2010 02:42 1374180

Цитата:

Цитата YURSHAT
Стандартная »

А у меня расширенная от Restools :(

YURSHAT 22-03-2010 03:03 1374185

Цитата:

Цитата Habetdin
А у меня расширенная от Restools »

Ну теперь понятно откуда ноги ростут :)

Ну думаю особых проблем это не вызовет.

mariolast 22-03-2010 16:27 1374564

Мне нужно сделать так, чтобы в поле ввода пути назначения стоял по умолчанию путь, который зависит от Типа устанавливаемого приложения.
Думаю, что для этого надо чтобы страница выбора компонентов выскакивала раньше чем страница выбора пути.
Делал так

procedure CurPageChanged(CurPageID: Integer);
begin

with WizardForm do
begin
if CurPageID = wpSelectDir then
begin
SelectDirPage.Notebook.ActivePage:= SelectComponentsPage;
end;
if CurPageID = wpSelectComponents then
SelectComponentsPage.Notebook.ActivePage:= SelectDirPage;
DiskSpaceLabel.Caption:= ComponentsDiskSpaceLabel.Caption;
if isComponentSelected('zs') then DirEdit.Text:=ExpandConstant('{pf}\proga1) else DirEdit.Text:=ExpandConstant('{pf}\proga2');
if CurPageID = wpSelectProgramGroup then
begin
if isComponentSelected('proga1') then GroupEdit.Text:='proga1' else GroupEdit.Text:='proga2';
end;
end;

Кнопка Обзор фактически тут не работает....чтобы ни выбирал я...ставится будет либо в {pf}\proga1 либо в {pf}\proga2.
И еще при выборе отличного по умолчанию пути всегда высвечивается то что задано в начале скрипта в DefaultDirName={pf}\..., приходится ручками стирать, вот бы это DefaultDirName можно было изменять...

Можно как то ситуацию поправить без создания пользовательского окна? Или может есть уже готовый скрипт для такого окна более-менее приличного вида...

A1EXXX 22-03-2010 20:13 1374736

Inno Setup Compiler 5.3.8 build 100322 Final от Restools

Habetdin 22-03-2010 21:58 1374828

Цитата:

Цитата YURSHAT
ЗЫ. В каких строчках выдавало ошибку? »


YURSHAT 22-03-2010 23:20 1374911

Habetdin, эт я уже понял. просто закоментируйте строку. Рестулзовскому юникоду эту не нужно.

ЗЫ. Эту фигню я поправлю

Habetdin 22-03-2010 23:26 1374917

YURSHAT,
Цитата:

Цитата YURSHAT
просто закоментируйте строку »

Вот тогда и выдает "Unknown type":
:(

alex2010 23-03-2010 00:33 1374946

Habetdin, сделай вот так:
//PAnsiChar = PChar;

Habetdin 23-03-2010 00:40 1374951

alex2010, я что, заккоментировать строку не могу? :lol:
Ошибку из поста выше выдает после комментирования :)

comsun 23-03-2010 01:01 1374959

Можно ли на Inno Setup собрать "тихий" инсталлятор?
И если можно,то как?
Спасибо.

alex2010 23-03-2010 01:37 1374979

Habetdin, :lol: у меня этой ошибки нет, хочешь закомментируй, хочешь не комментируй :)
YURSHAT, а как сделать в твоем новым скрипте так, чтоб скин загружался без autorun, т.е. когда удаляешь код autorun'а то скин не загружается???

YURSHAT 23-03-2010 02:11 1374994

Цитата:

Цитата Habetdin
Ошибку из поста выше выдает после комментирования »

Я чуть позже подправлю этот недочет.

Цитата:

Цитата alex2010
URSHAT, а как сделать в твоем новым скрипте так, чтоб скин загружался без autorun, т.е. когда удаляешь код autorun'а то скин не загружается?? »

1. Самый простой способ отключения Авторана (ничего не удаляя) это

Код:

function InitializeSetup(): Boolean;
begin
  ExtractTemporaryFile('Tiger.cjstyles');
  LoadSkin(ExpandConstant('{tmp}\Tiger.cjstyles'), '');
  Result := AutoRunExec;
end;

заменить Result := AutoRunExec на Result := True.

2. Загрузка скина происходит в функции InitializeSetup, не удаляй ее при удалении строк отвечающих за авторан

Цитата:

Цитата comsun
Можно ли на Inno Setup собрать "тихий" инсталлятор? »

Почитайте справку (к Inno Setup) :read:

kotkovets 23-03-2010 14:36 1375351

Возможно ли средствами Inno Setup создать на панели быстрого запуска ярлык к программе в Windows 7 и каким образом?

Habetdin 23-03-2010 14:44 1375357

Цитата:

Цитата kotkovets
создать на панели быстрого запуска ярлык к программе в Windows 7 »

PinToTasckbar.vbs

alex2010 23-03-2010 15:46 1375396

YURSHAT, спасибо :) а то я просто удалял строку Result := AutoRunExec; и у меня не запускался инсталл. теперь все работает

kotkovets 23-03-2010 18:01 1375479

Habetdin,и как этот скрипт прикрутить?
Код:

[run]
Filename:{sys}\cmd.exe {tmp}\PinToTasckbar.vbs "Полный путь\имя файла программы"

???

comsun 23-03-2010 20:46 1375577

Цитата:

Цитата YURSHAT
Почитайте справку (к Inno Setup) »

Я понимаю что сейчас модно вместо ответа отсылать к учебнику.
Насколько вырастаешь в своих глазах,но..... ответа все-таки нет.
А хелп я читал, и кроме:

DisableDirPage=yes
DisableFinishedPage=yes
DisableProgramGroupPage=yes
DisableReadyMemo=yes
DisableReadyPage=yes
DisableStartupPrompt=yes


о "тихом" инстале не упоминается.

Проверить это сейчас нет возможности , а знать хочется заранее - стоит ли выделять время на это или нет.
Будет ли тихий инсталл или нет.

A1EXXX 23-03-2010 23:40 1375696

Inno ISCmplr Setup 5.3.8 build 100323 by Restools

Habetdin 24-03-2010 10:37 1375909

kotkovets, как-то так :)
Код:

[Run]
Filename: {tmp}\PinToTasckbar.vbs; Parameters: "{app}\program.exe"; Flags: shellexec


skeptik007 24-03-2010 13:50 1376052

А как узнать какими функциями обладает та или иная DLL, чтобы потом их использовать в создание инсталлятора?

yasuni 24-03-2010 17:29 1376216

Что нужно добавить в скрипт чтоб АRC.EXE архив распаковывался вот таким образом http://s19.radikal.ru/i192/1003/e7/8244059be450.png
У меня вот так отображается и не видно сколько ещё осталось % http://s50.radikal.ru/i130/1003/0d/fd0acf09fcc3.png
Хотелось бы чтоб было как на первом скрине
----------------------
И как вставить вот такое фото растянутое вместо малинькового http://s004.radikal.ru/i208/1003/81/f12b2972bb9b.png

duxa 24-03-2010 17:58 1376242

Добрый день. Не могу соеденить черный фон с серой папкой которую дал A1EXXX (ругается на procedure InitializeWizard(); т.к их в секции 2-ое, по отдельности каждый код работает) Помогите пожалуйста.
Цитата:

[code]
[Files]
Source: C:\papka.bmp; DestDir: {tmp}; Flags: dontcopy

[code]
procedure InitializeWizard();
begin
ExtractTemporaryFile('papka.bmp');
WizardForm.SelectDirBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\papka.bmp'));
WizardForm.SelectDirBitmapImage.AutoSize:=true;
WizardForm.SelectGroupBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\papka.bmp'));
WizardForm.SelectGroupBitmapImage.AutoSize:=true;
end;

const
Color = clblack;

procedure InitializeWizard();
begin
WizardForm.Font.Color:=clWhite;
WizardForm.Color:=Color;
WizardForm.WelcomePage.Color:=Color;
WizardForm.InnerPage.Color:=Color;
WizardForm.FinishedPage.Color:=Color;
WizardForm.LicensePage.Color:=Color;
WizardForm.PasswordPage.Color:=Color;
WizardForm.InfoBeforePage.Color:=Color;
WizardForm.UserInfoPage.Color:=Color;
WizardForm.SelectDirPage.Color:=Color;
WizardForm.SelectComponentsPage.Color:=Color;
WizardForm.SelectProgramGroupPage.Color:=Color;
WizardForm.SelectTasksPage.Color:=Color;
WizardForm.ReadyPage.Color:=Color;
WizardForm.PreparingPage.Color:=Color;
WizardForm.InstallingPage.Color:=Color;
WizardForm.InfoAfterPage.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.DiskSpaceLabel.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.GroupEdit.Color:=Color;
WizardForm.PasswordLabel.Color:=Color;
WizardForm.PasswordEdit.Color:=Color;
WizardForm.PasswordEditLabel.Color:=Color;
WizardForm.ReadyMemo.Color:=Color;
WizardForm.TypesCombo.Color:=Color;
WizardForm.WelcomeLabel1.Color:=Color;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.Color:=Color;
WizardForm.YesRadio.Color:=Color;
WizardForm.NoRadio.Color:=Color;
WizardForm.WelcomeLabel2.Color:=Color;
WizardForm.LicenseLabel1.Color:=Color;
WizardForm.InfoAfterClickLabel.Color:=Color;
WizardForm.ComponentsList.Color:=Color;
WizardForm.ComponentsDiskSpaceLabel.Color:=Color;
WizardForm.BeveledLabel.Color:=Color;
WizardForm.StatusLabel.Color:=Color;
WizardForm.FilenameLabel.Color:=Color;
WizardForm.SelectDirLabel.Color:=Color;
WizardForm.SelectStartMenuFolderLabel.Color:=Color;
WizardForm.SelectComponentsLabel.Color:=Color;
WizardForm.SelectTasksLabel.Color:=Color;
WizardForm.LicenseAcceptedRadio.Color:=Color;
WizardForm.LicenseNotAcceptedRadio.Color:=Color;
WizardForm.UserInfoNameLabel.Color:=Color;
WizardForm.UserInfoNameEdit.Color:=Color;
WizardForm.UserInfoOrgLabel.Color:=Color;
WizardForm.UserInfoOrgEdit.Color:=Color;
WizardForm.PreparingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Color:=Color;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
end;

vint56 24-03-2010 18:16 1376260

duxa,
читать дальше »
[Files]
Source: C:\papka.bmp; DestDir: {tmp}; Flags: dontcopy

[code]
const
Color = clblack;

procedure InitializeWizard();
begin
//Папка
ExtractTemporaryFile('papka.bmp');
WizardForm.SelectDirBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\papka.bmp'));
WizardForm.SelectDirBitmapImage.AutoSize:=true;
WizardForm.SelectGroupBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\papka.bmp'));
WizardForm.SelectGroupBitmapImage.AutoSize:=true;
//Инсталл черный
WizardForm.Font.Color:=clWhite;
WizardForm.Color:=Color;
WizardForm.WelcomePage.Color:=Color;
WizardForm.InnerPage.Color:=Color;
WizardForm.FinishedPage.Color:=Color;
WizardForm.LicensePage.Color:=Color;
WizardForm.PasswordPage.Color:=Color;
WizardForm.InfoBeforePage.Color:=Color;
WizardForm.UserInfoPage.Color:=Color;
WizardForm.SelectDirPage.Color:=Color;
WizardForm.SelectComponentsPage.Color:=Color;
WizardForm.SelectProgramGroupPage.Color:=Color;
WizardForm.SelectTasksPage.Color:=Color;
WizardForm.ReadyPage.Color:=Color;
WizardForm.PreparingPage.Color:=Color;
WizardForm.InstallingPage.Color:=Color;
WizardForm.InfoAfterPage.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.DiskSpaceLabel.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.GroupEdit.Color:=Color;
WizardForm.PasswordLabel.Color:=Color;
WizardForm.PasswordEdit.Color:=Color;
WizardForm.PasswordEditLabel.Color:=Color;
WizardForm.ReadyMemo.Color:=Color;
WizardForm.TypesCombo.Color:=Color;
WizardForm.WelcomeLabel1.Color:=Color;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.Color:=Color;
WizardForm.YesRadio.Color:=Color;
WizardForm.NoRadio.Color:=Color;
WizardForm.WelcomeLabel2.Color:=Color;
WizardForm.LicenseLabel1.Color:=Color;
WizardForm.InfoAfterClickLabel.Color:=Color;
WizardForm.ComponentsList.Color:=Color;
WizardForm.ComponentsDiskSpaceLabel.Color:=Color;
WizardForm.BeveledLabel.Color:=Color;
WizardForm.StatusLabel.Color:=Color;
WizardForm.FilenameLabel.Color:=Color;
WizardForm.SelectDirLabel.Color:=Color;
WizardForm.SelectStartMenuFolderLabel.Color:=Color;
WizardForm.SelectComponentsLabel.Color:=Color;
WizardForm.SelectTasksLabel.Color:=Color;
WizardForm.LicenseAcceptedRadio.Color:=Color;
WizardForm.LicenseNotAcceptedRadio.Color:=Color;
WizardForm.UserInfoNameLabel.Color:=Color;
WizardForm.UserInfoNameEdit.Color:=Color;
WizardForm.UserInfoOrgLabel.Color:=Color;
WizardForm.UserInfoOrgEdit.Color:=Color;
WizardForm.PreparingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Color:=Color;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
end;

duxa 24-03-2010 18:32 1376271

vint56, спасибо!
Но не мог бы ты это исправить в этом скрипте:
Скрипт
; --- Generated by InnoSetup Script Joiner version 3.0, Jul 22 2009, (c) Bulat Ziganshin <Bulat.Ziganshin@gmail.com>. More info at http://issjoiner.codeplex.com/

; --- Source: р22(2).iss ------------------------------------------------------------
; --- Generated by InnoSetup Script Joiner version 3.0, Jul 22 2009, (c) Bulat Ziganshin <Bulat.Ziganshin@gmail.com>. More info at http://issjoiner.codeplex.com/

; --- Source: Zombie Driver.iss ------------------------------------------------------------
; Скрипт создан при помощи мастера создания скриптов.
; СМ. ДОКУМЕНТАЦИЮ ДЛЯ ИЗУЧЕНИЯ ДЕТАЛЕЙ ОТНОСИТЕЛЬНО СОЗДАНИЯ ФАЙЛОВ СКРИПТА INNO SETUP!

#define MyAppName "Zombie Driver"
#define MyAppVerName "Zombie Driver"
#define MyAppExeName "ZombieDriver.exe"

[Setup]
AppName={#MyAppName}
AppVerName={#MyAppVerName}
DefaultDirName={pf}\Akella Games\Zombie Driver
DefaultGroupName=Akella Games\Zombie Driver
LicenseFile=C:\repack\Лицензионное соглашение.txt
InfoAfterFile=C:\repack\Техподдержка.txt
OutputDir=C:\repack
OutputBaseFilename=setup
SetupIconFile=C:\repack\ZD_icon.ico
Compression=lzma
SolidCompression=yes
WizardSmallImageFile=ZD_icon.bmp
WizardImageFile=22.bmp
WizardImageStretch=yes

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

[CustomMessages]

rus.ArcBreak=Установка прервана!
rus.ExtractedInfo=Распаковано %1 Мб из %2 Мб
rus.ArcInfo=Архив: %1 из %2
rus.ArcTitle=Распаковка архивов FreeArc
rus.ArcError=Распаковщик FreeArc вернул код ошибки: %1
rus.ArcFail=Распаковка не завершена!
rus.AllProgress=Общий прогресс распаковки: %1%%
rus.ArcBroken=Возможно, архив %1 повреждён%nили недостаточно места на диске назначения.
rus.Extracting=Распаковывается: %1
rus.taskbar=%1%%, жди %2
rus.remains=Осталось ждать %1
rus.LongTime=вечно
rus.ending=завершение
rus.hour= часов
rus.min= мин
rus.sec= сек

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

[Files]
Source: "C:\Program Files\Akella Games\Zombie Driver\Release\ZombieDriver.exe"; DestDir: "{app}"; Flags: ignoreversion
; ОТМЕТЬТЕ: Не используйте "Флажки: Проигнорировать версию" на любых общедоступных системных файлах
Source: unarc.dll; DestDir: {tmp}; Flags: dontcopy deleteafterinstall
Source: compiler:InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{userdesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#MyAppName}}"; Flags: nowait postinstall skipifsilent
Filename: "{src}\Redist\Adobe Reader\AdbeRdr812_ru_RU.exe"; Description: "Установить Adobe Reader"; Flags: postinstall shellexec skipifsilent
Filename: "{src}\Redist\DirectX\DXSETUP.exe"; Description: "Установить DirectX"; Flags: postinstall shellexec skipifsilent
Filename: "{src}\Redist\OpenAl\oalinst.exe"; Description: "Установить OpenAl"; Flags: postinstall shellexec skipifsilent
Filename: "{src}\Redist\PhysX\PhysX_9.09.0814_SystemSoftware.exe"; Description: "Установить PhysX"; Flags: postinstall shellexec skipifsilent
Filename: "{src}\Redist\VcRedist\vcredist_x86.exe"; Description: "Установить VcRedist"; Flags: postinstall shellexec skipifsilent

[code]
const
Archives = '{src}\Zombie Driver.arc'; // укажите расположение архивов FreeArc; для внешних файлов строку в [Files] добавлять необязательно

PM_REMOVE = 1;
CP_ACP = 0; CP_UTF8 = 65001;
oneMb = 1048576;

type
#ifdef UNICODE ; если у вас ошибка на этой строке, то установите препроцессор или исправьте скрипт для вашей версии Inno Setup
#define A "W"
#else
#define A "A" ; точка входа в SetWindowText, {#A} меняется на A или W в зависимости от версии
PAnsiChar = PChar; // Required for Inno Setup 5.3.0 and higher. (требуется для Inno Setup версии 5.3.0 и ниже)
#endif
#if Ver < 84018176
AnsiString = String; // There is no need for this line in Inno Setup 5.2.4 and above (для Inno Setup версий 5.2.4 и выше эта строка не нужна)
#endif

TMyMsg = record
hwnd: HWND;
message: UINT;
wParam: Longint;
lParam: Longint;
time: DWORD;
pt: TPoint;
end;

TFreeArcCallback = function (what: PAnsiChar; int1, int2: Integer; str: PAnsiChar): Integer;
TArc = record Path: string; OrigSize: Integer; Size: Extended; end;

var
ExtractFile: TLabel;
lblExtractFileName: TLabel;
btnCancelUnpacking: TButton;
CancelCode, n, UnPackError, StartInstall: Integer;
Arcs: array of TArc;
msgError: string;
lastMb: Integer;
baseMb: Integer;
totalUncompressedSize: Integer; // total uncompressed size of archive data in mb
LastTimerEvent: DWORD;

Function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: string; cbMultiByte: integer; lpWideCharStr: string; cchWideChar: integer): longint; external 'MultiByteToWideChar@kernel32.dll stdcall';
Function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: string; cchWideChar: integer; lpMultiByteStr: string; cbMultiByte: integer; lpDefaultChar: integer; lpUsedDefaultChar: integer): longint; external 'WideCharToMultiByte@kernel32.dll stdcall';

function PeekMessage(var lpMsg: TMyMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMyMsg): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: TMyMsg): Longint; external 'DispatchMessageA@user32.dll stdcall';

Function OemToChar(lpszSrc, lpszDst: AnsiString): longint; external 'OemToCharA@user32.dll stdcall';
function GetWindowLong(hWnd, nIndex: Integer): Longint; external 'GetWindowLongA@user32 stdcall delayload';
function SetWindowText(hWnd: Longint; lpString: String): Longint; external 'SetWindowText{#A}@user32 stdcall delayload';

function GetTickCount: DWord; external 'GetTickCount@kernel32';
function WrapFreeArcCallback (callback: TFreeArcCallback; paramcount: integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function FreeArcExtract (callback: longword; cmd1,cmd2,cmd3,cmd4,cmd5,cmd6,cmd7,cmd8,cmd9,cmd10: PAnsiChar): integer; external 'FreeArcExtract@files:unarc.dll cdecl';

procedure AppProcessMessage;
var
Msg: TMyMsg;
begin
while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;

// Перевод числа в строку с точностью 3 знака (%.3n) с округлением дробной части, если она есть
Function NumToStr(Float: Extended): String;
Begin
Result:= Format('%.3n', [Float]); StringChange(Result, ',', '.');
while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Length(Result) > 1) do
SetLength(Result, Length(Result)-1);
End;

function cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;

Function Size64(Hi, Lo: Integer): Extended;
Begin
Result:= Lo;
if Lo<0 then Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
for Hi:= Hi-1 Downto 0 do
Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
End;

// Converts OEM encoded string into ANSI
// Преобразует OEM строку в ANSI кодировку
function OemToAnsiStr( strSource: AnsiString): AnsiString;
var
nRet : longint;
begin
SetLength( Result, Length( strSource ) );
nRet:= OemToChar( strSource, Result );
end;

// Converts ANSI encoded string into UTF-8
// Преобразует строку из ANSI в UTF-8 кодировку
function AnsiToUtf8( strSource: string ): string;
var
nRet : integer;
WideCharBuf: string;
MultiByteBuf: string;
begin
strSource:= strSource + chr(0);
SetLength( WideCharBuf, Length( strSource ) * 2 );
SetLength( MultiByteBuf, Length( strSource ) * 2 );

nRet:= MultiByteToWideChar( CP_ACP, 0, strSource, -1, WideCharBuf, Length(WideCharBuf) );
nRet:= WideCharToMultiByte( CP_UTF8, 0, WideCharBuf, -1, MultiByteBuf, Length(MultiByteBuf), 0, 0);

Result:= MultiByteBuf;
end;

// OnClick event function for btnCancel
procedure btnCancelUnpackingOnClick(Sender: TObject);
begin
if MsgBox( SetupMessage( msgExitSetupMessage ), mbInformation, MB_YESNO ) = IDYES then
CancelCode:= -127;
end;

var origsize: Integer;
// The callback function for getting info about FreeArc archive
function FreeArcInfoCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
begin
if string(what)='origsize' then origsize := Mb else
if string(what)='compsize' then else
if string(what)='total_files' then else
Result:= CancelCode;
end;

// Returns decompressed size of files in archive
function ArchiveOrigSize(arcname: string): Integer;
var
callback: longword;
Begin
callback:= WrapFreeArcCallback(@FreeArcInfoCallback,4); //FreeArcInfoCallback has 4 arguments
CancelCode:= 0;
AppProcessMessage;
try
// Pass the specified arguments to 'unarc.dll'
Result:= FreeArcExtract (callback, 'l', '--', AnsiToUtf8(arcname), '', '', '', '', '', '', '');
if CancelCode < 0 then Result:= CancelCode;
if Result >= 0 then Result:= origsize;
except
Result:= -63; // ArcFail
end;
end;

// Scans the specified folders for archives and add them to list
function FindArcs(dir: string): Extended;
var
FSR: TFindRec;
Begin
Result:= 0;
if FindFirst(ExpandConstant(dir), FSR) then begin
try
repeat
// Skip everything but the folders
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then CONTINUE;
n:= GetArrayLength(Arcs);
// Expand the folder list
SetArrayLength(Arcs, n +1);
Arcs[n].Path:= ExtractFilePath(ExpandConstant(dir)) + FSR.Name;
Arcs[n].Size:= Size64(FSR.SizeHigh, FSR.SizeLow);
Result:= Result + Arcs[n].Size;
Arcs[n].OrigSize := ArchiveOrigSize(Arcs[n].Path)
totalUncompressedSize := totalUncompressedSize + Arcs[n].OrigSize
until not FindNext(FSR);
finally
FindClose(FSR);
end;
end;
End;

// Sets the TaskBar title
Procedure SetTaskBarTitle(Title: String); var h: Integer;
Begin
h:= GetWindowLong(MainForm.Handle, -8); if h <> 0 then SetWindowText(h, Title);
End;

// Converts milliseconds to human-readable time
// Конвертирует милисекунды в человеко-читаемое изображение времени
Function TicksToTime(Ticks: DWord; h,m,s: String; detail: Boolean): String;
Begin
if detail {hh:mm:ss format} then
Result:= PADZ(IntToStr(Ticks/3600000), 2) +':'+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +':'+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2)
else if Ticks/3600 >= 1000 {more than hour} then
Result:= IntToStr(Ticks/3600000) +h+' '+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +m
else if Ticks/60 >= 1000 {1..60 minutes} then
Result:= IntToStr(Ticks/60000) +m+' '+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2) +s
else Result:= IntToStr(Ticks/1000) +s {less than one minute}
End;

// The main callback function for unpacking FreeArc archives
function FreeArcCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
var
percents, Remaining: Integer;
s: String;
begin
if GetTickCount - LastTimerEvent > 1000 then begin
// This code will be executed once each 1000 ms (этот код будет выполняться раз в 1000 миллисекунд)
// ....
// End of code executed by timer
LastTimerEvent := LastTimerEvent+1000;
end;

if string(what)='filename' then begin
// Update FileName label
lblExtractFileName.Caption:= FmtMessage( cm( 'Extracting' ), [OemToAnsiStr( str )] )
end else if (string(what)='write') and (totalUncompressedSize>0) and (Mb>lastMb) then begin
// Assign to Mb *total* amount of data extracted to the moment from all archives
lastMb := Mb;
Mb := baseMb+Mb;

// Update progress bar
WizardForm.ProgressGauge.Position:= Mb;

// Show how much megabytes/archives were processed up to the moment
percents:= (Mb*1000) div totalUncompressedSize;
s := FmtMessage(cm('ExtractedInfo'), [IntToStr(Mb), IntToStr(totalUncompressedSize)]);
if GetArrayLength(Arcs)>1 then
s := s + '. '+FmtMessage(cm('ArcInfo'), [IntToStr(n+1), IntToStr(GetArrayLength(Arcs))])
ExtractFile.Caption := s

// Calculate and show current percents
percents:= (Mb*1000) div totalUncompressedSize;
s:= FmtMessage(cm('AllProgress'), [Format('%.1n', [Abs(percents/10)])]);
if Mb > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((totalUncompressedSize - Mb)/Mb)) else Remaining:= 0;
if Remaining = 0 then SetTaskBarTitle(cm('ending')) else begin
s:= s + '. '+FmtMessage(cm('remains'), [TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)])
SetTaskBarTitle(FmtMessage(cm('taskbar'), [IntToStr(percents/10), TicksToTime(Remaining, 'h', 'm', 's', false)]))
end;
WizardForm.FileNameLabel.Caption := s
end;
AppProcessMessage;
Result:= CancelCode;
end;

// Extracts all found archives
function UnPack(Archives: string): Integer;
var
totalCompressedSize: Extended;
callback: longword;
FreeMB, TotalMB: Cardinal;
begin
// Display 'Extracting FreeArc archive'
lblExtractFileName.Caption:= '';
lblExtractFileName.Show;
ExtractFile.caption:= cm('ArcTitle');
ExtractFile.Show;
// Show the 'Cancel unpacking' button and set it as default button
btnCancelUnpacking.Caption:= WizardForm.CancelButton.Caption;
btnCancelUnpacking.Show;
WizardForm.ActiveControl:= btnCancelUnpacking;
WizardForm.ProgressGauge.Position:= 0;
// Get the size of all archives
totalUncompressedSize := 0;
totalCompressedSize := FindArcs(Archives);
WizardForm.ProgressGauge.Max:= totalUncompressedSize;
// Other initializations
callback:= WrapFreeArcCallback(@FreeArcCallback,4); //FreeArcCallback has 4 arguments
StartInstall:= GetTickCount; {время начала распаковки}
LastTimerEvent:= GetTickCount;
baseMb:= 0

for n:= 0 to GetArrayLength(Arcs) -1 do
begin
lastMb := 0
CancelCode:= 0;
AppProcessMessage;
try
// Pass the specified arguments to 'unarc.dll'
Result:= FreeArcExtract (callback, 'x', '-o+', '-dp' + AnsiToUtf8( ExpandConstant('{app}') ), '--', AnsiToUtf8(Arcs[n].Path), '', '', '', '', '');
if CancelCode < 0 then Result:= CancelCode;
except
Result:= -63; // ArcFail
end;
baseMb:= baseMb+lastMb

// Error occured
if Result <> 0 then
begin
msgError:= FmtMessage(cm('ArcError'), [IntToStr(Result)]);
GetSpaceOnDisk(ExtractFileDrive(ExpandConstant('{app}')), True, FreeMB, TotalMB);
case Result of
-1: if FreeMB < 32 {Мб на диске} then msgError:= SetupMessage(msgDiskSpaceWarningTitle)
else msgError:= msgError + #13#10 + FmtMessage(cm('ArcBroken'), [ExtractFileName(Arcs[n].Path)]);
-127: msgError:= cm('ArcBreak'); //Cancel button
-63: msgError:= cm('ArcFail');
end;
// MsgBox(msgError, mbInformation, MB_OK); //сообщение показывается на странице завершения
Log(msgError);
Break; //прервать цикл распаковки
end;
end;
// Hide labels and button
WizardForm.FileNameLabel.Caption:= '';
lblExtractFileName.Hide;
ExtractFile.Hide;
btnCancelUnpacking.Hide;
end;

procedure CurStepChanged1(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
UnPackError:= UnPack(Archives)
if UnPackError = 0 then
SetTaskBarTitle(SetupMessage(msgSetupAppTitle))
else
begin
// Error occured, uninstall it then
Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n); //откат установки из-за ошибки unarc.dll
SetTaskBarTitle(SetupMessage(msgErrorTitle))
WizardForm.Caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
end;
end;
end;

// стандартный способ отката (не нужна CurPageChanged1), но архивы распаковываются до извлечения файлов инсталлятора
// if CurStep = ssInstall then
// if UnPack(Archives) <> 0 then Abort;

Procedure CurPageChanged1(CurPageID: Integer);
Begin
if (CurPageID = wpFinished) and (UnPackError <> 0) then
begin // Extraction was unsuccessful (распаковщик вернул ошибку)
// Show error message
WizardForm.FinishedLabel.Font.Color:= $0000C0; // red (красный)
WizardForm.FinishedLabel.Height:= WizardForm.FinishedLabel.Height * 2;
WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) + #13#10#13#10 + msgError;
end;
End;

procedure InitializeWizard1();
begin
with WizardForm.ProgressGauge do
begin
// Create a label to show current FileName being extracted
lblExtractFileName:= TLabel.Create(WizardForm);
lblExtractFileName.parent:=WizardForm.InstallingPage;
lblExtractFileName.autosize:=false;
lblExtractFileName.Width:= Width;
lblExtractFileName.top:=Top + ScaleY(35);
lblExtractFileName.Caption:= '';
lblExtractFileName.Hide;

// Create a label to show percentage
ExtractFile:= TLabel.Create(WizardForm);
ExtractFile.parent:=WizardForm.InstallingPage;
ExtractFile.autosize:=false;
ExtractFile.Width:= Width;
ExtractFile.top:=lblExtractFileName.Top + ScaleY(16);
ExtractFile.caption:= '';
ExtractFile.Hide;
end;

// Create a 'Cancel unpacking' button and hide it for now.
btnCancelUnpacking:=TButton.create(WizardForm);
btnCancelUnpacking.Parent:= WizardForm;
btnCancelUnpacking.SetBounds(WizardForm.CancelButton.Left, WizardForm.CancelButton.top, WizardForm.CancelButton.Width, WizardForm.CancelButton.Height);
btnCancelUnpacking.OnClick:= @btnCancelUnpackingOnClick;
btnCancelUnpacking.Hide;
end;


[Setup]


; --- Source: Чёрный фон.iss ------------------------------------------------------------
[code]
const
Color = clblack;

procedure InitializeWizard2();
begin
WizardForm.PageNameLabel.Font.Color:=clWhite;
WizardForm.LicenseAcceptedRadio.Font.Color:=clWhite;
WizardForm.LicenseNotAcceptedRadio.Font.Color:=clWhite;
WizardForm.Font.Color:=clWhite;
WizardForm.Color:=Color;
WizardForm.WelcomePage.Color:=Color;
WizardForm.InnerPage.Color:=Color;
WizardForm.FinishedPage.Color:=Color;
WizardForm.LicensePage.Color:=Color;
WizardForm.PasswordPage.Color:=Color;
WizardForm.InfoBeforePage.Color:=Color;
WizardForm.UserInfoPage.Color:=Color;
WizardForm.SelectDirPage.Color:=Color;
WizardForm.SelectComponentsPage.Color:=Color;
WizardForm.SelectProgramGroupPage.Color:=Color;
WizardForm.SelectTasksPage.Color:=Color;
WizardForm.ReadyPage.Color:=Color;
WizardForm.PreparingPage.Color:=Color;
WizardForm.InstallingPage.Color:=Color;
WizardForm.InfoAfterPage.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.DiskSpaceLabel.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.GroupEdit.Color:=Color;
WizardForm.PasswordLabel.Color:=Color;
WizardForm.PasswordEdit.Color:=Color;
WizardForm.PasswordEditLabel.Color:=Color;
WizardForm.ReadyMemo.Color:=Color;
WizardForm.TypesCombo.Color:=Color;
WizardForm.WelcomeLabel1.Color:=Color;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.Color:=Color;
WizardForm.YesRadio.Color:=Color;
WizardForm.NoRadio.Color:=Color;
WizardForm.WelcomeLabel2.Color:=Color;
WizardForm.LicenseLabel1.Color:=Color;
WizardForm.InfoAfterClickLabel.Color:=Color;
WizardForm.ComponentsList.Color:=Color;
WizardForm.ComponentsDiskSpaceLabel.Color:=Color;
WizardForm.BeveledLabel.Color:=Color;
WizardForm.StatusLabel.Color:=Color;
WizardForm.FilenameLabel.Color:=Color;
WizardForm.SelectDirLabel.Color:=Color;
WizardForm.SelectStartMenuFolderLabel.Color:=Color;
WizardForm.SelectComponentsLabel.Color:=Color;
WizardForm.SelectTasksLabel.Color:=Color;
WizardForm.LicenseAcceptedRadio.Color:=Color;
WizardForm.LicenseNotAcceptedRadio.Color:=Color;
WizardForm.UserInfoNameLabel.Color:=Color;
WizardForm.UserInfoNameEdit.Color:=Color;
WizardForm.UserInfoOrgLabel.Color:=Color;
WizardForm.UserInfoOrgEdit.Color:=Color;
WizardForm.PreparingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Color:=Color;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
end;

[Setup]


; --- Dispatching code ------------------------------------------------------------

[code]

procedure CurStepChanged1(CurStep: TSetupStep);
begin
CurStepChanged1(CurStep);
end;

procedure CurPageChanged1(CurPageID: Integer);
begin
CurPageChanged1(CurPageID);
end;

procedure InitializeWizard1();
begin
InitializeWizard1();
InitializeWizard2();
end;

[Registry]
; файл создан программой Converter v.0.1.4 - 24 марта 2010г., в 08 час. 53 мин. 39 сек.
Root: HKLM; SubKey: SOFTWARE\Akella Games; Flags: uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Akella Games\Zombie Driver; ValueType: string; ValueData: "{app}\Release\Zombie Driver.exe"; Flags: uninsdeletevalue uninsdeletekeyifempty
; затраченное время: 1 мсек.

[Messages]
DiskSpaceMBLabel=Требуется как минимум 316 Mб свободного дискового пространства.



[Setup]


; --- Source: 1.iss ------------------------------------------------------------
[Files]
Source: C:\papka.bmp; DestDir: {tmp}; Flags: dontcopy

[code]
procedure InitializeWizard2();
begin
ExtractTemporaryFile('papka.bmp');
WizardForm.SelectDirBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\papka.bmp'));
WizardForm.SelectDirBitmapImage.AutoSize:=true;
WizardForm.SelectGroupBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\papka.bmp'));
WizardForm.SelectGroupBitmapImage.AutoSize:=true;
end;

[Setup]


; --- Dispatching code ------------------------------------------------------------

[code]

procedure CurStepChanged(CurStep: TSetupStep);
begin
CurStepChanged1(CurStep);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
CurPageChanged1(CurPageID);
end;

procedure InitializeWizard();
begin
InitializeWizard1();
InitializeWizard2();
end;


vint56 24-03-2010 19:42 1376312

duxa,
читать дальше »
#define MyAppName "Zombie Driver"
#define MyAppVerName "Zombie Driver"
#define MyAppExeName "ZombieDriver.exe"

[Setup]
AppName={#MyAppName}
AppVerName={#MyAppVerName}
DefaultDirName={pf}\Akella Games\Zombie Driver
DefaultGroupName=Akella Games\Zombie Driver
LicenseFile=C:\repack\Лицензионное соглашение.txt
InfoAfterFile=C:\repack\Техподдержка.txt
OutputDir=C:\repack
OutputBaseFilename=setup
SetupIconFile=C:\repack\ZD_icon.ico
Compression=lzma
SolidCompression=yes
WizardSmallImageFile=ZD_icon.bmp
WizardImageFile=22.bmp
WizardImageStretch=yes

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

[CustomMessages]

rus.ArcBreak=Установка прервана!
rus.ExtractedInfo=Распаковано %1 Мб из %2 Мб
rus.ArcInfo=Архив: %1 из %2
rus.ArcTitle=Распаковка архивов FreeArc
rus.ArcError=Распаковщик FreeArc вернул код ошибки: %1
rus.ArcFail=Распаковка не завершена!
rus.AllProgress=Общий прогресс распаковки: %1%%
rus.ArcBroken=Возможно, архив %1 повреждён%nили недостаточно места на диске назначения.
rus.Extracting=Распаковывается: %1
rus.taskbar=%1%%, жди %2
rus.remains=Осталось ждать %1
rus.LongTime=вечно
rus.ending=завершение
rus.hour=часов
rus.min=мин
rus.sec=сек

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

[Files]
Source: C:\Program Files\Akella Games\Zombie Driver\Release\ZombieDriver.exe; DestDir: {app}; Flags: ignoreversion
; ОТМЕТЬТЕ: Не используйте "Флажки: Проигнорировать версию" на любых общедоступных системных файлах
Source: unarc.dll; DestDir: {tmp}; Flags: dontcopy deleteafterinstall
Source: InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
Source: papka.bmp; DestDir: {tmp}; Flags: dontcopy

[Icons]
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}
Name: {userdesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: desktopicon

[Run]
Filename: {app}\{#MyAppExeName}; Description: {cm:LaunchProgram,{#MyAppName}}; Flags: nowait postinstall skipifsilent
Filename: {src}\Redist\Adobe Reader\AdbeRdr812_ru_RU.exe; Description: Установить Adobe Reader; Flags: postinstall shellexec skipifsilent
Filename: {src}\Redist\DirectX\DXSETUP.exe; Description: Установить DirectX; Flags: postinstall shellexec skipifsilent
Filename: {src}\Redist\OpenAl\oalinst.exe; Description: Установить OpenAl; Flags: postinstall shellexec skipifsilent
Filename: {src}\Redist\PhysX\PhysX_9.09.0814_SystemSoftware.exe; Description: Установить PhysX; Flags: postinstall shellexec skipifsilent
Filename: {src}\Redist\VcRedist\vcredist_x86.exe; Description: Установить VcRedist; Flags: postinstall shellexec skipifsilent

[Registry]
Root: HKLM; SubKey: SOFTWARE\Akella Games; Flags: uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Akella Games\Zombie Driver; ValueType: string; ValueData: {app}\Release\Zombie Driver.exe; Flags: uninsdeletevalue uninsdeletekeyifempty


[Messages]
DiskSpaceMBLabel=Требуется как минимум 316 Mб свободного дискового пространства.

[code]
const
Color = clblack;
Archives = '{src}\Zombie Driver.arc'; // укажите расположение архивов FreeArc; для внешних файлов строку в [Files] добавлять необязательно

PM_REMOVE = 1;
CP_ACP = 0; CP_UTF8 = 65001;
oneMb = 1048576;

type
#ifdef UNICODE ; если у вас ошибка на этой строке, то установите препроцессор или исправьте скрипт для вашей версии Inno Setup
#define A "W"
#else
#define A "A" ; точка входа в SetWindowText, {#A} меняется на A или W в зависимости от версии
//PAnsiChar = PChar; // Required for Inno Setup 5.3.0 and higher. (требуется для Inno Setup версии 5.3.0 и ниже)
#endif
#if Ver < 84018176
AnsiString = String; // There is no need for this line in Inno Setup 5.2.4 and above (для Inno Setup версий 5.2.4 и выше эта строка не нужна)
#endif

TMyMsg = record
hwnd: HWND;
message: UINT;
wParam: Longint;
lParam: Longint;
time: DWORD;
pt: TPoint;
end;

TFreeArcCallback = function (what: PAnsiChar; int1, int2: Integer; str: PAnsiChar): Integer;
TArc = record Path: string; OrigSize: Integer; Size: Extended; end;

var
ExtractFile: TLabel;
lblExtractFileName: TLabel;
btnCancelUnpacking: TButton;
CancelCode, n, UnPackError, StartInstall: Integer;
Arcs: array of TArc;
msgError: string;
lastMb: Integer;
baseMb: Integer;
totalUncompressedSize: Integer; // total uncompressed size of archive data in mb
LastTimerEvent: DWORD;

Function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: string; cbMultiByte: integer; lpWideCharStr: string; cchWideChar: integer): longint; external 'MultiByteToWideChar@kernel32.dll stdcall';
Function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: string; cchWideChar: integer; lpMultiByteStr: string; cbMultiByte: integer; lpDefaultChar: integer; lpUsedDefaultChar: integer): longint; external 'WideCharToMultiByte@kernel32.dll stdcall';

function PeekMessage(var lpMsg: TMyMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMyMsg): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: TMyMsg): Longint; external 'DispatchMessageA@user32.dll stdcall';

Function OemToChar(lpszSrc, lpszDst: AnsiString): longint; external 'OemToCharA@user32.dll stdcall';
function GetWindowLong(hWnd, nIndex: Integer): Longint; external 'GetWindowLongA@user32 stdcall delayload';
function SetWindowText(hWnd: Longint; lpString: String): Longint; external 'SetWindowText{#A}@user32 stdcall delayload';

function GetTickCount: DWord; external 'GetTickCount@kernel32';
function WrapFreeArcCallback (callback: TFreeArcCallback; paramcount: integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function FreeArcExtract (callback: longword; cmd1,cmd2,cmd3,cmd4,cmd5,cmd6,cmd7,cmd8,cmd9,cmd10: PAnsiChar): integer; external 'FreeArcExtract@files:unarc.dll cdecl';

procedure AppProcessMessage;
var
Msg: TMyMsg;
begin
while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;

// Перевод числа в строку с точностью 3 знака (%.3n) с округлением дробной части, если она есть
Function NumToStr(Float: Extended): String;
Begin
Result:= Format('%.3n', [Float]); StringChange(Result, ',', '.');
while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Length(Result) > 1) do
SetLength(Result, Length(Result)-1);
End;

function cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;

Function Size64(Hi, Lo: Integer): Extended;
Begin
Result:= Lo;
if Lo<0 then Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
for Hi:= Hi-1 Downto 0 do
Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
End;

// Converts OEM encoded string into ANSI
// Преобразует OEM строку в ANSI кодировку
function OemToAnsiStr( strSource: AnsiString): AnsiString;
var
nRet : longint;
begin
SetLength( Result, Length( strSource ) );
nRet:= OemToChar( strSource, Result );
end;

// Converts ANSI encoded string into UTF-8
// Преобразует строку из ANSI в UTF-8 кодировку
function AnsiToUtf8( strSource: string ): string;
var
nRet : integer;
WideCharBuf: string;
MultiByteBuf: string;
begin
strSource:= strSource + chr(0);
SetLength( WideCharBuf, Length( strSource ) * 2 );
SetLength( MultiByteBuf, Length( strSource ) * 2 );

nRet:= MultiByteToWideChar( CP_ACP, 0, strSource, -1, WideCharBuf, Length(WideCharBuf) );
nRet:= WideCharToMultiByte( CP_UTF8, 0, WideCharBuf, -1, MultiByteBuf, Length(MultiByteBuf), 0, 0);

Result:= MultiByteBuf;
end;

// OnClick event function for btnCancel
procedure btnCancelUnpackingOnClick(Sender: TObject);
begin
if MsgBox( SetupMessage( msgExitSetupMessage ), mbInformation, MB_YESNO ) = IDYES then
CancelCode:= -127;
end;

var origsize: Integer;
// The callback function for getting info about FreeArc archive
function FreeArcInfoCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
begin
if string(what)='origsize' then origsize := Mb else
if string(what)='compsize' then else
if string(what)='total_files' then else
Result:= CancelCode;
end;

// Returns decompressed size of files in archive
function ArchiveOrigSize(arcname: string): Integer;
var
callback: longword;
Begin
callback:= WrapFreeArcCallback(@FreeArcInfoCallback,4); //FreeArcInfoCallback has 4 arguments
CancelCode:= 0;
AppProcessMessage;
try
// Pass the specified arguments to 'unarc.dll'
Result:= FreeArcExtract (callback, 'l', '--', AnsiToUtf8(arcname), '', '', '', '', '', '', '');
if CancelCode < 0 then Result:= CancelCode;
if Result >= 0 then Result:= origsize;
except
Result:= -63; // ArcFail
end;
end;

// Scans the specified folders for archives and add them to list
function FindArcs(dir: string): Extended;
var
FSR: TFindRec;
Begin
Result:= 0;
if FindFirst(ExpandConstant(dir), FSR) then begin
try
repeat
// Skip everything but the folders
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then CONTINUE;
n:= GetArrayLength(Arcs);
// Expand the folder list
SetArrayLength(Arcs, n +1);
Arcs[n].Path:= ExtractFilePath(ExpandConstant(dir)) + FSR.Name;
Arcs[n].Size:= Size64(FSR.SizeHigh, FSR.SizeLow);
Result:= Result + Arcs[n].Size;
Arcs[n].OrigSize := ArchiveOrigSize(Arcs[n].Path)
totalUncompressedSize := totalUncompressedSize + Arcs[n].OrigSize
until not FindNext(FSR);
finally
FindClose(FSR);
end;
end;
End;

// Sets the TaskBar title
Procedure SetTaskBarTitle(Title: String); var h: Integer;
Begin
h:= GetWindowLong(MainForm.Handle, -8); if h <> 0 then SetWindowText(h, Title);
End;

// Converts milliseconds to human-readable time
// Конвертирует милисекунды в человеко-читаемое изображение времени
Function TicksToTime(Ticks: DWord; h,m,s: String; detail: Boolean): String;
Begin
if detail {hh:mm:ss format} then
Result:= PADZ(IntToStr(Ticks/3600000), 2) +':'+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +':'+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2)
else if Ticks/3600 >= 1000 {more than hour} then
Result:= IntToStr(Ticks/3600000) +h+' '+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +m
else if Ticks/60 >= 1000 {1..60 minutes} then
Result:= IntToStr(Ticks/60000) +m+' '+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2) +s
else Result:= IntToStr(Ticks/1000) +s {less than one minute}
End;

// The main callback function for unpacking FreeArc archives
function FreeArcCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
var
percents, Remaining: Integer;
s: String;
begin
if GetTickCount - LastTimerEvent > 1000 then begin
// This code will be executed once each 1000 ms (этот код будет выполняться раз в 1000 миллисекунд)
// ....
// End of code executed by timer
LastTimerEvent := LastTimerEvent+1000;
end;

if string(what)='filename' then begin
// Update FileName label
lblExtractFileName.Caption:= FmtMessage( cm( 'Extracting' ), [OemToAnsiStr( str )] )
end else if (string(what)='write') and (totalUncompressedSize>0) and (Mb>lastMb) then begin
// Assign to Mb *total* amount of data extracted to the moment from all archives
lastMb := Mb;
Mb := baseMb+Mb;

// Update progress bar
WizardForm.ProgressGauge.Position:= Mb;

// Show how much megabytes/archives were processed up to the moment
percents:= (Mb*1000) div totalUncompressedSize;
s := FmtMessage(cm('ExtractedInfo'), [IntToStr(Mb), IntToStr(totalUncompressedSize)]);
if GetArrayLength(Arcs)>1 then
s := s + '. '+FmtMessage(cm('ArcInfo'), [IntToStr(n+1), IntToStr(GetArrayLength(Arcs))])
ExtractFile.Caption := s

// Calculate and show current percents
percents:= (Mb*1000) div totalUncompressedSize;
s:= FmtMessage(cm('AllProgress'), [Format('%.1n', [Abs(percents/10)])]);
if Mb > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((totalUncompressedSize - Mb)/Mb)) else Remaining:= 0;
if Remaining = 0 then SetTaskBarTitle(cm('ending')) else begin
s:= s + '. '+FmtMessage(cm('remains'), [TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)])
SetTaskBarTitle(FmtMessage(cm('taskbar'), [IntToStr(percents/10), TicksToTime(Remaining, 'h', 'm', 's', false)]))
end;
WizardForm.FileNameLabel.Caption := s
end;
AppProcessMessage;
Result:= CancelCode;
end;

// Extracts all found archives
function UnPack(Archives: string): Integer;
var
totalCompressedSize: Extended;
callback: longword;
FreeMB, TotalMB: Cardinal;
begin
// Display 'Extracting FreeArc archive'
lblExtractFileName.Caption:= '';
lblExtractFileName.Show;
ExtractFile.caption:= cm('ArcTitle');
ExtractFile.Show;
// Show the 'Cancel unpacking' button and set it as default button
btnCancelUnpacking.Caption:= WizardForm.CancelButton.Caption;
btnCancelUnpacking.Show;
WizardForm.ActiveControl:= btnCancelUnpacking;
WizardForm.ProgressGauge.Position:= 0;
// Get the size of all archives
totalUncompressedSize := 0;
totalCompressedSize := FindArcs(Archives);
WizardForm.ProgressGauge.Max:= totalUncompressedSize;
// Other initializations
callback:= WrapFreeArcCallback(@FreeArcCallback,4); //FreeArcCallback has 4 arguments
StartInstall:= GetTickCount; {время начала распаковки}
LastTimerEvent:= GetTickCount;
baseMb:= 0

for n:= 0 to GetArrayLength(Arcs) -1 do
begin
lastMb := 0
CancelCode:= 0;
AppProcessMessage;
try
// Pass the specified arguments to 'unarc.dll'
Result:= FreeArcExtract (callback, 'x', '-o+', '-dp' + AnsiToUtf8( ExpandConstant('{app}') ), '--', AnsiToUtf8(Arcs[n].Path), '', '', '', '', '');
if CancelCode < 0 then Result:= CancelCode;
except
Result:= -63; // ArcFail
end;
baseMb:= baseMb+lastMb

// Error occured
if Result <> 0 then
begin
msgError:= FmtMessage(cm('ArcError'), [IntToStr(Result)]);
GetSpaceOnDisk(ExtractFileDrive(ExpandConstant('{app}')), True, FreeMB, TotalMB);
case Result of
-1: if FreeMB < 32 {Мб на диске} then msgError:= SetupMessage(msgDiskSpaceWarningTitle)
else msgError:= msgError + #13#10 + FmtMessage(cm('ArcBroken'), [ExtractFileName(Arcs[n].Path)]);
-127: msgError:= cm('ArcBreak'); //Cancel button
-63: msgError:= cm('ArcFail');
end;
// MsgBox(msgError, mbInformation, MB_OK); //сообщение показывается на странице завершения
Log(msgError);
Break; //прервать цикл распаковки
end;
end;
// Hide labels and button
WizardForm.FileNameLabel.Caption:= '';
lblExtractFileName.Hide;
ExtractFile.Hide;
btnCancelUnpacking.Hide;
end;

procedure CurStepChanged1(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
UnPackError:= UnPack(Archives)
if UnPackError = 0 then
SetTaskBarTitle(SetupMessage(msgSetupAppTitle))
else
begin
// Error occured, uninstall it then
Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n); //откат установки из-за ошибки unarc.dll
SetTaskBarTitle(SetupMessage(msgErrorTitle))
WizardForm.Caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
end;
end;
end;

// стандартный способ отката (не нужна CurPageChanged1), но архивы распаковываются до извлечения файлов инсталлятора
// if CurStep = ssInstall then
// if UnPack(Archives) <> 0 then Abort;

Procedure CurPageChanged1(CurPageID: Integer);
Begin
if (CurPageID = wpFinished) and (UnPackError <> 0) then
begin // Extraction was unsuccessful (распаковщик вернул ошибку)
// Show error message
WizardForm.FinishedLabel.Font.Color:= $0000C0; // red (красный)
WizardForm.FinishedLabel.Height:= WizardForm.FinishedLabel.Height * 2;
WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) + #13#10#13#10 + msgError;
end;
End;

procedure InitializeWizard1();
begin
with WizardForm.ProgressGauge do
begin
// Create a label to show current FileName being extracted
lblExtractFileName:= TLabel.Create(WizardForm);
lblExtractFileName.parent:=WizardForm.InstallingPage;
lblExtractFileName.autosize:=false;
lblExtractFileName.Width:= Width;
lblExtractFileName.top:=Top + ScaleY(35);
lblExtractFileName.Caption:= '';
lblExtractFileName.Hide;

// Create a label to show percentage
ExtractFile:= TLabel.Create(WizardForm);
ExtractFile.parent:=WizardForm.InstallingPage;
ExtractFile.autosize:=false;
ExtractFile.Width:= Width;
ExtractFile.top:=lblExtractFileName.Top + ScaleY(16);
ExtractFile.caption:= '';
ExtractFile.Hide;
end;

// Create a 'Cancel unpacking' button and hide it for now.
btnCancelUnpacking:=TButton.create(WizardForm);
btnCancelUnpacking.Parent:= WizardForm;
btnCancelUnpacking.SetBounds(WizardForm.CancelButton.Left, WizardForm.CancelButton.top, WizardForm.CancelButton.Width, WizardForm.CancelButton.Height);
btnCancelUnpacking.OnClick:= @btnCancelUnpackingOnClick;
btnCancelUnpacking.Hide;
end;

procedure InitializeWizard2();
begin
ExtractTemporaryFile('papka.bmp');
WizardForm.SelectDirBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\papka.bmp'));
WizardForm.SelectDirBitmapImage.AutoSize:=true;
WizardForm.SelectGroupBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\papka.bmp'));
WizardForm.SelectGroupBitmapImage.AutoSize:=true;

WizardForm.PageNameLabel.Font.Color:=clWhite;
WizardForm.LicenseAcceptedRadio.Font.Color:=clWhite;
WizardForm.LicenseNotAcceptedRadio.Font.Color:=clWhite;
WizardForm.Font.Color:=clWhite;
WizardForm.Color:=Color;
WizardForm.WelcomePage.Color:=Color;
WizardForm.InnerPage.Color:=Color;
WizardForm.FinishedPage.Color:=Color;
WizardForm.LicensePage.Color:=Color;
WizardForm.PasswordPage.Color:=Color;
WizardForm.InfoBeforePage.Color:=Color;
WizardForm.UserInfoPage.Color:=Color;
WizardForm.SelectDirPage.Color:=Color;
WizardForm.SelectComponentsPage.Color:=Color;
WizardForm.SelectProgramGroupPage.Color:=Color;
WizardForm.SelectTasksPage.Color:=Color;
WizardForm.ReadyPage.Color:=Color;
WizardForm.PreparingPage.Color:=Color;
WizardForm.InstallingPage.Color:=Color;
WizardForm.InfoAfterPage.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.DiskSpaceLabel.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.GroupEdit.Color:=Color;
WizardForm.PasswordLabel.Color:=Color;
WizardForm.PasswordEdit.Color:=Color;
WizardForm.PasswordEditLabel.Color:=Color;
WizardForm.ReadyMemo.Color:=Color;
WizardForm.TypesCombo.Color:=Color;
WizardForm.WelcomeLabel1.Color:=Color;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.Color:=Color;
WizardForm.YesRadio.Color:=Color;
WizardForm.NoRadio.Color:=Color;
WizardForm.WelcomeLabel2.Color:=Color;
WizardForm.LicenseLabel1.Color:=Color;
WizardForm.InfoAfterClickLabel.Color:=Color;
WizardForm.ComponentsList.Color:=Color;
WizardForm.ComponentsDiskSpaceLabel.Color:=Color;
WizardForm.BeveledLabel.Color:=Color;
WizardForm.StatusLabel.Color:=Color;
WizardForm.FilenameLabel.Color:=Color;
WizardForm.SelectDirLabel.Color:=Color;
WizardForm.SelectStartMenuFolderLabel.Color:=Color;
WizardForm.SelectComponentsLabel.Color:=Color;
WizardForm.SelectTasksLabel.Color:=Color;
WizardForm.LicenseAcceptedRadio.Color:=Color;
WizardForm.LicenseNotAcceptedRadio.Color:=Color;
WizardForm.UserInfoNameLabel.Color:=Color;
WizardForm.UserInfoNameEdit.Color:=Color;
WizardForm.UserInfoOrgLabel.Color:=Color;
WizardForm.UserInfoOrgEdit.Color:=Color;
WizardForm.PreparingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Color:=Color;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
end;

procedure InitializeWizard();
begin
InitializeWizard1();
InitializeWizard2();
end;

duxa 24-03-2010 19:53 1376317

vint56, Большое спасибо!

zandi 24-03-2010 20:45 1376365

Люди помогите плиз немогу сделать ярлык
Делаю патчь для кс 1.6 там чтобы сделать ярлык для ние надо сделать ярлык для hl.exe и дописать в обьекте : -game cstrike -steam -noforcemparms -noforcemaccel
Как это сделать в инно?
пробЫвал дописывать на сам MyAppExeName но тогда он неможет найти HL.exe , а так только создаетса ярлык hl.exe

zandi 24-03-2010 23:22 1376453

Возникла такая проблема сделал инстал патча но после удаления источника для инсталера при запуске инсталера пишет что неможет найти эту папку. Что можно сделать?

Sotonisto 25-03-2010 02:32 1376546

Цитата:

Цитата zandi
Люди помогите плиз немогу сделать ярлык
Делаю патчь для кс 1.6 там чтобы сделать ярлык для ние надо сделать ярлык для hl.exe и дописать в обьекте : -game cstrike -steam -noforcemparms -noforcemaccel
Как это сделать в инно?
пробЫвал дописывать на сам MyAppExeName но тогда он неможет найти HL.exe , а так только создаетса ярлык hl.exe »

Я спрашил тут такоеже, но только для HL Paranoia :) Ответа не услышал :)
Так что проще создай батник и сделай его файлом запуска :)
Если незнаешь как создать батник - напиши в личку.

Habetdin 25-03-2010 02:43 1376552

zandi, »
Код:

[Icons]
Name: {group}\Super Mega CS 1.6; Filename: {app}\hl.exe; Parameters: -game cstrike -steam -noforcemparms -noforcemaccel

Sotonisto, »
Код:

[Icons]
Name: {group}\Half-Life Paranoia; Filename: {app}\hl.exe; Parameters: -game paranoia -32bpp -gl


duxa 25-03-2010 07:52 1376610

vint56, Привет, извини, что ещё раз прошу. При компиляции твоего скрипта выдаёт такую ошибку:

В чём может быть дело?

vint56 25-03-2010 08:46 1376633

duxa, версия inno setup у тебя какая уменя 5.38 если у тебя ниже найди вот эту строчку
//PAnsiChar = PChar; // Required for Inno Setup 5.3.0 and higher. (требуется для Inno Setup версии 5.3.0 и ниже)
убери впереди //

duxa 25-03-2010 09:11 1376647

vint56, Спасибо! Всё работает, но не распаковывает arc архив!

RogerUP 25-03-2010 13:22 1376815

Как сделать чекбокс, который бы отправлял нас на какойнибудь сайт?
Чекбокс нужен после завершения установки

И еще если я например хочу перепаковать игру и записать на 2 разных диска (инсталятор создам с частями), то надо ли писать дополнительный код?
если да то подскажите плиз.

krazy 25-03-2010 15:22 1376902

не знаю куда написать подскажите как исправить вот на скриншоте

Swotch 25-03-2010 15:44 1376922

День добрый, пожалуйста, помогите разобраться!
Пример: На компьютере установлена программа "My Program" путь к файлам программы - "C:\Program Files\ My Program", путь к папке с данными приложения - "Application Data\ My Program\".

1.Нужно установить программу "My Program2". Директорию (т.е. определенную папку в данном случае – "adjustment") для установки программа ищет в "Application Data\ My Program\", если не находит устанавливается в "C:\Program Files\ My Program\adjustment".

2.Или другой вариант: Директорию ("adjustment") для установки, программа "My Program2" ищет в "Application Data\ My Program\", если не находит директорию ищет в "C:\Program Files\ My Program", если и там нет папки "adjustment" – прекращение установки.

Перепробовал несколько вариантов, не чего не получилось… Помогите пожалуйста разобраться с кодом!

alex2010 25-03-2010 18:56 1377107

Цитата:

Цитата RogerUP
И еще если я например хочу перепаковать игру и записать на 2 разных диска (инсталятор создам с частями), то надо ли писать дополнительный код?
если да то подскажите плиз. »

нет никакой код не нужен - он сам по просит у тебя указать дальнейшие файлы(это если ты пакуешь игру самим Inno, насчет FreeArc не знаю)

Цитата:

Цитата krazy
не знаю куда написать подскажите как исправить вот на скриншоте »

ты используешь неизвестные команды для инсталятора. - просто перед надписью добавь вот это(закоментируйте строку)
Код:

//
должно получится вот так:
Код:

// и тут должен быть твой текст

vint56 26-03-2010 06:52 1377413

duxa,
у тебя так
Archives = '{src}\Zombie Driver.arc'; // укажите расположение архивов FreeArc;
а должно быть
Archives = '{src}\*.arc'; // укажите расположение архивов FreeArc;

duxa 26-03-2010 06:56 1377415

vint56, всё равно не идёт распаковка.

patrion 26-03-2010 12:52 1377649

Всем привет!
Мне нужен кросочный инсталлятор! Если кто может помочь...
Подробно: Черный, на 1 страничке (т.е. приветсвие была растянута картинка, что бы только были видны кнопки), 2страничка проверка системных требований, на 3 куда установить, 4 компоненты, на 5 показывалось что выбрано, ну и на 6 установка, желательно темного цвета, 7 конец установки.
Еще в низу была картинка (в левом нижнем углу)
В ПОИСКОВИКЕ искал, но не нашел.
Заранее спасибо!

Tukash 26-03-2010 14:00 1377709

patrion,
такое никто не даст, самому собирать придется

patrion 26-03-2010 15:08 1377768

эт сложновато будет =)

Tukash 26-03-2010 15:31 1377788

patrion,
конечно, я в начале думал что это все фигня для профи, но когда начал делать для себя сам то понял почему никто не обращает внимания, ищи черный фон, и код для проверки требований, соединяй joinerom и все получится!

patrion 26-03-2010 16:22 1377834

на 7 он не пашет

Tukash 26-03-2010 16:45 1377854

у меня работает, после установки перезагрузи

South 27-03-2010 11:55 1378373

botva2.dll - библиотека для работы с jpg, png и т.д. в инно
описание всех функций/процедур и простые примеры ее использования
http://ifolder.ru/17001966

Cartmans 27-03-2010 18:29 1378596

YURSHAT, Как у тебя в скрипте убрать выбор языка?

petrov1993 27-03-2010 20:10 1378658

Есть такая проблемка. Использую скрипт распаковки FreeArc. Вот он:
читать дальше »

;[English]
;Example of using unarc.dll for decompression of FreeArc archives with displaying of progress indicator in Inno Setup window.
;In order to use the script compile it and put *.arc archives to the same directory as installer executable before running it.
;The script requires Inno Setup QuickStart Pack 5.2.3 and above (http://files.jrsoftware.org)
;You will also need InnoCallback.dll that may be found at the http://www.sherlocksoftware.org/page.php?id=54

;[Russian]
;Пример распаковки FreeArc архива при помощи unarc.dll, с отображением прогресса распаковки в окне Inno Setup.
;Для использования скрипта откомпилируйте его и поместите архивы *.arc в один каталог с инсталятором перед тем как запустить его.
;Скрипт совместим с Inno Setup QuickStart Pack 5.2.3 и выше (http://files.jrsoftware.org)
;Вам также потребуется InnoCallback.dll (http://www.sherlocksoftware.org/page.php?id=54)

; Версия 3.5 от Bulat Ziganshin, 21-12-2009
; - поддержка опций -ap/-ld/-cfg в FreeArcExtract()
; - ускорена распаковка при большом количестве wav-файлов (метод TTA)
; - можно передавать NULL в качестве первого параметра (callback) в FreeArcExtract()
; - исправлена ошибка: обрабатывались опции после '--'
;
; Версия 3.4 от Bulat Ziganshin, 18-11-2009
; - улучшение в unarc.dll - не создаёт временные файлы при распаковке rep:1gb и фрагментированной памяти
; - поддержка метода 4x4
;
; Версия 3.3 от Bulat Ziganshin, 13-09-2009
; - ускорение распаковки на 10%
; - FreeArcExtract() поддерживает опцию '-wPATH' для задания каталога для временных файлов
; - при прерывании распаковки стирает временные файлы
; - исправлена ошибка в unarc.dll - вылетала при распаковке с использованием временных файлов
;
; Версия 3.2 от Bulat Ziganshin, 31-07-2009
; - исправлена unarc.dll - теперь она не вылетает на сбойных архивах
;
; Версия 3.1 от Bulat Ziganshin, 29-07-2009
; - более плавный индикатор прогресса (данные из LZMA пишутся кусками по 8 мб вместо dictsize)
; - больше не грузятся всякие левые facompress.dll из PATH
;
; Версия 3.0 от Bulat Ziganshin, 29-07-2009
; - функция ArchiveOrigSize возвращает объём данных в архиве
; - наименования колбэков изменены на read и write (было progress и written)
;
; Версия 2.1 от Bulat Ziganshin, 10-07-2009
; - Кнопка 'Отмена установки' теперь по расположению, размеру и надписи точно дублирует стандартную кнопку Отмена
; - В unarc.dll исправлена ошибка, чреватая потенциальными проблемами при распаковке множества архивов
;
; Версия 2.0 от Bulat Ziganshin, 08-07-2009
; - Корректно отображает общий объём установки и сколько данных уже распаковано
; - Индикатор прогресса теперь основан на объёме распакованных и записанных на диск данных
; - Дополнительно отображается сколько осталось времени
; - FreeArcCallback вызывается не менее 100 раз в секунду, что заменяет вызов по таймеру
; - Добавлен placeholder для периодически выполняемого кода (в начале процедуры FreeArcCallback)
; - Исправлена проблема с удалением последнего распакованного файла при отмене инсталяции
; - Исправлена проблема с русскими именами/путями распаковываемых архивов
; - Кнопка 'Отменить распаковку' масштабируется в зависимости от размеров формы
; - Исправлено вычисление оставшегося времени (теперь отсчёт начинается в момент начала распаковки)
; - За пределами процесса распаковки все лишние надписи убираются с экрана
;
; Изменения от Victor_Dobrov, 02-07-2009
; - Кнопка инсталлятора в панели задач отображает время до завершения обработки всех архивов и общий процент распаковки.
; - В Unicode-версиях инсталлятора правильно отображаются имена файлов.
;
; Изменения от CTACKo & SotM'а. 01-07-2009
; - Правильно создаются папки, если в пути установки встречаются русские буквы
; - При компиляции определяется использование PAnsiChar/PChar. Можно использовать как обычную так и UNICODE версию с установленным препроцессором.
;
; Изменения от SotM'а. 23-06-2009
; - Нижний прогресс бар сместил чуть-чуть вниз, чтобы было видно имя распаковываемого файла.
; - Русские имена файлов теперь правильно отображаются.
; - При нажатии "отмены" при распаковке теперь появляется запрос на подтверждение отмены.
; - Переименовал некоторые переменные, чтобы их имена несли больше информации.
; - Немного переформатировал сам исходный код для более удобного и понятного чтения.
; - Исправил пару сообщений на английском языке.

; Изменения от Victor_Dobrov, 15-06-2009
; - Оптимизация и локализация скрипта, более подробная строка статуса, общий прогресс-бар, при неудачной распаковке выполняется откат (деинсталляция) и показывается текст ошибки.

; Bulat Ziganshin, 13-06-2009
; - Создание библиотеки unarc.dll и скрипта распаковки freearc_example.iss.

[Setup]
AppName=FreeArc Example
AppVerName=FreeArc Example 3.3
DefaultDirName={pf}\FreeArc Example
UsePreviousAppDir=false
DirExistsWarning=no
ShowLanguageDialog=auto
OutputBaseFilename=FreeArc_Example
OutputDir=.
VersionInfoCopyright=Bulat Ziganshin, Victor Dobrov, SotM, CTACKo

[Languages]
Name: eng; MessagesFile: compiler:Default.isl
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[CustomMessages]
eng.ArcBreak=Installation cancelled!
eng.ExtractedInfo=Extracted %1 Mb of %2 Mb
eng.ArcInfo=Archive: %1 of %2
eng.ArcTitle=Extracting FreeArc archive
eng.ArcError=Decompression failed with error code %1
eng.ArcFail=Decompression failed!
eng.AllProgress=Overall extraction progress: %1%%
eng.ArcBroken=Archive %1 is damaged%nor not enough free space.
eng.Extracting=Extracting: %1
eng.taskbar=%1%%, %2 remains
eng.remains=Remaining time: %1
eng.LongTime=at no time
eng.ending=ending
eng.hour= hours
eng.min= mins
eng.sec= secs

rus.ArcBreak=Установка прервана!
rus.ExtractedInfo=Распаковано %1 Мб из %2 Мб
rus.ArcInfo=Архив: %1 из %2
rus.ArcTitle=Распаковка архивов FreeArc
rus.ArcError=Распаковщик FreeArc вернул код ошибки: %1
rus.ArcFail=Распаковка не завершена!
rus.AllProgress=Общий прогресс распаковки: %1%%
rus.ArcBroken=Возможно, архив %1 повреждён%nили недостаточно места на диске назначения.
rus.Extracting=Распаковывается: %1
rus.taskbar=%1%%, жди %2
rus.remains=Осталось ждать %1
rus.LongTime=вечно
rus.ending=завершение
rus.hour= часов
rus.min= мин
rus.sec= сек

[Files]
;Source: *.arc; DestDir: {app}; Flags: nocompression
Source: unarc.dll; DestDir: {tmp}; Flags: dontcopy deleteafterinstall
Source: compiler:InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy

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

[code]
const
Archives = '{src}\*.arc'; // укажите расположение архивов FreeArc; для внешних файлов строку в [Files] добавлять необязательно

PM_REMOVE = 1;
CP_ACP = 0; CP_UTF8 = 65001;
oneMb = 1048576;

type
#ifdef UNICODE ; если у вас ошибка на этой строке, то установите препроцессор или исправьте скрипт для вашей версии Inno Setup
#define A "W"
#else
#define A "A" ; точка входа в SetWindowText, {#A} меняется на A или W в зависимости от версии
PAnsiChar = PChar; // Required for Inno Setup 5.3.0 and higher. (требуется для Inno Setup версии 5.3.0 и ниже)
#endif
#if Ver < 84018176
AnsiString = String; // There is no need for this line in Inno Setup 5.2.4 and above (для Inno Setup версий 5.2.4 и выше эта строка не нужна)
#endif

TMyMsg = record
hwnd: HWND;
message: UINT;
wParam: Longint;
lParam: Longint;
time: DWORD;
pt: TPoint;
end;

TFreeArcCallback = function (what: PAnsiChar; int1, int2: Integer; str: PAnsiChar): Integer;
TArc = record Path: string; OrigSize: Integer; Size: Extended; end;

var
ExtractFile: TLabel;
lblExtractFileName: TLabel;
btnCancelUnpacking: TButton;
CancelCode, n, UnPackError, StartInstall: Integer;
Arcs: array of TArc;
msgError: string;
lastMb: Integer;
baseMb: Integer;
totalUncompressedSize: Integer; // total uncompressed size of archive data in mb
LastTimerEvent: DWORD;

Function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: string; cbMultiByte: integer; lpWideCharStr: string; cchWideChar: integer): longint; external 'MultiByteToWideChar@kernel32.dll stdcall';
Function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: string; cchWideChar: integer; lpMultiByteStr: string; cbMultiByte: integer; lpDefaultChar: integer; lpUsedDefaultChar: integer): longint; external 'WideCharToMultiByte@kernel32.dll stdcall';

function PeekMessage(var lpMsg: TMyMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMyMsg): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: TMyMsg): Longint; external 'DispatchMessageA@user32.dll stdcall';

Function OemToChar(lpszSrc, lpszDst: AnsiString): longint; external 'OemToCharA@user32.dll stdcall';
function GetWindowLong(hWnd, nIndex: Integer): Longint; external 'GetWindowLongA@user32 stdcall delayload';
function SetWindowText(hWnd: Longint; lpString: String): Longint; external 'SetWindowText{#A}@user32 stdcall delayload';

function GetTickCount: DWord; external 'GetTickCount@kernel32';
function WrapFreeArcCallback (callback: TFreeArcCallback; paramcount: integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function FreeArcExtract (callback: longword; cmd1,cmd2,cmd3,cmd4,cmd5,cmd6,cmd7,cmd8,cmd9,cmd10: PAnsiChar): integer; external 'FreeArcExtract@files:unarc.dll cdecl';

procedure AppProcessMessage;
var
Msg: TMyMsg;
begin
while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;

// Перевод числа в строку с точностью 3 знака (%.3n) с округлением дробной части, если она есть
Function NumToStr(Float: Extended): String;
Begin
Result:= Format('%.3n', [Float]); StringChange(Result, ',', '.');
while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Length(Result) > 1) do
SetLength(Result, Length(Result)-1);
End;

function cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;

Function Size64(Hi, Lo: Integer): Extended;
Begin
Result:= Lo;
if Lo<0 then Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
for Hi:= Hi-1 Downto 0 do
Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
End;

// Converts OEM encoded string into ANSI
// Преобразует OEM строку в ANSI кодировку
function OemToAnsiStr( strSource: AnsiString): AnsiString;
var
nRet : longint;
begin
SetLength( Result, Length( strSource ) );
nRet:= OemToChar( strSource, Result );
end;

// Converts ANSI encoded string into UTF-8
// Преобразует строку из ANSI в UTF-8 кодировку
function AnsiToUtf8( strSource: string ): string;
var
nRet : integer;
WideCharBuf: string;
MultiByteBuf: string;
begin
strSource:= strSource + chr(0);
SetLength( WideCharBuf, Length( strSource ) * 2 );
SetLength( MultiByteBuf, Length( strSource ) * 2 );

nRet:= MultiByteToWideChar( CP_ACP, 0, strSource, -1, WideCharBuf, Length(WideCharBuf) );
nRet:= WideCharToMultiByte( CP_UTF8, 0, WideCharBuf, -1, MultiByteBuf, Length(MultiByteBuf), 0, 0);

Result:= MultiByteBuf;
end;

// OnClick event function for btnCancel
procedure btnCancelUnpackingOnClick(Sender: TObject);
begin
if MsgBox( SetupMessage( msgExitSetupMessage ), mbInformation, MB_YESNO ) = IDYES then
CancelCode:= -127;
end;

var origsize: Integer;
// The callback function for getting info about FreeArc archive
function FreeArcInfoCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
begin
if string(what)='origsize' then origsize := Mb else
if string(what)='compsize' then else
if string(what)='total_files' then else
Result:= CancelCode;
end;

// Returns decompressed size of files in archive
function ArchiveOrigSize(arcname: string): Integer;
var
callback: longword;
Begin
callback:= WrapFreeArcCallback(@FreeArcInfoCallback,4); //FreeArcInfoCallback has 4 arguments
CancelCode:= 0;
AppProcessMessage;
try
// Pass the specified arguments to 'unarc.dll'
Result:= FreeArcExtract (callback, 'l', '--', AnsiToUtf8(arcname), '', '', '', '', '', '', '');
if CancelCode < 0 then Result:= CancelCode;
if Result >= 0 then Result:= origsize;
except
Result:= -63; // ArcFail
end;
end;

// Scans the specified folders for archives and add them to list
function FindArcs(dir: string): Extended;
var
FSR: TFindRec;
Begin
Result:= 0;
if FindFirst(ExpandConstant(dir), FSR) then begin
try
repeat
// Skip everything but the folders
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then CONTINUE;
n:= GetArrayLength(Arcs);
// Expand the folder list
SetArrayLength(Arcs, n +1);
Arcs[n].Path:= ExtractFilePath(ExpandConstant(dir)) + FSR.Name;
Arcs[n].Size:= Size64(FSR.SizeHigh, FSR.SizeLow);
Result:= Result + Arcs[n].Size;
Arcs[n].OrigSize := ArchiveOrigSize(Arcs[n].Path)
totalUncompressedSize := totalUncompressedSize + Arcs[n].OrigSize
until not FindNext(FSR);
finally
FindClose(FSR);
end;
end;
End;

// Sets the TaskBar title
Procedure SetTaskBarTitle(Title: String); var h: Integer;
Begin
h:= GetWindowLong(MainForm.Handle, -8); if h <> 0 then SetWindowText(h, Title);
End;

// Converts milliseconds to human-readable time
// Конвертирует милисекунды в человеко-читаемое изображение времени
Function TicksToTime(Ticks: DWord; h,m,s: String; detail: Boolean): String;
Begin
if detail {hh:mm:ss format} then
Result:= PADZ(IntToStr(Ticks/3600000), 2) +':'+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +':'+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2)
else if Ticks/3600 >= 1000 {more than hour} then
Result:= IntToStr(Ticks/3600000) +h+' '+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +m
else if Ticks/60 >= 1000 {1..60 minutes} then
Result:= IntToStr(Ticks/60000) +m+' '+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2) +s
else Result:= IntToStr(Ticks/1000) +s {less than one minute}
End;

// The main callback function for unpacking FreeArc archives
function FreeArcCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
var
percents, Remaining: Integer;
s: String;
begin
if GetTickCount - LastTimerEvent > 1000 then begin
// This code will be executed once each 1000 ms (этот код будет выполняться раз в 1000 миллисекунд)
// ....
// End of code executed by timer
LastTimerEvent := LastTimerEvent+1000;
end;

if string(what)='filename' then begin
// Update FileName label
lblExtractFileName.Caption:= FmtMessage( cm( 'Extracting' ), [OemToAnsiStr( str )] )
end else if (string(what)='write') and (totalUncompressedSize>0) and (Mb>lastMb) then begin
// Assign to Mb *total* amount of data extracted to the moment from all archives
lastMb := Mb;
Mb := baseMb+Mb;

// Update progress bar
WizardForm.ProgressGauge.Position:= Mb;

// Show how much megabytes/archives were processed up to the moment
percents:= (Mb*1000) div totalUncompressedSize;
s := FmtMessage(cm('ExtractedInfo'), [IntToStr(Mb), IntToStr(totalUncompressedSize)]);
if GetArrayLength(Arcs)>1 then
s := s + '. '+FmtMessage(cm('ArcInfo'), [IntToStr(n+1), IntToStr(GetArrayLength(Arcs))])
ExtractFile.Caption := s

// Calculate and show current percents
percents:= (Mb*1000) div totalUncompressedSize;
s:= FmtMessage(cm('AllProgress'), [Format('%.1n', [Abs(percents/10)])]);
if Mb > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((totalUncompressedSize - Mb)/Mb)) else Remaining:= 0;
if Remaining = 0 then SetTaskBarTitle(cm('ending')) else begin
s:= s + '. '+FmtMessage(cm('remains'), [TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)])
SetTaskBarTitle(FmtMessage(cm('taskbar'), [IntToStr(percents/10), TicksToTime(Remaining, 'h', 'm', 's', false)]))
end;
WizardForm.FileNameLabel.Caption := s
end;
AppProcessMessage;
Result:= CancelCode;
end;

// Extracts all found archives
function UnPack(Archives: string): Integer;
var
totalCompressedSize: Extended;
callback: longword;
FreeMB, TotalMB: Cardinal;
begin
// Display 'Extracting FreeArc archive'
lblExtractFileName.Caption:= '';
lblExtractFileName.Show;
ExtractFile.caption:= cm('ArcTitle');
ExtractFile.Show;
// Show the 'Cancel unpacking' button and set it as default button
btnCancelUnpacking.Caption:= WizardForm.CancelButton.Caption;
btnCancelUnpacking.Show;
WizardForm.ActiveControl:= btnCancelUnpacking;
WizardForm.ProgressGauge.Position:= 0;
// Get the size of all archives
totalUncompressedSize := 0;
totalCompressedSize := FindArcs(Archives);
WizardForm.ProgressGauge.Max:= totalUncompressedSize;
// Other initializations
callback:= WrapFreeArcCallback(@FreeArcCallback,4); //FreeArcCallback has 4 arguments
StartInstall:= GetTickCount; {время начала распаковки}
LastTimerEvent:= GetTickCount;
baseMb:= 0

for n:= 0 to GetArrayLength(Arcs) -1 do
begin
lastMb := 0
CancelCode:= 0;
AppProcessMessage;
try
// Pass the specified arguments to 'unarc.dll'
Result:= FreeArcExtract (callback, 'x', '-o+', '-dp' + AnsiToUtf8( ExpandConstant('{app}') ), '--', AnsiToUtf8(Arcs[n].Path), '', '', '', '', '');
if CancelCode < 0 then Result:= CancelCode;
except
Result:= -63; // ArcFail
end;
baseMb:= baseMb+lastMb

// Error occured
if Result <> 0 then
begin
msgError:= FmtMessage(cm('ArcError'), [IntToStr(Result)]);
GetSpaceOnDisk(ExtractFileDrive(ExpandConstant('{app}')), True, FreeMB, TotalMB);
case Result of
-1: if FreeMB < 32 {Мб на диске} then msgError:= SetupMessage(msgDiskSpaceWarningTitle)
else msgError:= msgError + #13#10 + FmtMessage(cm('ArcBroken'), [ExtractFileName(Arcs[n].Path)]);
-127: msgError:= cm('ArcBreak'); //Cancel button
-63: msgError:= cm('ArcFail');
end;
// MsgBox(msgError, mbInformation, MB_OK); //сообщение показывается на странице завершения
Log(msgError);
Break; //прервать цикл распаковки
end;
end;
// Hide labels and button
WizardForm.FileNameLabel.Caption:= '';
lblExtractFileName.Hide;
ExtractFile.Hide;
btnCancelUnpacking.Hide;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
UnPackError:= UnPack(Archives)
if UnPackError = 0 then
SetTaskBarTitle(SetupMessage(msgSetupAppTitle))
else
begin
// Error occured, uninstall it then
Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n); //откат установки из-за ошибки unarc.dll
SetTaskBarTitle(SetupMessage(msgErrorTitle))
WizardForm.Caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
end;
end;
end;

// стандартный способ отката (не нужна CurPageChanged), но архивы распаковываются до извлечения файлов инсталлятора
// if CurStep = ssInstall then
// if UnPack(Archives) <> 0 then Abort;

Procedure CurPageChanged(CurPageID: Integer);
Begin
if (CurPageID = wpFinished) and (UnPackError <> 0) then
begin // Extraction was unsuccessful (распаковщик вернул ошибку)
// Show error message
WizardForm.FinishedLabel.Font.Color:= $0000C0; // red (красный)
WizardForm.FinishedLabel.Height:= WizardForm.FinishedLabel.Height * 2;
WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) + #13#10#13#10 + msgError;
end;
End;

procedure InitializeWizard();
begin
with WizardForm.ProgressGauge do
begin
// Create a label to show current FileName being extracted
lblExtractFileName:= TLabel.Create(WizardForm);
lblExtractFileName.parent:=WizardForm.InstallingPage;
lblExtractFileName.autosize:=false;
lblExtractFileName.Width:= Width;
lblExtractFileName.top:=Top + ScaleY(35);
lblExtractFileName.Caption:= '';
lblExtractFileName.Hide;

// Create a label to show percentage
ExtractFile:= TLabel.Create(WizardForm);
ExtractFile.parent:=WizardForm.InstallingPage;
ExtractFile.autosize:=false;
ExtractFile.Width:= Width;
ExtractFile.top:=lblExtractFileName.Top + ScaleY(16);
ExtractFile.caption:= '';
ExtractFile.Hide;
end;

// Create a 'Cancel unpacking' button and hide it for now.
btnCancelUnpacking:=TButton.create(WizardForm);
btnCancelUnpacking.Parent:= WizardForm;
btnCancelUnpacking.SetBounds(WizardForm.CancelButton.Left, WizardForm.CancelButton.top, WizardForm.CancelButton.Width, WizardForm.CancelButton.Height);
btnCancelUnpacking.OnClick:= @btnCancelUnpackingOnClick;
btnCancelUnpacking.Hide;
end;


При установке инсталлятор показывает что требуется места — несколько мегабайт. Размер содержимого архива (всмысле после распаковки) примерно 5 Гб. Можно ли как-нибудь заставить Inno Setup показывать правильные размеры?

Кстати, может кто-нибудь подскажет, где можно скачать GameScript Generator? На сайте, что указан в шапке темы, ссылка выпилена.

Цитата:

Цитата Cartmans
YURSHAT, Как у тебя в скрипте убрать выбор языка? »

Просто удали в секции [Languages] строки со всеми языками кроме русского.

nik1967 27-03-2010 21:23 1378711

petrov1993,
Держите Inno Setup GameScript Generator

Цитата:

Цитата petrov1993
При установке инсталлятор показывает что требуется места — несколько мегабайт. Размер содержимого архива (всмысле после распаковки) примерно 5 Гб. Можно ли как-нибудь заставить Inno Setup показывать правильные размеры? »

Тоже долго боролся с этим, потом плюнул, включил файлы *.arc в инсталлятор с флагом "nocompression".

Serega 28-03-2010 00:38 1378825

Цитата:

Цитата comsun
Я понимаю что сейчас модно вместо ответа отсылать к учебнику.
Насколько вырастаешь в своих глазах,но..... ответа все-таки нет. »

А какой ответ, вы бы хотели услышать?
Цитата:

Цитата comsun
А хелп я читал, и кроме: »

Цитата:

Цитата comsun
о "тихом" инстале не упоминается. »

Вы сами практически ответили на свой вопрос, просто нужно немного включить воображение и подойти к этому вопросу с другой стороны...
Цитата:

Цитата comsun
Будет ли тихий инсталл или нет. »

Ну если напишите, то будет, а если вы имеете ввиду возможно или нет, то ответ - да.

Цитата:

Цитата skeptik007
А как узнать какими функциями обладает та или иная DLL, чтобы потом их использовать в создание инсталлятора? »

Есть хорошая программка DLL Export Viewer, показывает экспортируемые функции dll'ки + знания + goole

Цитата:

Цитата Swotch
Перепробовал несколько вариантов, не чего не получилось… »

покажите как пробуете

Cartmans 28-03-2010 09:24 1378907

Цитата:

Цитата petrov1993
Цитата Cartmans:
YURSHAT, Как у тебя в скрипте убрать выбор языка? »
Просто удали в секции [Languages] строки со всеми языками кроме русского. »

Там только русский язык, а в инсталяторе почти в конце установки можна выбрать ещё и энглиш

petrov1993 28-03-2010 13:33 1379010

Цитата:

Цитата nik1967
Держите Inno Setup GameScript Generator »

Спасибо. А троян там зачем?

nik1967 28-03-2010 15:51 1379101

Цитата:

Цитата petrov1993
А троян там зачем? »

Ну видимо поэтому и прикрыли ссылку. Как говорится: ну что уж есть. Что скачал, тем и поделился.
На VirusTotal.
Eset NOD32 4.0 молчит в тряпочку.

Cartmans 28-03-2010 16:52 1379134

YURSHAT, Как у тебя в скрипте убрать выбор языка?

alex2010 28-03-2010 20:03 1379279

Cartmans, хоть я и не YURSHAT :)...
вобщем вот скрипт без выбора языка:
http://multi-up.com/245446

Cartmans 28-03-2010 21:31 1379348

alex2010, спасибо!

petrov1993 29-03-2010 10:48 1379637

Кто-нибудь знает, как делать такие инсталлы через Inno Setup? (См. скриншот):



Фоновый рисунок, Вкладки на верху, Графические кнопки и т.п.

alex2010 29-03-2010 17:08 1379973

petrov1993, это скрипт от YURSHAT
Вот он
а вот этот же скрипт, только подправленный от htuos на Ру-боард:
ссылка на сообщение
ссылка на скачивание

petrov1993 29-03-2010 21:06 1380133

Цитата:

Цитата alex2010
petrov1993, это скрипт от YURSHAT
Вот он
а вот этот же скрипт, только подправленный от htuos на Ру-боард:
ссылка на сообщение
ссылка на скачивание »

Громаднейшее спасибо!

Я кстати уже тоже нечто похожее нашел. Ссылку оставлю, вдруг кому-нибудь пригодиться: http://forum.ru-board.com/topic.cgi?...01&limit=1&m=1

petrov1993 29-03-2010 21:26 1380152

подправленный от htuos почему-то не работает у меня на Win7 x86. Только играет музыка, а сам инсталлятор не появляется. На виртуальной машине с WinXP — всё работает..

Хм, в чем же причина?

И еще кое-что: в этом скрипте встроена распаковка архивов FreeArc, а в Undercover от htuos FreeArc-распаковка отсутствует :( Кто-нибудь знает, как прикрутить FreeArc-распаковку к Undercover-скрипту от htuos?

alex2010 29-03-2010 21:53 1380171

petrov1993, только что проверил у себя(у самого 7 x86) все работает отлично.
Цитата:

Цитата petrov1993
Хм, в чем же причина? »

может быть ты уже редактировал [code]?
Цитата:

Цитата petrov1993
И еще кое-что: в этом скрипте встроена распаковка архивов FreeArc, а в Undercover от htuos FreeArc-распаковка отсутствует Кто-нибудь знает, как прикрутить FreeArc-распаковку к Undercover-скрипту от htuos? »

скрипт распаковки FreeArc есть в шапке темы, да и скрипт игры("Commandos 2: Награда за Смелость") не самого YURSHAT :)
Цитата:

Цитата petrov1993
а в Undercover от htuos FreeArc-распаковка отсутствует »

она отсутствует и в скрипте YURSHAT Undercover 2.0 :) . просто YURSHAT пока тестирует свой новый скрипт, потом он сделает распаковку freearc. в принципе ты сам можешь вставить этот скрипт распаковки

petrov1993 29-03-2010 22:10 1380180

Цитата:

Цитата alex2010
она отсутствует и в скрипте YURSHAT Undercover 2.0 . просто YURSHAT пока тестирует свой новый скрипт, потом он сделает распаковку freearc. в принципе ты сам можешь вставить этот скрипт распаковки »

Вставить-то конечно могу, но вот не факт что будет работать :) Нет, с фриарком я работать конечно умею, умею его инно сетуп вставлять, но вот в чужой скрипт, тем более в такой непростой, вставить фриарк-распаковку, думаю, мне будет сложновато.. Но попробовать конечно стоит, завтра займусь этим :)

RogerUP 30-03-2010 01:30 1380333

Посткажите, можно ли как нибудь обновить инсталятор?
А то у мя появились новые версии файлов, хотелось бы заменить в инстяляторе, а то заново паковать 10 гигов как-то нехочется...

YURSHAT 30-03-2010 09:15 1380432

Цитата:

Цитата RogerUP
Посткажите, можно ли как нибудь обновить инсталятор? »

Нет. Нужно паковать заново.

petrov1993 30-03-2010 16:14 1380725

Увы, в скрипт Need for Speed™ Undercover.iss [v 2.1] FreeArc-распаковку не так-то просто вставить. Сразу же появляются повторяющиеся функции и т.д.

YURSHAT 30-03-2010 18:26 1380830

Цитата:

Цитата petrov1993
Увы, в скрипт Need for Speed™ Undercover.iss [v 2.1] FreeArc-распаковку не так-то просто вставить. Сразу же появляются повторяющиеся функции и т.д. »

Но я бы сказал что сложно, а повторяющиеся функции это вовсе не проблема...

ImAge 30-03-2010 19:24 1380888

Столкнулся с такой проблемой,это скорее всего фриарк,при установке,распаковывается архив но в папке кроме распакованных файлов,все остальные папки(пустые) находящиеся у меня на диске,каким они образом там оказались я не знаю,решение проблемы находил но уже забыл,если кто-то сталкивался помогите буду весьма благодарен

Pilotfcsm 30-03-2010 22:42 1381064

Народ, помогите пожалуйста. нужно следующее:
Чтобы папка, которую указывает юзер(то есть куда копируются все файлы установщика) создавалась не в момент начала установки, а сразу же после того как он ее указал, и нажал далее. Так как использую [_ISToolDownload] для скачки компонентов из инета, а он их качает прежде чем скопировать остальные файлы, и когда обнаруживает что папки еще нет, пишет ошибку, что мол отсутствует путь. Поэтому и нужно создание папки до этого момента

Serega 30-03-2010 23:12 1381074

удалено ибо ОПК 3.18 (модератор)

Цитата:

Цитата Pilotfcsm
помогите пожалуйста. нужно следующее: »

Сказать честно [_ISToolDownload] ни разу не использовал, но попробуйте, таким образом:
Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Dirs]
; папка создаётся, перед копированием файлов из секции [Files]
Name: {app}

[Types]
Name: full; Description: Полная установка
Name: custom; Description: Выборочная установка; Flags: iscustom

[Components]
Name: a; Description: Моя программа™; Types: full custom
Name: a\a; Description: Руководство пользователя; Types: full
Name: a\a\a; Description: Русский; Flags: exclusive
Name: a\a\b; Description: English; Flags: exclusive
Name: a\b; Description: Справка; Types: full

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Components: a
Source: compiler:Examples\Readme-ru.txt; DestDir: {app}; Components: a\a\a
Source: compiler:Examples\Readme-en.txt; DestDir: {app}; Components: a\a\b
Source: compiler:Examples\MyProg.chm; DestDir: {app}; Components: a\b

[UninstallDelete]
; не забываем удалить папку
Name: {app}; Type: filesandordirs


Pilotfcsm 30-03-2010 23:43 1381096

Цитата:

[Dirs]
; папка создаётся, перед копированием файлов из секции [Files]
Name: {app}
К сожалению не помогло :( все ранво ссылается на то что отсутствует путь. Видимо он создает папку до [Files] но после того как скачает из [_ISToolDownload]

Вот скрипт мой пробный, на котором тестирую, если нужен конечно.
скрипт

[Setup]
AppName=Miranda IM [Pilot_Pack] 7.2
AppVerName=Miranda IM [Pilot_Pack] Full
DefaultGroupName=Miranda IM [Pilot_Pack] 7.2
OutputDir=C:\Users\Pilot\Desktop
OutputBaseFilename=Miranda IM [Pilot_Pack] 7.2
UninstallFilesDir={app}\uninstall
Compression=lzma/ultra
SolidCompression=true
PrivilegesRequired=poweruser
DefaultDirName={sd}\Miranda IM [Pilot_Pack] 7.2
AllowNoIcons=true
;CreateAppDir=True
;WizardImageFile=C:\картинка.bmp 164x314
;WizardSmallImageFile=C:\картинка.bmp 55x55
;UsePreviousAppDir=false


[Types]
Name: full; Description: Полная установка
Name: custom; Description: Выборочная установка; Flags: iscustom

[Dirs]
;папка создаётся, перед копированием файлов из секции [Files]
Name: {app}\Plugins

[Components]
Name: program; Description: Основные файлы; Types: full custom; Flags: fixed
Name: protocols; Description: Протоколы; Types: full
Name: protocols\mra; Description: Mail Agent; Types: full

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

[Messages]
BeveledLabel=Miranda IM Pilot Pack

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Files]
; Главные файлы ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Source: F:\Miranda IM Pilot Pack\Files don't copy\autoexec_SendSS.ini; DestDir: {app}; Components: program; Flags: ignoreversion

;Source: D:\Miranda IM Pilot Pack\autoexec_settings.ini; DestDir: {app}; Components: program; Flags: ignoreversion
Source: F:\Miranda IM Pilot Pack\Plugins\weather\*; DestDir: {app}\Plugins\weather; Components: program; Flags: ignoreversion
; onlyifdoesntexist

[code]

// Function generated by ISTool.
function NextButtonClick(CurPage: Integer): Boolean;
begin
Result := istool_download(CurPage);
end;

[_ISToolDownload]
Source: http://maks-shershnev.narod.ru/Pilot.ini; DestDir: {app}\Plugins; DestName: Pilot.ini; Components: protocol\mra


Компилю есстественно в Istool
Файл Pilot.ini качается и устанавливается перед файлами из [Files] и самостоятельно создать нужную папку не хочет или не умеет он) вот и вся загвоздка...

RedBishep 31-03-2010 06:19 1381236

Привет!
Заранее извиняюсь если такой вопрос был уже и т.д
Я вот сделал SFX архив вставил его в инстеллер и т.д игра устанавливается норм работает и т.д
Но... когда делаю Unistal файлы распокованные из архива не удаляются=((
дайте скрипт пжл что бы когда удаляли игру вся папка с игрой удалялась т.е всё что было установлено туда с помощью Setup-а




Заранее спасибо !!

alex2010 31-03-2010 07:52 1381261

RedBishep, по пробуй так:
Код:

[UninstallDelete]
Name: {app}\*.*; Type: filesandordirs


Serega 31-03-2010 08:37 1381276

Цитата:

Цитата Pilotfcsm
К сожалению не помогло »

Эх, хотел без секции кода...
Исправьте секцию [_ISToolDownload] и добавьте следущее:
читать дальше »
Код:

[_ISToolDownload]
Source: http://maks-shershnev.narod.ru/Pilot.ini; DestDir: {app}\Plugins; DestName: Pilot.ini; BeforeInstall: isDir; Components: protocol\mra

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

[Code]
procedure isDir;
begin
  if not DirExists(ExpandConstant('{app}\Plugins')) then
    ForceDirectories(ExpandConstant('{app}\Plugins'));
end;



Цитата:

Цитата alex2010
по пробуй так: »

Должно быть Name: {app}; Type: filesandordirs

YURSHAT 31-03-2010 11:17 1381381

Цитата:

Цитата Serega
Должно быть Name: {app}; Type: filesandordirs »

Немного добавлю

RedBishep, если нужно удалить конкретные файлы, а не всю папку {app}, то

Код:

[UninstallDelete]
Type: files; Name: "{app}\publisher.url"
Type: files; Name: "{app}\Update.url"


Serega 31-03-2010 11:34 1381396

Цитата:

Цитата YURSHAT
если нужно удалить конкретные файлы, а не всю папку {app} »

Согласен, но судя по вопросу
Цитата:

Цитата RedBishep
что бы когда удаляли игру вся папка с игрой удалялась т.е всё что было установлено туда с помощью Setup-а »

Человеку нужно именно {app}... ;)

YURSHAT 31-03-2010 11:58 1381407

Цитата:

Цитата Serega
Человеку нужно именно {app}... »

Я понял, эт я ему на всякий пожарный подсказал :)

ImAge 31-03-2010 12:30 1381428

Вложений: 1
Вопрос я уже задавал,но теперь ближе к истине,я проверил архив фриарк,папки не он создает,скорее всего это проблема в скрипте.Собстевено повторю,при установке с моего инсталятора в папке директории создаются все папки находящиеся на диске D и причем пустые может ктото помочь решить эту проблемку?

petrov1993 31-03-2010 17:09 1381681

YURSHAT, вставить то может и не очень сложно, и с повторяющимися функциями я разобрался, но вот после всех этих манипуляций появляется непонятно откуда взявшаяся ошибка на строчке кода:
Код:

ExtractTemporaryFile('innocallback.dll');
(из функции InitializeSetup).
Вот как выглядит ошибка:


Даже и не знаю в чем проблема. Понятно, что означает ошибка, но ведь до вставки фриарка её не было

RedBishep 31-03-2010 17:37 1381707

Цитата:

Цитата YURSHAT
[UninstallDelete] Type: files; Name: "{app}\publisher.url" Type: files; Name: "{app}\Update.url" »

Спасибо попробую !
Цитата:

Цитата alex2010
[UninstallDelete] Name: {app}\*.*; Type: filesandordirs »

Спасибо

Dasister 31-03-2010 18:24 1381749

Цитата:

Цитата petrov1993
YURSHAT, вставить то может и не очень сложно, и с повторяющимися функциями я разобрался, но вот после всех этих манипуляций появляется непонятно откуда взявшаяся ошибка на строчке кода: »

Да, вставить оказалось не очень сложно. Мне даже удалось запустить инсталлятор! И, как ни странно, он даже мне попытался распаковал архив! Вот только в окне Inno Setup прогресс распаковки не отображается! Да и в конце распаковки инсталлятор выдает ошибку про поврежденный архив и начинает удаление.

YURSHAT 31-03-2010 18:56 1381771

Цитата:

Цитата Dasister
Да, вставить оказалось не очень сложно. Мне даже удалось запустить инсталлятор! И, как ни странно, он даже мне попытался распаковал архив! Вот только в окне Inno Setup прогресс распаковки не отображается! Да и в конце распаковки инсталлятор выдает ошибку про поврежденный архив и начинает удаление. »

Значит попытка не удалась :)

Не знаю, у меня с первого раза получилось...

Pilotfcsm 31-03-2010 19:58 1381823

RedBishep,
скрипт
Код:

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
  Res: Integer;
begin
  case CurUninstallStep of
    usPostUninstall:
begin
 If DirExists(ExpandConstant('{app}')+'')
  then
      case MsgBox('Папка "'+ExpandConstant('{app}')+'" не пуста.'#13#13 +
      '"Да" – полное удаление всех файлов в папке, включая саму папку.' #13#13 +
      '"Нет" – открыть папку в проводнике, чтобы вручную удалить файлы.'#13#13 +
      '"Отмена" – ничего не делать, удалить папку позже самостоятельно.', mbInformation, MB_YESNOCANCEL)
      of IDYES:
  begin
if not DelTree(ExpandConstant('{app}')+'', True, True, True)
 then
  MsgBox('Папка не удалена.' #13#13 'Папка или один из файлов в ней задействованы другим приложением.', mbError, MB_OK);
end
 IDNO:
begin
if not ShellExec('open', ExpandConstant('{app}')+'', '', '', SW_SHOWMAXIMIZED, ewNoWait, Res)
 then
  MsgBox('Ошибка открытия.' #13#13 'Папка не найдена.', mbError, MB_OK);
end
 IDCANCEL:
begin
end;
end;
end;
end;
end;


Как вариант вот так. Взято из ФАКа между прочем :)
После анинсталла будет спрашивать удалить всю папку или оставить как есть

Serega, Все равно... не создает, продолжает выдавать ошибку что отсутствует путь.

BeforeInstall это же непосредственно перед установкой. Может он проверяет путь до начала скачки, а не до установки? Потому как видно что он еще не начал качать даже, а только открыл окно это. Это только предположение :)

Dasister 31-03-2010 20:49 1381853

Цитата:

Цитата YURSHAT
Значит попытка не удалась
Не знаю, у меня с первого раза получилось... »

Ну я не такой супер скриптер :)

RedBishep 01-04-2010 00:08 1382047

Цитата:

Цитата Pilotfcsm
Как вариант вот так. Взято из ФАКа между прочем
После анинсталла будет спрашивать удалить всю папку или оставить как есть »


Спасибо большое !

З.Ы всю ночь писал скрипты и т.д, наверно из-за этого не заметил в факе =)

RedBishep 01-04-2010 18:59 1382677

Доброго времени суток !:)
Вот есть пару вопросиков
1.Дай-те пжл скрипт для изменения вида инно сетапа т.е что бы вместо стандартного рисунка в сетапе была фото GTA например :)Пример:Фотя
2.Вот интересно можно сделать так например когда идёт установка игры или до неё как бы добавить параметр Пример:(место для галочки) По завершению установки выключить ПК ? и тоже самое только с перезагрузкой .
Если да то дайте скрипт плиз


Заранее спасибо !

YURSHAT 01-04-2010 19:43 1382698

Цитата:

Цитата RedBishep
1.Дай-те пжл скрипт для изменения вида инно сетапа т.е что бы вместо стандартного рисунка в сетапе была фото GTA например Пример:Фотя »

Опять 25... Интересно, шапку хоть кто-нибудь смотрит?

Tukash 01-04-2010 20:36 1382734

кто подскажет параметр, что бы он вместо "tukash" поставил имя компьютера например "user"
Цитата:

Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{B86DDC32-B5D8-4958-A370-DF756D0D3898}_is1; ValueType: string; ValueName: Inno Setup: User; ValueData: tukash

YURSHAT 01-04-2010 20:47 1382739

Цитата:

Цитата Tukash
кто подскажет параметр, что бы он вместо "tukash" поставил имя компьютера например "user" »

{username}

Tukash 01-04-2010 21:54 1382786

YURSHAT,
так просто?)) спасибо

Pilotfcsm 01-04-2010 22:01 1382791

По моему вопросу никто не знает решение?

Serega 03-04-2010 09:17 1384002

Цитата:

Цитата Pilotfcsm
Все равно... не создает, продолжает выдавать ошибку что отсутствует путь. »

Измените функцию NextButtonClick и не забудьте добавить секцию [UninstallDelete], для удаления всей рабочей папки при деинсталляции:
Код:

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

[Code]
function NextButtonClick(CurPage: Integer): Boolean;
begin
  if (CurPage = wpReady) and not DirExists(ExpandConstant('{app}\Plugins')) then
    ForceDirectories(ExpandConstant('{app}\Plugins'));
  Result:= istool_download(CurPage);
end;

Цитата:

Цитата Pilotfcsm
BeforeInstall это же непосредственно перед установкой. »

Она должна вызываться непосредственно перед выполнением данной задачи, но почему-то она у вас в ISTool не отрабатывает...

Цитата:

Цитата RedBishep
2.Вот интересно можно сделать так например когда идёт установка игры или до неё как бы добавить параметр Примерместо для галочки) По завершению установки выключить ПК ? и тоже самое только с перезагрузкой . »

Просто выключаете или перезагружаете компьютер, через командную строку, с помощью команды shutdown, в зависимости от выбора пользователя...

Pilotfcsm 03-04-2010 11:14 1384046

Serega, теперь все работает. Спасибо большое!

VoLT 03-04-2010 15:15 1384213

ISWin7 v0.4.2 обновление от 04.04.2010
Это плагин позволит вам сделать прозрачными края или всё окно целиком.
Работает ТОЛЬКО в Windows 7.
В Windows XP и Windows Vista он пропускает инициализацию что не мешает работоспособности сетапника в этих операционных системах.

Скачать
PS Если кому нужен плагин предоставляющий какие либо новые возможности - пишите - подумаем :good:

Tukash 03-04-2010 17:40 1384304

добрый день, такой вопрос, возможно-ли сделать что-бы определенный файл, установился в папку Windows, но не просто а сам находил на каком диске она находится, C, D, F, ну думаю понятно, это возможно сделать?

Habetdin 03-04-2010 19:23 1384366

Tukash, это не подходит?
Код:

[Files]
Source: myprog.exe; DestDir: {win}; Flags: ignoreversion


Tukash 03-04-2010 19:48 1384385

Habetdin,
:up я такие команды не знаю, надо-бы почитать о них, спасибо!

Habetdin 03-04-2010 19:51 1384386

Tukash,
Constants
Цитата:

Constants
The majority of the script entries can have constants embedded in them. These are predefined strings enclosed in brace characters { }. Setup or Uninstall translates the constants to their literal values, depending on the user's choices and system configuration. For example, {win}, as described below, would translate to "C:\WINDOWS" on most systems.

A "{" character is treated as the start of the constant. If you want to use that actual character in a place where constants are supported, you must use two consecutive "{" characters. (You do not need to double "}" characters.)

When a backslash immediately follows a constant, Setup or Uninstall will automatically remove the backslash if the value of the constant ends in a backslash already. Thus, if the value of a particular constant is "C:\", {constantname}\file will translate to "C:\file", not "C:\\file". If you want to prevent this from happening, enclose the backslash in { } characters, e.g. {app}{\}.

The following is the list of supported constants.

Directory Constants
{app}
The application directory, which the user selects on the Select Destination Location page of the wizard.
For example: If you used {app}\MYPROG.EXE on an entry and the user selected "C:\MYPROG" as the application directory, Setup will translate it to "C:\MYPROG\MYPROG.EXE".

{win}
The system's Windows directory.
For example: If you used {win}\MYPROG.INI on an entry and the system's Windows directory is "C:\WINDOWS", Setup or Uninstall will translate it to "C:\WINDOWS\MYPROG.INI".

{sys}
The system's System32 directory (System on Windows 95/98/Me).
For example: If you used {sys}\CTL3D32.DLL on an entry and the system's Windows System directory is "C:\WINDOWS\SYSTEM", Setup or Uninstall will translate it to "C:\WINDOWS\SYSTEM\CTL3D32.DLL".

On 64-bit Windows, by default, the System32 path returned by this constant maps to the directory containing 32-bit system files, just like on 32-bit Windows. (This can be overridden by enabling 64-bit mode.)

{syswow64}
On 64-bit Windows, the system's SysWOW64 directory, typically "C:\WINDOWS\SysWOW64". This is the actual directory in which 32-bit system files reside. On 32-bit Windows, 32-bit system files reside in "System32" or "System", not in a separate SysWOW64 directory, so this constant will resolve to the same directory as {sys} if used there.

Do not use this constant unless you have a specific need to obtain the name of the actual directory in which 32-bit system files reside. Gratuitously using {syswow64} in places where {sys} will suffice may cause problems. (See the documentation for the [Files] section's sharedfile flag for one example.)

{src}
The directory in which the Setup files are located.
For example: If you used {src}\MYPROG.EXE on an entry and the user is installing from "S:\", Setup will translate it to "S:\MYPROG.EXE".

{sd}
System Drive. The drive Windows is installed on, typically "C:". On Windows NT platforms, this directory constant is equivalent to the SystemDrive environment variable.

{pf}
Program Files. The path of the system's Program Files directory. {pf} is equivalent to {pf32} unless the install is running in 64-bit mode, in which case it is equivalent to {pf64}.

{pf32}
32-bit Program Files. The path of the system's 32-bit Program Files directory, typically "C:\Program Files" on 32-bit Windows and "C:\Program Files (x86)" on 64-bit Windows.

{pf64}
64-bit Windows only: 64-bit Program Files. The path of the system's 64-bit Program Files directory, typically "C:\Program Files". An exception will be raised if an attempt is made to expand this constant on 32-bit Windows.

{cf}
Common Files. The path of the system's Common Files directory. {cf} is equivalent to {cf32} unless the install is running in 64-bit mode, in which case it is equivalent to {cf64}.

{cf32}
32-bit Common Files. The path of the system's 32-bit Common Files directory, typically "C:\Program Files\Common Files" on 32-bit Windows and "C:\Program Files (x86)\Common Files" on 64-bit Windows.

{cf64}
64-bit Windows only: 64-bit Common Files. The path of the system's 64-bit Common Files directory, typically "C:\Program Files\Common Files". An exception will be raised if an attempt is made to expand this constant on 32-bit Windows.

{tmp}
Temporary directory used by Setup or Uninstall. This is not the value of the user's TEMP environment variable. It is a subdirectory of the user's temporary directory which is created by Setup or Uninstall at startup (with a name like "C:\WINDOWS\TEMP\IS-xxxxx.tmp"). All files and subdirectories in this directory are deleted when Setup or Uninstall exits. During Setup, this is primarily useful for extracting files that are to be executed in the [Run] section but aren't needed after the installation.

{fonts}
Fonts directory. Normally named "FONTS" under the Windows directory.

{dao}
DAO directory. This is equivalent to {cf}\Microsoft Shared\DAO.

{dotnet11}
32-bit .NET Framework version 1.1 root directory.

An exception will be raised if an attempt is made to expand this constant on a system with no .NET Framework version 1.1 present.

{dotnet20}
.NET Framework version 2.0 root directory. {dotnet20} is equivalent to {dotnet2032} unless the install is running in 64-bit mode, in which case it is equivalent to {dotnet2064}.

An exception will be raised if an attempt is made to expand this constant on a system with no .NET Framework version 2.0 present.

{dotnet2032}
32-bit .NET Framework version 2.0 root directory.

An exception will be raised if an attempt is made to expand this constant on a system with no .NET Framework version 2.0 present.

{dotnet2064}
64-bit Windows only: 64-bit .NET Framework version 2.0 root directory.

An exception will be raised if an attempt is made to expand this constant on a system with no .NET Framework version 2.0 present.

Shell Folder Constants
Inno Setup supports another set of directory constants, referred to as shell folder constants. They can be used in the same way as the other directory constants.

"common" below constants refer to the All Users profile.

The "user" constants refer to the profile of the user running Setup. This user is often not the same as the currently logged-in user, so use the "user" constants with caution.

Except where otherwise noted, shell folder constants work on all versions of Windows that Inno Setup supports, including Windows 95 and NT 4.0.

* = The "common" form of this constant is mapped to the "user" form if the logged-in user lacks administrative privileges, or if PrivilegesRequired is set to lowest, or if the operating system is Windows 95/98/Me.

{group}
The path to the Start Menu folder, as selected by the user on Setup's Select Start Menu Folder wizard page. On Windows NT platforms, this folder is created under the All Users profile unless the user installing the application does not have administrative privileges, in which case it is created in the user's profile.

{localappdata}
The path to the local (nonroaming) Application Data folder.

{sendto}
The path to the current user's Send To folder. (There is no common Send To folder.)

{userappdata} & {commonappdata}
The path to the Application Data folder.

{userdesktop} & {commondesktop} *
The path to the desktop folder.

{userdocs} & {commondocs}
The path to the My Documents folder (or on NT 4.0, the Personal folder).

{userfavorites} & {commonfavorites} *
The path to the Favorites folder. Usage of these constants requires a MinVersion setting of at least "4.1, 4". Only Windows 2000 and later supports {commonfavorites}; if used on previous Windows versions, it will translate to the same directory as {userfavorites}.

{userprograms} & {commonprograms} *
The path to the Programs folder on the Start Menu.

{userstartmenu} & {commonstartmenu} *
The path to the top level of the Start Menu.

{userstartup} & {commonstartup} *
The path to the Startup folder on the Start Menu.

{usertemplates} & {commontemplates} *
The path to the Templates folder. Only Windows 2000 and later supports {commontemplates}; if used on previous Windows versions, it will translate to the same directory as {usertemplates}.

Other Constants
{\}
A backslash character. See the note at the top of this page for an explanation of what the difference between using {\} and only a \ is.

{%NAME|DefaultValue}
Embeds the value of an environment variable.

NAME specifies the name of the environment variable to use.
DefaultValue determines the string to embed if the specified variable does not exist on the user's system.
If you wish to include a comma, vertical bar ("|"), or closing brace ("}") inside the constant, you must escape it via "%-encoding." Replace the character with a "%" character, followed by its two-digit hex code. A comma is "%2c", a vertical bar is "%7c", and a closing brace is "%7d". If you want to include an actual "%" character, use "%25".
NAME and DefaultValue may include constants. Note that you do not need to escape the closing brace of a constant as described above; that is only necessary when the closing brace is used elsewhere.
Examples:
{%COMSPEC}
{%PROMPT|$P$G}

{cmd}
The full pathname of the system's standard command interpreter. On Windows NT platforms, this is Windows\System32\cmd.exe. On Windows 95/98/Me, this is Windows\COMMAND.COM. Note that the COMSPEC environment variable is not used when expanding this constant.

{computername}
The name of the computer the Setup or Uninstall program is running on (as returned by the GetComputerName function).

{drive:Path}
Extracts and returns the drive letter and colon (e.g. "C:") from the specified path. In the case of a UNC path, it returns the server and share name (e.g. "\\SERVER\SHARE").

Path specifies the path.
If you wish to include a comma, vertical bar ("|"), or closing brace ("}") inside the constant, you must escape it via "%-encoding." Replace the character with a "%" character, followed by its two-digit hex code. A comma is "%2c", a vertical bar is "%7c", and a closing brace is "%7d". If you want to include an actual "%" character, use "%25".
Path may include constants. Note that you do not need to escape the closing brace of a constant as described above; that is only necessary when the closing brace is used elsewhere.
Examples:
{drive:{src}}
{drive:c:\path\file}
{drive:\\server\share\path\file}

{groupname}
The name of the folder the user selected on Setup's Select Start Menu Folder wizard page. This differs from {group} in that it is only the name; it does not include a path.

{hwnd}
(Special-purpose) Translates to the window handle of the Setup program's background window.

{wizardhwnd}
(Special-purpose) Translates to the window handle of the Setup wizard window. This handle is set to '0' if the window handle isn't available at the time the translation is done.

{ini:Filename,Section,Key|DefaultValue}
Embeds a value from an .INI file.

Filename specifies the name of the .INI file to read from.
Section specifies the name of the section to read from.
Key specifies the name of the key to read.
DefaultValue determines the string to embed if the specified key does not exist.
If you wish to include a comma, vertical bar ("|"), or closing brace ("}") inside the constant, you must escape it via "%-encoding." Replace the character with a "%" character, followed by its two-digit hex code. A comma is "%2c", a vertical bar is "%7c", and a closing brace is "%7d". If you want to include an actual "%" character, use "%25".
Filename, Section, and Key may include constants. Note that you do not need to escape the closing brace of a constant as described above; that is only necessary when the closing brace is used elsewhere.
Example:
{ini:{win}\MyProg.ini,Settings,Path|{pf}\My Program}
{language}
The internal name of the selected language. See the [Languages] section documentation for more information.

{cm:MessageName}
{cm:MessageName,Arguments}
Embeds a custom message value based on the active language.

MessageName specifies the name of custom message to read from. See the [CustomMessages] section documentation for more information.
Arguments optionally specifies a comma separated list of arguments to the message value.
If you wish to include a comma, vertical bar ("|"), or closing brace ("}") inside the constant, you must escape it via "%-encoding." Replace the character with a "%" character, followed by its two-digit hex code. A comma is "%2c", a vertical bar is "%7c", and a closing brace is "%7d". If you want to include an actual "%" character, use "%25".
Each argument in Arguments may include constants. Note that you do not need to escape the closing brace of a constant as described above; that is only necessary when the closing brace is used elsewhere.
Example:
{cm:LaunchProgram,Inno Setup}
The example above translates to "Launch Inno Setup" if English is the active language.

{reg:HKxx\SubkeyName,ValueName|DefaultValue}
Embeds a registry value.

HKxx specifies the root key; see the [Registry] section documentation for a list of possible root keys.
SubkeyName specifies the name of the subkey to read from.
ValueName specifies the name of the value to read; leave ValueName blank if you wish to read the "default" value of a key.
DefaultValue determines the string to embed if the specified registry value does not exist, or is not a string type (REG_SZ or REG_EXPAND_SZ).
If you wish to include a comma, vertical bar ("|"), or closing brace ("}") inside the constant, you must escape it via "%-encoding." Replace the character with a "%" character, followed by its two-digit hex code. A comma is "%2c", a vertical bar is "%7c", and a closing brace is "%7d". If you want to include an actual "%" character, use "%25".
SubkeyName, ValueName, and DefaultValue may include constants. Note that you do not need to escape the closing brace of a constant as described above; that is only necessary when the closing brace is used elsewhere.
Example:
{reg:HKLM\Software\My Program,Path|{pf}\My Program}
{param:ParamName|DefaultValue}
Embeds a command line parameter value.

ParamName specifies the name of the command line parameter to read from.
DefaultValue determines the string to embed if the specified command line parameter does not exist, or its value could not be determined.
If you wish to include a comma, vertical bar ("|"), or closing brace ("}") inside the constant, you must escape it via "%-encoding." Replace the character with a "%" character, followed by its two-digit hex code. A comma is "%2c", a vertical bar is "%7c", and a closing brace is "%7d". If you want to include an actual "%" character, use "%25".
ParamName and DefaultValue may include constants. Note that you do not need to escape the closing brace of a constant as described above; that is only necessary when the closing brace is used elsewhere.
Example:
{param:Path|{pf}\My Program}
The example above translates to c:\My Program if the command line /Path="c:\My Program" was specified.

{srcexe}
The full pathname of the Setup program file, e.g. "C:\SETUP.EXE".

{uninstallexe}
The full pathname of the uninstall program extracted by Setup, e.g. "C:\Program Files\My Program\unins000.exe". This constant is typically used in an [Icons] section entry for creating an Uninstall icon. It is only valid if Uninstallable is yes (the default setting).

{sysuserinfoname}
{sysuserinfoorg}
The name and organization, respectively, that Windows is registered to. This information is read from the registry.

{userinfoname}
{userinfoorg}
{userinfoserial}
The name, organization and serial number, respectively, that the user entered on the User Information wizard page (which can be enabled via the UserInfoPage directive). Typically, these constants are used in [Registry] or [INI] entries to save their values for later use.

{username}
The name of the user who is running Setup or Uninstall program (as returned by the GetUserName function).

{log}
The log file name, or an empty string if logging is not enabled.

Tukash 03-04-2010 19:54 1384387

Habetdin,
еще раз спасибо:)

DartVlad 05-04-2010 00:42 1385126

Люди помогите соединить 2 скрипта
Код:

// Importing LoadSkin API from ISSkin.DLL procedure LoadSkin(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@files:isskin.dll stdcall'; // Importing UnloadSkin API from ISSkin.DLL procedure UnloadSkin(); external 'UnloadSkin@files:isskin.dll stdcall'; // Importing ShowWindow Windows API from User32.DLL function ShowWindow(hWnd: Integer; uType: Integer): Integer; external 'ShowWindow@user32.dll stdcall'; function InitializeSetup(): Boolean; begin ExtractTemporaryFile('Office2007.cjstyles'); LoadSkin(ExpandConstant('{tmp}\Office2007.cjstyles'), 'NormalBlack.ini'); Result := True; end; procedure DeinitializeSetup(); begin // Hide Window before unloading skin so user does not get // a glimse of an unskinned window before it is closed. ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0); UnloadSkin(); end;
и это
Код:

procedure InitializeSetup(); begin with WizardForm do begin with MainPanel do Height := Height - 1; with WizardSmallBitmapImage do begin Left := 0; Top := 0; Height := 58; ///Размер рисунка Width := 497; /// end; with PageNameLabel do begin Width := Width - 497; ///Поставьте здесь значения на 0 если хотите вернуть текст Left := Left + 497; /// end; with PageDescriptionLabel do begin Width := Width - 497; ///Поставьте здесь значения на 0 если хотите вернуть текст Left := Left + 497; /// end; end; end;

Serega 06-04-2010 00:27 1385786

Цитата:

Цитата DartVlad
помогите соединить »

Да, конечно в одну строчку писать, это круто...
читать дальше »

Код:

// Importing LoadSkin API from ISSkin.DLL
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
  external 'LoadSkin@files:isskin.dll stdcall';
// Importing UnloadSkin API from ISSkin.DLL
procedure UnloadSkin(); external 'UnloadSkin@files:isskin.dll stdcall';
// Importing ShowWindow Windows API from User32.DLL
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
  external 'ShowWindow@user32.dll stdcall';

function InitializeSetup(): Boolean;
begin
  ExtractTemporaryFile('Office2007.cjstyles');
  LoadSkin(ExpandConstant('{tmp}\Office2007.cjstyles'), 'NormalBlack.ini');
  Result := True;
end;

procedure DeinitializeSetup();
begin
  // Hide Window before unloading skin so user does not get
  // a glimse of an unskinned window before it is closed.
  ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
  UnloadSkin();
end;

procedure InitializeWizard();
begin
  with WizardForm do
    begin
      with MainPanel do
        Height := Height - 1;
      with WizardSmallBitmapImage do
        begin
          Left := 0;
          Top := 0;
          Height := 58; ///Размер рисунка
          Width := 497; ///
        end;
      with PageNameLabel do
        begin
          Width := Width - 497; ///Поставьте здесь значения на 0 если хотите вернуть текст
          Left := Left + 497;  ///
        end;
      with PageDescriptionLabel do
        begin
          Width := Width - 497; ///Поставьте здесь значения на 0 если хотите вернуть текст
          Left := Left + 497;  ///
        end;
    end;
end;


heNch1g 06-04-2010 07:58 1385868

Добрый день. Снова есть вопросы к гуру ;)

Задача - сделать новую страницу, на которой будет выпадающий список и картинка ниже.
От выбранного пункта в списке зависит картинка и файлы, которые будут копироваться в папку установки.

Помогите, пожалуйста. Зарание грасиас =)

Winstan 06-04-2010 16:44 1386260

Serega,
Привет. К тебе просьба можешь адаптировать вот Наложение изображений на стандартные кнопки для Картинка на страницах инсталлятора

Sotonisto 06-04-2010 17:21 1386309

Цитата:

Цитата Winstan
Можешь адаптировать вот Наложение изображений на стандартные кнопки для Картинка на страницах инсталлятора »

Уже такое спрашивали - ответа не получили. Мне самому это нужно было, но потом понял что легче юзать Skin Builder.
Так что советую попробовать :)
----
Народ, вот есть страница проверки системных требований, например как в инстале STalker'a (там на странице выводились данные о вашей системе, и красным выделялось то, что не подходило).
Так вот как указать в требованиях, например, что необходима Vista или Windows 7? А то чет я не могу понять.
Ну не писать же чета типо system="Windows 7"? :)
Зарание спасибо.

KillHunter 07-04-2010 02:25 1386727

Доброе время суток.
Подскажите плз как сделать так чтобы после установки пакета запускался vbs скрипт

Habetdin 07-04-2010 08:18 1386801

KillHunter, так, только с флагом "postinstall" :)

VoLT 08-04-2010 15:42 1388006

Sotonisto, выход один - писать плагин :beta:

NightWisher 08-04-2010 17:44 1388095

Кто-нибудь, перезалейте пожалуйста "Скрипт любительского инсталлятора Resident Evil 4 UE от Sotonisto." отсюда http://rghost.ru/888810

А то пишет, что файл временно не доступен.

alex2010 08-04-2010 19:10 1388154

NightWisher,
а не вот ли он случайно?(сообщение от vint56, 1 пост на данной странице)

Sotonisto 08-04-2010 22:52 1388291

Цитата:

Цитата NightWisher
А то пишет, что файл временно не доступен. »

Дык он вообще на месяц заливался :) Я вообще удивлен что инфа о нем оталась :)
NightWisher, я делал инсталл с исходника YURSHAT'a, так что спроси у него
на счет файлов и скрипта :)

Цитата:

Цитата VoLT
Sotonisto, выход один - писать плагин »

Мне бы че-нить попроще :)

cleric1985_n 08-04-2010 23:32 1388306

Подскажите как реализовать такую штуку.

Есть file1.exe, который запускает другой file2.exe, а сам закрывается...Нужно отследить , когда file2.exe закроется и продолжить деинсталяцию...


Вот код, но с слежением только за file1.exe....

[code]
Код:

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
  var
  ResultCode: Integer;
begin
  if CurUninstallStep = usAppMutexCheck then
    begin
          if Exec(ExpandConstant('{app}\file1.exe'), '', '', SW_SHOW,
          ewWaitUntilTerminated, ResultCode) then
          begin
          end
    end;
end;

Может как то через
Код:

if RunTask('{file2.exe}', False) then

constant 09-04-2010 20:38 1389022

cleric1985_n, Может или через батники

cleric1985_n 09-04-2010 21:14 1389046

Я уверен, что как то можно..но как?:)
Дело в точ, что мне не закрыть нужно второй файл, а именно дождаться его завершения...а это походу только в аутоайти можна..

Habetdin 09-04-2010 21:25 1389055

cleric1985_n,
Код:

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
 ResultCode: Integer;
begin
 if CurUninstallStep = usAppMutexCheck then
  if Exec(ExpandConstant('{app}\file1.exe'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then
    Exec(ExpandConstant('{app}\file2.exe'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode)
end;


duxa 10-04-2010 12:04 1389327

Добрый день. Столкнулся с такой проблемой:
Коряво отображаются надписи на последней странице.
Там присутствует черный фон(у надписей)
Помогите его убрать


___
Спасибо

geroinnn 10-04-2010 19:42 1389607

Всем добрый.
Киньте плиз скриптик чтобы после распоковки папки с игрой сжатой фриарцем, файлы разжатые прикомпом обратно превращались в исходный вид.

NightWisher 10-04-2010 20:03 1389617

Sotonisto, alex2010, а на компе не сохранился скрипт?
Может то и он, но нужных файлов к скрипту там нет, а в архиве все было =)

alex2010 11-04-2010 18:49 1390215

geroinnn,
вот скрипт, только я его не тестил:
http://multi-up.com/253535

NightWisher, к сожалению у меня тоже нет ни нужных файлов, ни данного скрипта

GrizzlyMK 11-04-2010 19:48 1390247

Подскажите, написал скрипт с распаковкой .arc архивов, сжал необходимые файлы, начал тестить,
распаковка доходит до конца и начинается диэнстоляция.

Serega 11-04-2010 20:18 1390267

Цитата:

Цитата Winstan
можешь адаптировать вот »

возможно, извините но некогда...

Цитата:

Цитата Sotonisto
Ну не писать же чета типо system="Windows 7" »

Я уже не помню, но по-моему там идет чтение веток реестра, тоже самое можно сделать средствами IS, т.е. проверить версию Windows можно средствами Inno, о которых можно прочитать в Справке: MinVersion, GetWindowsVersion, GetWindowsVersionEx и GetWindowsVersionString...

Цитата:

Цитата VoLT
выход один - писать плагин »

Можно, но а оно надо ;) , ведь можно и стандартными средствами...

Цитата:

Цитата cleric1985_n
Вот код, но с слежением только за file1.exe »

Можно и так, но а не проще как предложил Habetdin ?
т.е запускать самому последовательно файлы…

Цитата:

Цитата cleric1985_n
а это походу только в аутоайти можна.. »

Меня уже начинает передергивать, от того, что говорят, что автоит сделает то, что нельзя сделать средствами Inno...
Ваш автоит - это...
стоп... чего-то я... разошёлся... сорри..

Цитата:

Цитата duxa
Помогите его убрать »

Смотрите в шапке темы Картинка на страницах инсталлятора

Цитата:

Цитата GrizzlyMK
написал скрипт с распаковкой .arc архивов, сжал необходимые файлы, начал тестить »

А я, прошлой весной посадил картошку и осенью её убрал... не поверите сколько посадил столько же и выкопал, ну может ведёр на пять больше, одним словом не урожай...
А вообще у вас ошибка, при обращении к функции в 563 строке... ;)

VoLT 11-04-2010 21:26 1390300

Цитата:

Цитата Serega
Можно, но а оно надо , ведь можно и стандартными средствами... »

Да ... но только узнать версию ... если я не ошибаюсь для инно доступно два способа - процедурой и реестром. Увы в Inno многое сделать нельзя, из за очень скудного API (ResTools не в счёт) и его языка разработки ... даж плагины нельзя назвать плагинами - скорее это библиотеки расширения чего либо, в том числе и Inno ...

GrizzlyMK 11-04-2010 22:18 1390350

Вложений: 1
Вот скрипт, но 563 строки даже нет.... )))), а еще как сделать что п.о.(DX) устанавливались полсе распаковки а не до. Зарание спасибо

conductor 12-04-2010 01:08 1390468

del

semiono 13-04-2010 04:42 1391275

procedure InitializeWizard();
Нужен чек IsWin64 в код секции, и если не x64 то сразу выйти из инстала без всяких диалогов.

MinVersion= как я понял ничего не даёт для этого, вот из справки:
5.01.2600 Windows XP or Windows XP 64-Bit Edition Version 2002 (Itanium)

??

geroinnn 13-04-2010 11:37 1391424

Помогите пожалуйста,при запуске инсталятора вылезает ошибка
Скрипт: http://multi-up.com/254714

alex2010 13-04-2010 15:07 1391572

geroinnn, пишет, что не найден innocallback.dll
чтобы работало, пропиши данный файл в секции [File]

vint56 13-04-2010 16:49 1391640

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

Snikt! 13-04-2010 18:48 1391744

Может кто-нибудь дать рабочий скрипт для чёрного инстала, как у Механиков + ФриАрк? Заранее большое спасибо :)

alex2010 13-04-2010 19:00 1391757

Snikt!, есть как у механиков с фриарком, только еще и с прекомпом

Snikt! 13-04-2010 20:21 1391815

alex2010, можно и с прекомпом... Так даже лучше :)

alex2010 13-04-2010 20:30 1391818

Snikt!, тогда вот http://multi-up.com/255026
PS. выкладывал YURSHAT на Рубоард по просьбе др. чела :)

Snikt! 13-04-2010 21:00 1391835

alex2010, а я то думал другой :( Этот у меня чё-то постоянно ошибки выдаёт. То ему этого не хватает, то того...

alex2010 13-04-2010 21:09 1391841

Snikt!, любые ошибки можно исправить :)

Snikt! 13-04-2010 21:31 1391857

alex2010, ага, если руки прямые :D

Может, тогда кто-нибудь поможет этот скрипт довести до ума? А то не хочет распаковывать ФриАрк архивы :(
http://rapid.ufanet.ru/9585636
Так не написал, т.к. форум не позволяет. Больше 30000 символов в скрипте.

semiono 13-04-2010 21:48 1391867

Как принудительно завершить программу установки из секции код?

cleric1985_n 13-04-2010 23:18 1391925

Вложений: 1
Надо смотреть на каком этапе это нужно..

Вот скажем, на этапе установки...

читать дальше »
Код:

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

Код:

function KillTask(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload';
 
function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';
 
//**************************************************//
function InitializeSetup(): Boolean;
begin
  If RunTask('file.exe', false) then 
    begin                             
      if MsgBox('Программа file.exe используется. Закрыть и продолжить установку?', mbInformation, mb_YesNo) = idYes then
        begin                       
          KillTask('file.exe');     
          Result:= True;
        end else                   
          Exit;                     
    end;
Result:=True;
end;



Или же на этапе удаления

читать дальше »
Код:

[Files]
Source: ISTask.dll; DestDir: {app}; Flags: ignoreversion

Код:

// функции используемые при деинсталляции
// RunTask@{app}\ISTask.dll - название функции (в данном случае, если программа работает)
// и путь dll'ки где она расположена...

function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@{app}\ISTask.dll stdcall delayload uninstallonly';
function KillTask(ExeFileName: string): Integer;
external 'KillTask@{app}\ISTask.dll stdcall delayload uninstallonly';

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usUninstall then
  if RunTask('file.exe', False) then
    begin
      // прячем форму
      UninstallProgressForm.Visible:= False;
      if MsgBox('Программа file.exe используется. Закрыть и продолжить удаление?', mbConfirmation, MB_YESNO) = IDYES then
        begin
          KillTask('file.exe');
          UnloadDll(ExpandConstant('{app}\ISTask.dll'));
          // показываем форму
          UninstallProgressForm.Visible:= True;
        end
      else
        begin
          MsgBox('Завершите работу file.exe, затем снова запустите программу удаления.', mbInformation, MB_OK);
          UnloadDll(ExpandConstant('{app}\ISTask.dll'));
          Abort;
        end;
    end;
end;



А также библиотека

semiono 14-04-2010 02:11 1392026

cleric1985_n, а можешь продолжить это же самое, только if not IsWin64... KillTask() ?
Или это не совсем то что здесь надо? Мне надо запретить установку на x86 системе.

cleric1985_n 14-04-2010 11:26 1392191

А зачем тогда завершать? просто возьмите проверку системы..т.е. если не х64, то не устанавливать.....вроди в самом инно есть такая проверка..

Habetdin 14-04-2010 16:53 1392489

semiono,
Код:

function InitializeSetup(): Boolean;
begin
if IsWin64 then
        Result:= True else
        MsgBox('На вашем компьютере установлена 32-битная ОС.' + #13#10
                'Установка  невозможна!', mbInformation, MB_OK);
end;


Chelluga 14-04-2010 18:18 1392554

У мну пара вопросов к народу. Народ:

1. Почему инно не распознаёт оранжевый цвет? То-есть clOrange.
Есть ли аналог или как это будет выглядеть в инновских цифирках (подобное - #FF7F00 пробовал - инно и это не понимает)?

2. Я хочу запустить одну прогу после фриарка, но у мну она запускается до (соответственно сразу и закрывается ибо не находит, что ищет). Как это пофиксить?

3. Цвет фриарка (то-бишь инфа о распаковываемом файле и т.п.) белая, а мне нужен иной цвет. Облазил код - не нашёл. Ни одного упоминания на фонтколор фриарка...Мож я невнимательный?

Кто поможет?

Заранее спасибо.

patrion 14-04-2010 18:37 1392567

Snikt! , Во 1 этот скрипт полностью стабилен,
во 2 эт я его просил =))))

cleric1985_n 14-04-2010 20:30 1392654

Цитата:

Цитата Serega
Можно и так, но а не проще как предложил Habetdin ?
т.е запускать самому последовательно файлы… »

Вариант хороший, если бы не одно но, а именно...файл 2 не запускается самостоятельно, а исключительно при запуске из файла 1,т.е. извлекается из первого..но сохранить его и потом запустить отдельно увы невозможно...так что не подходит такой способ..нужно именно отследить, а не запустить и отследить...

Habetdin 14-04-2010 22:37 1392766

cleric1985_n,
Цитата:

Цитата Habetdin
if Exec(ExpandConstant('{app}\file1.exe'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then »

Выделенное означает, что инсталлятор будет ждать, пока не закроется file1.exe.
Можно еще ResultCode проверять для надежности :)

cleric1985_n 14-04-2010 23:31 1392814

Цитата:

Цитата Habetdin
Выделенное означает, что инсталлятор будет ждать, пока не закроется file1.exe.
Можно еще ResultCode проверять для надежности »

Вы снова не поняли...файл1 извлекает файл2 и запускает его, а сам в это время закрывается..:)), оставляя за собой запущенный файл 2, завершения которого и необходимо ждать...

Habetdin 14-04-2010 23:35 1392819

cleric1985_n, может переделать "файл1"? :)

cleric1985_n 14-04-2010 23:58 1392839

Habetdin Если бы...но это сторонний файл, исходного кода которого у меня нету...

ViCK_kz 15-04-2010 10:14 1393090

Цитата:

Цитата Chelluga
2. Я хочу запустить одну прогу после фриарка, но у мну она запускается до (соответственно сразу и закрывается ибо не находит, что ищет). Как это пофиксить? »

единственное могу помочь с этим
Вот здеся всё описано

Chelluga 15-04-2010 14:03 1393267

ViCK_kz,
Увы, не помогло...но всё-равно спасибо)

constant 15-04-2010 16:45 1393421

Люди, использую pack.exe и ext.exe (для того чтобы достать файлы с игровых архивов (например для игры Метро 2033)).
Но всегда при распаковке или упаковке даёт ошибку.
Дайте пожалуйста примеры батников

ChVL 15-04-2010 20:27 1393553

В среде Win 7 x64 не срабатывает стандартная запись:
Код:

[Run]
Filename: {win}\regedit.exe; Parameters: /s reg.reg; WorkingDir: {app};

При ручном запуске reg.reg всё прописывается, правда, после закрытия дурацкого окна с предупреждением системы безопасности.
В то же время в Win XP и в Win 7 x32 эта же запись в скрипте работает.
Где копать?

RedBishep 16-04-2010 15:19 1394108

Привет всем !
Вот решил спросить у каво нибудь такая проблема наблюдалась : Inno Setup 5.3.6
Создал Сетап работает всё нормально устанавливается и т.д но..... Когда хочу удалить сетап с компа пишет что программа используется другим приложением и т.д и т.п сморел в диспетчере нечего лишнего и связанного нету.... думал вирус.. проверял двумя антивирусами Касперским и Dr.Web нечего не нашли ... , Думал из-за самого Inno setup установил 5,3,5 тоже самое ....кароче говоря пробЫвал все варианты которые знаю нечего не помогает не считая формата....

с 40% сетап-ов появляется такая проблема.! =(
Может из-за скриптов хотя ... вроде всё норм вот пример 1 скрипта
читать дальше »
[Setup]
AppName=WoW Frozen Throne
AppVerName=WoW Frozen Throne
AppPublisher=RedBishep
DefaultDirName={pf}\WoW Frozen Throne
DefaultGroupName=WoW Frozen Throne
AllowNoIcons=yes
OutputDir=C:\Documents and Settings\RedBishep\Рабочий стол
OutputBaseFilename=SetupW
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

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

[Icons]
Name: "{group}\Frozen Throne"; Filename: "{app}\Frozen Throne.exe"
Name: "{group}\Warcraft III"; Filename: "{app}\Warcraft III.exe"
Name: "{group}\{cm:UninstallProgram,WoW Frozen Throne}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\Frozen Throne"; Filename: "{app}\Frozen Throne.exe"; Tasks: desktopicon
Name: "{commondesktop}\Warcraft III"; Filename: "{app}\Warcraft III.exe"; Tasks: desktopicon


[Files]
Source: "D:\data.exe"; DestDir: "{app}"; AfterInstall: MyAfterInstall; Flags: ignoreversion deleteafterinstall
Source: "D:\data1.exe"; DestDir: "{app}"; AfterInstall: MyAfterInstall; Flags: ignoreversion deleteafterinstall
Source: "D:\data2.exe"; DestDir: "{app}"; AfterInstall: MyAfterInstall; Flags: ignoreversion deleteafterinstall
Source: "D:\Warcraft III\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs



[code]
procedure MyAfterInstall();
var
ResultCode: Integer;
begin
begin
Exec(ExpandConstant('{app}\data.exe'), '-e -aoa -y', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
Exec(ExpandConstant('{app}\data1.exe'), '-e -aoa -y', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
Exec(ExpandConstant('{app}\data2.exe'), '-e -aoa -y', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
end
end;

[setup]

[code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep=usPostUninstall then
begin
DelTree(ExpandConstant('{app}'), True, True, True);
RemoveDir(ExpandConstant('{app}'));
end;
end;


Прикол ещё в том что если скопировать сетап то он копируется и перекидывается . хотя когда прога используется другим приложением прога не должна копироваться ..

Нашёл только 2 варианта избавляться от них это безопасный режим через cmd и фармат ...


Что посоветуете ? в чем может быть проблема?

Sotonisto 16-04-2010 20:37 1394341

ChVL, а не проще сделать запись в реестре при помощи секции [Registry]?
Зачем все усложнять то? :)

ChVL 16-04-2010 21:42 1394396

Sotonisto,
Дык, с этого и начинал. Обнаружил, что запись из секции в реестр не вносится, поэтому и решил попробовать через reg файлик.

Gizmon 17-04-2010 01:32 1394533

Всю голову сломал ((((
 
Всем привет. Сразу скажу что никогда не создавал инсталях впринципе! Сейчас столкнулся с проблемой и не знаю как ее решить. Пожалуйста помогите мне.
Описание проблемы:
1 Я переделал игру CSSourse (5 protocol) Изменил в ней все что только можно.
2.Хочу теперь сделать красивый инстал да так чтоб был с паролем и прописывался в реестр ну типа ключ (без него бы игра не запустилась на другом компе).
3. Прочитал вроде всю справку на программу Inno Setup,но понять не могу как оно все работает.
4. После долгих боев за инсталяху у меня получился setup файл, но он при установке все файлы которые были указаны мной пехает в одну папку и все. А мне нужна структура папок и даже есть папка в папке а там файлы.
Как мне сделать по нормальному ??? Пожалуйста помогите мне. Если можно поподробнее я просто нуб ваще в этом деле(((

RedBishep 17-04-2010 01:49 1394544

Нашёл способ.. более менее эфективен...
После перезагрузки компа как открылся экран нужно успеть удалить сетап-ы я успел получилось... терь ясно где файлы прятались в автозагрузке!=)

Gizmon 17-04-2010 02:01 1394552

http://forum.oszone.net/thread-173349.html Всем кто может помоч пожалуйста шляньте.

RedBishep 17-04-2010 02:15 1394557

Если я понял правильно тебе нужно что бы при установки игры у тя все файлы разложились по полочкам(по папкам)
"{app}"= это папка куда будет установлена игра ,когда будешь делать скрипт перед нужным тебе файлом в строке "{app}" добавь нужную тебе папку
Пример:
Код:

[Files]
Source: "D:\data.exe"; DestDir: "{app}\Textures\";................  ;Архив распакуется в папку с игрой в Textures


Выложи свой скрипт посморю что не так подправлю и выложу обратно будет тебе примером для Сетап-ов

З.Ы Почитай справки и разные фаги для начало,что бы было немного лечге

Gizmon 17-04-2010 10:31 1394666

Цитата:

Цитата RedBishep
Пример:
Код:
[Files]
Source: "D:\data.exe"; DestDir: "{app}\Textures\";................ ;Архив распакуется в папку с игрой в Textures »

Спасибо за совет, вот еще вопрос а как сделать папку в папке ???

Xstax 17-04-2010 11:30 1394692

Кому не сложно, добавьте Пожалуйста в этот скрипт, страницу с выбором доп. компонентов [Tasks]
Заранее спасибо :)

Gizmon 17-04-2010 11:38 1394693

RedBishep, А как сделать что то типа защитного ключа, чтоб без него не запукалась игра на другом компе (ноподобе защиты от копирования тупо всех папок игры и переноса на другой комп.)

aleksandru05 17-04-2010 13:19 1394763

Как сделать чтобы после завершения установки приложения выбрасывало на сайт ("домашнею" страницу приложения)?

Habetdin 17-04-2010 13:50 1394788

aleksandru05,
Код:

[Run]
Filename: http://forum.oszone.net; Description: Посетить форум OSzone.net; Flags: nowait postinstall


aleksandru05 17-04-2010 14:10 1394796

Habetdin, cпасибо большое! Выручил

geroinnn 17-04-2010 14:54 1394821

Возможно ли прикомпом обработать сразу всю папку?

Habetdin 17-04-2010 14:58 1394823

Цитата:

Цитата Gizmon
как сделать папку в папке ??? »

Создать папку:
Код:

[Dirs]
Name: {app}\New Folder

Или при запаковке включить подпадпки? Тогда так:
Код:

[Files]
Source: {app}\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension


aleksandru05 17-04-2010 15:46 1394842

Habetdin, [Run]
Filename: http://forum.oszone.net; Description: Посетить форум OSzone.net; Flags: nowait postinstall

При запуске приложения появляется сообщение что не найден файл http://forum.oszone.net

Habetdin 17-04-2010 15:54 1394846

aleksandru05, а так?
Код:

[Run]
Filename: http://forum.oszone.net; Description: Посетить форум OSzone.net; Flags: nowait postinstall shellexec


aleksandru05 17-04-2010 16:13 1394855

Habetdin, так заработало.

Tukash 17-04-2010 17:07 1394885

добрый день, возможно-ли прописать код инсталлятору что бы он запускался автоматически от имени админа?

Chelluga 17-04-2010 18:08 1394921

Здравствуйте, знающие люди.

Кто подскажет, как запустить прогу после фриарка? Я про поле Run. Какие там флаги/атрибуты?

Заранее спасибо.

Sotonisto 17-04-2010 19:30 1394997

Цитата:

Цитата ChVL
Дык, с этого и начинал. Обнаружил, что запись из секции в реестр не вносится, поэтому и решил попробовать через reg файлик. »

А че у тебя там хоть в том файлике написано? :)
Проверял работоспособность программы/игры после установки (инсталл с [Registry])?

Не забыл "особенность" Windows 7 (x64), при которой вот такая запись в секции [Registry]
Код:

Root: HKLM; Subkey: "Software\Sotonisto\My_Game"; Flags: uninsdeletekey
располагается в реестре так:
Код:

HKEY_LOCAL_MACHINE\Software\Wow6432Node\Sotonisto\My_Game
Это я на всякий случай :)

ChVL 17-04-2010 20:11 1395038

Решил проблему.
Стандартная запись, к которой мы все привыкли:
Код:

[Registry]
Root: HKLM; SubKey: ; ValueType: ; ValueName: ; ValueData:

По умолчанию она справедлива для 32-х разрядных систем. 64-х разрядные её игнорируют, соответственно запись в реестр не производится.

Запись для 64-х разрядных систем выглядит так:
Код:

[Registry]
Root: HKLM64; SubKey: ; ValueType: ; ValueName: ; ValueData:

Естественно, ветки HKLM64 не существует (это только запись), всё пропишется туда, куда надо - в HKLM.

patrion 17-04-2010 21:45 1395096

Цитата:

Здравствуйте, знающие люди. Кто подскажет, как запустить прогу после фриарка? Я про поле Run. Какие там флаги/атрибуты? Заранее спасибо.
[Run]
...|||....||| Flags: runminimized runasoriginaluser (можно и без флагов, если ты ран поставишь выше сода, как я показал...)

[code]
...

vint56 18-04-2010 00:19 1395174

patrion, ПРИМЕР
Код:

procedure CurStepChanged(CurStep: TSetupStep);
var
ResultCode:Integer;
begin
  if CurStep = ssPostInstall then
  begin
  WizardForm.StatusLabel.Caption:='Идет обновление DirectX ...';
  WizardForm.StatusLabel.Font.Color:= ClRed;
  WizardForm.StatusLabel.Font.Name:= 'Georgia';
  WizardForm.StatusLabel.Font.Size:= 11
  WizardForm.StatusLabel.Font.Style := [fsBold, fsItalic];
  Exec(ExpandConstant('{src}\DirectX\DXSETUP.exe'), '/silent', ExpandConstant('{src}\DirectX'), SW_SHOW, ewWaitUntilTerminated, ResultCode);
  WizardForm.StatusLabel.Caption:='Идет обновление Redist ...';
  WizardForm.StatusLabel.Font.Color:= ClRed;
  WizardForm.StatusLabel.Font.Name:= 'Georgia';
  WizardForm.StatusLabel.Font.Size:= 11
  WizardForm.StatusLabel.Font.Style := [fsBold, fsItalic];
  Exec(ExpandConstant('{src}\Redist\vcredist_x86.exe'), '/Q', ExpandConstant('{src}\Redist'), SW_SHOW, ewWaitUntilTerminated, ResultCode);
end;
end;


mrdron18 18-04-2010 15:18 1395569

у меня вопрос. я отключил ReadyPage
как на странице SelectTasksPage изменить надпись на кнопке далее (только на этой странице и только на кнопке далее)?
вместо далее - установить
скрипт без всяких наворотов простой
помогите реализовать

vint56 18-04-2010 16:03 1395623

mrdron18,
Код:

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID=wpSelectProgramGroup then
  begin
  If WizardForm.FindComponent('NextButton') is TButton
  then
  TButton(WizardForm.FindComponent('NextButton')).Caption:='Установить';
end;
end;


YURSHAT 18-04-2010 16:39 1395636

vint56,

Можно еще проще

Код:

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID=wpSelectProgramGroup then
  WizardForm.NextButton.Caption:='Установить';
end;


mrdron18 18-04-2010 16:41 1395637

спасибо

travian 19-04-2010 21:54 1396487

Помогите пожалуйста.
Как можно удалить кнопку на определённой странице? Или как сделать её не активной, опять же на определённой странице?
Интересующая страницу выбора пути установки.
Интересующая кнопка "назад"

YURSHAT 20-04-2010 01:06 1396580

Цитата:

Цитата travian
Помогите пожалуйста.
Как можно удалить кнопку на определённой странице? »

Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program

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

[code_]

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID=wpSelectDir then
  WizardForm.BackButton.Enabled:=False else
  WizardForm.BackButton.Enabled:=True;
  //для удаления
  //WizardForm.BackButton.Hide else
  //WizardForm.BackButton.Show;
end;


mrdron18 21-04-2010 17:43 1397842

Код:

procedure CurStepChanged(CurStep: TSetupStep);
var
  res:Integer;
  app, arc, dest:string;
begin
If CurStep=ssPostInstall
then
begin
  app:=ExpandConstant('{app}')+'\7z.exe';
  arc:=ExpandConstant('{app}')+'\1.7z';
  dest:=ExpandConstant('{app}');
  Exec(app, 'x "'+ arc + '" -y -o"'+ dest + '"', '', SW_SHOWNORMAL, ewWaitUntilTerminated, res);
end;
end;

помогите что сюда добавить чтобы консоль не выскакивала? типа как Flags: runhidden; через ран. не как не пойму как сделать

пардон уже разобрался

mariolast 22-04-2010 16:20 1398598

Есть у кого пример окошка в секции
function InitializeUninstall(): Boolean;
с чекбоксами.
Нужно при деинсталляции удалить те компоненты, которые привязаны к галочкам в чекбоксах.

y76uGZ 23-04-2010 23:34 1399548

здравствуйте, нашел скрипт ввода пароля, как можно сделать что бы пароль не шифровался, оставить только форму ввода.
Код:

[Setup]
AppName=Password
AppVerName=Encryption Password
CreateAppDir=false
Encryption=true
Password=202cb962ac59075b964b07152d234b70
;на странице пароля ввести: 123

#define EncryptPass
#define i Len(SetupSetting("Password"))
#for {i; i > 0; i--} EncryptPass = EncryptPass + Copy(SetupSetting("Password"), i, 1)
;(можно запутать ещё и так: '0123456789' > '4321098765') #define EncryptPass Copy(EncryptPass, Len(EncryptPass)/2+1, Len(EncryptPass) -Len(EncryptPass)/2) + Copy(EncryptPass, 1, Len(EncryptPass)/2)

[_Code]
var PasswordText: TPanel;

Function DecryptPass(Password: String): String;
        var n: Integer;
Begin
        for n:= Length(Password) Downto 1 do Result:= Result + Copy(Password, n, 1)
End;

Function CheckPassword(Password: String): Boolean;
Begin
        Result:= (GetMD5OfString(Password) = DecryptPass('{#EncryptPass}'))
        if not Result then exit;
                PasswordText.Caption:= WizardForm.PasswordEdit.Text
                WizardForm.PasswordEdit.Text:= DecryptPass('{#EncryptPass}')
                PasswordText.Show
End;

Procedure PasswordEditOnKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
Begin
        WizardForm.Nextbutton.Enabled:= CheckPassword(WizardForm.PasswordEdit.Text)
End;

Procedure CurPageChanged(CurPageID: Integer);
Begin
        if CurPageID = wpPassword then if PasswordText.Caption = '' then WizardForm.Nextbutton.Enabled:= CheckPassword(WizardForm.PasswordEdit.Text)
End;

Procedure InitializeWizard;
Begin
        WizardForm.PasswordEdit.OnKeyUp:= @PasswordEditOnKeyUp
PasswordText:=TPanel.Create(WizardForm)
        PasswordText.SetBounds(WizardForm.PasswordEdit.Left, WizardForm.PasswordEdit.Top, WizardForm.PasswordEdit.Width, WizardForm.PasswordEdit.Height)
        PasswordText.Font.Style:= [fsBold]
        PasswordText.Alignment:=taLeftJustify
        PasswordText.BevelOuter:= bvNone
        PasswordText.BorderStyle:= bsSingle
        PasswordText.Parent:= WizardForm.PasswordPage
    PasswordText.Hide
End;


GOLDLION 26-04-2010 11:38 1400890

Добрый день! По вопросу:
Цитата:

Цитата heNch1g
Задача - сделать новую страницу, на которой будет выпадающий список и картинка ниже.
От выбранного пункта в списке зависит картинка и файлы, которые будут копироваться в папку установки. »

никто ничего не подскажет? Нужно тоже самое, способов реализации не вижу. Подскажите, а?

flanger 26-04-2010 21:30 1401304

Всем привет, ребят подскажите как менять скины (темы) для Inno Setup, скачал утилиту ISSkin (SkinBuilder) применил коды которые прилагались но не чего не выходит, не меняет не чего остается прежняя стандартная тема, даже «test compil» проверил только картинку меняет а тему нет (кнопки, окно ) все прежнее.

victor2006 27-04-2010 23:45 1402167

Добрый вечер.
Подскажите плиз, как реализовать следующие:
Инсталлятор устанавливает в папку SteamВ файлы, и попутно, во время установки он в реестре находит ветвь
[HKEY_LOCAL_MACHINE\SOFTWARE\Valve\Steam]
"InstallPath"="C:\\Valve\\SteamA"
там из InstallPath он берет путь C:\Valve\SteamA
и всю папку SteamА копирует в папку SteamB

Спасибо.

ImAge 28-04-2010 14:44 1402603

Столкнулся с такой проблемкой,пользуюсь скриптом от YURSHAT.Собственно сама проблема в том что если я включаю в установку ДиректХ,мой скрипт с фриарком,так вот устанавливается директ,потом начинают распаковыватся архивы ,и текст налаживается на надпись "Обновленеие ДиректХ",возможно поднять текст выше или ниже ?

GrizzlyMK 29-04-2010 21:05 1403629

ImAge,
Что-бы фриарк распаковался до установки ДХ:
В скрипте найди строку if CurStep = ssPostInstall then begin и замени ssPostInstall на ssInstall.

skynetxxx 30-04-2010 19:14 1404239

Здравствуйте !
Такой вопрос:
как перевести название на несколько языков и выдавать название в зависимости от него ?
Например на русском название "Программа", а для всех остальных языков "Programm".
Подозреваю что через #define, но как проверить условие ?

skynetxxx 30-04-2010 19:40 1404250

И ещё есть вопрос: Можно заменить градиент в заднем окне большой картинкой ?

skynetxxx 30-04-2010 19:56 1404256

Вот код вставки картинок:
Код:

procedure InitializeWizard();
var
BackgroundBitmapImage: TBitmapImage;
s:string;
width, height:Integer;
begin
WizardForm.Position:=poScreenCenter;
MainForm.BORDERSTYLE:=bsNone;
width:=GetSystemMetrics(0);
height:=GetSystemMetrics(1);
MainForm.Left := 0;
MainForm.Top := 0;
MainForm.Width:=width;
MainForm.Height:=height;
width:=MainForm.ClientWidth;
height:=MainForm.ClientHeight;
ExtractTemporaryFile('Windows7.bmp');
s:=ExpandConstant('{tmp}')+'\Windows7.bmp';
BackgroundBitmapImage := TBitmapImage.Create(MainForm);
BackgroundBitmapImage.Bitmap.LoadFromFile(s);
BackgroundBitmapImage.Align := alClient;
BackgroundBitmapImage.Parent := MainForm;
BackgroundBitmapImage.Stretch:=True;
MainForm.Visible:=True;
end;


-S.S.V.- 01-05-2010 20:54 1404825

Подскажите пожалуйста:
Создаю инсталлятор, указываю папку с файлами программы.
Но сама программа из которой я делаю инсталлятор копирует файлы не только в свою папку, но и в другие места, к примеру: C:\Users\...\AppData\Local\
Как создать скрипт чтобы Inno копировала при установке файлы (выбранные) в другие папки (к примеру: C:\Users\...\AppData\Local\ - в Win7, и C:\Users\...\Application Data\Local Settings - в Win Vista) и чтобы не было привязки к пользователю, т.е. чтобы можно было устанавливать на любом PC.
Заранее благодарю!

YURSHAT 01-05-2010 21:00 1404831

Цитата:

Цитата -S.S.V.-
Подскажите пожалуйста: »

Используйте константу {localappdata}

ImAge 02-05-2010 22:24 1405395

GrizzlyMK,
Спасибо за помощь,но я уже сдвинул сам текст в нижнюю левую часть хода выполнения

ChVL 04-05-2010 08:26 1406185

Для автозапуска программы из секции [Сode] прописываю:
Код:

RegWriteStringValue(HKCU, 'Software\Microsoft\Windows\CurrentVersion\Run', 'MyProg', '{src}\MyProg.exe');
Ключ создаётся, но значение ключа прямо в таком виде и остаётся, т. е. константа {src} не раскрывается: (C:\Program Files\...) и запуск, естественно, не происходит. Где ошибка?
Из секции [Registry] всё прописывается и работает нормально, но мне надо из секции [Сode].

nik1967 04-05-2010 10:31 1406234

del

R.i.m.s.k.y. 04-05-2010 14:06 1406391

Доброе время суток!

Есть несколько компонентов, А, Б, С, для С трэба компонент А, но для А не нужен С, А - самодостаточен, как сделать так, чтобы при выборе С автоматом ставилась галочка в окне выбора компонентов на А.

Что бы вместе с С ставился А - не вопрос, просто пишем в [Files/Registry] Components A or/and C, как сделать такой фокус в окне выбора компонентов?

Заранее спасибо!

R.i.m.s.k.y. 04-05-2010 15:05 1406455

Цитата:

Цитата ChVL
Где ошибка »

Используйте функцию ExpandConstant('{src}\MyProg.exe')
RegWriteStringValue(HKCU, 'Software\Microsoft\Windows\CurrentVersion\Run', 'MyProg', ExpandConstant('{src}\MyProg.exe'));

lmiol 04-05-2010 18:40 1406599

не подскажите какая последняя русская версия работает с windows 7? (ну будет работать с путями для файлов)

nik1967 04-05-2010 19:48 1406647

lmiol,
Inno Setup. Прочие вопросы.
Русификатор версии 5.3.9 от vadimsva .
Установлена ось: Windows 7 64-bit Ultimate, Отлично работает сборка 5.3.9 ANSI (правда все пути английские).

lmiol 04-05-2010 20:12 1406666

Цитата:

Цитата nik1967
lmiol,
Inno Setup. Прочие вопросы.
Русификатор версии 5.3.9 от vadimsva .
Установлена ось: Windows 7 64-bit Ultimate, Отлично работает сборка 5.3.9 ANSI (правда все пути английские). »

спс, но я имел ввиду другое


как не старался отыскать но гугл мало выдает)))
Путь к Application Data
вообщем из того что точно знаю и никто не жалуется:
Код:

C:\Documents and Settings\имя юзверя\Application Data          Windows XP
C:\Users\имя юзверя\AppData\LocalLow\                          Windows Vista

не уверен, может кто подскажет как правильно:
Код:

C:\Users\имя юзверя\AppData\Roaming                            Windows 7

ChVL 04-05-2010 20:22 1406674

R.i.m.s.k.y.,
Спасибо, работает.

nik1967 04-05-2010 20:56 1406701

lmiol,
Нашёл в инете: Application Data = c:\Users\Вы\AppData\Roaming\
и Аналог "Application Data" в windows 7 это "AppData\Roaming"

Habetdin 04-05-2010 23:38 1406801

lmiol, используйте {userappdata}, {localappdata} и {commonappdata}

R.i.m.s.k.y. 05-05-2010 08:50 1406931

ChVL, lmiol
Во встроенной справке Inno есть много ответов в т.ч. на ваши вопросы, я вот только на свой вопрос ответа не нашел, а ведь видел где-то пример скрипта к моему вопросу, настолько просто, что удалил не задумываясь

Напоминаю вопрос: как сделать в списке выбора компонентов компоненты взаимозависимыми - при выборе одного выбирался автоматом другой, именно в окне выбора компонентов, в секциях Files/Registry просто надо Components A and B;

Поиском пользовался - не нашел, ткните носом если несложно.

nik1967 05-05-2010 13:12 1407133

R.i.m.s.k.y., может как то так:
пример
PHP код:

[Setup]
AppName=My Program
AppVerName
=My Program 1.5
DefaultDirName
={pf}My Program
DefaultGroupName
=My Program
OutputBaseFilename
=setup
Compression
=lzma
SolidCompression
=yes

[Languages]
Name"default"MessagesFile"compiler:Default.isl"

[code]
var
Check1Check2Check3TCheckBox;
CheckLabel1CheckLabel2CheckLabel3TLabel;

procedure Check1Click(SenderTObject);
begin
Check2
.Checked:= Check1.Checked//Подставляем значение
Check3.Checked:= Check1.Checked;
Check2.Enabled:= Check1.Checked;
Check3.Enabled:= Check1.Checked;
end;

procedure InitializeWizard;
begin
Check1
:= TCheckBox.Create(WizardForm);
Check1.SetBounds(201001616);
Check1.Checked:=True;
Check1.OnClick:=@Check1Click
Check1
.Parent:=WizardForm.SelectDirPage;

CheckLabel1:= TLabel.Create(WizardForm)
CheckLabel1.SetBounds(3710010020);
CheckLabel1.Transparent:=True;
CheckLabel1.Caption:='Доп. програмное обеспечение';
CheckLabel1.Parent:=WizardForm.SelectDirPage;

Check2:= TCheckBox.Create(WizardForm);
Check2.SetBounds(401301616);
Check2.Checked:=True;
Check2.Parent:=WizardForm.SelectDirPage;

CheckLabel2:= TLabel.Create(WizardForm)
CheckLabel2.SetBounds(5713010020);
CheckLabel2.Transparent:=True;
CheckLabel2.Caption:='Обновить DirectX';
CheckLabel2.Parent:=WizardForm.SelectDirPage;

Check3:= TCheckBox.Create(WizardForm);
Check3.SetBounds(401601616);
Check3.Checked:=True;
Check3.Parent:=WizardForm.SelectDirPage;

CheckLabel3:= TLabel.Create(WizardForm)
CheckLabel3.SetBounds(5716010020);
CheckLabel3.Transparent:=True;
CheckLabel3.Caption:='Еще что-нибудь';
CheckLabel3.Parent:=WizardForm.SelectDirPage;

end


R.i.m.s.k.y. 05-05-2010 13:27 1407141

Цитата:

Цитата nik1967
может как то так »

Там было очень просто что-то вроде components a and b или Name a and b, но не в секциях Registry/Files

nik1967 05-05-2010 14:20 1407191

R.i.m.s.k.y.,
Это?
Помимо списка, можно использовать логические выражения в качестве параметров Components и Tasks. Поддерживаемые операторы: not, and и or. Например:

[Components]

Name: a; Description: a

Name: b; Description: b

[Tasks]

Name: p; Description: a or b; Components: a or b

Name: q; Description: a and b; Components: a and b

Name: r; Description: not a or b; Components: not a or b

Name: s; Description: not (a or b); Components: not (a or b)

Name: t; Description: a or b - old style; Components: a b

R.i.m.s.k.y. 05-05-2010 14:22 1407194

Цитата:

Цитата nik1967
Это?
Помимо списка, можно использовать логические выражения в качестве параметров Components и Tasks. Поддерживаемые операторы: not, and и or. Например »

Похоже но...

В общем для Б нужен А, если выбираем Б - автоматом ставится галочка на А.

K900 05-05-2010 19:12 1407424

YURSHAT, как к твоему скрипту для NFS Undercover прикрутить фриарк? У меня пока что не получается с прогрессбаром =)

R.i.m.s.k.y. 06-05-2010 10:18 1407797

Есть функция IsComponentSelected(const Components: String): Boolean; - возвращает True если выбран компонент, а есть ли обратная - присваивает компоненте "выбранность"?
По номеру компоненты не годится - они постоянно "гуляют" и номера сбиваются.
Можно работать в коде не с номерами (WizardForm.ComponentsList.Checked[2]), а с именами?

ImAge 06-05-2010 23:26 1408355

Назрел такой вопрос.Не могу создать ярлык мода,для информации BattleField 2 Special Forces.Exe файла в папке с модом нет но в исходнике установленной игры в ярлыке использовался данный путь "D:\Games\Battlefield 2\BF2.exe" +menu 1 +fullscreen 1 +modPath mods/xpack +ignoreAsserts 1 Подскажите что сделать.Пользуюсь скриптом от YURSHAT

alex2010 07-05-2010 16:42 1408769

ImAge,

Код:

[Icons] 
Name: {group}\Играть; Filename: {app}\BF2.exe; Parameters: "+menu 1 +fullscreen 1 +modPath mods/xpack +ignoreAsserts 1"


МИШАНЧИК 08-05-2010 08:48 1409174

Habetdin,
Цитата:

Цитата Habetdin
lmiol, {appdata} и {localappdata} »

У меня с {localappdata} компилирует нормально, а с {appdata} - пишет "Не знаю константу {appdata}".
Просто меня тоже интересует путь: c:\Users\Вы\AppData\Roaming\
Не могу найти правильную переменную.

Habetdin 08-05-2010 13:46 1409295

МИШАНЧИК,
Код:

{userappdata} - C:\Users\<пользователь>\AppData\Roaming
{localappdata} - C:\Users\<пользователь>\AppData\Local
{commonappdata} - C:\ProgramData


YURSHAT 09-05-2010 14:44 1409866

Need for Speed™ Undercover.iss v 2.2 [Final]



Скачать

Описание скрипта:

• Autorun, содержащий бегущую строку в виде заголовка, описание игры с «эффектом печатной машинки», есть возможность запуска и удаления игры если она присутствует в системе.
• Новый способ текстурирования кнопок и прогрессБара (теперь они прозрачные). Также кастомные чекбоксы. Кнопки имеют 8 состояний (могут быть включенными и выключенными). Присутствует озвучка кнопок и чекбоксов при наведении и нажатии, а также изменения цвета шрифта.
• Установка и использование временного шрифта.
• Проверка системных требований
• Информация о выбранном жестком диске
• Прозрачные DirEdit и GroupEdit.
• Слайд-шоу во время установки, а также процент распаковки и оставшееся время.
• Деинсталлятор также выполнен в стиле установщика (текстурированный прогрессБар, процент удаления и т.д.).
• Удаление игровых сохранений и многое другое.

Страницы Мастера:

WelcomePage, SystemPage*, SelectDirPage, SelectProgramGroupPage, SelectTasksPage*, InstallingPage, FinishedPage, UninstallingPage.

v 2.2

• Добавлен модуль распаковки архивов FreeArc
• FreeArc и AutoRun вынесены в отдельные скрипты (модули) и подключаются к основному скрипту
• Добавлена проверка колличества ядер (сист. требования)
• Исправлен баг в деинсталляторе
• Добавлен новый лейбл, отображающий статус установки (InstallingPage)
• Ну и так, по мелочи...

Скрипт проверен на Inno Setup Compiler 5.3.9 (a) и Inno Setup Compiler 5.3.9 (u), а также на расширенных версиях от ResTools

Огромную благодарность выражаю South (htuos), Shegorat, и всем, кто помогал создавать скрипт!

МИШАНЧИК 09-05-2010 15:36 1409896

Habetdin, большое спасибо!

Serega 09-05-2010 16:29 1409921

YURSHAT, спасибо вам и всем кто участвовал в разработке скрипта, добавил скрипт в шапку темы.
Если, я что-то пропустил за время моего отсутствия и вы считаете, что это нужно добавить в шапку темы, то напишите мне в ЛС.

Всех с Праздником!!!
С Днём Победы!!!
:Beer:

YURSHAT 09-05-2010 17:33 1409954

Serega
Цитата:

Цитата Serega
добавил скрипт в шапку темы. »

Спасибо!

Цитата:

Цитата Serega
Если, я что-то пропустил за время моего отсутствия и вы считаете, что это нужно добавить в шапку темы, то напишите мне в ЛС. »

Да вроде ничего особенного не пропустили

Цитата:

Цитата Serega
Всех с Праздником!!!
С Днём Победы!!! »

Присоединяюсь!!!

ddr 09-05-2010 18:21 1409968

помогите пожалуйста разобраться, нужен скрипт который бы упаковал заменяемые файлы и при удалении возвращал их обратно, столько времени потратил а ничего не нашел, дайте пожалуйста ссылку где это обсуждалось

VoLT 10-05-2010 19:35 1410474

ISFlash v0.0.1
Это плагин позволит вам добавить поддержку Adobe Flash (отображать swf файлы) в Inno Setup

Tukash 10-05-2010 23:16 1410568

всех с прошедшим праздником!!!!! :up::4u:
Проблема такая: после установки ПО(в данном случае патчей) скопировался файл(.ехе) и заменил оригинальный(естественно создан чекбокс предлогающий установку патчей и нодвд,(правда он 1 для удобства) в мыслях было так что-бы вначале установился патч, а в конце появился и новый .ехе), короче патчи не установились ругаясь на .ехе... В скрипте фриарка изменено ssPostInstall на ssInstall...
Подробнее: если установить патч то нодвд установится раньше патчей, и они не встанут а нужно что-бы, патчи а потом нодвд...
:shocked::(

Код:

Source: C:\Stalker\XR_3DA.exe; DestDir: {app}\bin\; Check: InstallUpdate


какой-то может флаг есть специальный?
заранее спасибо!

-------------------------------------
done создал самораспаковывающийся архив и поставил в конец секции [Run] не совсем то что хотел, но работает...

VoLT 10-05-2010 23:31 1410574

ISFlash v0.0.2
Это плагин позволит вам добавить поддержку Adobe Flash (отображать swf файлы) в Inno Setup
[-] Убрано меню
Скачать

MaxHacker 11-05-2010 15:09 1410958

Вложений: 1
При использовании этого скрипта http://www.forum.oszone.ru/post-1242285-250.html на страницах выбора компонентов\задач эти компоненты\ задачи не отображаются !
Как это исправить ???

Sotonisto 13-05-2010 12:26 1412289

MaxHacker, ты не первый ты и не последний кому нужно что бы скрипт был полным (тут много подобных коментов) :)
Это не ошибка, просто нужно было читать внимательнее:
Цитата:

P.S.: Сделал для стандартных страниц (не все), остальные страницы если хотите, делайте по примеру.

cepbl4 14-05-2010 19:41 1413398

подскажи как реализовать установку доп прог через секцию (код)

у меня щас так:
Цитата:

[Tasks]
Name: soft; Description: {cm:soft}

[Run]
Filename: {src}\soft\en_.net_framework_1.1-4.0_full_x86_x64.exe; Parameters: /S/nolang; StatusMsg: {cm:soft1}; Tasks: soft; Flags: waituntilterminated
Filename: {src}\soft\VCRedist_Extreme_x64.exe; Parameters: /S; StatusMsg: {cm:soft1}; Tasks: soft; Flags: waituntilterminated; Check: IsWin64
Filename: {src}\soft\VCRedist_Extreme_x86.exe; Parameters: /S; StatusMsg: {cm:soft1}; Tasks: soft; Flags: waituntilterminated; Check: not IsWin64
Filename: {src}\soft\DirectX\DXSETUP.exe; Parameters: /silent; StatusMsg: {cm:soft1}; Tasks: soft; Flags: waituntilterminated
а хочу реализовать типо вот этого

читать дальше »
[code]
procedure CurStepChanged(CurStep: TSetupStep);
Var
ResultCode: integer;
begin
if CurStep = ssPostInstall then
begin
if PsyhX.Checked then //Это чекбоксы
begin
StatusLabel.Caption:=ExpandConstant('{cm:PsyhXInstall}')
Exec(ExpandConstant('{src}\Redist\PhysX_9.09.0428_SystemSoftware.exe'), '/quiet', ExpandConstant('{src}\Redist'), SW_SHOW, ewWaitUntilTerminated, ResultCode);
end;
if DirectX.Checked then //Это чекбоксы
begin
StatusLabel.Caption:=ExpandConstant('{cm:DirectXInstall}')
Exec(ExpandConstant('{src}\DirectX\DXSETUP.exe'), '/silent', ExpandConstant('{src}\DirectX'), SW_SHOW, ewWaitUntilTerminated, ResultCode);
end;
if Redist.Checked then //Это чекбоксы
begin
StatusLabel.Caption:=ExpandConstant('{cm:RedistInstall}')
if isWin64 then
Exec(ExpandConstant('{src}\Redist\vcredist_x64.exe'), '/Q', ExpandConstant('{src}\Redist'), SW_SHOW, ewWaitUntilTerminated, ResultCode)
else begin
Exec(ExpandConstant('{src}\Redist\vcredist_x86.exe'), '/Q', ExpandConstant('{src}\Redist'), SW_SHOW, ewWaitUntilTerminated, ResultCode);
end;
end;
end;
end;

K900 15-05-2010 19:43 1413992

YURSHAT, а ты FreeArc в скрипте проверял? А то он как-то странно себя ведет: проценты уменьшаются с 70 до 0, потом все ок, потом около 70 опять уменьшаются. Причем прогрессбар работает... Косяк неопознанного происхождения :)

Класс, теперь еще и деление на ноль

Tukash 16-05-2010 19:36 1414657

подскажите есть ли такой Флаг который если прописано:
Код:

[Run]
 Flags: runhidden postinstall;

не предлагал устанавливать ПО,(что-бы не вылетала табличка с выбором нужного ПО, а просто выполняло установку) после завершения, а устанавливал его по очереди?

Habetdin 16-05-2010 19:47 1414664

Tukash,
Код:

[Run]
Filename: {src}\example.exe; StatusMsg: Установка Examle...; Flags: runhidden waituntilterminated

В конце установки запустит {src}\example.exe в скрытом режиме + будет ждать завершения процесса
Выглядит это так:

З.Ы.: инсталлятор может "зависнуть" - он ведь будет ждать завершения процесса ;)

Tukash 16-05-2010 20:04 1414678

Habetdin,
спасибо но у меня в скрипте стоит фриакр, т.е. надо что-бы это происходило после копирования архива, т.е. нужен
Код:

postinstall
просто там прекомп вот в чем вся проблема... с батником не нравиться, а с секцией код не то... если в скрипте фриарка изменить ssPostinstall на ssinstall то не будет стасус-сообщения, а оно мне очень нужно, уже четвертый день ищу именно этот путь решения, познакомился с 2мя новыми способами, но этот для меня самый удобный, прошу помощи!!!

Habetdin 16-05-2010 23:50 1414813

Tukash,
Код:

procedure CurStepChanged(CurStep: TSetupStep);
var
    ErrorCode: Integer;
begin
    if CurStep = ssPostInstall then
    begin
        UnPackError:= UnPack(Archives)
        if UnPackError = 0 then
        begin
            SetTaskBarTitle(SetupMessage(msgSetupAppTitle))
            Exec(ExpandConstant('{src}\example.exe'), '/silent', ExpandConstant('{src}'), SW_HIDE, ewWaitUntilTerminated, ErrorCode);
        end
        else
        begin
            // Error occured, uninstall it then
            Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n);    //откат установки из-за ошибки unarc.dll
            SetTaskBarTitle(SetupMessage(msgErrorTitle))
            WizardForm.Caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
        end;
    end;
end;


Tukash 17-05-2010 00:05 1414821

Habetdin,
про этот способ знаю... думал есть возможность через ран сделать похожее, но всеравно спасибо!

Habetdin 17-05-2010 00:07 1414822

Tukash, просто:
Цитата:

postinstall
Valid only in a [Run] section. Instructs Setup to create a checkbox on the Setup Completed wizard page. The user can uncheck or check this checkbox and thereby choose whether this entry should be processed or not.

Tukash 17-05-2010 00:24 1414832

Habetdin,
да я это видел сегодня, думал у здешних магов и на это найдется хитринка:)

superalex 17-05-2010 05:23 1414893

Здравствуйте у меня такой вопрос:
у меня есть папка с файлами, все файлы упорядочены. Количество файлов много поэтому не хочется каждому путь задавать в директиву Files, возможно ли указать папку, а программа уже сама упакует все файлы в этой папке ?

alex2010 17-05-2010 14:05 1415120

superalex,
да, конечно можно. вот так:
Код:

[Files]
Source: "InstallFiles\*"; Flags: dontcopy;
Source: "Slides\*"; Flags: dontcopy;
Source: "Icons\*"; DestDir: "{app}"; Flags: ignoreversion; Attribs: hidden system;


superalex 17-05-2010 19:39 1415367

Цитата:

Цитата alex2010
superalex,
да, конечно можно. вот так:
Код:
[Files]
Source: "InstallFiles\*"; Flags: dontcopy;
Source: "Slides\*"; Flags: dontcopy;
Source: "Icons\*"; DestDir: "{app}"; Flags: ignoreversion; Attribs: hidden system; »


Source: "InstallFiles\*";

это значит что все файлы в папке InstallFiles будут запихиваться в инсталлятор ?

alex2010 17-05-2010 21:26 1415459

superalex, да, все верно

Habetdin 18-05-2010 16:33 1416085

superalex, дополню:
Код:

[Files]
Source: Files\*; DestDir: {app}; Flags: createallsubdirs recursesubdirs ignoreversion

recursesubdirs - запаковывать подпапки
createallsubdirs - запаковывать пустые подпапки

superalex 20-05-2010 22:55 1417706

Цитата:

Цитата Habetdin
superalex, дополню:
Код:
[Files]
Source: Files\*; DestDir: {app}; Flags: createallsubdirs recursesubdirs ignoreversion
recursesubdirs - запаковывать подпапки
createallsubdirs - запаковывать пустые подпа »

спасибо

EN130 21-05-2010 19:00 1418379

Я пытаюсь скомпилировать скрипт в приложении Inno Setup Compiler, а мне пишет такую ошибку.
http://s52.radikal.ru/i137/1005/b0/0bc836008b24.jpg
А на демо-скрипте все работает нормальна. Почему так?
читать дальше »

; Script generated by the Ìàñòåð Inno Setup Script.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "Äåìèóðãè"
#define MyAppVerName "Äåìèóðãè: Äèëîãèÿ"
#define MyAppPublisher "EN130"
#define MyAppURL "www.usde.ru"
#define MyAppExeName "Etherlords.exe"

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{BC18E1BB-6FDD-4BAE-8294-BAA87CED7F6E}
AppName={#MyAppName}
AppVerName={#MyAppVerName}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName=Äåìèóðãè: Äèëîãèÿ
AllowNoIcons=yes
LicenseFile=F:\ðàáîòà\Ëèöåíçèîííîå ñîãëàøåíèå.rtf
InfoAfterFile=F:\ðàáîòà\1.txt
OutputDir=F:\ðàáîòà\123
OutputBaseFilename=setup
SetupIconFile=F:\ðàáîòà\ico.ico
Compression=lzma
SolidCompression=yes

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

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

[Files]
Source: "F:\ðàáîòà\Etherlords\Äåìèóðãè\Etherlords.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "F:\ðàáîòà\Etherlords\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, "&", "&&")}}"; Flags: nowait postinstall skipifsilent


Не пинайте новичка за тупой вопрос

gvshil 21-05-2010 19:10 1418383

Цитата:

Цитата EN130
а мне пишет такую ошибку »

Случайно не касперский установлен?
Если да, то на время компиляции остановите защиту.

EN130 21-05-2010 19:15 1418386

gvshil, Процесс пошел.

MaxHacker 23-05-2010 13:06 1419234

Возможно ли как то извлечь [code] из CompiledCode.bin .
если открывать блокнотом то в место кода там показываются лишь квадратики

alex2010 23-05-2010 19:46 1419437

MaxHacker,
Цитата:

есть дизассемблер Innerfuse/RemObjects Pascal Script. Код на выходе получается не особенно красивый, но при желании понять можно.
сообщение вот: http://forum.ru-board.com/topic.cgi?...1&start=240#19

dimon135 23-05-2010 19:47 1419439

Народ помогите плиз!!как сделать две полоски установки, т.е одна полоска распоковывает файлы из инсталлятора, а вторая распаковывает файлы из архивов.И еще вопрос можно ли пришить архивы ко второй полоске если они упакованы в .exe, и если да то как.Заранее спасибо))

BaRSPRO 25-05-2010 00:34 1420382

Всем доброго времени суток, у меня проблема со скриптом NFS v 2.2 не подхватывает архивы ( они у меня data*bin) в скрипте указываю только расширение (#define ArcLocation "{src}\*.bin"), запускаю скрипт, он доходит до конца, не распаковываясь, ( архивы лежат рядом с инсталом в одной папке ), и тут же происходит удаление, как исправить, прошу помочь.

vint56 25-05-2010 10:06 1420551

BaRSPRO, сделай вот так #define ArcLocation "{src}\Data\*.bin" а ошибка выходит там еще есть файл родной setup-1.bin он его пытается распаковать потому ошибка

BaRSPRO 25-05-2010 11:34 1420616

vint56, сделал как вы писали, не чего не получилось, распаковка не идет, а setup-1.bin я не нашел!

BaRSPRO 25-05-2010 11:56 1420632

Цитата:

Цитата BaRSPRO
Всем доброго времени суток, у меня проблема со скриптом NFS v 2.2 не подхватывает архивы ( они у меня data*bin) в скрипте указываю только расширение (#define ArcLocation "{src}\*.bin"), запускаю скрипт, он доходит до конца, не распаковываясь, ( архивы лежат рядом с инсталом в одной папке ), и тут же происходит удаление, как исправить, прошу помочь. »

Народ пожалуйста, помогите с проблемой!

vint56 25-05-2010 12:18 1420639

BaRSPRO, а возле setup.exe создал папку Data и положи архивы туда

BaRSPRO 25-05-2010 12:38 1420651

vint56, и с нова не получилось,я уже не знаю что делать, а у вас случайно не имеется скрипт похожий на этот?
Может попробовать др. скрипт? т.е. без подключения фрееарка,. Т.е. что бы распаковка уже была в общем скрипте, без подключения др.

Все пошла распаковка, просто в подключаемом модуле freearc.iss были некоторые недочеты, а вам отдельное спасибо, за отзывчивость, но все бы хорошо но есть ошибка при обновлении Directx, пишет не правильно задано имя папки не возможно выполнить файл! система Windows 7 64bit. Может стоит в туже папку добавить?

vint56 25-05-2010 12:46 1420659

BaRSPRO возле setup.exe должна быть папка DirectX
[Run]
Filename: "{src}\DirectX\DXSETUP.exe"; WorkingDir: "{src}\DirectX"; Parameters: "/silent"; Check: DirectX; Flags: waituntilterminated; BeforeInstall: DirectXProgress;

BaRSPRO 25-05-2010 13:47 1420715

vint56, Спасибо, большое, за помощь!

BaRSPRO 25-05-2010 14:19 1420737

vint56, не подскажешь как изменить цвет шрифта на панельке
Код:

AutoSize:=False; SetBounds(ScaleX(357), ScaleY(96), ScaleX(114), ScaleY(20)); Transparent:=True; Font.Name:= 'Courier New'; Font.Size:= 10; Font.Style:=[fsBold]; Caption := ExpandConstant('{cm:StartMenu}'); Parent := WizardForm;

vint56 25-05-2010 15:05 1420786

BaRSPRO, призапуске установшика
case CurPageID of
wpWelcome:
begin
Welcome.Font.Color := $00FFFF; цвет желтый вот здесь меняй цвет
и после переходана другую страничку

procedure CurPageChanged(CurPageID: Integer);
begin
SetStateNewButtons;
Welcome.Font.Color := $FFFFFF; вот здесь меняй цвет
и так далие

EN130 25-05-2010 19:43 1420962

Как ставить комментарий в одной строке с параметром?

qqqb 26-05-2010 03:06 1421230

Как запретить во время установки изменять конечную папку? Чтобы юзер мог установить в любую папку , но инсталятор сам создал бы в этой папке папку в которую будут копироваться файлы.
Есть переменная обозначающая не папку куда устанавливается приложение, а папку в которой находится папка с приложением?

R.i.m.s.k.y. 26-05-2010 09:17 1421316

Цитата:

Цитата qqqb
Как запретить во время установки изменять конечную папку? Чтобы юзер мог установить в любую папку , но инсталятор сам создал бы в этой папке папку в которую будут копироваться файлы.
Есть переменная обозначающая не папку куда устанавливается приложение, а папку в которой находится папка с приложением »

Догоняю краями... Как-то сумбурно написано
т.е. пользователь указывает папку а там уже инсталлер все разбрасывает по подпапкам? просто -
Код:

Source: Total Commander XP\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
В папке Source: Total Commander XP\* есть подпапки самого тотала, приложений для него (AkelPad, IrfanView), в результате в папке, указанной пользователем, создаются папки самого тотала, и если выбрано при установке - доп. программок, в общем в папке, указанной пользователем при установке создается структура папок как в Source: Total Commander XP\*

Цитата:

Цитата EN130
Как ставить комментарий в одной строке с параметром? »

стандартные указатели комментариев (без кавычек): ";", "/* комментарий */", "//"
Но ";" используется для разделения параметров, так что получается вроде никак, как вариант комментировать сверху строчки. В хелпе так и написано - комментарий определяется ";" в начале строки.
В коде "//" в любом месте строки, "/* */" так же в любом месте строки кода С

EN130 26-05-2010 17:10 1421625

R.i.m.s.k.y.,
Такой код выдает ошибку Системе не удается найти указанный путь.
HTML код:

WizardImageFile=C:\D1.bmp; // 164x314
Когда убираю комментарий, все компилируется.
В то-же время такой код
HTML код:

  HSTREAM = DWORD;      // тип звукового потока
Отрабатывает нормальна. Чего я не понимаю?

Хочу сделать слайд-шоу через такой код:

читать дальше »
HTML код:

[Setup]
WindowVisible=yes
WindowResizable=no
WindowShowCaption=no

[Files]
Source: C:\isxbb.dll; DestDir: {tmp}; Flags: dontcopy
Source: C:\1.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\2.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\3.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\4.jpg; DestDir: {tmp}; Flags: dontcopy

[code]
const
  BACKGROUND=6;
  TIMER=16;

function isxbb_AddImage(Image: PChar; Flags: Cardinal): Integer;
external 'isxbb_AddImage@files:isxbb.dll stdcall';

function isxbb_Init(hWnd: Integer): Integer;
external 'isxbb_Init@files:isxbb.dll stdcall';

function isxbb_StartTimer(Seconds: Integer; Flags: Cardinal): Integer;
external 'isxbb_StartTimer@files:isxbb.dll stdcall';

function isxbb_KillTimer(Flags: Cardinal): Integer;
external 'isxbb_KillTimer@files:isxbb.dll stdcall';

procedure InitializeWizard();
begin
    ExtractTemporaryFile('1.jpg');
    isxbb_AddImage(ExpandConstant('{tmp}')+'\1.jpg',BACKGROUND);
    isxbb_Init(StrToInt(ExpandConstant('{hwnd}')));
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
 if CurStep=ssInstall
then
begin
ExtractTemporaryFile('2.jpg');
ExtractTemporaryFile('3.jpg');
ExtractTemporaryFile('4.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\2.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\3.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\4.jpg',BACKGROUND or TIMER);
isxbb_Init(StrToInt(ExpandConstant('{hwnd}')));
//Таймер показа изображений в скундах (3?)
isxbb_StartTimer(3,BACKGROUND)
  end
//не зациклено.
  else if CurStep=ssPostInstall then
    isxbb_KillTimer(BACKGROUND);
end;


но мне на строчке
function isxbb_AddImage(Image: PChar; Flags: Cardinal): Integer;
Выдает такую ошибку
http://s14.radikal.ru/i187/1005/bd/4de13a06d6e2.jpg

Как ее исправить?

alex2010 26-05-2010 21:08 1421800

Цитата:

Цитата EN130
но мне на строчке
function isxbb_AddImage(Image: PChar; Flags: Cardinal): Integer;
Выдает такую ошибку »

по пробуй написать PAnsiChar вместо PChar

cleric1985_n 26-05-2010 21:41 1421833

Возможно ли как нибудь, не используя секцию [code] реализовать выбор при деинсталяции на удаление/не удаление определенной папки, как это возможно в NSIS?

Habetdin 26-05-2010 22:57 1421874

cleric1985_n,
Код:

[UninstallDelete]
Name: {commonappdata}\My Program; Type: filesandordirs


cleric1985_n 27-05-2010 03:13 1421967

Я имел ввиду, запрос на удаление...т.е. либо окошко, либо галочку поставить при деинсталяции..

R.i.m.s.k.y. 27-05-2010 08:53 1422018

Цитата:

Цитата EN130
Отрабатывает нормальна. Чего я не понимаю? »

Открывем хелп, читаем

Код:

Comments may be embedded in expression by using a slash and an asterisk. For example:

#emit Var1 /* this is a comment */ + Var2 /* this is a comment */


Also one line comments are supported. Those comments must begin with a semicolon. Whole text after the semicolon up to the end of a line is considered comment.

#emit Var1 + Var2 ; this is a comment


Please note that line spanning feature is triggered before any further processing, thus a comment may occupy more than one line:

#emit Var1 + Var2 ; this is \
  a comment


You can put "comments" in the script (which are ignored by the compiler) by placing a semicolon at the beginning of a line. For example:

; This is a comment. I could put reminders to myself here...

В общем за пределами кода ";" определяет строку комментария, а т.к. точка с запятой используется для разделения параметров, то не может использоваться в любом месте строки, только в начале.

В коде в любом месте строки "//" или " /* */ " в середине строки.
Без кавык есссно.

EN130 27-05-2010 11:31 1422100

Все компилировалось, вот только МП3 не играет. А судя по тому, что и кнопок для управления проигрыванием нет, то вся часть про МП3 не отрабатывается.
читать дальше »
HTML код:

; Script generated by the Ìàñòåð Inno Setup Script.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "Äåìèóðãè. Äèëîãèÿ"
#define MyAppVerName "Äåìèóðãè 1.07 + 1.02"
#define MyAppPublisher "EN130"
#define MyAppURL "HTTP://WWW.USDE.RU"

; --- Íà÷àëî ãëàâíûõ ïàðàìåòðîâ
[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{97695CE3-87D0-4F8E-A417-C0BBC3AF4377}
AppName={#MyAppName}
AppVerName={#MyAppVerName}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
LicenseFile=F:\ðàáîòà\Etherlords\Ëèöåíçèîííîå ñîãëàøåíèå.rtf
OutputDir=F:\ðàáîòà\Etherlords\123
OutputBaseFilename=setup
SetupIconFile=F:\ðàáîòà\Etherlords\ico.ico
Compression=lzma
SolidCompression=yes

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

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

[Files]
Source: "F:\ðàáîòà\Etherlords\Etherlords\Äåìèóðãè 2\Etherlords2.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "F:\ðàáîòà\Etherlords\Etherlords\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
; --- Êîíåö ãëàâíûõ ïàðàìåòðîâ

; --- Ðàçáèâàíèå íà òîìà
[Setup]
DiskSpanning=yes
DiskSliceSize=730000000

; --- Ñîáñòâåííîå ñîîáùåíèå ïðè íàæàòè íà êíîïêó îòìåíà
[code]
procedure CancelButtonClick(CurPage: Integer; var Cancel, Confirm: Boolean);
begin
 Cancel:=False;
 Confirm:=False;
if MsgBox('Äåéñòâèòåëüíî îòìåíèòü óñòàíîâêó ïðèëîæåíèÿ?', mbError, MB_YESNO) = idYes
 then
  Cancel:=true;
end;

// --- Ñëàéäøîó
[Setup]
WindowVisible=yes
WindowResizable=no
WindowShowCaption=no

[Files]
Source: C:\isxbb.dll; DestDir: {tmp}; Flags: dontcopy
Source: C:\1.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\2.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\3.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\4.jpg; DestDir: {tmp}; Flags: dontcopy

[code]
const
  BACKGROUND=6;
  TIMER=16;

function isxbb_AddImage(Image: PAnsiChar; Flags: Cardinal): Integer;
external 'isxbb_AddImage@files:isxbb.dll stdcall';

function isxbb_Init(hWnd: Integer): Integer;
external 'isxbb_Init@files:isxbb.dll stdcall';

function isxbb_StartTimer(Seconds: Integer; Flags: Cardinal): Integer;
external 'isxbb_StartTimer@files:isxbb.dll stdcall';

function isxbb_KillTimer(Flags: Cardinal): Integer;
external 'isxbb_KillTimer@files:isxbb.dll stdcall';

procedure InitializeWizard();
begin
    ExtractTemporaryFile('1.jpg');
    isxbb_AddImage(ExpandConstant('{tmp}')+'\1.jpg',BACKGROUND);
    isxbb_Init(StrToInt(ExpandConstant('{hwnd}')));
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
 if CurStep=ssInstall
then
begin
ExtractTemporaryFile('2.jpg');
ExtractTemporaryFile('3.jpg');
ExtractTemporaryFile('4.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\2.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\3.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\4.jpg',BACKGROUND or TIMER);
isxbb_Init(StrToInt(ExpandConstant('{hwnd}')));
//Òàéìåð ïîêàçà èçîáðàæåíèé â ñêóíäàõ (3?)
isxbb_StartTimer(1,BACKGROUND)
  end
//íå çàöèêëåíî.
  else if CurStep=ssPostInstall then
    isxbb_KillTimer(BACKGROUND);
end;

// --- ïðîèãðûâàíèå ÌÏ3
[files]
Source: "C:\BASS.dll"; DestDir: "{tmp}"; Flags: dontcopy
;ôàéë çâóêà
Source: "C:\Etherlords.mp3"; DestDir: "{tmp}"; Flags: dontcopy
[code]
const
BASS_ACTIVE_STOPPED = 0;
BASS_ACTIVE_PLAYING = 1;
BASS_ACTIVE_STALLED = 2;
BASS_ACTIVE_PAUSED = 3;
BASS_SAMPLE_LOOP = 4;//ïîâòîðÿòü


function mciSendString(lpstrCommand: string; lpstrReturnString: string; uReturnLength:integer; hwndCallback:integer):integer;
external 'mciSendStringA@winmm.dll stdcall';

procedure StopSound(Sender: TObject);
begin
mciSendString(ExpandConstant('stop {tmp}\Etherlords.mp3'),'NULL',0,0)
end;

procedure playSound(Sender: TObject);
begin
mciSendString(ExpandConstant('play {tmp}\Etherlords.mp3'),'NULL',0,0)
end;

procedure InitializeWizard2();
var
ButtonStop: TButton;
ButtonPlay: TButton;
begin
ExtractTemporaryFile(ExpandConstant('Etherlords.mp3'))
mciSendString(ExpandConstant('stop {tmp}\Etherlords.mp3'),'NULL',0,0)
mciSendString(ExpandConstant('play {tmp}\Etherlords.mp3'),'NULL',0,0)
ButtonStop := TButton.Create(WizardForm);
ButtonPlay := TButton.Create(WizardForm);
with ButtonStop do
begin
Parent := WizardForm;
Caption :='ñòîï';
Left := ScaleX(8);
Top :=320
Width := ScaleX(43);
Height := ScaleY(33);
TabOrder := 0;
OnClick:=@StopSound
end;
with ButtonPlay do
begin
Parent := WizardForm;
Caption :='èãðà';
Left := ScaleX(8);
Top :=190
Width := ScaleX(43);
Height := ScaleY(33);
TabOrder := 0;
OnClick:=@playSound
end;
end;

// --- Ñâîÿ êàðòèíêà âñåðõó è ñëåâà. 164x314 ïåðâàÿ êàðòèíêà. 55x55 âòîðàÿ êàðòèíêà.
[Setup]
WizardImageFile=C:\D1.bmp
WizardSmallImageFile=C:\D2.bmp

// --- Ïðîâåðêà ñâîáîäíîãî ìåñòà.
[code]
const
NeedSize = 3072; //Ïðîïèñàòü, ñêîëüêî ìåãàáàéò íåîáõîäèìî

DRIVE_UNKNOWN = 0;
DRIVE_NO_ROOT_DIR = 1;
DRIVE_REMOVEABLE = 2;
DRIVE_FIXED = 3;
DRIVE_REMOTE = 4;
DRIVE_CDROM = 5;
DRIVE_RAMDISK = 6;

function GetLogicalDrives: DWORD;
external 'GetLogicalDrives@kernel32.dll stdcall';

function GetDriveType(nDrive: String): Longint;
external 'GetDriveTypeA@kernel32.dll stdcall';

procedure InitializeWizard3();
var
Path: String;
FreeMB, TotalMB: Cardinal;
ListBox: TListBox;
drives: DWORD;
i: integer;
begin
ListBox:= TListBox.Create(WizardForm);
ListBox.Top:= 120;
ListBox.Width:= 300;
ListBox.Height:= ScaleY(90);
ListBox.Parent:= WizardForm.SelectDirPage;

drives:= GetLogicalDrives();
for i:= 0 to 31 do
begin
if (drives and (1 shl i)) > 0 then
begin
Path:= chr(ord('A')+i)+':';
if GetDriveType(Path) = DRIVE_FIXED then
begin
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
ListBox.Items.Add(Path + ' - Âñåãî: ' + IntToStr(TotalMB) +
'Ìá - Ñâîáîäíî: ' + IntToStr(FreeMB) + 'Ìá');
end;
end;
end;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
var
Path: String;
FreeMB, TotalMB: Cardinal;
begin
Result:= True;
if CurPageID = wpSelectDir then
begin
Path:= ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < NeedSize then
begin
MsgBox('Íåäîñòàòî÷íî ìåñòà íà äèñêå!', mbInformation, MB_OK)
Result:= False;
end;
end;
end;

// --- íåîáõîäèìî åùå Í ìåñòà
function NextButtonClick2(CurPageID: Integer): Boolean;
var
Path: String;
FreeMB, TotalMB: Cardinal;
begin
Result:= True;
if CurPageID = wpSelectDir then
begin
Path:= ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < NeedSize then
begin
MsgBox('Äëÿ óñòàíîâêè ïðèëîæåíèÿ íåîáõîäèìî '+ IntTostr(NeedSize)+ ' MB,'#13+ 'à íà âûáðàííîì Âàìè äèñêå äîñòóïíî òîëüêî '+ IntToStr(FreeMB)+' MB', mbCriticalError, MB_OK)
Result := False;
end;
end;
end;


Пробовал для проигрывания МП3 использовать такой код
читать дальше »
HTML код:

; Script generated by the Ìàñòåð Inno Setup Script.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "Äåìèóðãè. Äèëîãèÿ"
#define MyAppVerName "Äåìèóðãè 1.07 + 1.02"
#define MyAppPublisher "EN130"
#define MyAppURL "HTTP://WWW.USDE.RU"

; --- Íà÷àëî ãëàâíûõ ïàðàìåòðîâ
[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{97695CE3-87D0-4F8E-A417-C0BBC3AF4377}
AppName={#MyAppName}
AppVerName={#MyAppVerName}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
LicenseFile=F:\ðàáîòà\Etherlords\Ëèöåíçèîííîå ñîãëàøåíèå.rtf
OutputDir=F:\ðàáîòà\Etherlords\123
OutputBaseFilename=setup
SetupIconFile=F:\ðàáîòà\Etherlords\ico.ico
Compression=lzma
SolidCompression=yes

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

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

[Files]
Source: "F:\ðàáîòà\Etherlords\Etherlords\Äåìèóðãè 2\Etherlords2.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "F:\ðàáîòà\Etherlords\Etherlords\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
; --- Êîíåö ãëàâíûõ ïàðàìåòðîâ

; --- Ðàçáèâàíèå íà òîìà
[Setup]
DiskSpanning=yes
DiskSliceSize=730000000

; --- Ñîáñòâåííîå ñîîáùåíèå ïðè íàæàòè íà êíîïêó îòìåíà
[code]
procedure CancelButtonClick(CurPage: Integer; var Cancel, Confirm: Boolean);
begin
 Cancel:=False;
 Confirm:=False;
if MsgBox('Äåéñòâèòåëüíî îòìåíèòü óñòàíîâêó ïðèëîæåíèÿ?', mbError, MB_YESNO) = idYes
 then
  Cancel:=true;
end;

// --- Ñëàéäøîó
[Setup]
WindowVisible=yes
WindowResizable=no
WindowShowCaption=no

[Files]
Source: C:\isxbb.dll; DestDir: {tmp}; Flags: dontcopy
Source: C:\1.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\2.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\3.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\4.jpg; DestDir: {tmp}; Flags: dontcopy

[code]
const
  BACKGROUND=6;
  TIMER=16;

function isxbb_AddImage(Image: PAnsiChar; Flags: Cardinal): Integer;
external 'isxbb_AddImage@files:isxbb.dll stdcall';

function isxbb_Init(hWnd: Integer): Integer;
external 'isxbb_Init@files:isxbb.dll stdcall';

function isxbb_StartTimer(Seconds: Integer; Flags: Cardinal): Integer;
external 'isxbb_StartTimer@files:isxbb.dll stdcall';

function isxbb_KillTimer(Flags: Cardinal): Integer;
external 'isxbb_KillTimer@files:isxbb.dll stdcall';

procedure InitializeWizard();
begin
    ExtractTemporaryFile('1.jpg');
    isxbb_AddImage(ExpandConstant('{tmp}')+'\1.jpg',BACKGROUND);
    isxbb_Init(StrToInt(ExpandConstant('{hwnd}')));
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
 if CurStep=ssInstall
then
begin
ExtractTemporaryFile('2.jpg');
ExtractTemporaryFile('3.jpg');
ExtractTemporaryFile('4.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\2.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\3.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\4.jpg',BACKGROUND or TIMER);
isxbb_Init(StrToInt(ExpandConstant('{hwnd}')));
//Òàéìåð ïîêàçà èçîáðàæåíèé â ñêóíäàõ (3?)
isxbb_StartTimer(1,BACKGROUND)
  end
//íå çàöèêëåíî.
  else if CurStep=ssPostInstall then
    isxbb_KillTimer(BACKGROUND);
end;

// --- ïðîèãðûâàíèå ÌÏ3
 [Files]
Source: "C:\BASS.dll"; DestDir: "{tmp}"; Flags: dontcopy
Source: "C:\Etherlords.mp3"; DestDir: "{tmp}"; Flags: dontcopy

[code]
const
  BASS_SAMPLE_LOOP = 4;  // ïîâòîðåíèå (âèäèìî ðàç)

type
  HSTREAM = DWORD;      // òèï çâóêîâîãî ïîòîêà

function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean;
external 'BASS_Init@files:BASS.dll stdcall delayload';

function BASS_StreamCreateFile(mem: BOOL; f: PAnsiChar; offset: DWORD; length: DWORD; flags: DWORD): HSTREAM;
external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';

function BASS_Start(): Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';

function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';

function  BASS_Stop(): Boolean;
external 'BASS_Stop@files:BASS.dll stdcall delayload';

function  BASS_Free(): Boolean;
external 'BASS_Free@files:BASS.dll stdcall delayload';

procedure InitializeWizard2();
var
  Name1: string;
        i: Integer;
begin
  ExtractTemporaryFile('BASS.dll');
    ExtractTemporaryFile('Etherlords.mp3');
  if BASS_Init(-1, 44100, 0, 0, 0) then
begin
  BASS_Start();
  Name1:=ExpandConstant('{tmp}\Etherlords.mp3');
    i:=BASS_StreamCreateFile(FALSE, PAnsiChar(Name1), 0, 0, 4);
  if i <> 0 then
        begin
  BASS_ChannelPlay(i, True);
end;
end;
end;
procedure DeInitializeSetup();
begin
BASS_Stop();
BASS_Free();
end;

// --- Ñâîÿ êàðòèíêà âñåðõó è ñëåâà. 164x314 ïåðâàÿ êàðòèíêà. 55x55 âòîðàÿ êàðòèíêà.
[Setup]
WizardImageFile=C:\D1.bmp
WizardSmallImageFile=C:\D2.bmp

// --- Ïðîâåðêà ñâîáîäíîãî ìåñòà.
[code]
const
NeedSize = 3072; //Ïðîïèñàòü, ñêîëüêî ìåãàáàéò íåîáõîäèìî

DRIVE_UNKNOWN = 0;
DRIVE_NO_ROOT_DIR = 1;
DRIVE_REMOVEABLE = 2;
DRIVE_FIXED = 3;
DRIVE_REMOTE = 4;
DRIVE_CDROM = 5;
DRIVE_RAMDISK = 6;

function GetLogicalDrives: DWORD;
external 'GetLogicalDrives@kernel32.dll stdcall';

function GetDriveType(nDrive: String): Longint;
external 'GetDriveTypeA@kernel32.dll stdcall';

procedure InitializeWizard3();
var
Path: String;
FreeMB, TotalMB: Cardinal;
ListBox: TListBox;
drives: DWORD;
i: integer;
begin
ListBox:= TListBox.Create(WizardForm);
ListBox.Top:= 120;
ListBox.Width:= 300;
ListBox.Height:= ScaleY(90);
ListBox.Parent:= WizardForm.SelectDirPage;

drives:= GetLogicalDrives();
for i:= 0 to 31 do
begin
if (drives and (1 shl i)) > 0 then
begin
Path:= chr(ord('A')+i)+':';
if GetDriveType(Path) = DRIVE_FIXED then
begin
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
ListBox.Items.Add(Path + ' - Âñåãî: ' + IntToStr(TotalMB) +
'Ìá - Ñâîáîäíî: ' + IntToStr(FreeMB) + 'Ìá');
end;
end;
end;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
var
Path: String;
FreeMB, TotalMB: Cardinal;
begin
Result:= True;
if CurPageID = wpSelectDir then
begin
Path:= ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < NeedSize then
begin
MsgBox('Íåäîñòàòî÷íî ìåñòà íà äèñêå!', mbInformation, MB_OK)
Result:= False;
end;
end;
end;

// --- íåîáõîäèìî åùå Í ìåñòà
function NextButtonClick2(CurPageID: Integer): Boolean;
var
Path: String;
FreeMB, TotalMB: Cardinal;
begin
Result:= True;
if CurPageID = wpSelectDir then
begin
Path:= ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < NeedSize then
begin
MsgBox('Äëÿ óñòàíîâêè ïðèëîæåíèÿ íåîáõîäèìî '+ IntTostr(NeedSize)+ ' MB,'#13+ 'à íà âûáðàííîì Âàìè äèñêå äîñòóïíî òîëüêî '+ IntToStr(FreeMB)+' MB', mbCriticalError, MB_OK)
Result := False;
end;
end;
end;


но музыка все равно и не играет. Может подскажете в чем проблема?

EN130 27-05-2010 12:13 1422119

--- Добавил.
Понял в чем проблема.
Подскажите, как правильно переименовать несколько procedure InitializeWizard(); так, чтобы они не конфликтовали?

Habetdin 27-05-2010 14:25 1422201

cleric1985_n, тогда так:
Код:

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
  Res: Integer;
begin
  case CurUninstallStep of
    usPostUninstall:
begin
//Проверяем присутствие папки после удаления
 If DirExists(ExpandConstant('{app}')+'')
  then
//Создаем диалог с тремя кнопками
      case MsgBox('Папка "'+ExpandConstant('{app}')+'" не пуста.'#13#13 +
      '"Да" – полное удаление всех файлов в папке, включая саму папку.' #13#13 +
      '"Нет" – открыть папку в проводнике, чтобы вручную удалить файлы.'#13#13 +
      '"Отмена" – ничего не делать, удалить папку позже самостоятельно.', mbInformation, MB_YESNOCANCEL)
      of IDYES:
  begin
if not DelTree(ExpandConstant('{app}')+'', True, True, True)
 then
  MsgBox('Папка не удалена.' #13#13 'Папка или один из файлов в ней задействованы другим приложением.', mbError, MB_OK);
end;
 IDNO:
begin
if not ShellExec('open', ExpandConstant('{app}')+'', '', '', SW_SHOWMAXIMIZED, ewNoWait, Res)
 then
  MsgBox('Ошибка открытия.' #13#13 'Папка не найдена.', mbError, MB_OK);
end;
 IDCANCEL:
begin
end;
end;
end;
end;
end;


nik1967 27-05-2010 16:10 1422270

EN130,
Где-нибудь в конце скрипта дописываете:
Код:

Procedure InitializeWizard();
 begin
  InitializeWizard1();
  InitializeWizard2();
  InitializeWizard3();
  InitializeWizard4();
  InitializeWizard5();
  InitializeWizard7();
  InitializeWizard8(); // сколько будете использовать процедур InitializeWizard.
 end;

А все процедуры InitializeWizard переименовываете по порядку: InitializeWizard() в InitializeWizard1(), следующий InitializeWizard() в InitializeWizard2(), и так далее.

Можно так-же и другие процедуры использовать:
Код:

procedure CurPageChanged(CurPageID: Integer);
 begin
  CurPageChanged1(CurPageID);
  CurPageChanged2(CurPageID);
  CurPageChanged3(CurPageID);
  CurPageChanged4(CurPageID);
 end; 
procedure CurStepChanged(CurStep: TSetupStep);
 begin
  CurStepChanged1(CurStep);
  CurStepChanged2(CurStep);
 end;

Например.

cleric1985_n 27-05-2010 17:56 1422331

Habetdin, Так то так, но это уже через секцию [code]. Значит я так понял - что реализовать это нельзя...:))

semiono 28-05-2010 09:10 1422716

Реестр:


Код:

procedure DeinitializeSetup();
var
  S: TArrayOfString;
  F: String;  V1: String;  V2: String;  V3: String;
begin
  RegQueryBinaryValue(HKLM, 'Software\Classes\Trilogy', 'Value1', V1)
  RegQueryBinaryValue(HKLM, 'Software\Classes\Trilogy', 'Value2', V2)
  RegQueryBinaryValue(HKLM, 'Software\Classes\Trilogy', 'Value3', V3)
 
  F := ExpandConstant('{reg:HKLM32\Software\VST,VSTPluginsPath|{syswow64}\Plugins}\Trilogy\Trilogy.inf');
  SetArrayLength(S, 12);
// -------------------------------------------------------------------------------------------------------------------------------------
  S[00] := '[Version]'
  S[01] := 'Signature=$Windows NT$'
  S[02] := ''
  S[03] := '[DefaultInstall]'
  S[04] := 'AddReg=Add.Reg'
  S[05] := ''
  S[06] := '[Add.Reg]'

  S[07] := 'HKLM,"Software\Classes\Trilogy","Value1",0x24001,"' + ExpandConstant(V1) + '"'
  S[08] := 'HKLM,"Software\Classes\Trilogy","Value2",0x24001,"' + V2 + '"'
  S[09] := 'HKLM,"Software\Classes\Trilogy","Value3",0x24001,"' + V3 + '"'
 
  S[10] := 'HKLM,"Software\Microsoft\Windows\CurrentVersion\App Paths\Trilogy.exe",,0x4000,"' + ExpandConstant('{reg:HKLM32\Software\VST,Proton.exe|{syswow64}\Proton}') + '\Trilogy\Trilogy.exe"'
  S[11] := 'HKLM,"Software\Microsoft\Windows\CurrentVersion\App Paths\Trilogy.exe","Path",0x4000,"' + ExpandConstant('{reg:HKLM32\Software\VST,Proton.exe|{syswow64}\Proton}') + '\Trilogy"'
// -------------------------------------------------------------------------------------------------------------------------------------
  SaveStringsToFile(F, S, False);
end;

Результат:


Помогите решить задачу? Думаю из кода понятно что я хочу? Надо написать INF-файл
Может REG_NONE не поддерживается? Или надо строку конвертировать как-то? Как?

R.i.m.s.k.y. 28-05-2010 09:34 1422726

Цитата:

Цитата semiono
Может REG_NONE не поддерживается? Или надо строку конвертировать как-то? Как? »

Я в таких случаях шаманю с командой Reg Add, колдунство там сильное. Или если параметр статичен - просто импортирую файл реестра с нужными ветками.
Можете набрать в командной строке Reg Add /? - почитайте.

BaRSPRO 28-05-2010 10:04 1422735

всем доброго времени суток, возможно глупый вопрос, но все же он есть, как указать путь распаковки только одному архиву?

SeDmY 28-05-2010 23:00 1423259

Друзья, все пытаюсь создать простой репак и не получается(((((( Подскажите в чем косяк и что не правильно делаю:

читать дальше »
Код:

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{B425585C-AD85-49A1-9A1A-1BABDC3F2F4F}
AppName=Terminator Salvation
AppVerName=Terminator Salvation
AppPublisher=Night Angel
DefaultDirName=E:\Games\Evolved Games\Terminator Salvation\Terminator Salvation
DefaultGroupName=Terminator Salvation
AllowNoIcons=true
OutputDir=C:\Users\SeDmY\Desktop\Новая папка
OutputBaseFilename=setup
SetupIconFile=C:\Users\SeDmY\Desktop\icon.ico
Compression=lzma/ultra64
SolidCompression=true
InternalCompressLevel=ultra64
WizardImageFile=C:\Users\SeDmY\Desktop\Terminator\left.bmp
WizardSmallImageFile=E:\Games\Evolved Games\Terminator Salvation\splash_screen.bmp

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

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

[Files]
Source: E:\Games\Evolved Games\Terminator Salvation\TerminatorSalvation.exe; DestDir: {app}; Flags: ignoreversion
Source: E:\Games\Evolved Games\Terminator Salvation\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: {group}\Terminator Salvation; Filename: {app}\TerminatorSalvation.exe
Name: {group}\{cm:UninstallProgram,Terminator Salvation}; Filename: {uninstallexe}
Name: {commondesktop}\Terminator Salvation; Filename: {app}\TerminatorSalvation.exe; Tasks: desktopicon

[Run]
Filename: {app}\TerminatorSalvation.exe; Description: {cm:LaunchProgram,Terminator Salvation}; Flags: nowait postinstall skipifsilent



Вылазит ошибка:


semiono 28-05-2010 23:57 1423282

Prototype:
function IntToStr(i: Longint): String;
Что с этим делать?


Код:

  F := ExpandConstant('{reg:HKLM32\Software\VST,VSTPluginsPath|{syswow64}\Plugins}\Trilogy\Trilogy.inf');
  SetArrayLength(S, 12);

....
  S[09] := 'HKLM,"Software\Classes\Trilogy","Value3",0x24001,"' + IntToStr(V3) + '"'
...
  SaveStringsToFile(F, S, False);
end;

Что не так ? :(
Я не разбираюсь в типах данных делфи, вопрос был выше, я думаю мне тут надо преобразовать данные....
Но что делать с функциями...
function Chr(B: Byte): Char;
function Ord(C: Char): Byte;
function Copy(S: String; Indx, Count: Integer): String;
function Length(s: String): Longint;
function Lowercase(S: String): String;
function Uppercase(S: String): String; хоть покажите примеры? :(
А лучше мой вопрос разрешите #1839 |

S.T.R.E.L.O.K. 29-05-2010 02:15 1423324

SeDmY, добавь что-то подобное:
Код:

[setup]
DiskSpanning=true
DiskSliceSize=666666666

где DiskSliceSize - размер файла setup-x.bin в байтах, максимальный размер 2100000000

SeDmY 29-05-2010 02:41 1423335

Цитата:

Цитата D1abl093
SeDmY, добавь что-то подобное:
Код:
[setup]
DiskSpanning=true
DiskSliceSize=666666666
где DiskSliceSize - размер файла setup-x.bin в байтах, максимальный размер 2100000000 »

Так, посмотрим-с) Мысль уловил)

SeDmY 29-05-2010 09:17 1423405

Программа во время компиляции выдает сообщение о сбое и выключается... блин, на том же месте практически, где выдавала ошибку(((



Глюк программы в 7-ке или косяк в скрипте!?

S.T.R.E.L.O.K. 29-05-2010 13:04 1423488

SeDmY, 7-ka 64-разрядная? если нет, то сделайте сжатие просто ultra, а не ultra64.

если всё таки 64-разрядная, всё равно попробуйте переставить на ultra, ради теста

internalCompressLevel=ultra
Compression=lzma/ultra

SeDmY 29-05-2010 13:21 1423498

Цитата:

Цитата D1abl093
SeDmY, 7-ka 64-разрядная? если нет, то сделайте сжатие просто ultra, а не ultra64.
если всё таки 64-разрядная, всё равно попробуйте переставить на ultra, ради теста
internalCompressLevel=ultra
Compression=lzma/ultra »

Да, 7-ка 64-разрядная! Сейчас проверю, спс!))

МИШАНЧИК 29-05-2010 15:58 1423562

Подскажите пожалуйста!
Как в [Components] сделать чтоб четбокс не был выбран по умолчанию?
В справке не нашёл.

Farquaad 29-05-2010 21:02 1423687

Подскажите, pls, как изменить значение параметра в [Setup] в зависимости от выбора юзера, например
[Setup]
DefaultDirName={code:DefDest}\AppName

где

function DefDest(Param: String): String;
begin
if InstallMode then {InstallMode задается юзером в диалоге в InitializeWizard }
Result := ExpandConstant('{pf}')
else
Result := ExpandConstant('{sd}');
end;

Проблема в том, что DefDest вызывается еще до появления окна InnoSetup и соответственно до выбора юзера
или есть способ переопределить переменные Setup позже ?

mash 30-05-2010 12:50 1423925

Подскажите пожалуйста, можно ли сделать так:
Если в реестре ключ, скажем:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage]
"1250"="c_1250.nls"

то в конце инсталляциии требуется перезагрузка.
Если:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage]
"1250"="c_1251.nls"

то тогда без перезагрузки.
Если можно, то пожалуйста помогите с написанием скрипта, я очень в этом не силен.
Заранее спасибо!

Или такой вопрос, можно ли сделать чтоб инсталлятор считывал значение в реестре, например:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage]
"10001"=""
"10002"=""
"10003"=""
"10004"=""
и запускал файл rus.reg (незаметно для пользователя во время установки)?
Если таких значений нет(или другие), соответственно не запускал бы его.

semiono 31-05-2010 12:31 1424582

Всё это легко можно здалать знающим Паскаль в секции [соdе], только Serega, пропал кудато и занят,
а все остальные спят тут. :\

Цитата:

Цитата mash
Или такой вопрос, можно ли сделать чтоб инсталлятор считывал значение в реестре »

RegQueryStringValue()
Цитата:

Цитата mash
и запускал файл rus.reg »

Exec(), ShellExecute() и всякие If, Then итп. я в этом сам не орентируюсь :)

В справке почитай:
Pascal Scripting /Support Functions Reference
жаль там примеров кот наплакал. :(

R.i.m.s.k.y. 31-05-2010 13:14 1424614

Цитата:

Цитата mash
Или такой вопрос, можно ли сделать чтоб инсталлятор считывал значение в реестре, например »

Код:

[Files]
Source: Reg.reg; DestDir: {tmp}; AfterInstall: NLS
[_Code]
Procedure NLS();
Var NLS1: string; res : integer;
begin
  RegQueryStringValue(HKLM, 'SYSTEM\CurrentControlSet\Control\Nls\CodePage','10001', NLS1);
  if NLS1 <> 'www' then Exec('reg.exe', ' import ' + ' ' + AddQuotes(ExpandConstant('{tmp}\reg.reg')),ExpandConstant('{tmp}'),SW_HIDE, ewWaitUntilTerminated, res);
end;

Примерно так.

А по первому вопросу я без понятия, как через код сказать инно, что хорошо бы в конце ребутнуться.

Цитата:

Цитата semiono
жаль там примеров кот наплакал »

Зато в шапке темы примеров полно!

konder1995 31-05-2010 15:44 1424702

люди добрые подскажите как сделать так чтоб выбраный ярлык во время инсталяции отправляло на раб стол
и как сделать нормальную деинстоляцию программы а то выдаёт ошибку что какой то файл не распознан данной версией
подправте мои скрипт
[СODE]
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{EC6A737E-3DBD-471F-B85C-D3451AB4A69A}
AppName=Tom Clancy's Rainbow Six Vegas
AppVerName=Tom Clancy's Rainbow Six Vegas
DefaultDirName={pf}\Tom Clancy's Rainbow Six Vegas
DefaultGroupName=Tom Clancy's Rainbow Six Vegas
DisableProgramGroupPage=true
OutputDir=C:\
OutputBaseFilename=setup
SetupIconFile=C:\Documents and Settings\Стас\Рабочий стол\autorun.ico
DiskSpanning=yes
SlicesPerDisk=1
DiskSliceSize=2100000000
DiskClusterSize=4096
ReserveBytes=0
Compression=lzma/normal
SolidCompression=true
UninstallDisplayIcon={app}\R6Vegas_Game(tanik).exe
UninstallDisplayName=Tom Clancy's Rainbow Six Vegas

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

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

[Files]
Source: D:\Игры\Tom Clancy's Rainbow Six Vegas\Binaries\R6Vegas_Game(tanik).exe; DestDir: {app}; Flags: ignoreversion
Source: D:\Игры\Tom Clancy's Rainbow Six Vegas\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: {group}\Tom Clancy's Rainbow Six Vegas; Filename: {app}\R6Vegas_Game(tanik).exe
Name: {commondesktop}\Tom Clancy's Rainbow Six Vegas; Filename: {app}\R6Vegas_Game(tanik).exe; Tasks: desktopicon

[Run]
Filename: {app}\R6Vegas_Game(tanik).exe; Description: {cm:LaunchProgram,Tom Clancy's Rainbow Six Vegas}; Flags: nowait postinstall skipifsilent
[СODE]





ps.я чайник сильно не ругайте

R.i.m.s.k.y. 31-05-2010 16:10 1424720

Цитата:

Цитата konder1995
я чайник сильно не ругайте »

Это видно раз мастером делали. А вот за то что ошибку не написали - поругаем. Ласково пожурим и за портянку кода - такой код надо заключать в теги [СODE] [/СODE]

Код:

[Tasks]
Name: desktopicon; Description: Поместить ярлык на рабочий стол;  GroupDescription: Дополнительные ярлыки; Flags: unchecked

Секция [Icons] нормально написана на первый взгляд, должно помещаться все. Птичкой отмечаем нужную галку при инсталляции? А то секция [Tasks] была не очень хорошо написана, на отдельной странице задач было все верно написано? А то может там и непонятно что требуется.

Я не играл в Tom Clancy's Rainbow Six Vegas, но где у него должен правильно лежать запускной экзешник? В Binaries? судя по [Files] он кладется в папку {pf}\Tom Clancy's Rainbow Six Vegas и оттуда запускается, на него и ярлыки. Не есть гуд и переименовывать запускные экзешники.

Код:

[Run]
Filename: {app}\R6Vegas_Game(tanik).exe; Description: Запустить Tom Clancy's Rainbow Six Vegas; Flags: shellexec postinstall skipifsilent

Примерно так.

semiono 31-05-2010 18:38 1424809

Цитата:

Цитата R.i.m.s.k.y.
А по первому вопросу я без понятия, как через код сказать инно, что хорошо бы в конце ребутнуться. »

if NLS1 <> 'www' then Exec('shutdown.exe', '-r -f -t 00...
:)

Посмотрите мой вопрос, пожалууста? http://forum.oszone.net/post-1422716-1839.html
Ато всё дело стало. Если нет решения так нет. Буду батники тогда ваять. :(

Если даже взять BINARY данные, то из реестра они в файл пишуться как квадраты,
значится надо конвертировать это перед записью в файл?
Хотяб с REG_BINARY подскажите, если уж REG_NONE действительно проблемно.

konder1995 31-05-2010 21:37 1424945

Такой вопрос:
1)как сделать так чтоб программу можно было запускать через меню пуск?
2)как задать запуску и удаленю иконки?
Заранее спасибо.

semiono 31-05-2010 21:45 1424947

Цитата:

Цитата konder1995
как сделать так чтоб программу можно было запускать через меню пуск? »

Name: "{userprograms}\Miranda"; Filename: "{pf}\Miranda\Miranda.exe"; WorkingDir: "{pf}\Miranda"; IconFilename: "{pf}\Miranda\Miranda.ico"; Comment: "Miranda"

Цитата:

Цитата konder1995
как задать запуску и удаленю иконки »

так же

R.i.m.s.k.y. 01-06-2010 08:51 1425101

Цитата:

Цитата semiono
if NLS1 <> 'www' then Exec('shutdown.exe', '-r -f -t 00 »

Некрасиво. А если сетуп не успеет закончить свои делы и команда ребутнет комп? Надо грамотно - чтобы инсталлер сам предложил перегрузится.

Цитата:

Цитата semiono
Посмотрите мой вопрос, пожалууста »

Смотрел, все что мог сказать по этому вопросу я уже сказал. Не знаю я как инно дружит с Reg_none & Reg_Binary. Когда мне надо какой-нить экзот занести в реестр, я ключ из реестра импортирую в рег-файлик, потом через ISTool его импортирую и смотрю как он получился в коде инно, дальше уже смотрю что там есть.
А вот что пишет справка инно про типы регданных
Код:

The data type of the value. This must be one of the following:

none
string
expandsz
multisz
dword
qword
binary

If none (the default setting) is specified, Setup will create the key but not a value. In this case the ValueName and ValueData parameters are ignored.
If string is specified, Setup will create a string (REG_SZ) value.
If expandsz is specified, Setup will create an expand-string (REG_EXPAND_SZ) value.
If multisz is specified, Setup will create an multi-string (REG_MULTI_SZ) value.
If dword is specified, Setup will create a 32-bit integer (REG_DWORD) value.
If qword is specified, Setup will create a 64-bit integer (REG_QWORD) value.
If binary is specified, Setup will create a binary (REG_BINARY) value.

Reg_None нету в перечне.

mash 01-06-2010 10:35 1425143

Уважаемый R.i.m.s.k.y., я в скриптах просто ноль, скажите, Вы написали пример скрипта для одного значения:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage]
"10001"=""

Я правильно понял?
А если повесить перезагрузку на файл reg.reg? Можно такое?

Увидел значение ("10001"=""), винда англ,запускается reg и по нему перезагрузка, а? Будет ли она в конце инсталляции правда?

brodovski 01-06-2010 12:05 1425193

Всем привет!Я новичок в Inno Setup ноль(((дайте пожалуйста скрипт в котором можно например архив FreeArc разделить на 2 диска,например если у меня архив 8гб а мне нужно чтобы он был 2 по 4гб,когда например первый установится чтоб просил вставить второй диск.Помогите пожалуйста((

mash 01-06-2010 13:14 1425223

R.i.m.s.k.y., я не правильно зацепился за эти, параметр и значение, ведь русская винда может быть типа от "кого угодно" и в этом случае все задуманное ломается, можно попросить Вас переписать Ваш скрипт:
Код:

[Files]
Source: Reg.reg; DestDir: {tmp}; AfterInstall: NLS
[_Code]
Procedure NLS();
Var NLS1: string; res : integer;
begin
  RegQueryStringValue(HKLM, 'SYSTEM\CurrentControlSet\Control\Nls\CodePage','10001', NLS1);
  if NLS1 <> 'www' then Exec('reg.exe', ' import ' + ' ' + AddQuotes(ExpandConstant('{tmp}\reg.reg')),ExpandConstant('{tmp}'),SW_HIDE, ewWaitUntilTerminated, res);
end;

с новыми значениями:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage]
"ACP"="1252"

А то все мои попытки переписать скрипт с этими значениями приводят к ошибке.
Заранее благодарен!

Кстати, при Вашем скрипте у меня файл reg повидимому не запустился, хотя значение в реестре было "10001"="", а не иное.

R.i.m.s.k.y. 01-06-2010 15:28 1425288

Уважаемые начинающие!
Прочитайте, пожалуйста, http://victor-dobrov.narod.ru/InnoSetupFAQ_ru-board.chm, там есть ответы на большинство Ваших вопросов, если после прочтения вопросы таки останутся - велкам на форум, мы чем сможем - поможем!

semiono 01-06-2010 16:16 1425322

Цитата:

Цитата R.i.m.s.k.y.
Reg_None нету в перечне. »

Но я надеялся хотя бы уже на конвертирование binary в строку 16-ричных записей, хотя наверное нету и этого.
Я насамом деле не знаю как сформулировать это - 10,12,e3,f4,ac,00,11 итп.
Другими словами из реального байта 00 надо зделать 30,
из 01 зделать 31, из 0a зделать 61 и запятыми эти байты разделить. Если iss Pascal это не может то здаюсь! :)
В автоит нечто такое было помню hex($string)

mash 02-06-2010 00:26 1425625

R.i.m.s.k.y., спасибо тебе все получилось, правда вот осталась одна малость. Может кто-то поможет к этому коду добавить:

Код:

Procedure NLS();
Var NLS1: string; res : integer;
begin
  RegQueryStringValue(HKLM, 'SYSTEM\CurrentControlSet\Control\Nls\CodePage','ACP', NLS1);
  if NLS1 = '1252' then Exec('reg.exe', ' import ' + ' ' + AddQuotes(ExpandConstant('{tmp}\Rus.reg')),ExpandConstant('{tmp}'),SW_HIDE, ewWaitUntilTerminated, res);
end;

ииии + перезагрузиться в конце инсталляции.

Sotonisto 02-06-2010 07:50 1425696

Цитата:

Цитата konder1995
Как сделать так чтоб выбраный ярлык во время инсталяции отправляло на раб стол?»

Код:

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
[Icons]
Name: {commondesktop}\Rainbow Six Vegas; Filename: {app}\Binaries\R6Vegas_Game(tanik).exe; Tasks: desktopicon

Цитата:

Цитата konder1995
Как сделать нормальную деинстоляцию программы, а то выдаёт ошибку что какой то файл не распознан данной версией?»

Удали с папки unins000.dat и unins000.exe а потом уже собирай инсталл :)
Цитата:

Цитата konder1995
Как сделать так чтоб программу можно было запускать через меню пуск?»

Код:

[Icons]
Name: {group}\Имя иконки; Filename: {app}\путь к фалу запуска *.exe

Цитата:

Цитата konder1995
Как задать запуску и удаленю иконки?»

Код:

[Icons]
Name: {group}\Запустить игру /программу; Filename: {app}\my_prog.exe
Name: {group}\Удалить игру  /программу; Filename: {uninstallexe}

------
Вопросы к знатокам :)
1. Можно ли удалить иконку инсталлятора с шапки (рамки) инсталла (ну что б было как в инсталле DirectX)?
2. Можно ли удалить кнопки свернуть, закрыть, уменьшить с шапки (рамки) инсталла (как в инсталле DirectX)? :)

MaxHacker 02-06-2010 19:34 1426114

Вложений: 1
Как на FinishPage прописать такую вещь ?:
Есть поле ввода над которым надпись:"Введите имя которое будет отображаться в игре"
Пользователь вводит имя, допустим Killer, и после нажатия кнопки Готово инсталлятор в файле Rev.ini, он находится в папке приложения, в строчке PlayerName=Player вместо =Player (или после = ) писал имя введенное пользователем (в даном случае Killer)
Желательно чтобы этот скрипт можно было использовать вместе с Need for Speed™ Undercover.iss v 2.2
rev.ini прилагаю к сообщению

MaxHacker 02-06-2010 21:06 1426180

Цитата:

Цитата Sotonisto
1. Можно ли удалить иконку инсталлятора с шапки (рамки) инсталла (ну что б было как в инсталле DirectX)?
»

Убрать иконку в левом-верхнем углу исталлятора
читать дальше »
[code]
procedure InitializeWizard();
begin
WizardForm.BorderStyle := bsDialog;
end;


Вроде так

Sotonisto 02-06-2010 22:40 1426239

Цитата:

Цитата MaxHacker
Как на FinishPage прописать такую вещь ?:
Есть поле ввода над которым надпись:"Введите имя которое будет отображаться в игре"
Пользователь вводит имя, допустим Killer, и после нажатия кнопки Готово инсталлятор в файле Rev.ini, он находится в папке приложения, в строчке PlayerName=Player вместо =Player (или после = ) писал имя введенное пользователем (в даном случае Killer)
Желательно чтобы этот скрипт можно было использовать вместе с Need for Speed™ Undercover.iss v 2.2 »

Для этого прийдется создавать новую страницу, надеюсь ты умеешь это делать? :)

Я могу дать тебе скрипт инсталла PKS-овского патча (мож с него попробовать вытянуть код), но вроде он не редактирует, а создает rev файл. Я в нем не рылся :)

Но чет я сомневаюсь что оно те подойдет...

M3EG 03-06-2010 08:23 1426394

Хелп народ.
Делаю инсталятор, компелирую все ок, но иконка у него не появляется, а белая делается как без иконки. И не пишет кто издатель и тп.
Если делаю быстро на пустом в мастере все ок, но если добавить файлы ~ 700+ мб то нету иконки ни когда ( белый знак как без иконки) и не пишет издателя. Как можно исправить? Срочно надо.

R.i.m.s.k.y. 03-06-2010 08:43 1426397

Цитата:

Цитата M3EG
Хелп народ »

Во первых - иконка гидэ? на самом инсталлере или в пуске?
если на инсталлере, то в секции
[Setup]
SetupIconFile=RimPack\Program Files\RimPack.ico
Если в секции [icons] проверяем аккуратно все ссылки

Во вторых - издателя так же где? на первой странице?
Можно делать по-разному:
1. Ищем текст, который там выводится в Default.isl (и всех остальных) файлах языков и меняем на свой текст.
2. В файлах языков .isl записывам свое сообщение в [CustomMessages] и потом его используем, подменяя стандартное.

Пример. Открываем нужный языковой файл в формате .isl и находим там интересующий нас текст, перед текстом будет переменная, которая и отвечает за отображаемый текст. Заносим эту переменную в свой скрипт в секцию [Messages]. В итоге будет:
[Messages]
WelcomeLabel2=Твой текст

R.i.m.s.k.y. 03-06-2010 10:55 1426460

Мой вопрос: как связать WizardForm.ComponentsList.Checked[1] и WizardForm.ComponentsList.Name? Необходимо найти по имени комопненты и проверить - выбран ли компонент или наоборот - сделать его выбранным.
Сейчас сделано по порядковым номерам и это не очень удобно, одно неверное движение - и вы отец и все поплывет.
Заранее спасибо!

MaxHacker 03-06-2010 10:55 1426461

Цитата:

Цитата M3EG
Хелп народ.
Делаю инсталятор, компелирую все ок, но иконка у него не появляется, а белая делается как без иконки. И не пишет кто издатель и тп.
Если делаю быстро на пустом в мастере все ок, но если добавить файлы ~ 700+ мб то нету иконки ни когда ( белый знак как без иконки) и не пишет издателя. Как можно исправить? Срочно надо. »

если добавляешь файлы ~ 700+ мб то надо разбить инсталлятор на тома (используй ISTool) иконка будет отображаться (в тяжолых инсталляторах иконка не отображается

Цитата:

Цитата Sotonisto
Для этого прийдется создавать новую страницу, надеюсь ты умеешь это делать? »

Умею

Цитата:

Цитата Sotonisto
Я могу дать тебе скрипт инсталла PKS-овского патча (мож с него попробовать вытянуть код), но вроде он не редактирует, а создает rev файл. Я в нем не рылся
Но чет я сомневаюсь что оно те подойдет... »

Давай !!! тоже подойдет

travian 03-06-2010 11:34 1426490

Цитата:

Цитата YURSHAT
Пример »

Спасибо.
Осталась одна проблемка. Когда пользователь выбирает диск куда устанавливать, то сначала у него, например, написано: Доступно места на диске: 5.0 GB. Когда он выбирает другой диск надпись: Доступно места на диске: N GB - накладывается на предыдущую и получается каша в которой не разглядеть что написано.
Исправил это просто убрав прозрачность на этом пункте, но теперь получается так:
Стандартно выбран диск E:

А теперь выбираем диск C:

Видим, что надпись Доступно места на диске: 4,65 GB закрыла предыдущую, но не полностью. Как это можно исправить?

moraru 03-06-2010 15:29 1426651

Вложений: 1
У меня проблемы при компиляции файла с использованием Inno Setup Preprocessor. Короче пишет
Цитата:

to be able to use compiled derectives other than "#include", you need Inno Setup Preprocessor which currently not installed.
но у меня стоит Inno Setup 5.3.9 (a) QuickPack!
В чем проблема помогите!

vint56 03-06-2010 15:35 1426657

moraru, у тебя не процессора вот скачай поставь галочки везде кроме istool если не надо http://files.jrsoftware.org/ispack/ispack-5.3.9.exe

moraru 03-06-2010 15:44 1426668

vint56, А!!!!!!!!! Доперло! Я прост думал рекламка какаята и пропускал ее... ну в смысле в инсталяторе устанавливал только сам компилятор

R.i.m.s.k.y. 03-06-2010 15:46 1426671

Сейчас в коде инсталлера сделано так:
Код:

if (WizardForm.ComponentsList.Checked[1]) then mode := 1;
if (WizardForm.ComponentsList.Checked[2]) then mode := 2;
if (WizardForm.ComponentsList.Checked[3]) then mode := 3;
if (WizardForm.ComponentsList.Checked[4]) then mode := 4;
if (WizardForm.ComponentsList.Checked[5]) then mode := 5;
if (WizardForm.ComponentsList.Checked[6]) then dxva := 1;
if (WizardForm.ComponentsList.Checked[7]) then def  := 1;

если я добавляю в список компонетов еще строчку - вся нумерация плывет
Хорошо бы писать if (WizardForm.ComponentsList.Name('auto')....) then mode := 1;
Что подставить вместо ....?

Как работать в коде с компонентами по имени компоненты, а не по ее порядковому номеру?

M3EG 03-06-2010 16:05 1426687

Подскажите как правльно прописать ключи для реестера при репаке.

Вот что в файле экспорта из реестера:

Код:

Windows Registry Editor Version 5.00
 
[HKEY_LOCAL_MACHINE\SOFTWARE\LucasArts]
@=""
 
[HKEY_LOCAL_MACHINE\SOFTWARE\LucasArts\Star Wars Jedi Knight Jedi Academy]
@=""
 
[HKEY_LOCAL_MACHINE\SOFTWARE\LucasArts\Star Wars Jedi Knight Jedi Academy\1.0]
"Install Path"="C:\\Program Files\\LucasArts\\Star Wars Jedi Knight Jedi Academy"
"Launcher"="C:\\Program Files\\LucasArts\\Star Wars Jedi Knight Jedi Academy\\JediAcademy.exe"
"UninstallString"="C:\\Program Files\\InstallShield Installation Information\\{1EECBA68-8BE4-4076-94DF-E9ED206B1D21}\\Setup.exe"
"CDPath"="F:"
"Source Path"="F:"
"Source Dir"="F:\\"
"InstallType"=dword:00000001
"Installed"=dword:00000002
"Magic"=dword:00092775

Вот из Regshot
http://forum.ru-board.com/topic.cgi?...&limit=1&m=2#1

Я в коде делал так:

Код:

[Registry]
Root: HKLM; SubKey: SOFTWARE\LucasArts; ValueType: string; ValueName: ; ValueData: 
Root: HKLM; SubKey: SOFTWARE\LucasArts\Star Wars Jedi Knight Jedi Academy; ValueType: string; ValueName: ; ValueData: 
Root: HKLM; SubKey: SOFTWARE\LucasArts\Star Wars Jedi Knight Jedi Academy\1.0; ValueType: string; ValueName: Install Path; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\LucasArts\Star Wars Jedi Knight Jedi Academy\1.0; ValueType: string; ValueName: Launcher; ValueData: {app}\JediAcademy.exe; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\LucasArts\Star Wars Jedi Knight Jedi Academy\1.0; ValueType: dword; ValueName: InstallType; ValueData: $00000001
Root: HKLM; SubKey: SOFTWARE\LucasArts\Star Wars Jedi Knight Jedi Academy\1.0; ValueType: dword; ValueName: Installed; ValueData: $00000002
Root: HKLM; SubKey: SOFTWARE\LucasArts\Star Wars Jedi Knight Jedi Academy\1.0; ValueType: dword; ValueName: Magic; ValueData: $00092775

И вот проблема. Если как я написал в коде то после установки лаунчер не идет выдает ошибку. Я там не все ключи в код делал так как хз че там в value data надо. Подскажите какие ключи реестера надо завести чтобы все ок было, и что во всех Value Data изменить надо? В коде если не сложно с value data правельным.

R.i.m.s.k.y. 03-06-2010 16:12 1426692

Цитата:

Цитата M3EG
Подскажите какие ключи реестера надо завести чтобы все ок было »

Вот так вот трудно сказать, может ему
Код:

"UninstallString"="C:\\Program Files\\InstallShield Installation Information\\{1EECBA68-8BE4-4076-94DF-E9ED206B1D21}\\Setup.exe"
"CDPath"="F:"
"Source Path"="F:"
"Source Dir"="F:\\"

не хватает?

M3EG 03-06-2010 16:26 1426705

Только как правельно в Value Data сделать? F это место откуда ставилось. ну а первый ключ от инсталл шиелд врятли нужен.

moraru 03-06-2010 16:32 1426710

Вложений: 1
извените я только новичек в этом деле но я хочу создать репак такой же как этот:
http://www.forum.oszone.ru/post-1409866-1784.html
но мне оттуда только строка состояния инстала (Которая сверху на ней статусы "установка", Завершение)измение размеров окна до 798х543, текстурированные кнопки,
состояние устаеовки(сколько процентов), фоновое изображение и проверка производительности.
Но я немогу все это оттуда вытащить! мож кто нибуть знает как такой скрипт сделать? :shocked:

R.i.m.s.k.y. 03-06-2010 16:33 1426711

Цитата:

Цитата M3EG
Только как правельно в Value Data сделать? F это место откуда ставилось. ну а первый ключ от инсталл шиелд врятли нужен. »

Ну пусть будет C:\, он то у вес есть
Код:

Root: HKLM; SubKey: SOFTWARE\LucasArts\Star Wars Jedi Knight Jedi Academy\1.0; ValueType: string; ValueName: CDPath; ValueData: C:
Root: HKLM; SubKey: SOFTWARE\LucasArts\Star Wars Jedi Knight Jedi Academy\1.0; ValueType: string; ValueName: Source Path; ValueData: C:
Root: HKLM; SubKey: SOFTWARE\LucasArts\Star Wars Jedi Knight Jedi Academy\1.0; ValueType: string; ValueName: Source Dir; ValueData: C:

Мой вопрос кто-нить глянет?

M3EG 03-06-2010 16:39 1426718

Цитата:

Цитата R.i.m.s.k.y.
Ну пусть будет C:\, он то у вес есть »

Ну это понятно канеш попробую. Просто думал можно сделать чтоб он показывал место от куда его ставиш.

R.i.m.s.k.y. 03-06-2010 16:47 1426722

Цитата:

Цитата M3EG
Просто думал можно сделать чтоб он показывал место от куда его ставиш »

поменяйте ValueData: C: на ValueData: {app}

moraru 03-06-2010 17:04 1426732

на мой вопрос кто нить ответит?

vint56 03-06-2010 17:40 1426759

moraru, Need for Speed™ Undercover.iss v 2.2 [Final]
http://rghost.ru/1573116 либо http://rghost.ru/1573116

moraru 03-06-2010 18:20 1426782

Вложений: 1
как cделать статус панель вверху инсталятора как на картинке? Пишет uncown identifier "Welcome"

SeDmY 03-06-2010 18:30 1426794

Друзья, у меня вот с чем проблема:



Жму компиляцию, проходит время и на пол пути ошибка со скрина((((((((

Может что в скрипте накосячил... я же не профи....:

читать дальше »

[Setup]
DiskSpanning=true
DiskSliceSize=1457664000
AppId={{77B8C3D8-4F8F-4DE2-AB13-46B9F3230A5C}
AppName=Blur
AppVerName=Blur
AppPublisher=Pro100 RePack
DefaultDirName={pf}\Blur
DefaultGroupName=Blur
OutputDir=E:\Инсталяторы
OutputBaseFilename=setup
SetupIconFile=E:\Games\Blur(TM)\Blur.ico
Compression=lzma/ultra64
SolidCompression=true
InternalCompressLevel=ultra64
WizardImageFile=E:\Инсталяторы\Phoenix.bmp
WizardImageBackColor=clWhite
WizardSmallImageFile=E:\Инсталяторы\Phoenix 2.bmp

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

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked; OnlyBelowVersion: 0,6.1

[Files]
Source: E:\Games\Blur(TM)\Blur.exe; DestDir: {app}; Flags: ignoreversion
Source: E:\Games\Blur(TM)\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
Source: unarc.dll; DestDir: {tmp}; Flags: dontcopy deleteafterinstall
Source: compiler:InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{group}\Запустить игру"; Filename: "{app}\blur.exe"; WorkingDir: "{app}";
Name: "{group}\Удалить игру"; Filename: "{uninstallexe}";
Name: "{commondesktop}\Blur"; Filename: "{app}\blur.exe"; WorkingDir: "{app}"; Tasks: "desktopicon";

[code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep=usPostUninstall then
begin
DelTree(ExpandConstant('{app}'), True, True, True);
RemoveDir(ExpandConstant('{app}'));
end;
end;

[Run]
Filename: {app}\Blur.exe; Description: {cm:LaunchProgram,Blur}; Flags: nowait postinstall skipifsilent

[Registry]
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Activision\Blur; ValueType: string; ValueName: InstallPath; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Activision\Blur; ValueType: string; ValueName: InstallDrive; ValueData: F:\
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Activision\Blur; ValueType: string; ValueName: LanguageCode; ValueData: RUS
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Activision\Blur; ValueType: string; ValueName: Language; ValueData: 1049
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Activision\Blur; ValueType: string; ValueName: StartMenuFolder; ValueData: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Blur(TM)
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Activision\Blur; ValueType: string; ValueName: Version; ValueData: 1.0
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Activision\Blur; ValueType: string; ValueName: IntVersion; ValueData: 20.0
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Activision\Blur; ValueType: string; ValueName: UninstallString; ValueData: "\""C:\Program Files (x86)\InstallShield Installation Information\{{589A63D3-89E1-4D9B-8DBC-6039BB27289E}\uninstall.exe\"" -runfromtemp -l0x0419 -uninst"
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Activision\Blur; ValueType: string; ValueName: EXEString; ValueData: E:\Games\Blur(TM)\Blur.exe
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Activision\Blur; ValueType: dword; ValueName: GameLanguage; ValueData: $00000007


Есть какие идеи?

travian 03-06-2010 20:43 1426848

Предыдущий вопрос отпадает.

Теперь решил проблему с наложением надписи, но не до конца.
Вот процедура отвечающая за определение и вывод количества свободного и требуемого места.
читать дальше »
procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
SelectDirText_1.Caption := ExpandConstant('{cm:SPACE_2} ')+ NumToStr_(round(FreeMB/1024*100)/100) + ' GB'
else
SelectDirText_1.Caption := ExpandConstant('{cm:SPACE_2} ')+ NumToStr_(FreeMB)+ ' MB';
//---------------------------
if FreeMB < NeedSize then
begin
SelectDirText_1.Font.Color:= ClRed;
WizardForm.NextButton.Enabled := False;
SelectDirText_1.Hide;
SelectDirText_1.Show;
end else
begin
SelectDirText_1.Font.Color:= ClWhite;;
WizardForm.NextButton.Enabled := True;
SelectDirText_1.Hide;
SelectDirText_1.Show;
end
end;
//===================
procedure GetNeedSpaceCaption;
begin
if NeedSize > 1024 then
WizardForm.DiskSpaceLabel.Caption := ExpandConstant('{cm:SPACE_1} ')+ NumToStr_(round(NeedSize/1024*100)/100) + ' GB' else
WizardForm.DiskSpaceLabel.Caption := ExpandConstant('{cm:SPACE_1} ')+ NumToStr_(NeedSize)+ ' MB';
//-----------------------
if FreeMB < NeedSize then
begin
SelectDirText_1.Font.Color:= ClRed;
WizardForm.NextButton.Enabled := False;
SelectDirText_1.Hide;
SelectDirText_1.Show;
end else
begin
SelectDirText_1.Font.Color:= ClWhite;;
WizardForm.NextButton.Enabled := True;
SelectDirText_1.Hide;
SelectDirText_1.Show;
end
end;

Как сделать так чтобы SelectDirText_1 при попадании на страницу SelectDir исчезал и тутже появлялся. Короче, также как я сделал с кнопками (выделил жирным):
читать дальше »
if FreeMB < NeedSize then
begin
SelectDirText_1.Font.Color:= ClRed;
WizardForm.NextButton.Enabled := False;
SelectDirText_1.Hide;
SelectDirText_1.Show;

end else
begin
SelectDirText_1.Font.Color:= ClWhite;;
WizardForm.NextButton.Enabled := True;
SelectDirText_1.Hide;
SelectDirText_1.Show;

end

R.i.m.s.k.y. 04-06-2010 09:07 1427102

Цитата:

Цитата M3EG
от куда его ставиш »

Извините, соврал, если ОТКУДА то не {app}, a {src}

{src}
The directory in which the Setup files are located.
For example: If you used {src}\MYPROG.EXE on an entry and the user is installing from "S:\", Setup will translate it to "S:\MYPROG.EXE".

M3EG 04-06-2010 16:30 1427376

Cgc. Сделать так то только от туда игра будет с образа идтию.Но вот осталась главная проблема тут :
Код:

Root: HKLM; SubKey: SOFTWARE\LucasArts\Star Wars Jedi Knight Jedi Academy\1.0; ValueType: string; ValueName: CDPath; ValueData: F:
Root: HKLM; SubKey: SOFTWARE\LucasArts\Star Wars Jedi Knight Jedi Academy\1.0; ValueType: string; ValueName: Source Path; ValueData: F:
Root: HKLM; SubKey: SOFTWARE\LucasArts\Star Wars Jedi Knight Jedi Academy\1.0; ValueType: string; ValueName: Source Dir; ValueData: F:\

F это место откуда ставил. И Мини образ если смонтировать на F то игра пойдет. А если на другой вирт.диск то уже пишет нету дика и надо в реестере букву поменять на другую тогда пойдет. Ни как нельзя сделать чтобы от всюду шло, без лазанья в реестер.

Sotonisto 04-06-2010 21:53 1427556

Тут есть доагдка (не моя) - мож попробовать {drive:{src}}?
Хотя может и не прокатит...

travian 05-06-2010 07:43 1427702

Цитата:

Цитата M3EG
Ни как нельзя сделать чтобы от всюду шло, без лазанья в реестер. »

Вместо F:\ - поставь {src} и будет тебе счастье

Tukash 05-06-2010 11:30 1427767

скрипт ExecAndWait.iss будет работать, если файл при котором инсталлятор должен быть живым это батник, и запускается он не через Code, а через Run? если работает покажите для наглядности как это приписать, а то не понятно...

cergo666 06-06-2010 02:35 1428338

Вложений: 1
проблема со скриптом Need for Speed™ Undercover.iss v 2.2.. решил вот тут проверить, а правда ли работает? ан неет, не хочет! после записей в реестр игра начинает удляться и вылазиет вот такое О_о
Сам код во вложении :)

kampaster 06-06-2010 09:28 1428388

В чем может быть проблемма?
Когда компилирую свой скрипт через обычный анси Inno Setup
то со шрифтами всё нормально - да са всем всё нормально!
Тоесть вот так: http://imglink.ru/show-image.php?id=...567f92634cfee0
А когда компилирую через ResTools
Получается вот такая трабла! : http://imglink.ru/show-image.php?id=...c345e5b8289efe
Как исправить?
Мне нужно компилить именно через ResTools но там такие баги(((

Sotonisto 06-06-2010 16:52 1428677

kampaster, а можно скрипт? :)

kampaster 06-06-2010 19:20 1428772

Sotonisto только в ЛС..
Ну я думаю Вы меня понимаете почему!
Sotonisto напишите мне в ЛС

SeDmY 07-06-2010 19:17 1429520



как бороться с этим!?(((((( Подскажите!

alex2010 07-06-2010 20:03 1429538

напиши вместо PChar - PAnsiChar должно работать

SeDmY 07-06-2010 20:59 1429578

Цитата:

Цитата alex2010
напиши вместо PChar - PAnsiChar должно работать »

Вроде прошло, но очередная ошибка:


alex2010 07-06-2010 21:05 1429585

сейчас открывал 2 скрипта, смотрел, там данной строчки вообще нет.
Попробуй просто удалить ее

SeDmY 07-06-2010 22:22 1429628

Цитата:

Цитата alex2010
сейчас открывал 2 скрипта, смотрел, там данной строчки вообще нет.
Попробуй просто удалить ее »

Убрал, но лучше не стало...

Снова косяк((((



Скрипт полностью:

читать дальше »
[Setup]
SourceDir=.
OutputDir=Setup
AppName=Terminator Salvation
AppVerName=Terminator Salvation
AppVersion=Terminator Salvation
AppPublisher=Pro100(ой)RePack
AppCopyright=Pro100(ой)RePack
DefaultDirName={pf}\Terminator Salvation
DefaultGroupName=Terminator Salvation
AllowNoIcons=true
OutputBaseFilename=setup
WizardImageFile=E:\Инсталяторы\Phoenix.bmp
WizardSmallImageFile=E:\Инсталяторы\Phoenix 2.bmp
SetupIconFile=E:\Games\icon.ico
WindowVisible=false
WindowShowCaption=false
WindowResizable=false
Compression=lzma/ultra64
SolidCompression=true
DiskSpanning=true
DiskSliceSize=2100000000
SlicesPerDisk=1
InternalCompressLevel=none
WizardImageBackColor=clWhite

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

[Types]
Name: full; Description: Полная установка
Name: custom; Description: Выборочная установка; Flags: iscustom

[Components]
Name: g0; Description: Terminator Salvation; Types: full custom; Flags: disablenouninstallwarning checkablealone fixed
Name: g0\c1; Description: DirectX; Types: full; Flags: dontinheritcheck
Name: g0\c2; Description: OpenAL; Types: full; Flags: dontinheritcheck
Name: g0\c3; Description: PhysX; Types: full; Flags: dontinheritcheck

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

[Files]
Source: BASS.dll; DestDir: {tmp}; Flags: dontcopy noencryption
Source: sound.mp3; DestDir: {tmp}; Flags: dontcopy noencryption nocompression
Source: MusicButton.bmp; DestDir: {tmp}; Flags: dontcopy
Source: ISSkin.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: steam.cjstyles; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: E:\Games\Support\DirectX\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: g0\c1
Source: E:\Games\Support\OpenAL\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: g0\c2
Source: E:\Games\Support\PhysX\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: g0\c3

[Icons]
Name: {group}\Terminator Salvation; Filename: {app}\TerminatorSalvation.exe; WorkingDir: {app}
Name: {userdesktop}\Terminator Salvation; Filename: {app}\TerminatorSalvation.exe; WorkingDir: {app}; Tasks: desktopicon
Name: {group}\{cm:UninstallProgram,Terminator Salvation}; Filename: {uninstallexe}

[Run]
Description: {cm:LaunchProgram, Terminator Salvation}; Filename: {app}\TerminatorSalvation.exe; WorkingDir: {app}; Flags: nowait postinstall skipifsilent unchecked
Filename: {win}\regedit.exe; Parameters: /s {tmp}\Терминатор.reg; StatusMsg: Вносим изменения в реестр ...; Flags: waituntilterminated runasoriginaluser; Components:

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

[code]
procedure LoadSkin(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@files:isskin.dll stdcall';
procedure UnloadSkin(); external 'UnloadSkin@files:isskin.dll stdcall';
function ShowWindow(hWnd: Integer; uType: Integer): Integer; external 'ShowWindow@user32.dll stdcall';

function InitializeSetup:boolean;
begin
ExtractTemporaryFile('Терминатор.reg');
ExtractTemporaryFile('steam.cjstyles');
LoadSkin(ExpandConstant('{tmp}')+'\steam.cjstyles', '');
Result:=True;
end;

procedure InitializeWizard;
begin
WizardForm.TypesCombo.ItemIndex:=0;
WizardForm.BeveledLabel.Enabled:=True;
end;

procedure DeinitializeSetup;
begin
ShowWindow(WizardForm.Handle,0);
UnloadSkin();
end;

const
BASS_ACTIVE_STOPPED = 0;
BASS_ACTIVE_PLAYING = 1;
BASS_ACTIVE_STALLED = 2;
BASS_ACTIVE_PAUSED = 3;
BASS_SAMPLE_LOOP = 4;

var
mp3Handle: HWND;
mp3Name: String;
PlayButton, PauseButton, StopButton: TPanel;
PlayImage, PauseImage, StopImage: TBitmapImage;
PlayLabel, PauseLabel, StopLabel: TLabel;
MouseLabel: Tlabel;

function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean;
external 'BASS_Init@files:BASS.dll stdcall delayload';

function BASS_StreamCreateFile(mem: BOOL; f: PAnsiChar; offset: DWORD; length: DWORD; flags: DWORD): DWORD;
external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';

function BASS_Start(): Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';

function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';

function BASS_ChannelIsActive(handle: DWORD): Integer;
external 'BASS_ChannelIsActive@files:BASS.dll stdcall delayload';

function BASS_ChannelPause(handle: DWORD): Boolean;
external 'BASS_ChannelPause@files:BASS.dll stdcall delayload';

function BASS_Stop(): Boolean;
external 'BASS_Stop@files:BASS.dll stdcall delayload';

function BASS_Pause(): Boolean;
external 'BASS_Pause@files:BASS.dll stdcall delayload';

function BASS_Free(): Boolean;
external 'BASS_Free@files:BASS.dll stdcall delayload';

procedure PlayMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
PlayImage.Left := -96
end;

procedure PlayMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
PlayImage.Left := 0
end;

procedure PlayMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if PlayImage.Left <> -96 then PlayImage.Left := -192
StopImage.Left := -64
end;

procedure PauseMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
PauseImage.Left := -128
end;

procedure PauseMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
PauseImage.Left := -32
end;

procedure PauseMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if PauseImage.Left <> -128 then PauseImage.Left := -224
StopImage.Left := -64
end;

procedure StopMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
StopImage.Left := -160
end;

procedure StopMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
StopImage.Left := -64
end;

procedure StopMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if StopImage.Left <> -160 then StopImage.Left := -256
PlayImage.Left := 0
PauseImage.Left := -32
end;

procedure MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
PlayImage.Left := 0
PauseImage.Left := -32
StopImage.Left := -64
end;

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('sound.mp3');
mp3Name := ExpandConstant('{tmp}\sound.mp3');
BASS_Init(-1, 44100, 0, 0, 0);
mp3Handle := BASS_StreamCreateFile(FALSE, PChar(mp3Name), 0, 0, BASS_SAMPLE_LOOP);
BASS_Start();
BASS_ChannelPlay(mp3Handle, False);
Result := True;
end;

procedure PlayButtonOnClick(Sender: TObject);
begin
case BASS_ChannelIsActive(mp3Handle) of
BASS_ACTIVE_PAUSED:
begin
BASS_ChannelPlay(mp3Handle, False);
PlayButton.Hide
PauseButton.Show
end;
BASS_ACTIVE_STOPPED:
begin
BASS_Init(-1, 44100, 0, 0, 0);
mp3Handle := BASS_StreamCreateFile(FALSE, PChar(mp3Name), 0, 0, BASS_SAMPLE_LOOP);
BASS_Start();
BASS_ChannelPlay(mp3Handle, False);
PlayButton.Hide
PauseButton.Show
end;
end;
end;

procedure PauseButtonOnClick(Sender: TObject);
begin
BASS_ChannelPause(mp3Handle);
PauseButton.Hide
PlayButton.Show
end;

procedure StopButtonOnClick(Sender: TObject);
begin
BASS_Stop();
BASS_Free();
PauseButton.Hide
PlayButton.Show
end;

procedure InitializeWizard();
begin
ExtractTemporaryFile('MusicButton.bmp')

MouseLabel := TLabel.Create(WizardForm)
MouseLabel.Width := WizardForm.Width
MouseLabel.Height := WizardForm.Height
MouseLabel.Autosize := False
MouseLabel.Transparent := True
MouseLabel.OnMouseMove := @MouseMove
MouseLabel.Parent := WizardForm

PlayButton := TPanel.Create(WizardForm)
PlayButton.Left := 50
PlayButton.Top := 320
PlayButton.Width := 32
PlayButton.Height := 33
PlayButton.Cursor := crHand
PlayButton.ShowHint := True
PlayButton.Hint := 'Воспроизведение музыки'
PlayButton.OnClick := @PlayButtonOnClick
PlayButton.Parent := WizardForm

PlayImage := TBitmapImage.Create(WizardForm)
PlayImage.Left := 0
PlayImage.Top := 0
PlayImage.Width := 288
PlayImage.Height := 33
PlayImage.Enabled := False
PlayImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\MusicButton.bmp'))
PlayImage.Parent := PlayButton
//
PlayImage.ReplaceColor:=$E2E2E2
PlayImage.ReplaceWithColor:=clBtnFace

PlayLabel := TLabel.Create(WizardForm)
PlayLabel.Width := PlayButton.Width
PlayLabel.Height := PlayButton.Height
PlayLabel.Autosize := False
PlayLabel.Transparent := True
PlayLabel.OnClick := @PlayButtonOnClick
PlayLabel.OnMouseDown := @PlayMouseDown
PlayLabel.OnMouseUp := @PlayMouseUp
PlayLabel.OnMouseMove := @PlayMouseMove
PlayLabel.Parent := PlayButton

PauseButton := TPanel.Create(WizardForm)
PauseButton.Left := 50
PauseButton.Top := 320
PauseButton.Width := 32
PauseButton.Height := 33
PauseButton.Cursor := crHand
PauseButton.ShowHint := True
PauseButton.Hint := 'Приостановить музыку'
PauseButton.OnClick := @PauseButtonOnClick
PauseButton.Parent := WizardForm

PauseImage := TBitmapImage.Create(WizardForm)
PauseImage.Left := -32
PauseImage.Top := 0
PauseImage.Width := 288
PauseImage.Height := 33
PauseImage.Enabled := False
PauseImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\MusicButton.bmp'))
PauseImage.Parent := PauseButton
//
PauseImage.ReplaceColor:=$E2E2E2
PauseImage.ReplaceWithColor:=clBtnFace

PauseLabel := TLabel.Create(WizardForm)
PauseLabel.Width := PauseButton.Width
PauseLabel.Height := PauseButton.Height
PauseLabel.Autosize := False
PauseLabel.Transparent := True
PauseLabel.OnClick := @PauseButtonOnClick
PauseLabel.OnMouseDown := @PauseMouseDown
PauseLabel.OnMouseUp := @PauseMouseUp
PauseLabel.OnMouseMove := @PauseMouseMove
PauseLabel.Parent := PauseButton

StopButton := TPanel.Create(WizardForm)
StopButton.Left := 82
StopButton.Top := 320
StopButton.Width := 32
StopButton.Height := 33
StopButton.Cursor := crHand
StopButton.ShowHint := True
StopButton.Hint := 'Остановить музыку'
StopButton.OnClick := @StopButtonOnClick
StopButton.Parent := WizardForm

StopImage := TBitmapImage.Create(WizardForm)
StopImage.Left := -64
StopImage.Top := 0
StopImage.Width := 288
StopImage.Height := 33
StopImage.Enabled := False
StopImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\MusicButton.bmp'))
StopImage.Parent := StopButton
//
StopImage.ReplaceColor:=$E2E2E2
StopImage.ReplaceWithColor:=clBtnFace

StopLabel := TLabel.Create(WizardForm)
StopLabel.Width := StopButton.Width
StopLabel.Height := StopButton.Height
StopLabel.Autosize := False
StopLabel.Transparent := True
StopLabel.OnClick := @StopButtonOnClick
StopLabel.OnMouseDown := @StopMouseDown
StopLabel.OnMouseUp := @StopMouseUp
StopLabel.OnMouseMove := @StopMouseMove
StopLabel.Parent := StopButton
end;

procedure DeinitializeSetup();
begin
BASS_Stop();
BASS_Free();
end;

nik1967 07-06-2010 23:36 1429673

SeDmY,
Пробуйте.
[Setup]
SourceDir=.
OutputDir=Setup
AppName=Terminator Salvation
AppVerName=Terminator Salvation
AppVersion=Terminator Salvation
AppPublisher=Pro100(ой)RePack
AppCopyright=Pro100(ой)RePack
DefaultDirName={pf}\Terminator Salvation
DefaultGroupName=Terminator Salvation
AllowNoIcons=true
OutputBaseFilename=setup
WizardImageFile=E:\Инсталяторы\Phoenix.bmp
WizardSmallImageFile=E:\Инсталяторы\Phoenix 2.bmp
SetupIconFile=E:\Games\icon.ico
WindowVisible=false
WindowShowCaption=false
WindowResizable=false
Compression=lzma/ultra64
SolidCompression=true
DiskSpanning=true
DiskSliceSize=2100000000
SlicesPerDisk=1
InternalCompressLevel=none
WizardImageBackColor=clWhite

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

[Types]
Name: full; Description: Полная установка
Name: custom; Description: Выборочная установка; Flags: iscustom

[Components]
Name: g0; Description: Terminator Salvation; Types: full custom; Flags: disablenouninstallwarning checkablealone fixed
Name: g0\c1; Description: DirectX; Types: full; Flags: dontinheritcheck
Name: g0\c2; Description: OpenAL; Types: full; Flags: dontinheritcheck
Name: g0\c3; Description: PhysX; Types: full; Flags: dontinheritcheck

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

[Files]
Source: BASS.dll; DestDir: {tmp}; Flags: dontcopy noencryption
Source: sound.mp3; DestDir: {tmp}; Flags: dontcopy noencryption nocompression
Source: MusicButton.bmp; DestDir: {tmp}; Flags: dontcopy
Source: ISSkin.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: steam.cjstyles; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: E:\Games\Support\DirectX\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: g0\c1
Source: E:\Games\Support\OpenAL\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: g0\c2
Source: E:\Games\Support\PhysX\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: g0\c3

[Icons]
Name: {group}\Terminator Salvation; Filename: {app}\TerminatorSalvation.exe; WorkingDir: {app}
Name: {userdesktop}\Terminator Salvation; Filename: {app}\TerminatorSalvation.exe; WorkingDir: {app}; Tasks: desktopicon
Name: {group}\{cm:UninstallProgram,Terminator Salvation}; Filename: {uninstallexe}

[Run]
Description: {cm:LaunchProgram, Terminator Salvation}; Filename: {app}\TerminatorSalvation.exe; WorkingDir: {app}; Flags: nowait postinstall skipifsilent unchecked
Filename: {win}\regedit.exe; Parameters: /s {tmp}\Терминатор.reg; StatusMsg: Вносим изменения в реестр ...; Flags: waituntilterminated runasoriginaluser; Components:

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

[code]
procedure LoadSkin(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@files:isskin.dll stdcall';
procedure UnloadSkin(); external 'UnloadSkin@files:isskin.dll stdcall';
function ShowWindow(hWnd: Integer; uType: Integer): Integer; external 'ShowWindow@user32.dll stdcall';

const
BASS_ACTIVE_STOPPED = 0;
BASS_ACTIVE_PLAYING = 1;
BASS_ACTIVE_STALLED = 2;
BASS_ACTIVE_PAUSED = 3;
BASS_SAMPLE_LOOP = 4;

var
mp3Handle: HWND;
mp3Name: String;
PlayButton, PauseButton, StopButton: TPanel;
PlayImage, PauseImage, StopImage: TBitmapImage;
PlayLabel, PauseLabel, StopLabel: TLabel;
MouseLabel: Tlabel;

function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean;
external 'BASS_Init@files:BASS.dll stdcall delayload';

function BASS_StreamCreateFile(mem: BOOL; f: PAnsiChar; offset: DWORD; length: DWORD; flags: DWORD): DWORD;
external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';

function BASS_Start(): Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';

function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';

function BASS_ChannelIsActive(handle: DWORD): Integer;
external 'BASS_ChannelIsActive@files:BASS.dll stdcall delayload';

function BASS_ChannelPause(handle: DWORD): Boolean;
external 'BASS_ChannelPause@files:BASS.dll stdcall delayload';

function BASS_Stop(): Boolean;
external 'BASS_Stop@files:BASS.dll stdcall delayload';

function BASS_Pause(): Boolean;
external 'BASS_Pause@files:BASS.dll stdcall delayload';

function BASS_Free(): Boolean;
external 'BASS_Free@files:BASS.dll stdcall delayload';

procedure PlayMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
PlayImage.Left := -96
end;

procedure PlayMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
PlayImage.Left := 0
end;

procedure PlayMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if PlayImage.Left <> -96 then PlayImage.Left := -192
StopImage.Left := -64
end;

procedure PauseMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
PauseImage.Left := -128
end;

procedure PauseMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
PauseImage.Left := -32
end;

procedure PauseMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if PauseImage.Left <> -128 then PauseImage.Left := -224
StopImage.Left := -64
end;

procedure StopMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
StopImage.Left := -160
end;

procedure StopMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
StopImage.Left := -64
end;

procedure StopMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if StopImage.Left <> -160 then StopImage.Left := -256
PlayImage.Left := 0
PauseImage.Left := -32
end;

procedure MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
PlayImage.Left := 0
PauseImage.Left := -32
StopImage.Left := -64
end;

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('Терминатор.reg');
ExtractTemporaryFile('steam.cjstyles');
LoadSkin(ExpandConstant('{tmp}')+'\steam.cjstyles', '');
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('sound.mp3');
mp3Name := ExpandConstant('{tmp}\sound.mp3');
BASS_Init(-1, 44100, 0, 0, 0);
mp3Handle := BASS_StreamCreateFile(FALSE, PChar(mp3Name), 0, 0, BASS_SAMPLE_LOOP);
BASS_Start();
BASS_ChannelPlay(mp3Handle, False);
Result := True;
end;

procedure PlayButtonOnClick(Sender: TObject);
begin
case BASS_ChannelIsActive(mp3Handle) of
BASS_ACTIVE_PAUSED:
begin
BASS_ChannelPlay(mp3Handle, False);
PlayButton.Hide
PauseButton.Show
end;
BASS_ACTIVE_STOPPED:
begin
BASS_Init(-1, 44100, 0, 0, 0);
mp3Handle := BASS_StreamCreateFile(FALSE, PChar(mp3Name), 0, 0, BASS_SAMPLE_LOOP);
BASS_Start();
BASS_ChannelPlay(mp3Handle, False);
PlayButton.Hide
PauseButton.Show
end;
end;
end;

procedure PauseButtonOnClick(Sender: TObject);
begin
BASS_ChannelPause(mp3Handle);
PauseButton.Hide
PlayButton.Show
end;

procedure StopButtonOnClick(Sender: TObject);
begin
BASS_Stop();
BASS_Free();
PauseButton.Hide
PlayButton.Show
end;

procedure InitializeWizard();
begin
WizardForm.TypesCombo.ItemIndex:=0;
WizardForm.BeveledLabel.Enabled:=True;

ExtractTemporaryFile('MusicButton.bmp')

MouseLabel := TLabel.Create(WizardForm)
MouseLabel.Width := WizardForm.Width
MouseLabel.Height := WizardForm.Height
MouseLabel.Autosize := False
MouseLabel.Transparent := True
MouseLabel.OnMouseMove := @MouseMove
MouseLabel.Parent := WizardForm

PlayButton := TPanel.Create(WizardForm)
PlayButton.Left := 50
PlayButton.Top := 320
PlayButton.Width := 32
PlayButton.Height := 33
PlayButton.Cursor := crHand
PlayButton.ShowHint := True
PlayButton.Hint := 'Воспроизведение музыки'
PlayButton.OnClick := @PlayButtonOnClick
PlayButton.Parent := WizardForm

PlayImage := TBitmapImage.Create(WizardForm)
PlayImage.Left := 0
PlayImage.Top := 0
PlayImage.Width := 288
PlayImage.Height := 33
PlayImage.Enabled := False
PlayImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\MusicButton.bmp'))
PlayImage.Parent := PlayButton
PlayImage.ReplaceColor:=$E2E2E2
PlayImage.ReplaceWithColor:=clBtnFace

PlayLabel := TLabel.Create(WizardForm)
PlayLabel.Width := PlayButton.Width
PlayLabel.Height := PlayButton.Height
PlayLabel.Autosize := False
PlayLabel.Transparent := True
PlayLabel.OnClick := @PlayButtonOnClick
PlayLabel.OnMouseDown := @PlayMouseDown
PlayLabel.OnMouseUp := @PlayMouseUp
PlayLabel.OnMouseMove := @PlayMouseMove
PlayLabel.Parent := PlayButton

PauseButton := TPanel.Create(WizardForm)
PauseButton.Left := 50
PauseButton.Top := 320
PauseButton.Width := 32
PauseButton.Height := 33
PauseButton.Cursor := crHand
PauseButton.ShowHint := True
PauseButton.Hint := 'Приостановить музыку'
PauseButton.OnClick := @PauseButtonOnClick
PauseButton.Parent := WizardForm

PauseImage := TBitmapImage.Create(WizardForm)
PauseImage.Left := -32
PauseImage.Top := 0
PauseImage.Width := 288
PauseImage.Height := 33
PauseImage.Enabled := False
PauseImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\MusicButton.bmp'))
PauseImage.Parent := PauseButton

PauseImage.ReplaceColor:=$E2E2E2
PauseImage.ReplaceWithColor:=clBtnFace

PauseLabel := TLabel.Create(WizardForm)
PauseLabel.Width := PauseButton.Width
PauseLabel.Height := PauseButton.Height
PauseLabel.Autosize := False
PauseLabel.Transparent := True
PauseLabel.OnClick := @PauseButtonOnClick
PauseLabel.OnMouseDown := @PauseMouseDown
PauseLabel.OnMouseUp := @PauseMouseUp
PauseLabel.OnMouseMove := @PauseMouseMove
PauseLabel.Parent := PauseButton

StopButton := TPanel.Create(WizardForm)
StopButton.Left := 82
StopButton.Top := 320
StopButton.Width := 32
StopButton.Height := 33
StopButton.Cursor := crHand
StopButton.ShowHint := True
StopButton.Hint := 'Остановить музыку'
StopButton.OnClick := @StopButtonOnClick
StopButton.Parent := WizardForm

StopImage := TBitmapImage.Create(WizardForm)
StopImage.Left := -64
StopImage.Top := 0
StopImage.Width := 288
StopImage.Height := 33
StopImage.Enabled := False
StopImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\MusicButton.bmp'))
StopImage.Parent := StopButton

StopImage.ReplaceColor:=$E2E2E2
StopImage.ReplaceWithColor:=clBtnFace

StopLabel := TLabel.Create(WizardForm)
StopLabel.Width := StopButton.Width
StopLabel.Height := StopButton.Height
StopLabel.Autosize := False
StopLabel.Transparent := True
StopLabel.OnClick := @StopButtonOnClick
StopLabel.OnMouseDown := @StopMouseDown
StopLabel.OnMouseUp := @StopMouseUp
StopLabel.OnMouseMove := @StopMouseMove
StopLabel.Parent := StopButton
end;

procedure DeinitializeSetup();
begin
ShowWindow(WizardForm.Handle,0);
UnloadSkin();

BASS_Stop();
BASS_Free();
end;

Только я не понял, для чего такой муз. код?
И для чего ExtractTemporaryFile('Терминатор.reg');?

SeDmY 08-06-2010 00:09 1429686

Цитата:

Цитата nik1967
Только я не понял, для чего такой муз. код?
И для чего ExtractTemporaryFile('Терминатор.reg');? »

ExtractTemporaryFile('Терминатор.reg') сделала программа GameScript Generator, я удалил эту строчку!

Если есть возможность, то я ищу муз. код, который бы начинал воспроизведение mp3 фоново, но позволял включать\отключать музыку во время инсталяции игры - по желанию!

За скрипт спасибо!

+ Люди, научите запаковывать FreeArc-ом игры в ехе архивы или вообще работать с FreeArc+Inno Setup, а то уже ошибка: "...не является файлом Win32..." меня достала уже при тестировании архива...

nik1967 08-06-2010 00:18 1429691

SeDmY, А чем Вам не нравятся скрипты YURSHAT-а? Там вроде всё есть и FreeArc и отключаемая фоновая музыка. А по поводу "...не является файлом Win32..." на сколько я помню, Windows не работает корректно с *.exe файлами больше 2 гигобайт.

alex2010 08-06-2010 00:19 1429692

Цитата:

Цитата SeDmY
Если есть возможность, то я ищу муз. код, который бы начинал воспроизведение mp3 фоново, но позволял включать\отключать музыку во время инсталяции игры - по желанию! »

я выкладывал на underverse.su

SeDmY 08-06-2010 00:24 1429696

Цитата:

Цитата nik1967
SeDmY, А чем Вам не нравятся скрипты YURSHAT-а? »

Я до них еще не добрался))) Можно ссылочку))

Цитата:

Цитата alex2010
я выкладывал на underverse.su »

Не так я и давно на том форуме)) Мне казалось, что я использовал один из скриптов архива "Музыка" скачанный оттуда, но как-то не очень клеится))

nik1967 08-06-2010 00:36 1429702

SeDmY, в шапке под спойлером Ссылки на примеры скриптов: Need for Speed™ Undercover.iss v 2.2. А так много на

SeDmY 08-06-2010 18:23 1430104

Пытаюсь научиться использовать FreeArc c InnoSetup, назрел вопрос:



В чем беда!?

Habetdin 08-06-2010 23:53 1430351

nik1967,
Цитата:

Цитата nik1967
И для чего ExtractTemporaryFile('Терминатор.reg');? »

Чтобы твики применились:
Цитата:

[Run]
Description: {cm:LaunchProgram, Terminator Salvation}; Filename: {app}\TerminatorSalvation.exe; WorkingDir: {app}; Flags: nowait postinstall skipifsilent unchecked
Filename: {win}\regedit.exe; Parameters: /s {tmp}\Терминатор.reg; StatusMsg: Вносим изменения в реестр ...; Flags: waituntilterminated runasoriginaluser

SeDmY,
Цитата:

Цитата SeDmY
В чем беда!? »

добавьте в конце строки ;

SeDmY 09-06-2010 00:30 1430369

Цитата:

Цитата Habetdin
добавьте в конце этой строки ; »

как ни странно, но не помогает точка с запятой после s... Та же ошибка

nik1967 09-06-2010 00:39 1430373

Habetdin,
А что, через секцию [Registry] нельзя это сделать?

SeDmY 09-06-2010 00:43 1430375

Друзя, у меня с InnoSetup косяк какой-то... Если ставить уровень сжатия выше normal, то во время компиляции программа зависает(((

MaxHacker 09-06-2010 09:28 1430537

SeDmY,
Если размер сжымаемых 500мб и больше попробуй просто подождать (на всяк случай сделай дефрагментацию ЖД и тд)
Хотя лучше всего просто переустановить InnoSetup

SeDmY 09-06-2010 10:40 1430577

Цитата:

Цитата MaxHacker
SeDmY,
Если размер сжымаемых 500мб и больше попробуй просто подождать (на всяк случай сделай дефрагментацию ЖД и тд)
Хотя лучше всего просто переустановить InnoSetup »

Попробую почистить))

По поводу подождать: Включал компиляцию утром перед тем как уйти на работу, оставлял так компьютер до прихода - изменений не было... висела программа! Переустановку делал несколько раз и "a" ставил и "u" ставил версии... Чаще всего бывает так: вроде собрал нормально скрипт, проверил запуск без основной папки с игрой - все работает, а при добавлении уже папки с игрой - ошибка, остановка программы и просьба отправить отчет...

tema47 09-06-2010 20:25 1430963

Всем привет, А скажите как сделать чтобы инстлятор был не белого цвета а чёрного, и как поставить фото?

А как сделать вот такой инстлятор.? http://radikal.ru/F/s47.radikal.ru/i...9a5c0.jpg.html если можно напишите скрипт у кого есть.

alex2010 09-06-2010 23:23 1431080

Цитата:

Цитата tema47
А как сделать вот такой инстлятор.? http://radikal.ru/F/s47.radikal.ru/i...9a5c0.jpg.html если можно напишите скрипт у кого есть. »

вот скрипт от YURSHAT
http://www.forum.oszone.ru/post-1409866-1784.html
Цитата:

Цитата tema47
А скажите как сделать чтобы инстлятор был не белого цвета а чёрного »

Color = clblack;
Цитата:

Цитата tema47
и как поставить фото? »

скрипт из шапки темы
http://www.forum.oszone.ru/post-1242285-250.html

SeDmY 09-06-2010 23:46 1431095

Цитата:

Цитата alex2010
вот скрипт от YURSHAT
http://www.forum.oszone.ru/post-1409866-1784.html »

Так как с Free Arc-ом полностью не разобрался да и как на него указывать в IS, можешь помочь!? Как в этот скрипт указать arc архив, где прописывать!?

alex2010 10-06-2010 00:00 1431105

SeDmY,
самое начало скрипта:

#define ArcLocation "{src}\*.arc"

означает, что будут распаковываться все архивы с расширением .arc, которые находятся в корне инсталятора(setup.exe)

SeDmY 10-06-2010 00:10 1431113

Цитата:

Цитата alex2010
SeDmY,
самое начало скрипта:
#define ArcLocation "{src}\*.arc"
означает, что будут распаковываться все архивы с расширением .arc, которые находятся в корне инсталятора(setup.exe) »

Прописывается весь путь к архиву (с диском вместе)!? + глупый вопрос: после фигурной скобки или наклонной черты!?

В Files добавлять ничего не надо!? Просто, я указал полный путь к архиву после фигурной скобки, а при компиляции как не видела программа архив, так и не видит.... только оболочка на выходе(

alex2010 10-06-2010 00:26 1431132

SeDmY, при компиляции архив и не должен подхватываться.
Цитата:

Цитата SeDmY
Прописывается весь путь к архиву (с диском вместе)! »

да
{src} означает, что файлы лежат в одном месте с инсталятором.
Вот пример как у меня:

при установке, инсталятор автоматически подхватит 123.arc(и другие архивы *.arc, если таковы имеются) и распакует его в заданную папку(которую ты указал при установке)

SeDmY 10-06-2010 01:06 1431164

Теперь ясно.... Я просто думал, что архив в установочник уйдет, а тут оказывается все намного проще)

Habetdin 10-06-2010 01:38 1431179

SeDmY, курсор останавливается после места с ошибкой, надо добавить ";" в строке перед выделенной красным :)

SeDmY 10-06-2010 02:01 1431188

Цитата:

Цитата Habetdin
SeDmY, курсор останавливается после места с ошибкой, надо добавить ";" в строке перед выделенной красным »

Спасибо! Получилось)))))))

Что есть это:


BooSla 10-06-2010 12:17 1431426

Подскажите, пожалуйста, а то что-то не могу найти нигде.
Файлу установки передаются параметры в командной строке. Надо отменить установку, если строка пустая. Проверка есть.


Как запостила - сразу и сообразила. На InitializeSetup() повесила проверку, если пустая строка - Result := false;

tema47 10-06-2010 13:05 1431467

вот такая ошибка.http://10pix.ru/img1/5062/1617324.jpg что делать?

alex2010 10-06-2010 14:03 1431505

Цитата:

Цитата SeDmY
Что есть это: »

нужно прописать данный идентификатор в секцию var вот так:
Код:

lblExtractFileName: TLabel;


Цитата:

Цитата tema47
вот такая ошибка.http://10pix.ru/img1/5062/1617324.jpg что делать? »

судя по ошибке нужно скачать и установить препроцессор

BaRSPRO 10-06-2010 21:58 1431782

всем доброго времени суток, у меня проблемка заключается в том что при распаковке архивов, первый архив доходит до архива setup-a.bin создаваемым при компиляции и тут появляется ошибка" якобы архив битый" . Скрипт NFS v2.2
можно ли вообще избежать создания архива рядом с setup.exe

alex2010 10-06-2010 22:51 1431802

BaRSPRO, ИМХО должны распаковываться .arc архивы

Lol2xD. 11-06-2010 14:27 1432186

Вопрос к Seregе, как в твоем скрипте ExecAndWait.iss отключить кнопку Отмена и Закрыть.

BaRSPRO 12-06-2010 12:23 1432697

Доброго времени суток, возникла проблема, создаю инстал с помощью Need for Speed™ Undercover.iss v 2.2, а архивы не распаковывает пишет, что архив не возможно распаковать, запускал другие repack`s других репакеров, такая же проблема. в чем может быть проблема. Большая просьба, помочь!

Habetdin 12-06-2010 18:22 1432883

Цитата:

Цитата BaRSPRO
доходит до архива setup-a.bin создаваемым при компиляции и тут появляется ошибка" якобы архив битый" »

"setup-a.bin создаваемый при компиляции" - это не arc-архив :)
Вам нужно файлы игры запаковать в arc » Документация FreeArc

shurfic 12-06-2010 18:48 1432892

Подскажите пожалуйста, как в этот скрипт добавить еще одну флэшку?
читать дальше »
Код:

procedure ISFlash_init(Handle:HWND; Ffile: PAnsiChar);
external 'isflash_init@files:ISFlash.dll stdcall';

procedure ISFlash_free;
external 'isflash_free@files:ISFlash.dll stdcall';

procedure InitializeWizard();
var
  FlashPanel: TPanel;
begin
  FlashPanel := TPanel.Create(WizardForm);
  FlashPanel.Parent := WizardForm.WelcomePage;
  FlashPanel.Top := WizardForm.OuterNotebook.Height - 313;
  FlashPanel.Left := 0;
  FlashPanel.Height := 313;
  FlashPanel.Width := 497;
  ExtractTemporaryFile('flash1.swf')
  ISFlash_init(FlashPanel.Handle, ExpandConstant('{tmp}\flash1.swf'));
end;

procedure DeinitializeSetup();
begin
  ISFlash_free;
end;


nik1967 12-06-2010 19:19 1432908

BaRSPRO,
2 варианта.
1. создать рядом с установочным файлом папку Bin, и архивы переместить в эту папку. #define ArcLocation "{src}\Bin\*.bin"
2. в секции [Setup] добавить DiskSpanning=no. Единственно, в этом случае файл Setup может быть большого размера.

nik1967 12-06-2010 19:48 1432923

del

BaRSPRO 13-06-2010 09:33 1433140

Вообщем не чего не помогло! ОЧень жаль=(!

Jerichoman 14-06-2010 20:13 1434028

как сделать, чтобы 7z архив, который обработан srep'ом, распаковался после распаковки arc архивов, а то как ни пытался через секцию Run батником (пытается распаковаться до распаковки arc) и через Code (там вообще ничего не происходило) не получается

Artem1143 15-06-2010 00:16 1434180

Jerichoman

Вот пример сперва Арк распаковывается ,потом Срип ,потом Перкомп и наконец 7зип
Убереш прекомп если он тебе мешает (и да депак.ехе ето распакошик зип архивов если поишеш то и его найдеш

[Run]


Filename: "{app}\Arc.exe"; Parameters: "x -dp Data1.pcf.srep.arc"; WorkingDir: "{app}"; StatusMsg: "Восстановление игровых файлов 10%..."; Flags: runhidden;
Filename: "cmd.exe"; Parameters: "/C del /F /Q Data1.pcf.srep.arc"; WorkingDir: "{app}"; StatusMsg: "Удаление мусора..."; Flags: runhidden;

Filename: "{app}\srep.exe"; Parameters: "-d Data1.pcf.srep Data1.pcf"; WorkingDir: "{app}" ; Check: "not IsWin64" ; StatusMsg: "Восстановление игровых файлов 20%...";
Filename: "cmd.exe"; Parameters: "/C del /F /Q Data1.pcf.srep"; WorkingDir: "{app}"; StatusMsg: "Удаление мусора..."; Flags: runhidden;


Filename: "{app}\precomp.exe"; WorkingDir: "{app}"; Parameters: "-r Data1.pcf" ; StatusMsg: "Восстанавливаются игровые архивы, 30% выполнено..."; Flags: runminimized runasoriginaluser
Filename: "cmd.exe"; WorkingDir: "{app}"; Parameters: "/C del /F /Q Data1.pcf"; Flags: runhidden runasoriginaluser

Filename: "{app}\depack.exe"; Parameters: "x Data1.7z -o""{app}\"" -y"; WorkingDir: "{app}\"; StatusMsg: "Восстановление игровых файлов 30%...";
Filename: "cmd.exe"; Parameters: "/C del /F /Q Data1.7z"; WorkingDir: "{app}"; StatusMsg: "Удаление мусора..."; Flags: runhidden;

Jerichoman 15-06-2010 10:11 1434334

Artem1143
У меня распаковка arc через код, поэтому опять через run он будет пытаться сначала распаковать zip, а потом уже arc

Cinot 15-06-2010 12:59 1434459

Добрый день! У меня возникла небольшая проблема в понимании языка структуры Source в Inno Setup.

Дело в том, что первое окно установки у меня создано посредством скрипта (code), где имеется edit_box. Мне нужно продумать 2 варианта: если в edit_box введено правильное выражение, то в Source необходимо копировать файлы для полной версии программы; если же edit_box пустое или неверное, то устанавливать файлы демо-версии. Вопрос в том, как реализовать этот if и какова структура Source? Например,
Source: "{code:version}/*.dll"; DestDir: "{app}\Programs"

т.е. тут возможны либо "Full/*.dll", либо "Demo/*.dll" (эти папки уже созданы, и в них лежат соответствующие файлы).

BlackSelf 16-06-2010 00:23 1434934

Cinot, ну, например, так (добавьте к своему скрипту):
читать дальше »
Код:

[Files]
Source: "D:\file1.txt"; DestDir: "{app}\Programs"; Flags: ignoreversion recursesubdirs createallsubdirs; Check: not Full;
Source: "D:\file2.txt"; DestDir: "{app}\Programs"; Flags: ignoreversion recursesubdirs createallsubdirs; Check: Full;

[Code]
var
  FullCheck: TCheckBox;

function Full: Boolean;
begin
  Result:=FullCheck.Checked;
end;

procedure InitializeWizard;
begin
  FullCheck := TCheckBox.Create(WizardForm);
  with FullCheck do
  begin
  Parent := WizardForm;
  Left := 0;
  Top := 0;
  Width := 0;
  Height := 0;
  TabOrder := 0;
  Checked := False;
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
  s: string;
begin
  if CurStep = ssinstall then
  begin
    s:=Edit.Text;
    If s='12345' then FullCheck.Checked:=True
    else FullCheck.Checked:=False;
  end;
end;


R.i.m.s.k.y. 16-06-2010 08:42 1435031

Цитата:

Цитата Cinot
Вопрос в том, как реализовать этот if и какова структура Source »

Source: "{code:version}/*.dll"; DestDir: "{app}\Programs"; Check: MyCheck

[_Code]
Function MyCheck():boolean;
Begin
//проверка что-то где-то введено
End;

Примерно так.

Если MyCheck возвращает True, то строчка с Check: MyCheck выполняется, если MyCheck возвращает False, то строчка с Check: MyCheck пропускается

Cinot 16-06-2010 11:33 1435145

Извините, а более полного примера у Вас не найдётся? У меня что-то ничего не получается сделать на основе этого =)

R.i.m.s.k.y. 16-06-2010 11:59 1435165

Цитата:

Цитата Cinot
более полного примера у Вас не найдётся »

Надейтся, вот из справки:
Код:


[Files]
Source: "MYPROG.EXE"; DestDir: "{app}"; Check: MyProgCheck
Source: "A\MYFILE.TXT"; DestDir: "{app}"; Check: MyDirCheck(ExpandConstant('{app}\A'))
Source: "B\MYFILE.TXT"; DestDir: "{app}"; Check: DirExists(ExpandConstant('{app}\B'))

[_Code]
var
  MyProgChecked: Boolean;
  MyProgCheckResult: Boolean;

function MyProgCheck(): Boolean;
begin
  if not MyProgChecked then begin
    MyProgCheckResult := MsgBox('Do you want to install MyProg.exe to ' + ExtractFilePath(CurrentFileName) + '?', mbConfirmation, MB_YESNO) = idYes;
    MyProgChecked := True;
  end;
  Result := MyProgCheckResult;
end;

function MyDirCheck(DirName: String): Boolean;
begin
  Result := DirExists(DirName);
end;

Вот из моего инсталлера
Код:

[Components]
Name: mpc; Description: Настройки Media Player Classic Home Cinema; Check: mpcexists
[_Code]
function mpcexists(): Boolean;
Var MPCPath: string;
begin
  RegQueryStringValue(HKLM, 'SOFTWARE\Gabest\Media Player Classic','ExePath', MPCPath);
  if FileExists (MPCPath) then Result := True else Result := False;
end;

Функцию Check можно лепить во все секции кроме Code и Setup

Cinot 16-06-2010 15:17 1435302

Спасибо, очень помогло!

R.i.m.s.k.y. 16-06-2010 16:08 1435361

Цитата:

Цитата Cinot
Спасибо, очень помогло »

Пожалуйста, я конечно, не Serega, но чем смогу - помогу.
Офф: а есть подобный форум по Visual Basic? Чтобы с примерами и справкой с чего начать

SeDmY 16-06-2010 18:29 1435476

Доброго времени суток! Хотелось бы спросить про доп. программное обеспечение игры:

После установки игры DirectX и всякая мелкая дребедень дополнительная копируется в папку с игрой и устанавливается, после чего так и остается там, а можно сделать так, чтобы после установки этих программ их exe-шники автоматически удалялись из папки!?

nik1967 16-06-2010 20:08 1435535

SeDmY,
А зачем копировать DirectX и всякую мелкую дребедень в папку с игрой?
[Run]
Filename: "{src}\DirectX\DXSETUP.exe"; WorkingDir: "{src}\DirectX"; Parameters: "/silent"; Flags: waituntilterminated
То есть программа работает из директории установки: {src}, и не копируется в папку назначения {app}.

SeDmY 16-06-2010 20:15 1435540

Цитата:

Цитата nik1967
SeDmY,
А зачем копировать DirectX и всякую мелкую дребедень в папку с игрой?
[Run]
Filename: "{src}\DirectX\DXSETUP.exe"; WorkingDir: "{src}\DirectX"; Parameters: "/silent"; Flags: waituntilterminated
То есть программа работает из директории установки: {src}, и не копируется в папку назначения {app}. »

Спасибо за ответ, нужно было втиснуть для стабильной работы, так после установки оставались в папке с игрой! Я сделал немного подругому, в конце добавил :

Source: E:\Games\Support\DirectX\dxwebsetup.exe; DestDir: {app}; Flags: deleteafterinstall

Блин, скрипт выдает мне следующее:



Что не так!?

nik1967 16-06-2010 20:27 1435546

Цитата:

Цитата SeDmY
Что не так!?

Лишний end; :wink: .

SeDmY 16-06-2010 21:18 1435564

Цитата:

Цитата nik1967
Цитата SeDmY:
Что не так!?
Лишний end; . »

Вот что получается:


paravozik2009 16-06-2010 23:03 1435641

Извините,а можно к Inno привязать как-то распаковку cab файлов?

Cinot 17-06-2010 10:52 1435899

R.i.m.s.k.y., у меня ещё небольшой вопрос по поводу поиска по реестру.
Я ищу установленные AutoCAD'ы на компьютере. Все они в реестре имеют вид по такому шаблону:
HKEY_LOCAL_Machine\SOFTWARE\Autodesk\AutoCAD\16.2\409:5005 (а дальше - ключи)
HKEY_LOCAL_Machine\SOFTWARE\Autodesk\AutoCAD\17.1\519:6007 (а дальше - ключи)
Нужно организовать перебор по этим папкам (внутри - перебор по соответствию ключа "ProductName" членам "рукотворного" списка). Я писал, писал, и запутался:

Код:

if RegGetSubkeyNames(HKEY_LOCAL_Machine, 'SOFTWARE\Autodesk\AutoCAD\', Names) then
  begin
    for i:=0 to GetArrayLength(Names)-1 do
      if RegGetSubkeyNames(Names[i], Names2) then
          begin
            for j:=0 to GetArrayLength(Names2)-1 do
            if RegGetSubkeyNames(Names2[j], Names3) then
                begin
                for k:=0 to GetArrayLength(Names3)-1 do
                  if (Names3[k] = 'ProductName') and ...


nik1967 17-06-2010 13:22 1435989

paravozik2009, Именно .cab файлов? Или всё же файлов .arc, переименованных в файлы .cab?

SeDmY 17-06-2010 18:38 1436161

Нужна помощь:



как мне поступить!?

Запустил скрипт : http://forum.ru-board.com/topic.cgi?...&start=1000#20

Даже не менял ничего!

-S.S.V.- 17-06-2010 22:36 1436300

Подскажите пожалуйста, как в скрипте прописать:
Чтобы при установке отображался выбор установки дополнительных компонентов, к примеру:
DirectX и PhysX, чтобы можно было поставить галочку на выборе дополнительного компонента и он бы устанавливался с диска и при этом в тихом режиме.
Заранее благодарю!

R.i.m.s.k.y. 18-06-2010 10:25 1436551

Цитата:

Цитата Cinot
писал, и запутался »

На первый взгляд нормально, должно сработать, только что Вы хотите получить? узнать стоит ли он? Это можно узнать по ключу реестра HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\??? (как дальше я не помню, экспортируйте весь этот ключ и поиском в нем найдите AutoCad)
Если нужны параметры, тогда да, надо читать из указанной Вами ветки реестра.
Можно и через гланды - экспортировать HKEY_LOCAL_Machine\SOFTWARE\Autodesk\AutoCAD\ во временную папку текстовым файлом (reg export) :)

PS: я на выходные.

R.i.m.s.k.y. 18-06-2010 10:45 1436571

Цитата:

Цитата -S.S.V.-
Чтобы при установке отображался выбор установки дополнительных компонентов »

Код:

[Components]
Name: DIRECTX; Description: Установить DIRECTX версии ...
Name: PsysX; Description: Установить PsysX версии ...

[Run]
Components: DIRECTX; Filename: {src}\DirectX\directx_mar2009_redist.exe; Parameters: " /Q "; StatusMsg: Установка DirectX. Подождите, пожалуйста; Flags: runhidden waituntilterminated
Components: PsysX; Filename: {src}\PsysX\PsysX.exe; Parameters: " ??? "; StatusMsg: Установка PsysX. Подождите, пожалуйста; Flags: runhidden waituntilterminated

Параметры тихой установки PsysX я не знаю. Запустите установщик PsysX с ключом /? (PsysX.exe /?) - он должен написать какой параметр для тихой установки, его и пропишите вместо ???
{src} - путь к файлу вашего скомпилированного установщика. Рядом с этим установщиком должны лежать папки DirectX и PsysX

tema47 18-06-2010 10:58 1436581

Всем привет. А скажите как сделать чтобы во время установки игры ,данные об игре попали в реестр?

R.i.m.s.k.y. 18-06-2010 11:28 1436608

Цитата:

Цитата SeDmY
Даже не менял ничего »

Чудесато, я брал этот скрипт из шапки этой темы и все робит, попробуйте, все должно работать изначально
Код:

[_Code]
type
 PDisplay_Device = record
  cb: DWord;
  DeviceName: array [0..31] of char;
  DeviceString: array [0..127] of char;
  StateFlags: DWord;
  DeviceID, DeviceKey: array [0..127] of char;
 end;

 TMixerCaps = record
  vPid, vDriverVersion: DWord;
  sName: array [0..31] of char;
  Support, cDestinations: DWord;
 end;

// Проверка версии Windows
#if Pos("4.", GetFileVersion(AddBackslash(GetEnv("windir")) + "Explorer.exe")) == 1
        {Win9x}
  TMemoryStatusEx = record
    dwLength, dwMemoryLoad: DWord;
    LoTotalPhys, LoAvailPhys, LoTotalPageFile, LoAvailPageFile,
    LoTotalVirtual, LoAvailVirtual, LoAvailExtendedVirtual, HiTotalPhys,
    HiAvailPhys, HiTotalPageFile, HiAvailPageFile, HiTotalVirtual, HiAvailVirtual,
    HiAvailExtendedVirtual: Integer;
  end;
  function GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx): Boolean;
  external 'GlobalMemoryStatus@kernel32.dll stdcall';
#else
        {WinNT}
  TMemoryStatusEx = record
    dwLength, dwMemoryLoad: DWord;
    LoTotalPhys, HiTotalPhys, LoAvailPhys, HiAvailPhys,
    LoTotalPageFile, HiTotalPageFile, LoAvailPageFile, HiAvailPageFile,
    LoTotalVirtual, HiTotalVirtual, LoAvailVirtual, HiAvailVirtual, LoAvailExtendedVirtual,
    HiAvailExtendedVirtual: Integer;
  end;
  function GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx): Boolean;
  external 'GlobalMemoryStatusEx@kernel32.dll stdcall';
#endif

const
  DISPLAY_DEVICE_PRIMARY_DEVICE = 4;
  oneMB = 1024*1024;
  NeedMHz = 2200;
  NeedVideoRAM = 256;
  NeedSoundCard = 'Realtek HD';
  NeedMB = 1024;
  NeedPageFile = 2048;

var
  InfoPage: TWizardPage;
  TopText, BottomText: TNewStaticText;
  ChangeText: Boolean;
  SystemPanel, ProcessorPanel, VideoPanel,
  AudioPanel, RAMPanel, PageFilePanel: TMemo;
  SystemVersionPanel, ProcessorMHzPanel, VideoRAMPanel,
  AudioNamePanel, RAMTotalPanel, PageFileTotalPanel: TMemo;
  lpCaps: TMixerCaps;
  Version: TWindowsVersion;
  MemoryEx: TMemoryStatusEx;
  n, errCode: Integer;
  Keys: TArrayOfString;
  DeviceValue: Cardinal;
  lpDisplayDevice: PDisplay_Device;

function GetSystemMetrics(nIndex: Integer): Integer;
 external 'GetSystemMetrics@user32.dll stdcall';

function GetDeviceCaps(hDC, nIndex: Integer): Integer;
 external 'GetDeviceCaps@GDI32 stdcall';

function CreateDC(lpDriverName, lpDeviceName, lpOutput: String; lpInitData: Integer): Integer;
 external 'CreateDCA@GDI32 stdcall';

function EnumDisplayDevices(lpDevice, iDevNum: DWord; var lpDisplayDevice: PDisplay_Device; dwFlags: DWord): Boolean;
 external 'EnumDisplayDevicesA@user32.dll stdcall';

function mixerGetDevCaps(uDeviceID: LongInt; var lpCaps: TMixerCaps; uSize: LongInt): LongInt;
 external 'mixerGetDevCapsA@winmm.dll stdcall';

function mixerGetNumDevs: Integer;
 external 'mixerGetNumDevs@winmm.dll stdcall';

// Дополнить число до кратного Multiple
function ToMultiple(Bytes, Multiple: Integer): Integer;
begin
  if Abs(Bytes/Multiple) > Bytes/Multiple then
    Result := (Bytes/Multiple + 1)*Multiple
  else
    Result := Bytes
end;

// Перевод числа в значение Бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)
function ByteOrTB(Bytes: Extended; noMB: Boolean): String;
begin
 if not noMB then
    Result := FloatToStr(Int(Bytes)) + ' Мб'
 else
                if Bytes < 1024 then
      Result := FloatToStr(Int(Bytes)) + ' Бт'
    else
                        if Bytes/1024 < 1024 then
          Result := FloatToStr(round((Bytes/1024)*10)/10) + ' Кб'
      else
                                        if Bytes/oneMB < 1024 then
            Result := FloatToStr(round(Bytes/oneMB*100)/100) + ' Мб'
          else
            if Bytes/oneMB/1000 < 1024 then
                Result := FloatToStr(round(Bytes/oneMB/1024*1000)/1000) + ' Гб'
            else
                                                          Result := FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) + ' Тб'
 StringChange(Result, ',', '.')
end;

// Удаление начальных, конечных и повторных пробелов
function DelSp(String: String): String;
begin
 while (Pos('  ', String) > 0) do Delete(String, Pos('  ', String), 1)
 Result := Trim(String)
end;

function Size64(Hi, Lo: Integer): Extended;
begin
 Result := Lo
 if Lo < 0 then
    Result := Result + $7FFFFFFF + $7FFFFFFF + 2
 for Hi := Hi-1 downto 0 do Result := Result + $7FFFFFFF + $7FFFFFFF + 2
end;

function CheckCPU(NeedMHz: Integer): Boolean;
var
  String: String;
begin
        String := 'Hardware\Description\System\CentralProcessor'; RegGetSubkeyNames(HKLM, String, Keys)        // Количество ядер
        for n := 0 to GetArrayLength(Keys)-1 do
      RegQueryStringValue(HKLM, String + '\' + Keys[n], 'ProcessorNameString', Keys[n])
        if not RegQueryDWordValue(HKLM, String + '\0', '~MHz', DeviceValue) or (DeviceValue < NeedMHz) then
        Exit
  else
    Result := True
end;

function CheckMemorySize(NeedRAM: Integer): Boolean;
begin
        MemoryEx.dwLength := SizeOf(MemoryEx)
        if not GlobalMemoryStatusEx(MemoryEx) then
        MsgBox('Ошибка функции:' + #13 + 'GlobalMemoryStatusEx', mbError, mb_Ok)
  else
          if (ToMultiple(trunc(Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys)/oneMB), 16) < NeedRAM) then
        Exit
    else
        Result := True
end;

procedure CreateCheckForm();
begin

  TopText := TNewStaticText.Create(InfoPage)
  with TopText do
  begin
    Parent := InfoPage.Surface
    Left := 0
    AutoSize := True
  end

  BottomText := TNewStaticText.Create(InfoPage)
  with BottomText do
  begin
    Parent := InfoPage.Surface
    Caption := 'Когда Вы будете готовы продолжить установку, нажмите «Далее»'
    Font.Color := clGray
    Left := 0
    Top := 200
    AutoSize := True
  end

  SystemPanel := TMemo.Create(InfoPage)
  with SystemPanel do
  begin
    Text := 'Система'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := ScaleY(33)
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := clBlack
  end

  SystemVersionPanel := TMemo.Create(InfoPage)
  with SystemVersionPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := SystemPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  ProcessorPanel := TMemo.Create(InfoPage)
  with ProcessorPanel do
  begin
    Text := 'Процессор'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := SystemPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := clBlack
  end

  ProcessorMHzPanel := TMemo.Create(InfoPage)
  with ProcessorMHzPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := ProcessorPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  VideoPanel := TMemo.Create(InfoPage)
  with VideoPanel do
  begin
    Text := 'Видеоадаптер'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := ProcessorPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := clBlack
  end

  VideoRAMPanel := TMemo.Create(InfoPage)
  with VideoRAMPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := VideoPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  AudioPanel := TMemo.Create(InfoPage)
  with AudioPanel do
  begin
    Text := 'Звуковая карта'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := VideoPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := clBlack
  end

  AudioNamePanel := TMemo.Create(InfoPage)
  with AudioNamePanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := AudioPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  RAMPanel := TMemo.Create(InfoPage)
  with RAMPanel do
  begin
    Text := 'Объём памяти'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := AudioPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := clBlack
  end

  RAMTotalPanel := TMemo.Create(InfoPage)
  with RAMTotalPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := RAMPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  PageFilePanel := TMemo.Create(InfoPage)
  with PageFilePanel do
  begin
    Text := 'Файл подкачки'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := RAMPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := clBlack
  end;

  PageFileTotalPanel := TMemo.Create(InfoPage)
  with PageFileTotalPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := PageFilePanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

end;

procedure UpdateInfo();
var
  DeviceName, DeviceKey: String;
begin
  ChangeText := False

  GetWindowsVersionEx(Version)

  // Операционная система:
  SystemVersionPanel.Color := clBlack
    SystemVersionPanel.Font.Color := clGreen

  DeviceKey := 'Software\Microsoft\Windows NT\CurrentVersion'
  if not UsingWinNT then StringChange(DeviceKey, 'Windows NT', 'Windows')
        RegQueryStringValue(HKLM, DeviceKey, 'ProductName', DeviceName)
  if RegQueryStringValue(HKLM, DeviceKey, 'CSDVersion', DeviceKey) then
    DeviceName := DeviceName + ' ' + DeviceKey
        StringChange(DeviceName, 'Microsoft ', '')
  SystemVersionPanel.Text := ' ' + DeviceName + ' сборка ' + IntToStr(Version.Major) + '.' + IntToStr(Version.Minor) +
                            '.' + IntToStr(Version.Build)

  if (Pos('2000 Service Pack 4', SystemVersionPanel.Text) = 0) and  // Windows 2000 SP4
    (Pos('XP Service Pack 2', SystemVersionPanel.Text) = 0) and  // Windows XP SP2
    (Pos('XP Service Pack 3', SystemVersionPanel.Text) = 0) and  // Windows XP SP3
    (Pos('Vista', SystemVersionPanel.Text) = 0) then  // Windows Vista (c любым SP или без него)
    begin
      SystemVersionPanel.Color := clBlack
      SystemVersionPanel.Font.Color := clRed
      ChangeText := True
    end

  // Процессор:
  ProcessorMHzPanel.Color := clBlack
  ProcessorMHzPanel.Font.Color := clGreen

  if not CheckCPU(NeedMHz) then
    begin
      ProcessorMHzPanel.Color := clBlack
      ProcessorMHzPanel.Font.Color := clRed
      ChangeText := True
    end

  ProcessorMHzPanel.Text := ' ' + DelSp(Keys[0]) + ' @' + IntToStr(DeviceValue) + ' MHz'
  if GetArrayLength(Keys) > 1 then
    ProcessorPanel.Text := 'Процессоры' // + ' (' + IntToStr(GetArrayLength(Keys)) + ')'

  // Видеокарта:
  VideoRAMPanel.Color := clBlack
  VideoRAMPanel.Font.Color := clGreen

  lpDisplayDevice.cb := SizeOf(lpDisplayDevice)
  DeviceKey := ''
        n := 0
  while not (EnumDisplayDevices(0, n, lpDisplayDevice, 0) and
            (lpDisplayDevice.StateFlags and DISPLAY_DEVICE_PRIMARY_DEVICE > 0)) and (n < 127) do n := n + 1
        for n := 0 to 127 do DeviceKey := DeviceKey + lpDisplayDevice.DeviceKey[n]
  Delete(DeviceKey, Pos(Chr(0), DeviceKey), 127)  // Ключ драйвера получаем из API
        StringChange(DeviceKey, '\Registry\Machine\', '')
  errCode := 1
  DeviceValue := 0
  if RegQueryBinaryValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', DeviceName) then
                for n := 1 to Length(DeviceName) do
      begin
        DeviceValue := DeviceValue + Ord(DeviceName[n])*errCode
        errCode := errCode*$100
      end
  else
    if RegQueryDWordValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', DeviceValue) then
    else
        RegQueryDWordValue(HKLM, DeviceKey + '\Info', 'VideoMemory', DeviceValue)
        DeviceName := ''
  for n := 0 to 127 do DeviceName := DeviceName + lpDisplayDevice.DeviceString[n]
  Delete(DeviceName, Pos(Chr(0), DeviceName), 127)

  if DeviceName <> '' then
    if DeviceValue > 0 then
      VideoRAMPanel.Text := ' ' + DelSp(DeviceName) + ', '+ ByteOrTB(DeviceValue/oneMB, False)
    else
      VideoRAMPanel.Text := ' ' + DelSp(DeviceName) + ' (Standard), '+ ByteOrTB(DeviceValue/oneMB, False)
  else
    begin
      VideoRAMPanel.Text := ' Драйвер устройства не обнаружен'
      VideoRAMPanel.Color := clBlack
      VideoRAMPanel.Font.Color := clRed
      ChangeText := True
    end
  if (DeviceValue/oneMB < NeedVideoRAM) then
    begin
      VideoRAMPanel.Color := clBlack
      VideoRAMPanel.Font.Color := clRed
      ChangeText := True
    end
  VideoRAMPanel.Text := VideoRAMPanel.Text + ', ' + IntToStr(GetSystemMetrics(0)) + 'x' +
                        IntToStr(GetSystemMetrics(1)) + ' (' + IntToStr(GetDeviceCaps(CreateDC('DISPLAY','','',0),14) *
                        GetDeviceCaps(CreateDC('DISPLAY','','',0),12)) + ' bit)'

  // Звуковая карта:
  AudioNamePanel.Color := clBlack
  AudioNamePanel.Font.Color := clGreen

  // for errCode := 0 to 1 do  // Вывод основного звукового устройства
  for errCode := 0 to mixerGetNumDevs do
    begin
                  mixerGetDevCaps(errCode-1, lpCaps, SizeOf(lpCaps))
      DeviceName := ' '
                  for n := 0 to 31 do DeviceName := DeviceName + lpCaps.sName[n]
      Delete(DeviceName, Pos(Chr(0), DeviceName), 31)
      Delete(DeviceName, Pos(' [', DeviceName), 31)
      StringChange(DeviceName, 'SB ', 'Creative ')
      Delete(DeviceName, Pos(' Audio', DeviceName), 31)
                  SetArrayLength(Keys, errCode)
      if errCode > 0 then Keys[errCode-1] := DeviceName
    end

        if GetArrayLength(Keys) > 1 then
    begin
    AudioPanel.Text := 'Звуковые карты'
    // AudioPanel.Text := 'Звуковые карты (' + IntToStr(GetArrayLength(Keys)) +')'
    AudioNamePanel.Text := ''
    for n := 1 to GetArrayLength(Keys) do
        AudioNamePanel.Text := AudioNamePanel.Text + Keys[n-1]  // + '(' + IntToStr(n) + ')'
    end
  else
    if GetArrayLength(Keys) = 0 then
    begin
      AudioNamePanel.Text := ' Драйвер устройства не обнаружен'
      AudioNamePanel.Color := clBlack
      AudioNamePanel.Font.Color := clRed
      ChangeText := True
    end
      else
      AudioNamePanel.Text := Keys[0]
  if Pos(NeedSoundCard, AudioNamePanel.Text) = 0 then
    AudioNamePanel.Text := AudioNamePanel.Text + ' (рекомендуется ' + NeedSoundCard + ')'

  // Объём памяти:
    RAMTotalPanel.Color := clBlack
    RAMTotalPanel.Font.Color := clGreen
  if not CheckMemorySize(NeedMB) then
    begin
    RAMTotalPanel.Color := clBlack
    RAMTotalPanel.Font.Color := clRed
      ChangeText := True
    end
  RAMTotalPanel.Text := ' ' + ByteOrTB(ToMultiple(trunc(Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys)/oneMB), 16), False) + ' всего, ' +
                              ByteOrTB(ToMultiple(trunc(Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys)/oneMB), 16) -
                                                        Size64(MemoryEx.HiAvailPhys, MemoryEx.LoAvailPhys)/oneMB, False) + ' используется, ' +
                              ByteOrTB(Size64(MemoryEx.HiAvailPhys, MemoryEx.LoAvailPhys)/oneMB, False) + ' свободно'

  // Виртуальная память:
  PageFileTotalPanel.Color := clBlack
  PageFileTotalPanel.Font.Color := clGreen
  PageFileTotalPanel.Text := ' ' + ByteOrTB(Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile)/oneMB, False) + ' всего, ' +
                                  ByteOrTB((Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile) -
                                            Size64(MemoryEx.HiAvailPageFile, MemoryEx.LoAvailPageFile))/oneMB, False) + ' занято системным кэшем'
  if Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile)/oneMB < NeedPageFile then
    begin
  PageFileTotalPanel.Color := clBlack
  PageFileTotalPanel.Font.Color := clRed
      ChangeText := True
    end

  if ChangeText = True then
    begin
      TopText.Top := 0
      TopText.Caption := 'Не все компоненты удовлетворяют минимальным требованиям игры.' #13
                        'Пожалуйста, проверьте позиции, выделенные красным цветом.'
      TopText.Font.Color := clRed
      // WizardForm.NextButton.Enabled := False
    end
  else
    begin
      TopText.Caption := 'Все компоненты соответствуют минимальным требованиям игры.'
      TopText.Font.Color := clGreen
      TopText.Top := 8
      // WizardForm.NextButton.Enabled := True
    end
end;

procedure InitializeWizard();
begin
  InfoPage := CreateCustomPage(wpLicense, 'Аппаратное и программное обеспечение',
                                          'Программа установки обнаружила следующие наобходимые компоненты.')
  CreateCheckForm()  // Создание объектов TMemo, в которых будет выводится информация о системе
  UpdateInfo()  // Обновление информации о системе
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = InfoPage.ID then UpdateInfo()  // Обновление информации о системе
end;

Цитата:

Цитата tema47
данные об игре попали в реестр »

Что? Куда? Зачем? Какие данные?

-S.S.V.- 18-06-2010 11:57 1436645

Цитата:

Цитата R.i.m.s.k.y.
Параметры тихой установки PsysX я не знаю. Запустите установщик PsysX с ключом /? (PsysX.exe /?) - он должен написать какой параметр для тихой установки, его и пропишите вместо ???
{src} - путь к файлу вашего скомпилированного установщика. Рядом с этим установщиком должны лежать папки DirectX и PsysX »

Спасибо огромное

R.i.m.s.k.y. 18-06-2010 12:04 1436653

Цитата:

Цитата -S.S.V.-
Спасибо огромное »

Огромное пожалуйста!

Чтобы сказать спасибо надо внизу сообщения, за которое благодарите, нажать "полезное сообщение"

tema47 18-06-2010 12:51 1436703

Ну например установил я игру. В реестре появились данные о ней. Например

Я сделал репак, но этих данных в реестре нет и игра получается на англ. языке.
Как сделать чтобы эти данные добавлялись автоматически?

Модератор: Пользуйтесь тегами форума. Такие огромные картинки мешают другим читать форум.

R.i.m.s.k.y. 18-06-2010 13:23 1436728

Цитата:

Цитата tema47
Как сделать чтобы эти данные добавлялись автоматически »

00. Если неизвестны ключи реестра:
01. Ищем качаем утилитку RegShot - сильно облегчает жизнь
02. Удаляем игру/прогу, чистим реестр, и потом с помощью регшота делаем список необходимых ключей + получаем reg файлик с изменениями
03. Запускаем ISTool, загружаем inno-проект, в меню Progect - Import From File - Registry... выбираем reg файлик
04. Проходим глазами по секции [Registry] в проекте, все пути к программе заменяем на {app}\путь, удаляем явный шлак.
05. ЕСЛИ ПРОГА ПРИ УСТАНОВКЕ ПИШЕТ КЛЮЧИ FILTERDATA С ОГРОМНЫМИ ЗНАЧЕНИЯМИ - экспортируем из реестра руками и в секции [Run] руками импортируем эти ключи, RegShot не переваривает здоровые строки и обрубает их.
Код:

[Files]
Source: FilterData.reg; DestDir: {tmp}; Flags: ignoreversion
[Run]
Filename: {sys}\reg.exe; Parameters: " import ""{tmp}\FilterData.reg"""; StatusMsg: Регистрация; Flags: runhidden waituntilterminated

10. Если известно наверняка какие ключи пишет прога - экспортируем их и Go To 03, но лучше предположить что мы ключи не знаем, мало ли что прога пишет.

После этого уже можно понять что и как в Inno в секции [Registry], если нет - Go To справка по ключевому слову [Registry] и прочим непонятным словам, встречающимся в коде Inno. Рекомендую бесплатный словарик Dicto. В шапке есть ссылка на русифицированную справку, она староватая, но годится.

Cinot 18-06-2010 17:39 1436927

R.i.m.s.k.y., что касается моего вопроса, он снимается - я уже помудрил и создал-таки цикл.
Меня интересует шифрование. Я предполагал, что им можно защитить инсталлятор от декомпилляции, а получается, что этот пароль спрашивается у самого пользователя в процессе установки.
Есть ли средство шифрования именно инсталлятора (входящих в него файлов и самого кода ISS) от всяких декомпиляторов, чтобы без задания пароля пользователем?

paravozik2009 18-06-2010 18:43 1436960

Что не кто не скажет ?! Есть,ли скрипт что CAB распаковует?

semiono 19-06-2010 19:47 1437563

Нужен хелп! И просьба не динамить, так как очень нужно.

Вот код который граббит реестр (REG_NONE) и пишет в файл результат.
Код:

const
  KEY_QUERY_VALUE = 1;

function RegOpenKeyEx(
  hKey: Integer;
  const lpSubKey: String;
  ulOptions: Integer;
  samDesired: Integer;
  var hkeyResult: Integer
): Integer;
external 'RegOpenKeyExA@AdvAPI32.DLL stdcall';

function RegCloseKey(
  hKey: Integer
): Integer;
external 'RegCloseKey@AdvAPI32.DLL stdcall';

type
  Data = array [0..259] of Byte;

function RegQueryValueEx(
  hKey: Integer;
  const lpValueName: String;
  lpReserved: Integer;
  var lpType: Integer;
  var lpData: Data;
  var lpcbData: Integer
): Integer;
external 'RegQueryValueExA@AdvAPI32.DLL stdcall';

function InitializeSetup(): Boolean;
var
  hKey, ValueType, ValueDataLen, i, j: Integer;
  ValueData: Data;
  Value: String;
begin
  RegOpenKeyEx(HKLM, 'SOFTWARE\Classes\Trilogy', 0, KEY_QUERY_VALUE, hKey);
  for i := 1 to 3 do begin
    Value := Format('Value%u', [i]);
    ValueDataLen := SizeOf(ValueData);
    RegQueryValueEx(hKey, Value, 0, ValueType, ValueData, ValueDataLen);
    Value := Format('HKLM,"SOFTWARE\Classes\Trilogy","%s",0x20001', [Value]);
    for j := 0 to ValueDataLen-1 do
      Value := Value+Format(',%.2x', [ValueData[j]]);
    SaveStringToFile('C:\test.txt', Value+#13#10, i>1);
  end;
  RegCloseKey(hKey);
  Result := False;
end;

Вот мой незатейливый код
Код:

[_Code]
procedure DeinitializeSetup();
var
  S: TArrayOfString;
  F: String;
begin
  F := ExpandConstant('{reg:HKLM32\Software\VST,VSTPluginsPath|{syswow64}\Plugins}\Trilogy\Trilogy.inf');
  SetArrayLength(S, 9);
// -------------------------------------------------------------------------------------------------------------------------------------
  S[00] := '[Version]'
  S[01] := 'Signature=$Windows NT$'
  S[02] := ''
  S[03] := '[DefaultInstall]'
  S[04] := 'AddReg=Add.Reg'
  S[05] := ''
  S[06] := '[Add.Reg]'
  S[07] := 'HKLM,"Software\Microsoft\Windows\CurrentVersion\App Paths\Trilogy.exe",,0x4000,"' + ExpandConstant('{reg:HKLM32\Software\VST,Proton.exe|{syswow64}\Proton}') + '\Trilogy\Trilogy.exe"'
  S[08] := 'HKLM,"Software\Microsoft\Windows\CurrentVersion\App Paths\Trilogy.exe","Path",0x4000,"' + ExpandConstant('{reg:HKLM32\Software\VST,Proton.exe|{syswow64}\Proton}') + '\Trilogy"'
// -------------------------------------------------------------------------------------------------------------------------------------
  SaveStringsToFile(F, S, False);
end;

Мне нужно к моему коду привязать то, что было выше для того, чтобы дописать
экспортируемые значения из реестра в конец этого файла:
ExpandConstant('{reg:HKLM32\Software\VST,VSTPluginsPath|{syswow64}\Plugins}\Trilogy\Trilogy.inf')

Причём это должно неизменно выполниться под процедурой DeinitializeSetup();

Экспорт происходит с тремя значениями Value1, Value2 и Value3, если нужно то можно явно
это указать в коде экспорта вместо индексов типа i>1.

Одним словом проблема в том, что SaveStringToFile() переписывает весь файл,
а мне надо прибавить к моему файлу эти строки в таком виде:

SetArrayLength(S, 12);
...

S[09] :=...
S[10] :=...
S[11] :=...

Так как я в этом нибум-бум, помогите преобразовать? Только желательно целиком код напишите.
Напомню, то что было http://j.imagehost.org/0295/Snap1_1.png

Serega 20-06-2010 20:53 1438108

Привет всем, извиняюсь кому не ответил, просто меня давно не было, со свободным временем туго стало...
Цитата:

Цитата Cinot
Есть ли средство шифрования именно инсталлятора »

Почитайте в справке описание Password и Encryption, эти параметры должныы быть в инсталляторе (секция Setup)...

Цитата:

Цитата paravozik2009
Есть,ли скрипт что CAB распаковует? »

скрипта, я такого не видел, но если не ошибаюсь, в NT должна присутствовать extrac32.exe, которая отвечает за распаковку cab архивов...

Цитата:

Цитата semiono
Одним словом проблема в том, что SaveStringToFile() переписывает весь файл,
а мне надо прибавить к моему файлу эти строки в таком виде »

извиняюсь, за бестактность, но бред полнейший, вы почитайте описание данной функции:
Код:

function SaveStringsToFile(const FileName: String; const S: TArrayOfString; const Append: Boolean): Boolean;
в принципе видно даже из самой функции, Append - о чём это говорит? да о том, что вы можете задать, перезаписать файл или создать заново...
из вашего примера выходит, что вы даёте команду создать новый файл:
Код:

SaveStringsToFile(F, S, False);
если хотие дописать:
Код:

SaveStringsToFile(F, S, True);

Habetdin 20-06-2010 21:54 1438153

Цитата:

Цитата Cinot
Есть ли средство шифрования именно инсталлятора (входящих в него файлов и самого кода ISS) от всяких декомпиляторов, чтобы без задания пароля пользователем? »

Смотрите в PM ;)

Cinot 21-06-2010 00:21 1438238

Habetdin, большое спасибо за помощь!

SeDmY 21-06-2010 08:49 1438375

Помогите! Как исправить!?



Полностью: http://rghost.ru/1944098

vint56 21-06-2010 11:35 1438466

SeDmY, скрипт рабочий вот проверил на этой версий ispack-5.3.10 Последний стабильный релиз

SeDmY 21-06-2010 12:28 1438507

Цитата:

Цитата vint56
SeDmY, скрипт рабочий вот проверил на этой версий ispack-5.3.10 Последний стабильный релиз »

Странно, вчера поставил расширенную версия Inno Setup от Restools, собраную на основе версии 5.3.10, запустил в ней и такая фигня лезет, на обычной та же байда((( Может у меня чего из дополнительного софта не хватает - что скрипт этот использует...

Не может же без косяков быть такое, что у одного человека скрипт работает, а у другого - нет((

vint56 21-06-2010 13:26 1438557

SeDmY, у тебя стоит Unicode а скрипт Ansi потому ошибка

МИШАНЧИК 21-06-2010 13:29 1438562

Serega, посмотрите пожалуйста ЛС.

SeDmY 21-06-2010 14:10 1438613

Цитата:

Цитата vint56
SeDmY, у тебя стоит Unicode а скрипт Ansi потому ошибка »

Так, ясно! Поставлю вечером Ansi))) А в чем собственно у них отличия!? Я думал, что Unicode расширенная версия какая-нибудь...

SeDmY 22-06-2010 18:45 1439579

Действительно, заработал скрипт)))))))

CrOsP 22-06-2010 19:15 1439600

Подскажите пожалуйста как исправить ошибку вот такую

Вот скрипт
читать дальше »

[Setup]
Compression=lzma
AppCopyright=DNET
AppName=Counter Strike 1.6 (47) DNET
AppVerName=Counter Strike 1.6 (47) DNET
DefaultDirName=D:\Counter Strike 1.6 (47) DNET v 8.0
DefaultGroupName=Counter Strike 1.6 (47) DNET v 8.0
MergeDuplicateFiles=true
OutputBaseFilename=cs_dnet_v8.0
DisableReadyPage=true
Uninstallable=true
AppPublisher=© DNET
AppPublisherURL=http://game.dnet.com.ua
AppSupportURL=http://game.dnet.com.ua
AppUpdatesURL=http://game.dnet.com.ua
AppVersion=v8.0 (MyAC)
VersionInfoVersion=8.0
VersionInfoDescription=Counter Strike 1.6 (47) DNET
OutputDir=D:
SetupIconFile="Q:\Инсталяторы Counter Strike\Дистрибутив\cstrike-16.ico"
WizardImageFile=C:\Program Files\Inno Setup 5\cs2.bmp
WizardSmallImageFile=C:\Program Files\Inno Setup 5\cs.bmp

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

[Components]
Name: lang; Description: Выберете язык игры; Types: custom; Flags: fixed
Name: lang/rus; Description: Русский язык; Flags: exclusive
Name: lang/eng; Description: Английский язык; Flags: exclusive
Name: game; Description: Выберете тип игры; Types: custom; Flags: fixed
Name: game/lan; Description: Сетевая версия; Flags: exclusive
Name: game/inet; Description: Интернет версия; Flags: exclusive
Name: rad; Description: Выберете язык радиокоманд; Types: custom; Flags: fixed
Name: rad/rus; Description: Русский язык; Flags: exclusive
Name: rad/eng; Description: Английский язык; Flags: exclusive

[Types]
Name: custom; Description: Custom installation; Flags: iscustom

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Files]
Source: ISSkin.dll; DestDir: {app}; Flags: dontcopy
Source: Styles\Office2007.cjstyles; DestDir: {tmp}; Flags: dontcopy
Source: Q:\Инсталяторы Counter Strike\Дистрибутив\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
Source: Q:\Инсталяторы Counter Strike\Варианты на выбор\Интернет или Сеть\Lan\*; DestDir: {app}; Components: game/lan; Flags: ignoreversion recursesubdirs createallsubdirs
Source: Q:\Инсталяторы Counter Strike\Варианты на выбор\Интернет или Сеть\Internet\*; DestDir: {app}; Components: game/inet; Flags: ignoreversion recursesubdirs createallsubdirs
Source: Q:\Инсталяторы Counter Strike\Варианты на выбор\Язык\Russian\*; DestDir: {app}; Components: lang/rus; Flags: ignoreversion recursesubdirs createallsubdirs
Source: Q:\Инсталяторы Counter Strike\Варианты на выбор\Язык\English\*; DestDir: {app}; Components: lang/eng; Flags: ignoreversion recursesubdirs createallsubdirs
Source: Q:\Инсталяторы Counter Strike\Варианты на выбор\Радиокоманды\Русские\*; DestDir: {app}; Components: rad/rus; Flags: ignoreversion recursesubdirs createallsubdirs
Source: Q:\Инсталяторы Counter Strike\Варианты на выбор\Радиокоманды\English\*; DestDir: {app}; Components: rad/eng; Flags: ignoreversion recursesubdirs createallsubdirs


[Icons]
Name: {commondesktop}\MyAC 1.6.0; Filename: {app}\MyAC_1.6.0\myAC.exe; Tasks: desktopicon
Name: {commondesktop}\Counter Strike 1.6 (47) DNET v8.0 MyAC; Filename: {app}\hl.exe; Parameters: -game cstrike ;IconFilename: {app}\cstrike-16.ico Tasks: desktopicon
Name: {commondesktop}\CS_Scaner 4.0; Filename: {app}\CS_Scaner_4.0\CS_Scan.exe; Tasks: desktopicon
Name: {group}\{cm:UninstallProgram,My Program}; Filename: {uninstallexe}
Name: {group}\Counter Strike 1.6 DNET v8.0 (MyAC); Filename: {app}\hl.exe; Parameters: -game cstrike ; IconFilename: {app}\cstrike-16.ico
Name: {group}\CS_Scaner 4.0; Filename: {app}\CS_Scaner_4.0\CS_Scan.exe;
Name: {group}\MyAC 1.6.0; Filename: {app}\MyAC_1.6.0\myAC.exe;

[Run]
Filename: {app}\hl.exe; Parameters: -game cstrike; Description: {cm:LaunchProgram,Counter Strike 1.6 DNET v8.0 (MyAC)}; Flags: nowait postinstall skipifsilent

[Registry]
Root: HKCU; Subkey: Software\Valve\Half-Life\Settings; ValueType: string; ValueName: ValveKey; ValueData: 5RP2E-EPH3K-BR3LG-KMGTE-FN8PY; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKCU; Subkey: CS_Scaner\settings\settings; ValueType: string; ValueName: 0; ValueData: 149
Root: HKCU; Subkey: CS_Scaner\settings\settings; ValueType: string; ValueName: 1; ValueData: 123
Root: HKCU; Subkey: CS_Scaner\settings\settings; ValueType: string; ValueName: 2; ValueData: 171
Root: HKCU; Subkey: CS_Scaner\settings\settings; ValueType: string; ValueName: 3; ValueData: 89
Root: HKCU; Subkey: CS_Scaner\settings\settings; ValueType: string; ValueName: 4; ValueData: 56
Root: HKCU; Subkey: CS_Scaner\settings\settings; ValueType: string; ValueName: 5; ValueData: 47
Root: HKCU; Subkey: CS_Scaner\settings\settings; ValueType: string; ValueName: 6; ValueData: 144
Root: HKCU; Subkey: CS_Scaner\settings\settings; ValueType: string; ValueName: 7; ValueData: 49
Root: HKCU; Subkey: CS_Scaner\settings\settings; ValueType: string; ValueName: 8; ValueData: 151
Root: HKCU; Subkey: CS_Scaner\settings\settings; ValueType: string; ValueName: 9; ValueData: 75
Root: HKCU; Subkey: CS_Scaner\settings\settings; ValueType: string; ValueName: Path; ValueData:
Root: HKCU; Subkey: CS_Scaner\settings\settings; ValueType: string; ValueName: Path2; ValueData: {app}\hl.exe
Root: HKCU; Subkey: CS_Scaner\settings\settings; ValueType: string; ValueName: cdp; ValueData: {app}\MyAC_1.6.0\cdeath.exe
Root: HKCU; Subkey: CS_Scaner\settings\settings; ValueType: string; ValueName: CDRun; ValueData: 1
Root: HKCU; Subkey: CS_Scaner\settings\settings; ValueType: string; ValueName: AutoS; ValueData: 0
Root: HKCU; Subkey: CS_Scaner\settings\settings; ValueType: string; ValueName: Param; ValueData: -game cstrike
Root: HKCU; Subkey: CS_Scaner\settings\settings; ValueType: string; ValueName: Param2; ValueData:
Root: HKCU; Subkey: CS_Scaner\settings\settings; ValueType: string; ValueName: Left; ValueData: 183
Root: HKCU; Subkey: CS_Scaner\settings\settings; ValueType: string; ValueName: Top; ValueData: 251
Root: HKCU; Subkey: CS_Scaner\settings\settings; ValueType: string; ValueName: Height; ValueData: 242
Root: HKCU; Subkey: CS_Scaner\settings\settings; ValueType: string; ValueName: PHeight; ValueData: 524
Root: HKCU; Subkey: CS_Scaner\settings\settings; ValueType: string; ValueName: conf; ValueData: 1
Root: HKCU; Subkey: CS_Scaner\settings\settings; ValueType: string; ValueName: ip1; ValueData: 172
Root: HKCU; Subkey: CS_Scaner\settings\settings; ValueType: string; ValueName: ip2; ValueData: 16
Root: HKCU; Subkey: CS_Scaner\settings\settings; ValueType: string; ValueName: subF; ValueData: 1
Root: HKCU; Subkey: CS_Scaner\settings\settings; ValueType: string; ValueName: subT; ValueData: 1
Root: HKCU; Subkey: CS_Scaner\settings\settings; ValueType: string; ValueName: compF; ValueData: 100
Root: HKCU; Subkey: CS_Scaner\settings\settings; ValueType: string; ValueName: compT; ValueData: 102
Root: HKCU; Subkey: CS_Scaner\settings\settings; ValueType: string; ValueName: Rus; ValueData: 1
Root: HKCU; Subkey: CS_Scaner\settings\settings; ValueType: string; ValueName: Eoc; ValueData: 0
Root: HKCU; Subkey: CS_Scaner\settings\settings; ValueType: string; ValueName: CD; ValueData: 1
Root: HKCU; Subkey: CS_Scaner\settings\settings; ValueType: string; ValueName: Sot; ValueData: 0
Root: HKCU; Subkey: CS_Scaner\settings\settings; ValueType: string; ValueName: Per; ValueData: 1
Root: HKCU; Subkey: CS_Scaner\settings\settings; ValueType: string; ValueName: Brc; ValueData: 0

[code]

// Importing LoadSkin API from ISSkin.DLL
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';

// Importing UnloadSkin API from ISSkin.DLL
procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';

// Importing ShowWindow Windows API from User32.DLL
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('Office2007.cjstyles');
LoadSkin(ExpandConstant('{tmp}\Office2007.cjstyles'), 'NormalAqua.ini');
Result := True;
end;

procedure DeinitializeSetup();
begin
// Hide Window before unloading skin so user does not get
// a glimse of an unskinned window before it is closed.
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
UnloadSkin();
end;

//вешаем ссылку на подпись
var
MouseLabel,SiteLabel: TLabel;

procedure SiteLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://game.dnet.com.ua/', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode)
end;

procedure SiteLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=$0000C8FF
end;

procedure SiteLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=$000080FF
end;

procedure SiteLabelMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=$0000A0FF
end;

procedure SiteLabelMouseMove2(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=$000080FF
end;

procedure InitializeWizard();
var


//отключение о программе
WizardForm.Position:=poScreenCenter;

//вешаем ссылку
MouseLabel:=TLabel.Create(WizardForm)
MouseLabel.Width:=WizardForm.Width
MouseLabel.Height:=WizardForm.Height
MouseLabel.Autosize:=False
MouseLabel.Transparent:=True
MouseLabel.OnMouseMove:=@SiteLabelMouseMove2
MouseLabel.Parent:=WizardForm

SiteLabel:=TLabel.Create(WizardForm)
SiteLabel.Left:=10
SiteLabel.Top:=330
SiteLabel.Cursor:=crHand
SiteLabel.Font.Color:=$000080FF
SiteLabel.Caption:='Наш сайт http://game.dnet.com.ua/'
SiteLabel.OnClick:=@SiteLabelOnClick
SiteLabel.OnMouseDown:=@SiteLabelMouseDown
SiteLabel.OnMouseUp:=@SiteLabelMouseUp
SiteLabel.OnMouseMove:=@SiteLabelMouseMove
SiteLabel.Parent:=WizardForm
end;

vint56 22-06-2010 19:43 1439623

CrOsP, должно быть begin а не var
procedure InitializeWizard();
begin

SeDmY 22-06-2010 21:15 1439672

Друзья, посмотрите скрипт: http://rghost.ru/1959537

У меня во время распаковки freearc ошибку выдает(((

Habetdin 22-06-2010 21:26 1439678

CrOsP, вот, пробуй :)
Код:

[code]
//вешаем ссылку на подпись
var
  MouseLabel,SiteLabel: TLabel;

procedure SiteLabelOnClick(Sender: TObject);
var
  ErrorCode: Integer;
begin
  ShellExec('open', 'http://game.dnet.com.ua', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode)
end;

procedure SiteLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  SiteLabel.Font.Color:=$0000C8FF
end;

procedure SiteLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  SiteLabel.Font.Color:=$000080FF
end;

procedure SiteLabelMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  SiteLabel.Font.Color:=$0000A0FF
end;

procedure SiteLabelMouseMove2(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  SiteLabel.Font.Color:=$000080FF
end;

// Importing LoadSkin API from ISSkin.DLL
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';

// Importing UnloadSkin API from ISSkin.DLL
procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';

// Importing ShowWindow Windows API from User32.DLL
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';

function InitializeSetup(): Boolean;
begin
  ExtractTemporaryFile('Office2007.cjstyles');
  LoadSkin(ExpandConstant('{tmp}\Office2007.cjstyles'), '');
  Result := True;
end;

procedure InitializeWizard();
begin
 WizardForm.Position:= poScreenCenter; //отключение о программе

 //вешаем ссылку
  MouseLabel:=TLabel.Create(WizardForm)
  MouseLabel.Width:=WizardForm.Width
  MouseLabel.Height:=WizardForm.Height
  MouseLabel.Autosize:=False
  MouseLabel.Transparent:=True
  MouseLabel.OnMouseMove:=@SiteLabelMouseMove2
  MouseLabel.Parent:=WizardForm

  SiteLabel:=TLabel.Create(WizardForm)
  SiteLabel.Left:=10
  SiteLabel.Top:=330
  SiteLabel.Cursor:=crHand
  SiteLabel.Font.Color:=$000080FF
  SiteLabel.Caption:='Наш сайт game.dnet.com.ua'
  SiteLabel.OnClick:=@SiteLabelOnClick
  SiteLabel.OnMouseDown:=@SiteLabelMouseDown
  SiteLabel.OnMouseUp:=@SiteLabelMouseUp
  SiteLabel.OnMouseMove:=@SiteLabelMouseMove
  SiteLabel.Parent:=WizardForm
end;


procedure DeinitializeSetup();
begin
  // Hide Window before unloading skin so user does not get
  // a glimpse of an unskinned window before it is closed.
  ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
  UnloadSkin();
end;


CrOsP 22-06-2010 22:20 1439710

Habetdin, Спасибо вам , вы как всегда помогли . Спасибо огромное

Schemer 24-06-2010 02:44 1440584

Здравствуйте. Inno Setup очень хорошо обращается с ini файлами, жалко с xml так нельзя.
Мне нужно в конце установки найти в XML файле строчку
Код:

<Setting name="Language Code" type="string">en</Setting>
и заменить ее на
Код:

<Setting name="Language Code" type="string">ru</Setting>
Возможно ли это сделать силами самой inno?

R.i.m.s.k.y. 24-06-2010 08:36 1440645

Цитата:

Цитата Schemer
Возможно ли это сделать силами самой inno »

Вот процедура замены текста в файле. Кажется давно ее мне подогнал Serega
Код:

procedure RePlaceTextinFile(FilePath:string; find:string; replace:string);
var
  S: TArrayOfString;
  //str : string;
  i : Integer;
begin
  if not FileExists(FilePath) then begin MsgBox('Файл не найден', mbError, mb_Ok); Exit;end; // если файла нет, выходим
  LoadStringsFromFile(FilePath, S); // загружаем файл
  for i:= 0 to GetArrayLength(S)-1 do begin
    if (Pos(AnsiUpperCase(find), AnsiUpperCase(S[i])) > 0) then begin
      StringChangeEx(S[i], find, replace, True);
    end;
  end;
  SaveStringsToFile(FilePath, S, False); // сохраняем файл
end;


Schemer 24-06-2010 20:01 1441043

Спасибо. А как этим пользоваться? Я вставил все после [code] затем после var дописал
Код:

FilePath : 'C:\file.xml';
 find : 'en';
 replace : 'ru';

выдает ошибку. Что я сделал не так?

aub2000 25-06-2010 03:51 1441270

Пользуюсь Inno Setup первый раз.
Задаю параметры

DefaultGroupName=Программа расчета
DisableProgramGroupPage=no

Цель - создание в меню Пуск раздела с документацией и деинсталятором.
Не могу добиться чтобы в меню Пуск была создана соответствующая папка, страница с запросом на создание/изменение тоже не показывается.
Инсталирую DLL (COM-сервер) и документацию к нему.
Указал все файлы в разделе [Files], может этого не достаточно?

Schemer 25-06-2010 05:28 1441275

Что бы показывалась страница на создание/изменение папки в меню пуск, точно не помню, по моему нужно поставить yes в
Код:

DisableProgramGroupPage=yes
А вот что бы ярлыки создавались, их надо прописать в секции [Icons]:
Код:

[Icons]
 ;Создаст группу программы в меню Пуск
Name: "{group}\Proga";Filename: "{app}\Proga.exe"


R.i.m.s.k.y. 25-06-2010 08:27 1441306

Цитата:

Цитата Schemer
выдает ошибку. Что я сделал не так »

Не написали какую ошибку.
Вот мой код использования этой процедуры
Код:

RePlaceTextinFile(ExpandConstant('{app}\x264\Megui\allprofiles\AviSynth\AviSynth_dp_ FFT3DGPU.xml'), 'import("', 'import("'+plugindir2_5+'\');
Подменяет в профилях настройки MEGUI путь к плагинам.
plugindir2_5 вычисляется чуть выше (берется из реестра)
В вашем случае
Код:

[_Code]
...
RePlaceTextinFile(ExpandConstant('C:\file.xml'), 'en', 'ru');
...


aub2000 25-06-2010 15:48 1441564

Schemer, спасибо за подсказку!
У меня в голове Icons ни как не ассоциировалось со списком файлов в меню Пуск.
Подсказка помогла.
Наверное более уместным было бы название секции Items.

Schemer 25-06-2010 18:35 1441691

Я наверно совсем тугой. Но эти коды я не понимаю. Куда вставлять?
Если я вставляю после procedure вот так:
Код:

procedure RePlaceTextinFile(ExpandConstant('C:\file.xml'), 'en', 'ru');
то выдает ошибку:
Код:

colon (':') expected.
А если после var вот так:
Код:

var
RePlaceTextinFile(ExpandConstant('C:\file.xml'), 'en', 'ru');

то выдает это:
Код:

Duplicate identifier 'RePlaceTextinFile'
А если после begin то при компиляции ошибок не выдает, но с xml файлом ничего не происходит. Даже если его нет. Если я правильно понимаю эту строчку:
Код:

if not FileExists(FilePath) then begin MsgBox('Файл не найден', mbError, mb_Ok); Exit;end;
То как минимум должно выдать ошибку об отсутствие файла при установке?
А какой инно сетап нужен? Я свой давно не обновлял, у меня - Inno Setup Compiler 5.2.4-dev (ISPP 5.2.4.0) (build 090319)

Schemer 25-06-2010 19:47 1441738

Вот еще что нашел:
Код:

///////////////////////////////////////////////////////////////////////////////
// Find given text in given file, and replace
// complete textline with given text.
// Created: March 27, 2002 by S.T.I.Bracke
// Revised: May 22, 2002 by S.T.I.Bracke
function ReplaceLine(strFilename, strFind, strNewLine: String): Boolean;
var
  strTemp : String;
  iLineCounter : Integer;
  a_strTextfile : TArrayOfString;
 
begin
  { Load textfile into string array }
  LoadStringsFromFile(strFilename, a_strTextfile);
 
  { Search trough all textlines for given text }
  // old line
  // for iLineCounter := 1 to High(a_strTextfile) do
  // new line corrected by Nikolaus Moll
  for iLineCounter := 0 to GetArrayLength(a_strTextfile)-1 do
    begin
      { Overwrite textline when text searched for is part of it }
      if (Pos(strFind, a_strTextfile[iLineCounter]) > 0) then
        a_strTextfile[iLineCounter] := strNewLine;
    end;
 
  { Save string array to textfile (overwrite, no append!) }
  SaveStringsToFile(strFilename, a_strTextfile, False);
 
  Result := True;
 
end;

Результат тот же. :cry:

cleric1985_n 28-06-2010 01:23 1442908

Подскажите как заставить выполнятся следующее задание из секции Code, в обычном режиме все работает, а при тихой установке ни в какую, может прописать что надо..?!

Код:

[Registry]
; .ext1
Root: HKCR; Subkey: .ext1; ValueType: string; ValueName: ; ValueData: MyProgramFile1; Flags: uninsdeletevalue; Tasks: MostVideo\DiracVideo; BeforeInstall: BackupData('ext1')
Root: HKCR; Subkey: MyProgramFile1; ValueType: string; ValueName: ; ValueData: "My Program File ¹1"; Flags: uninsdeletekey; Tasks: MostVideo\DiracVideo
Root: HKCR; Subkey: MyProgramFile1\DefaultIcon; ValueType: string; ValueName: ; ValueData: {sys}\notepad.exe,0; Tasks: MostVideo\DiracVideo
Root: HKCR; Subkey: MyProgramFile1\shell\open\command; ValueType: string; ValueName: ; ValueData: """{sys}\notepad.exe"" ""%1"""; Tasks: MostVideo\DiracVideo


procedure BackupData(FileExt: String);
var
  OldValueData: string;
begin
  if RegKeyExists(HKCR, '.' + FileExt) then
    begin
      RegQueryStringValue(HKCR, '.' + FileExt, '', OldValueData);
      RegWriteStringValue(HKCR, '.' + FileExt + '(backup)', '', OldValueData);
    end;
end;


R.i.m.s.k.y. 28-06-2010 09:02 1443019

Цитата:

Цитата Schemer
То как минимум должно выдать ошибку об отсутствие файла при установке »

А как Вы вызываете эту процедуру? Я из секции Files. Но можно еще через Event Function, почитайте в справке про CurStepChanged. Вашего кода я не вижу - кладу свой.

Код:

[Files]
;После копирования файлов будет запущена MeGUIavs
Components: MeGUI; Source: CodeRim\CodeRim\x264\*; DestDir: {app}\x264\; BeforeInstall: ChangeCaption('Установка MeGUI'); AfterInstall: MeGUIavs; Flags: ignoreversion uninsrestartdelete setntfscompression

[_Code]
procedure ChangeCaption(str: string);
    begin
    WizardForm.StatusLabel.Caption:= str;
end;

procedure RePlaceTextinFile(FilePath:string; find:string; replace:string);
var
  S: TArrayOfString;
  //str : string;
  i : Integer;
begin
  if not FileExists(FilePath) then begin MsgBox('Файл не найден', mbError, mb_Ok); Exit;end; // если файла нет, выходим
  LoadStringsFromFile(FilePath, S); // загружаем файл
  for i:= 0 to GetArrayLength(S)-1 do begin
    if (Pos(AnsiUpperCase(find), AnsiUpperCase(S[i])) > 0) then begin
      StringChangeEx(S[i], find, replace, True);
    end;
  end;
  SaveStringsToFile(FilePath, S, False); // сохраняем файл
end;


procedure MeGUIavs;
var plugindir2_5 : String;

begin

  RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\AviSynth','plugindir2_5', plugindir2_5);

  RePlaceTextinFile(ExpandConstant('{app}\x264\Megui\allprofiles\AviSynth\AviSynth_dp_ DeBlock.xml'), 'import("', 'import("'+plugindir2_5+'\');

end;

end.

Цитата:

Цитата Schemer
А какой инно сетап нужен »

В инно не нужны гонки за версией. У меня стоит Inno Setup Compiler 5.3.7 и ISPP 5.3.6, к примеру на 198 странице у камрада SeDmY не клеилось из-за юникод версии инно.

Цитата:

Цитата cleric1985_n
Подскажите как заставить выполнятся следующее задание из секции Code »

Читаем про CurStepChanged
Код:

Procedure CurStepChanged(CurStep: TSetupStep);
Begin
    if CurStep = ssInstall then BackupData(ваши параметры)
End;

А вообще странно, если в тихом режиме применяется Registry, то должна отработать и BeforeInstall: BackupData('ext1'). В коде подставьте MsgBox('???', mbError, mb_Ok) - будет видно что где происходит (или не происходит).

Реестр можно бэкапить вот так, кстати если данные в реестре заковыристые вы уверены что RegWriteStringValue(HKCR, '.' + FileExt + '(backup)', '', OldValueData) правильно их выгрузит?

Код:

procedure BackupReg();
var
  res, i, k: Integer;
  reg0, reg, RegEdit: string;
  Key: TArrayOfString;
begin
  RegEdit:= ExpandConstant('{sys}\reg.exe');
  reg0:= ExpandConstant('{app}\BackUp');
  Key:= ['HKLM\SOFTWARE\GNU',
        'HKEY_CURRENT_USER\SOFTWARE\GNU',
        ];
  for i:= 0 to GetArrayLength(Key)-1 do begin
    reg := reg0 + IntToStr(i) + '.reg';
    if not FileExists(reg) then begin Exec(RegEdit, ' export ' + AddQuotes(Key[i]) + ' ' + AddQuotes(reg), ExpandConstant('{sys}'), SW_HIDE, ewWaitUntilTerminated, res);
    end;
    end;


ecspertiza 28-06-2010 13:37 1443129

Всем здрасти, Inno Setup использую относительно недавно, так что если вопрос нубский сильно не пинайте, при установки софта если он уже установлен то Inno Setup по умолчанию выдает сообщение мол такая папка уже есть, продолжить туда ставить или нет, можно ли как то изменить текст этого сообщения ?

cleric1985_n 28-06-2010 16:05 1443229

ecspertiza,

DirExistsWarning=no

cleric1985_n 28-06-2010 17:52 1443283

Цитата:

Цитата R.i.m.s.k.y.
Читаем про CurStepChanged »

А зачем оно нужно, если процедура вызывается через BeforeInstall:

Цитата:

Цитата R.i.m.s.k.y.
Реестр можно бэкапить вот так, кстати если данные в реестре заковыристые вы уверены что RegWriteStringValue(HKCR, '.' + FileExt + '(backup)', '', OldValueData) правильно их выгрузит »

В обычном режиме все корректно отрабатывает, это есть самое обычное сохранение ассоциаций..

ecspertiza 29-06-2010 09:32 1443619

Цитата:

Цитата cleric1985_n
ecspertiza,
DirExistsWarning=no »

Это конечно хорошо, но насколько я понял этот флажок совсем выключит сообщение, а хотелось бы просто изменить его текст.

Habetdin 29-06-2010 12:08 1443707

Цитата:

Цитата ecspertiza
хотелось бы просто изменить его текст. »

Код:

[Messages]
DirExistsTitle=Папка существует
DirExists=Папка%n%n%1%n%nуже существует. Всё равно установить в эту папку?

Изменяйте :)

DevilisH 29-06-2010 21:46 1444046

Здравствуйте. Помогите, пожалуйста, с 2 проблемами:
1) Как изменить цвет шрифта инсталлера на белый?
2) Как убрать белые полосы, которые образуются при загрузке своей картинки на все окно инсталлятора?

SeDmY 30-06-2010 08:20 1444276

Доброго времени суток!

Хочу запаковать игру в 7z (без сжатия), потом Precomp-ом, потом SRep-ом и наконец FreeArc-ом! Как это реализовать и как правильно создать скрипт, чтобы потом игра нормально установилась!?

+ может есть менее геморройный способ упаковки игры с таким эффектом, можно тоже скрипт)))!?

nik1967 30-06-2010 09:20 1444297

DevilisH,
1) WizardForm.Font.Color:=clWhite; или WizardForm.Font.Color:=$ffffff;
2) //Избавиться от разделительных полос сверху и снизу
WizardForm.Bevel.visible:=true; // Если не надо, то WizardForm.Bevel.visible:=false;
WizardForm.Bevel1.visible:=true; // Если не надо, то WizardForm.Bevel1.visible:=false;

DevilisH 30-06-2010 11:51 1444383

nik1967 Спасибо!
Еще 1 вопросик: как для каждой страницы инсталлятора сделать свой фон?

nik1967 30-06-2010 12:06 1444392

Цитата:

Цитата DevilisH
как для каждой страницы инсталлятора сделать свой фон? »

В смысле на каждую страницу свою картинку или просто цвет?

DevilisH 30-06-2010 12:12 1444394

На каждую страницу свою картинку. Во многих репаках игр такое видел. Допустим приветствие - один фон, выбор папки - другой и т.д..

nik1967 30-06-2010 12:54 1444422

DevilisH,
Сборник скриптов, там есть пример.

tema47 30-06-2010 17:50 1444689

Всем привет. А как сделать чтобы во время установки распаковался архив 7z?

BlackEric 01-07-2010 00:13 1444901

Использую InnoSetup 5.3.10 (u)
Создаю установочный скрипт
Код:

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked; Languages:

[Files]
Source: I:\marsbyte\Time Controller\Time_Controller.exe; DestDir: {app}; Flags: ignoreversion
Source: I:\marsbyte\Time Controller\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
Source: \marsbyte\TIME_CONTROL.FDB; DestDir: {userappdata}\{#MyAppPublisher}\{#MyAppName}; Flags: ignoreversion confirmoverwrite; Tasks:
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}
Name: {group}\{cm:ProgramOnTheWeb,{#MyAppName}}; Filename: {#MyAppURL}
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppPublisher}\{#MyAppExeName}; Tasks: desktopicon
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: quicklaunchicon

Собираю установщик.
На Win7 x64 пробую устанавливать. И иконка в панели быстрого запуска не создается.
В чем проблема?

И еще как разрешить пользователю при установке прописать программу в автозагрузку?

Habetdin 01-07-2010 01:16 1444931

BlackEric, пример скрипта с закреплением ярлыка в панели задач Windows 7:
Код:

[Setup]
AppName=My Program
AppVerName=My Program 1.5
AppPublisher=My Company, Inc.
AppPublisherURL=http://winaddon.net/
AppSupportURL=http://winaddon.net/
AppUpdatesURL=http://winaddon.net/
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
AllowNoIcons=yes
OutputDir=.
OutputBaseFilename=setup
Compression=lzma/ultra64
SolidCompression=true
InternalCompressLevel=ultra64

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked; OnlyBelowVersion: 0,6.1
Name: quicklaunchicon7; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked; MinVersion: 0,6.1

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion
Source: PinToTasckbar.vbs; DestDir: {tmp}; Flags: deleteafterinstall

[Icons]
Name: {group}\My Program; Filename: {app}\MyProg.exe
Name: {group}\{cm:UninstallProgram,My Program}; Filename: {uninstallexe}
Name: {commondesktop}\My Program; Filename: {app}\MyProg.exe; Tasks: desktopicon
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\My Program; Filename: {app}\MyProg.exe; Tasks: quicklaunchicon

[Run]
Filename: {tmp}\PinToTasckbar.vbs; Parameters: """{app}\MyProg.exe"""; Flags: shellexec; Tasks: quicklaunchicon7

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

PinToTasckbar.vbs - сохраняем в кодировке win-1251

user_123 01-07-2010 09:46 1445044

Подскажите пожалуйста, какая строковая переменную отвечает за текст, отображаемый над статус баром? Параметр description для секции Run мне не подходит.

Планирую такую реализацию:
{Files}
Source: MyFile.exe; DestDir: {app}; Afterinstall: Myprocedure

{code}
procedure myprocedure;
begin
<нужная_мне_переменная>:='Текст';
exec(expandconstant('{app}\MyFile.exe'),'','',SW_Show,ewWaitUntilTerminated,resultcode)
end;

------------------
Посидел в хелпе, кое-что нашёл... Возможно, <нужная_мне_переменная> - это WizardForm.StatusLabel.Caption / WizardForm.FileNameLabel.Caption

R.i.m.s.k.y. 01-07-2010 11:34 1445122

Цитата:

Цитата user_123
Source: MyFile.exe; DestDir: {app}; Afterinstall: Myprocedure »

Source: MyFile.exe; DestDir: {app}; Afterinstall: Myprocedur; BeforeInstall: ChangeCaption('че-то пишем');
[code]
procedure ChangeCaption(str: string);
begin
WizardForm.StatusLabel.Caption:= str;
end;

МИШАНЧИК 01-07-2010 11:40 1445129

Habetdin, подскажите пожалуйста!
Цитата:

Цитата Habetdin
PinToTasckbar.vbs »

- это создаём в обычном текстовом редакторе? Если "Да", то в какой кодировке?

BlackEric 01-07-2010 13:42 1445224

Habetdin, этот скрипт будет работать для всех версий Windows?

И перед запуском я должен положить файл скрипта в {tmp}\PinToTasckbar.vbs?
Где команда копирования файла в {tmp} будет выглядеть как
[Files]
Source: I:\PinToTasckbar.vbs; DestDir: {tmp}; Flags: ignoreversion ???

DevilisH 01-07-2010 16:52 1445384

Цитата:

Цитата nik1967
DevilisH,
Сборник скриптов, там есть пример »

Я скачал сборник (хорошая вещь кстати) и посмотрел скрипт.

читать дальше »

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program

[Languages]
Name: rus ; Name: compiler:Languages \Russian.isl

[Files]
Source: C:\Program Files\Inno Setup 5\Examples\MyProg.exe; DestDir: {app}; Flags : ignoreversion

[Run]
Filename: {app}\MyProg.exe; Name: Запустить My Program?; Flags: postinstall nowait s kipifsilent

[code]
var
pnl: TPanel;

///////////////////////WelcomePage//////////////////////////////////////
procedure WelcomePage;
begin
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.WelcomeLabel1. AutoSize;
SetBounds(WizardForm.WelcomeLabel1.Left,WizardForm.WelcomeLabel1.Top,
WizardForm.WelcomeLabel1.Width,WizardForm.WelcomeLabel1.Height);
WordWrap:= WizardForm.WelcomeLabel1.WordWrap;
Caption:= WizardForm.WelcomeLabel1.Caption;
with Font do
begin
Color:= WizardForm.WelcomeLabel1.Font.Color;
Style:= WizardForm.WelcomeLabel1.Font.Style;
Name:= WizardForm.WelcomeLabel1.Font.Name;
Size:= WizardForm.WelcomeLabel1.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.WelcomeLabel2. AutoSize;
SetBounds(WizardForm.WelcomeLabel2.Left,WizardForm.WelcomeLabel2.Top,
WizardForm.WelcomeLabel2.Width,WizardForm.WelcomeLabel2.Height);
WordWrap:= WizardForm.WelcomeLabel2.WordWrap;
Caption:= WizardForm.WelcomeLabel2.Caption;
with Font do
begin
Color:= WizardForm.WelcomeLabel2.Font.Color;
Style:= WizardForm.WelcomeLabel2.Font.Style;
Name:= WizardForm.WelcomeLabel2.Font.Name;
Size:= WizardForm.WelcomeLabel2.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////SelectDirPage//////////////////////////////////////
procedure SelectDirPage;
begin
with WizardForm do
begin
with DirEdit do
begin
Left:= 40;
Top:= 137;
Parent:= pnl;
end;
with DirBrowseBu tton do
begin
Left:= WizardForm.DirEdit.Left + WizardForm.DirEdit.Width + 10;
Top:= WizardForm.DirEdit.Top - 1;
Parent:= pnl;
end;
with SelectDirBitmapImage do
begin
Left:= WizardForm.DirEdit.Left;
Top:= WizardForm.DirEdit.Top - 62;
Stretch:= True;
Parent:= pnl;
end;
end;
with TLabel.Create(pnl) do
begin
A utoSize:= WizardForm.SelectDirBrowseLabel.A utoSize;
SetBounds(WizardForm.DirEdit.Left,WizardForm.DirEdit.Top - 30,
WizardForm.SelectDirBrowseLabel.Width, WizardForm.SelectDirBrowseLabel.Height);
WordWrap:= WizardForm.SelectDirBrowseLabel.WordWrap;
Caption:= WizardForm.SelectDirBrowseLabel.Caption;
with Font do
begin
Color:= WizardForm.SelectDirBrowseLabel.Font.Color;
Style:= WizardForm.SelectDirBrowseLabel.Font.Style;
Name:= WizardForm.SelectDirBrowseLabel.Font.Name;
Size:= WizardForm.SelectDirBrowseLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.SelectDirLabel.A utoSize;
SetBounds(WizardForm.SelectDirBitmapImage.Left + 50,WizardForm.SelectDirBitmapImage.Top + 10,
WizardForm.SelectDirLabel.Width,WizardForm.SelectDirLabel.Height);
WordWrap:= WizardForm.SelectDirLabel.WordWrap;
Caption:= WizardForm.SelectDirLabel.Caption;
with Font do
begin
Color:= WizardForm.SelectDirLabel.Font.Color;
Style:= WizardForm.SelectDirLabel.Font.Style;
Name:= WizardForm.SelectDirLabel.Font.Name;
Size:= WizardForm.SelectDirLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.DiskSpaceLabel .AutoSize;
SetBounds(WizardForm.DirEdit.Left,WizardForm.Bevel.Top - 25,
WizardForm.DiskSpaceLabel.Width,WizardForm.DiskSpaceLabel.Height);
WordWrap:= WizardForm.DiskSpaceLabel.WordWrap;
Caption:= WizardForm.DiskSpaceLabel.Caption;
with Font do
begin
Color:= WizardForm.DiskSpaceLabel.Font.Color;
Style:= WizardForm.DiskSpaceLabel.Font.Style;
Name:= WizardForm.DiskSpaceLabel.Font.Name;
Size:= WizardForm.DiskSpaceLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////ReadyPage//////////////////////////////////////
procedure ReadyPage;
var
ready_str: string;
begin
ready_str:= WizardForm.ReadyMemo.Text;
with TLabel.Create(pnl) do
begin
SetBounds(45,115,WizardForm.ReadyMemo.Width, WizardForm.ReadyMemo.Height);
Caption:= ready_str;
with Font do
begin
Color:= WizardForm.ReadyLabel.Font.Color;
Style:= WizardForm.ReadyLabel.Font.Style;
Name:= WizardForm.ReadyLabel.Font.Name;
Size:= WizardForm.ReadyLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TBevel.Create(WizardForm) do
begin
SetBounds(40,110, WizardForm.ReadyMemo.Width, WizardForm.ReadyMemo.Height);
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.ReadyLabel.A utoSize;
SetBounds(40,70, WizardForm.ReadyLabel.Width, WizardForm.ReadyLabel.Height);
WordWrap:= WizardForm.ReadyLabel.WordWrap;
Caption:= WizardForm.ReadyLabel.Caption;
with Font do
begin
Color:= WizardForm.ReadyLabel.Font.Color;
Style:= WizardForm.ReadyLabel.Font.Style;
Name:= WizardForm.ReadyLabel.Font.Name;
Size:= WizardForm.ReadyLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////InstallingPage//////////////////////////////////////
procedure InstallingPage;
begin
with WizardForm.ProgressGauge do
begin
Left:= 40;
Top:= 115;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
A utoSize:= WizardForm.FilenameLabel. AutoSize;
SetBounds(WizardForm.ProgressGauge.Left,WizardForm.ProgressGauge.Top-20,
WizardForm.FilenameLabel.Width,WizardForm.FilenameLabel.Height);
WordWrap:= WizardForm.FilenameLabel.WordWrap;
Caption:= WizardForm.FilenameLabel.Caption;
with Font do
begin
Color:= WizardForm.FilenameLabel.Font.Color;
Style:= WizardForm.FilenameLabel.Font.Style;
Name:= WizardForm.FilenameLabel.Font.Name;
Size:= WizardForm.FilenameLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.StatusLabel. AutoSize;
SetBounds(WizardForm.StatusLabel.Left,WizardForm.StatusLabel.Top,
WizardForm.StatusLabel.Width,WizardForm.StatusLabel.Height);
WordWrap:= WizardForm.StatusLabel.WordWrap;
Caption:= WizardForm.StatusLabel.Caption;
with Font do
begin
Color:= WizardForm.StatusLabel.Font.Color;
Style:= WizardForm.StatusLabel.Font.Style;
Name:= WizardForm.StatusLabel.Font.Name;
Size:= WizardForm.StatusLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////FinishedPage//////////////////////////////////////
var
CheckBox: array of TNewCheckBox;

procedure CheckBoxClick( Sender: TObject);
begin
if TNewCheckBox( Sender).Checked then
WizardForm.RunList.Checked[TNewCheckBox( Sender).Tag]:= True
else WizardForm.RunList.Checked[TNewCheckBox (Sender).Tag]:= False;
end;

procedure LabelClick( Sender: TObject);
begin
if CheckBox[TLabel( Sender).Tag].Checked then
begin
WizardForm.RunList.Checked[TLabel( Sender).Tag]:= False;
CheckBox[TLabel(Sender).Tag].Checked:= False;
end
else
begin
WizardForm.RunList.Checked[TLabel( Sender).Tag]:= True;
CheckBox[TLabel( Sender).Tag].Checked:= True;
end;
end;

procedure HideRunList(Control: TWinControl);
var
i, t: Integer;
str: string;
begin
if WizardForm.RunList.Items.Count > 0 then
begin
WizardForm.RunList.Hide;
SetArrayLength(CheckBox, SizeOf(WizardForm.RunList.Items.Count));
for i:= 0 to WizardForm.RunList.Items.Count-1 do
begin
CheckBox[i]:= TNewCheckBox.Create(Control);
with CheckBox[i] do
begin
SetBounds(ScaleX(WizardForm.RunList.Left+2),ScaleY(WizardForm.RunList.Top+2+t),14,14);
Tag:= i;
Checked:= WizardForm.RunList.Checked[i];
Caption:= WizardForm.RunList.Items.Strings[i];
OnClick:= @CheckBoxClick;
Color:= clWhite;
Parent:= Control;
end;
str:= WizardForm.RunList.Items.Strings[i];
with TLabel.Create(WizardForm) do
begin
SetBounds(ScaleX(WizardForm.RunList.Left+20),ScaleY(WizardForm.RunList.Top+2+t),
WizardForm.RunList.Width,14);
Caption:= str;
Tag:= i;
OnClick:= @LabelClick;
Transparent:= True;
Parent:= Control;
end;
t:= t + 20;
end;
end;
end;

procedure FinishedPage;
begin
HideRunList(pnl);
with TLabel.Create(pnl) do
begin
A utoSize:= WizardForm.FinishedHeadingLabel. AutoSize;
SetBounds(WizardForm.FinishedHeadingLabel.Left,WizardForm.FinishedHeadingLabel.Top,
WizardForm.FinishedHeadingLabel.Width,WizardForm.FinishedHeadingLabel.Height);
WordWrap:= WizardForm.FinishedHeadingLabel.WordWrap;
Caption:= WizardForm.FinishedHeadingLabel.Caption;
with Font do
begin
Color:= WizardForm.FinishedHeadingLabel.Font.Color;
Style:= WizardForm.FinishedHeadingLabel.Font.Style;
Name:= WizardForm.FinishedHeadingLabel.Font.Name;
Size:= WizardForm.FinishedHeadingLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.FinishedLabel. AutoSize;
SetBounds(WizardForm.FinishedLabel.Left,WizardForm.FinishedLabel.Top,
WizardForm.FinishedLabel.Width,WizardForm.FinishedLabel.Height);
WordWrap:= WizardForm.FinishedLabel.WordWrap;
Caption:= WizardForm.FinishedLabel.Caption;
with Font do
begin
Color:= WizardForm.FinishedLabel.Font.Color;
Style:= WizardForm.FinishedLabel.Font.Style;
Name:= WizardForm.FinishedLabel.Font.Name;
Size:= WizardForm.FinishedLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

procedure CurPageChanged(CurPageID: Integer);
begin
pnl:= TPanel.Create(WizardForm);
with pnl do
begin
Align:= alClient;
Parent:= WizardForm;
end;
with WizardForm do
begin
with WizardBitmapImage do
begin
Align:= alClient;
Stretch:= True;
Parent:= pnl;
end;
NextButton.Parent:= pnl;
CancelButton.Parent:= pnl;
BackButton.Parent:= pnl ;
Bevel.Parent:= pnl;
pnl.Repaint;
end;

if (CurPageID > wpWelcome) and (CurPageID < wpFinished) then
begin
WizardForm.Bevel1.Parent:= pnl;
with TLabel.Create(pnl) do
begin
A utoSize:= WizardForm.PageNameLabel. AutoSize;
SetBounds(WizardForm.PageNameLabel.Left,WizardForm.PageNameLabel.Top,
WizardForm.PageNameLabel.Width,WizardForm.PageNameLabel.Height);
Caption:= WizardForm.PageNameLabel.Caption;
with Font do
begin
Color:= WizardForm.PageNameLabel.Font.Color;
Style:= WizardForm.PageNameLabel.Font.Style;
Name:= WizardForm.PageNameLabel.Font.Name;
Size:= WizardForm.PageNameLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.PageDescriptionLabel.AutoSize;
SetBounds(WizardForm.PageDescriptionLabel.Left,WizardForm.PageDescriptionLabel.Top,
WizardForm.PageDescriptionLabel.Width,WizardForm.PageDescriptionLabel.Height);
Caption:= WizardForm.PageDescriptionLabel.Caption;
with Font do
begin
Color:= WizardForm.PageDescriptionLabel.Font.Color;
Style:= WizardForm.PageDescriptionLabel.Font.Style;
Name:= WizardForm.PageDescriptionLabel.Font.Name;
Size:= WizardForm.PageDescriptionLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;

if CurPageID = wpWelcome then WelcomePage;
if CurPageID = wpSelectDir then SelectDirPage;
if CurPageID = wpReady then ReadyPage;
if CurPageID = wpInstalling then InstallingPage;
if CurPageID = wpFinished then FinishedPage;
end;


Он работает, но берет за основу изображение в папке inno WizModernImage.bmp и ставит его на все страницы. Как поставить свои изображения на каждую страницу (может назвать их надо как-то или доработать скрипт). Наведи плиз хоть на правильный путь - что примерно делать нужно?

Habetdin 01-07-2010 19:23 1445492

МИШАНЧИК, win-1251

BlackEric, это для Windows 7; дополнил пост:
Цитата:

Цитата Habetdin
[Files]
Source: PinToTasckbar.vbs; DestDir: {tmp}; Flags: deleteafterinstall »


BlackEric 01-07-2010 23:28 1445632

Привел свой скрипт к такому виду:
Код:

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked; Languages:; OnlyBelowVersion: 0,6.1

[Files]
Source: I:\marsbyte\Time Controller\Time_Controller.exe; DestDir: {app}; Flags: ignoreversion
Source: I:\marsbyte\Time Controller\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
Source: I:\marsbyte\TIME_CONTROL.FDB; DestDir: {userappdata}\{#MyAppPublisher}\{#MyAppName}; Flags: ignoreversion confirmoverwrite; Tasks:
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
Source: I:\marsbyte\PinToTasckbar.vbs; DestDir: {tmp}; Flags: deleteafterinstall;

[Icons]
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}
Name: {group}\{cm:ProgramOnTheWeb,{#MyAppName}}; Filename: {#MyAppURL}
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: desktopicon
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: quicklaunchicon

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, "&", "&&")}}"; Flags: nowait postinstall skipifsilent
Filename: "{tmp}\PinToTasckbar.vbs"; Parameters: "{app}\{#MyAppExeName}"; Flags: shellexec; OnlyBelowVersion: 0,6.1

Иконка в панели быстрого запуска не создается все равно. Причем в этом варианте то и флажок для создания иконки не показывается! Что делать?

Habetdin 02-07-2010 12:22 1445867

BlackEric, дополнил пост, добавил "флажок" на Win7 :)

nik1967 02-07-2010 14:53 1445990

DevilisH,
[Setup]
WizardImageFile=твоя картинка.bmp
WizardSmallImageFile=твоя картинка2.bmp

user_123 02-07-2010 15:20 1446008

Скажите пожалуйста, как сделать полностью тихий инсталлятор? Руководства я читал, приведенный там пример не работает... Во всяком с версией 5.3.10. Раньше делал "тихие" инсталляторы. У меня такое впечатление, что IS просто игнорирует директиву DisableReadyPage - что yes, что no - результат один и тот же... Как быть? Старую версию IS скачивать?

R.i.m.s.k.y. 02-07-2010 15:28 1446013

Цитата:

Цитата user_123
Как быть »

Код:


[_Code]
procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID=wpWelcome then
begin
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
end
end;

CurPage values
wpWelcome, wpLicense, wpPassword, wpInfoBefore, wpUserInfo, wpSelectDir, wpSelectComponents, wpSelectProgramGroup, wpSelectTasks, wpReady, wpPreparing, wpInstalling, wpInfoAfter, wpFinished


user_123 02-07-2010 15:52 1446030

R.i.m.s.k.y., я так и так делал, на wpReady "не действует". Ещё раз хочу подчеркнуть что с этой проблемой столкнулся именно в версии 5.3.10, на более старых всё было ок.

R.i.m.s.k.y. 02-07-2010 15:56 1446036

Цитата:

Цитата user_123
на более старых всё было ок »

Ну я даже не знаю. Я уже писал - в Инно не нужно гнаться за версией. Откатывайтесь.
И что нового может появиться в новой версии Инно - большая кнопка "Сделать хорошо"?

user_123 02-07-2010 16:02 1446041

Пойду старую версию скачивать.... В новой кстати у меня ещё 1 баг есть - иногда окно "отказывается" закрываться, приходится завершать через диспетчер задач. И это при том что приложение отвечает, можно спокойно дальше редактировать скрипт. У меня Win 7 x64
--------------------------------------------------
В общем, в 5.3.8 (которая у меня раньше стола) работает.
Надо бы багрепорт девелоперу оставить, а то уже вторая версия подряд (5.3.9, 5.3.10) с этим багом.

SeDmY 02-07-2010 16:46 1446075

Цитата:

Цитата user_123
Надо бы багрепорт девелоперу оставить, а то уже вторая версия подряд (5.3.9, 5.3.10) с этим багом. »

У меня тоже стоит на Win 7 x64 InnoSetup 5.3.10 и все в порядке, также и в версии 5.3.9 не наблюдал проблем))

Serega 02-07-2010 16:48 1446076

Цитата:

Цитата user_123
Ещё раз хочу подчеркнуть что с этой проблемой столкнулся именно в версии 5.3.10 »

Попробуйте, таким образом:
Код:

procedure CurPageChanged(CurPageID: Integer);
begin
  WizardForm.NextButton.OnClick(WizardForm.NextButton);
end;


user_123 02-07-2010 16:53 1446078

Serega, и таким способом пробовал, тоже не работало...
Вернулся на 5.3.8, там пропуск страниц нормально работает.

Serega 02-07-2010 17:06 1446088

Цитата:

Цитата user_123
Вернулся на 5.3.8, там пропуск страниц нормально работает. »

уверяю вас, что от версии это не зависит, причину нужно искать в другом...
весь вопрос только где искать... :)
ну здесь самое главное, что вы достигли требуемого вам результата.

moraru 02-07-2010 19:39 1446192

Блин, народ скажите как изменить рабочию папку ярлыка в скрипте (игра stalker) заранее спасибо

tema47 02-07-2010 21:10 1446238

А как сделать чтобы картинка была во весь установщик?

nik1967 02-07-2010 21:29 1446247

tema47,
Несколько страниц назад.

moraru 02-07-2010 21:37 1446251

ну как скажите изменить рабочию папку ярлыка программы (C:\Games\STALKER\bin\ на C:\Games\STALKER\) помогите

vint56 02-07-2010 21:42 1446253

moraru, вот ярлыки
[Icons]
Name: {group}\С.Т.А.Л.К.Е.Р. - Чистое Небо; Filename: {app}\bin\xrEngine.exe; WorkingDir: {app}; IconFilename: {app}\stalker_cs.ico; Comment: Запустить игру
Name: {group}\WEB сайт игры; Filename: {app}\gamesite.url; Comment: Зарегистрировать игру в интернете
Name: {group}\WEB сайт издателя; Filename: {app}\publisher.url; Comment: Посетить WEB сайт издателя
Name: {group}\Просмотреть ReadMe.txt; Filename: {app}\ReadMe.txt; Comment: Просмотреть ReadMe
Name: {group}\{cm:UninstallProgram,С.Т.А.Л.К.Е.Р. - Чистое Небо}; Filename: {uninstallexe}; IconFilename: {app}\uninstall.ico; Comment: Удалить игру
Name: {commondesktop}\С.Т.А.Л.К.Е.Р. - Чистое Небо; Filename: {app}\bin\xrEngine.exe; WorkingDir: {app}; IconFilename: {app}\stalker_cs.ico; Tasks: desktopicon
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\С.Т.А.Л.К.Е.Р. - Чистое Небо; Filename: {app}\bin\xrEngine.exe; WorkingDir: {app}; IconFilename: {app}\stalker_cs.ico; Tasks: quicklaunchicon

moraru 02-07-2010 21:55 1446260

спасиба, благодаствую!

BlackEric 03-07-2010 00:08 1446320

Habetdin, Спасибо. Теперь добавляется.
А на что влияет кодировка в которой сохранен скрипт? Почему не использовать к примеру UTF-8?

svoboda_serega 03-07-2010 00:10 1446322

Привет, помогите плз, у меня есть ISTool и Inno Setup Compiler, я скачал пример скрипта андекавр, как мне переделать под себя?Я даже чистый начинаю делать, а он мне ошибки выдаёт что это?

BlackEric 03-07-2010 00:21 1446328

Сейчас показываю флажок для добавления программы в автозагрузку так:
Код:

[Tasks]
Name: userstartup; Description: "Add program to startup"; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

А нет ли готовой константы, типа {cm:CreateQuickLaunchIcon}, чтобы заменить мое "Add program to startup"?

Неохота самому на другие языки переводить.

svoboda_serega 03-07-2010 00:53 1446341

Эт, всё сделал, только всё равно он ошибки выдаёт, дайте хороший и проверенный скрипт установки, чтоб проверка Системника была и тд, как Splinter Cell, только его шаблон тоже не работает, короче дайте хороший и проверенный

R.i.m.s.k.y. 05-07-2010 08:17 1447373

Цитата:

Цитата svoboda_serega
дайте хороший и проверенный »

Все что могли дать - в шапке темы. Никто за вас писать код не будет. Если вы не заметили, здесь отвечают на конкретные вопросы, даже абсолютно нулевые - к примеру про ярлыки.

marcus1812 06-07-2010 16:15 1448369

Привет всем! У меня возникает ошибки при попытке удаления игры, из-за нее так и не получается ее удалить.

Мне сказали что это ошибка в скрипте фриарка, и что уже здесь давно есть новая поправленная версия. Помогите ее решить)

paravozik2009 06-07-2010 18:59 1448501

marcus1812, Приведите Ваш скрипт.

marcus1812 06-07-2010 19:23 1448523

Я скачал новый скрипт фриарка, теперь вот это . Появляется при распаковке арк архива.
Скрипт - http://rghost.ru/2065015

paravozik2009 06-07-2010 19:52 1448544

marcus1812, хм....странно,было когда-то у меня такое удалить то удалил.
Скрипт откуда качали?

marcus1812 06-07-2010 19:55 1448546

paravozik2009, скрипт - это скрипт юршата v.2.2 только немного переделанный мною. Самое странное, что сейчас попробовал полностью чистый скрипт юршата - тоже самое((

nik1967 06-07-2010 20:02 1448552

marcus1812,
На этой странице в конце
Скрипт распаковки архивов FreeArc от Shegorat
Тот же скрипт только немного исправленный от nik1967
Давно уже исправили :smirk: .

paravozik2009 06-07-2010 20:14 1448564

nik1967, Я ему отправил в аську,первый чем Вы....

marcus1812 06-07-2010 20:17 1448566

Все работает))

nik1967 06-07-2010 20:22 1448568

marcus1812, ну дак.

R.i.m.s.k.y. 07-07-2010 08:21 1448761


извините за оффтоп - но в чем большое преимущество фриарка, чего с ним так все заморачиваются? Ведь сам инно неплохо жмет, 7зип к примеру ведьмака версии 1,4 (13гиг) сжал даже чуть похуже (инно и 7зип были настроены на макс сжатие)

paravozik2009 07-07-2010 16:48 1449071

R.i.m.s.k.y., Может что у него,больше возможностей?! :cool:

R.i.m.s.k.y. 07-07-2010 16:56 1449077

Цитата:

Цитата paravozik2009
Может что у него,больше возможностей? »

какие возможности у архиватора кроме запаковать/распаковать?
и какие возможности фриарка используются для инно сетапов?

Serega 07-07-2010 17:37 1449104

Цитата:

Цитата R.i.m.s.k.y.
Ведь сам инно неплохо жмет »

Я про это уже давно говорил, но каждый архиватор, жмёт лучше те или иные типы файлов, т.е. если всё правильно раскидать по типам файлов и сжать соответствующими архиваторами, то результат может получиться неплохой, но стоит ли игра свеч?
Вот здесь я затрудняюсь ответить, т.к. с одной стороны затраченное время на лишнюю работу, в несколько часов, с другой незначительное уменьшение размера, пусть даже в 100 МБ...
Цитата:

Цитата R.i.m.s.k.y.
(инно и 7зип были настроены на макс сжатие) »

в 7z использовали LZMA2? просто при такой настройке, должно быть приблизительно одинаково...

МИШАНЧИК 08-07-2010 00:20 1449344

Подскажите пожалуйста, можно-ли как-то сделать, чтоб при запуске .exe файла из секции [Run] установщик автоматически завершил свою работу. Т.е. чтоб финишная страница закрывалась автоматически и не нужно было нажимать на кнопку "Завершить"?

A1EXXX 08-07-2010 01:29 1449374

МИШАНЧИК, можно, к примеру, так:
читать дальше »
Код:

[Code]
procedure CurPageChanged(CurPageID: Integer);
Begin
  if CurPageID = wpFinished then
    begin
      WizardForm.NextButton.OnClick(WizardForm.NextButton);
    end;
end;


R.i.m.s.k.y. 08-07-2010 08:21 1449445

Цитата:

Цитата Serega
должно быть приблизительно одинаково »

Не помню LZMA или не LZMA было, я год назад делал свой дистр Ведьмака. Помню только что инно сжал так, что 100 метров не влезли на ДВД-болванку, а 7зип - 130 или 140 не влезло. Общий вес дистра получился под 9 гигов (чуть больше чем 2 ДВД болванки).

user_123 08-07-2010 11:00 1449524

Здравствуйте. Столкнулся с одной проблемой. Для работы некоторых программ требуется установка пакета MS Visual C++ 20XX. Иногда приходится включать официальный установщик от MS в дистрибутивы для программ размером <0,5 Мб, из-за чего сильно увеличивается размер инсталлятора.

На сколько я знаю, в ISTool можно реализовать загрузку из интернета... Подскажите, по наличию каких (конкретно) файлов в системной папке и ключей в реестре можно определить, установлены ли на ПК:
  1. Visual C++ 2008 Redistributable Package (x86)
  2. Visual C++ 2010 Redistributable Package (x86)

--------------------
Этот вопрос я уже достаточно давно задавал... Но внятного ответа на него не получил... Если кто-нибудь знает, какие ключи / файлы создаются MSVC, подскажите пожалуйста, или поделитесь ссылкой.

R.i.m.s.k.y. 08-07-2010 11:25 1449533

Цитата:

Цитата user_123
Подскажите, по наличию каких »

может быть этот \\\Registry\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\
и наверное один из подключей \\\Registry\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ - экспортируем и ищем
Могу еще посоветовать утилитку RegShot - она отслеживает изменения в реестре/файлах и выводит список изменений.

user_123 08-07-2010 15:49 1449730

R.i.m.s.k.y., у меня стоят распространяемые пакеты с++, но ключа
Цитата:

Цитата R.i.m.s.k.y.
Registry\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\ »

у меня нет.

Про утилиту RegShot я знаю, проблема в том что у меня нет возможности поставить чистую ОС... Хотя можно наверно пакеты с++ деинсталлировать и заново поставить...
------------------------------------------
В общем, получил я некоторые данные с помощью RegShot, но мне кажется что там сплошной рандом. у знакомого другие названия раделов в реестре, а так же конечный путь файлов пакета отличен от моего....

p.s. Подскажите плз что-то поконкретней, если кто-то разбирается.

маркузяка 09-07-2010 14:19 1450327

подскажите как сделать проверку системных требований как на картинке, или скажите на какой странице обсуждалось или дайте ссыль где можно глянуть

R.i.m.s.k.y. 09-07-2010 15:12 1450367

В шапке темы Ultimate Test http://www.forum.oszone.ru/post-1212059-48.html

Serega 09-07-2010 20:30 1450524

Цитата:

Цитата user_123
Подскажите плз что-то поконкретней, если кто-то разбирается »

всё просто, загоняете все ключи в массив, затем перебираете на вхождение, т.е наличие в DisplayName равно Microsoft Visual C++, или другими словами
if Pos('Microsoft Visual C++', DisplayName) > 0 then
так понятней?

SeDmY 09-07-2010 22:04 1450570

как лучше упаковать игру!? + какой скрипт распаковки применить?

nik1967 09-07-2010 22:49 1450597

SeDmY,
Inno Setup плюс внешние упаковщики , Пережатиe/Pекомпрессия/Oптимизация файлов для лучшего сжатия . Какой больше по душе :) .

SeDmY 09-07-2010 22:59 1450603

Цитата:

Цитата nik1967
SeDmY,
Inno Setup плюс внешние упаковщики , Пережатиe/Pекомпрессия/Oптимизация файлов для лучшего сжатия . Какой больше по душе . »

Рылся там уже(((( конкретно ничего не нашел(

-S.S.V.- 10-07-2010 00:12 1450629

Подскажите пожалалуйста.
Делаю репак игры, сжимаю архиватором FreeArc, после сжатия в папке в место игры оставляю архив .exe .
Создаю скрипт, указываю папку с игрой (с архивом), при создании инсталятора InnoSetup разбивает дистибутив на тома. Как прописать с скрипте, чтобы при установке репака сначала мой архив с ирой скопировался с диска (-ов) в папку куда я устанавливаю, потом там распаковался, а потом удалился.
А то FreeArc не потдерживает многотомность, приходиться записывать UDF диски. А так Inno разобьёт архив на тома. Или может есть какой нибудь другой не сложный способ использования FreeArc с InnoSetup.
Заранее благодарю.

Smsh.MSTR 10-07-2010 11:08 1450737

Всем привет. Поделитесь пожалуйста кодом, который предоставляет возможность в отдельном окне генерировать ключи подобно кейгену?

-S.S.V.- 11-07-2010 20:07 1451313

Привет. Ещё один вопрос. Inno Setup при установке создает на рабочем столе и в пуске ярлык на исполнимый файл приложения.
В свойствах ярлыка расположение, объект прописывает, а рабочую папку нет, из-за этого приложение не запускается.
Если прописываю вручную рабочую папку, все отлично запускается. Как в скрипте прописать чтобы в свойсвах ярлыка прописывалась рабочая папка.
Спасибо.

Habetdin 11-07-2010 20:35 1451324

-S.S.V.-, поиск решает половину вопросов ;)

geroinnn 11-07-2010 23:54 1451431

можно файлик Office2007.cjstyles а то немогу найти

Habetdin 12-07-2010 13:45 1451704

geroinnn, он входит в состав ISSkin Example.

geroinnn 14-07-2010 17:05 1453298

Помогите пожалуйста переделать этот скрипт чтобы на на странце завершения установки была вот такая растянутая картинка
Скрипт:
[Setup]
WizardImageFile=D:\Aria\картинки\Фото_286.bmp
[code]
procedure InitializeWizard();
begin
WizardForm.WizardBitmapImage.Width := ScaleX(502);

WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;

with TLabel.Create(WizardForm) do begin
AutoSize:=WizardForm.WelcomeLabel1.AutoSize;
Left:=WizardForm.WelcomeLabel1.Left;
Top:=WizardForm.WelcomeLabel1.Top
Width:=WizardForm.WelcomeLabel1.Width
Height:=WizardForm.WelcomeLabel1.Height
WordWrap:=WizardForm.WelcomeLabel1.WordWrap;
Font.Name:=WizardForm.WelcomeLabel1.Font.Name;
Font.Size:=WizardForm.WelcomeLabel1.Font.Size;
Font.Color:=clWhite;
Font.Style:=WizardForm.WelcomeLabel1.Font.Style;
Caption:=WizardForm.WelcomeLabel1.Caption;
Parent:=WizardForm.WelcomeLabel1.Parent
Transparent:=True
end;

with TLabel.Create(WizardForm) do begin
AutoSize:=WizardForm.WelcomeLabel2.AutoSize;
Left:=WizardForm.WelcomeLabel2.Left;
Top:=WizardForm.WelcomeLabel2.Top
Width:=WizardForm.WelcomeLabel2.Width
Height:=WizardForm.WelcomeLabel2.Height
WordWrap:=WizardForm.WelcomeLabel2.WordWrap;
Font.Name:=WizardForm.WelcomeLabel2.Font.Name;
Font.Size:=WizardForm.WelcomeLabel2.Font.Size;
Font.Color:=clWhite;
Font.Style:=WizardForm.WelcomeLabel2.Font.Style;
Caption:=WizardForm.WelcomeLabel2.Caption;
Parent:=WizardForm.WelcomeLabel2.Parent
Transparent:=True
end;
end;

Alexx73 16-07-2010 17:15 1454622

1. Взял скрипт из первого поста темы Картинка на страницах инсталлятора
Проблема в следущем, у меня установлена информация отображаемая перед установкой и после, а картинка накладывается сверху и текста не видно, только "Пожалуйста, прочитайте следующую важную информацию перед" и всё остального текста нет, как сделать наоборот либо чтобы было как раньше белое окошко ?

2. Можно ли изменить цвет текста в форме выбора папки в которую будет устанавливаться ?

В общем, надеюсь на наилучшие варианты. Заранее спасибо за помощь.

МИШАНЧИК 18-07-2010 11:06 1455405

Подскажите пожалуйста.
Как в стандартном инсталяторе происходит распаковка файлов? В смысле, если:
Код:

[Components]
Name: a; Description: Прграмма №1;
Name: в; Description: Программа №2;
[Files]
Source: Основная прог\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
Source: прог1\*; Components: a; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
Source: прог2\*; Components: в; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs

При установке сначала распакуется:
Код:

Source: Основная прог\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
а затем сверху перезапишет файлами из:
Код:

Source: прог1\*; Components: a; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
или
Код:

Source: прог2\*; Components: в; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
в зависимости от выбранных компонентов?
Не может быть чтоб сначала распаковал то, что относится к компонентам, а сверху потом основные файлы?
И можно ли как-то задать порядок распаковки? Чтоб сначала основные файлы, а потом компоненты?

Serega 18-07-2010 12:14 1455433

Цитата:

Цитата Alexx73
как сделать »

в том же сообщении прочитайте P.S., т.е. всё писать руками...
Цитата:

Цитата Alexx73
изменить цвет текста в форме выбора папки в которую будет устанавливаться ? »

Код:

procedure InitializeWizard();
begin
  WizardForm.DirEdit.Font.Color:= clRed;
end;

Цитата:

Цитата МИШАНЧИК
Как в стандартном инсталяторе происходит распаковка файлов? »

Всё происходит последовательно, в таком порядке, в каком у вас записано в скрипте секции [Files], т.е. сверху вниз, а при деинсталляции фалы удаляются в обратном порядке.
Цитата:

Цитата МИШАНЧИК
можно ли как-то задать порядок распаковки? »

просто запишите нужную вам последовательность, согласно сказанного выше.

МИШАНЧИК 18-07-2010 13:09 1455452

Serega, спасибо, обычно так и делаю. Но была стуация, когда не сработала русификация, хотя её файлы были записаны ниже основной папки и устанавливающаяся как компонент.
Поэтому и спросил.

Serega 18-07-2010 13:40 1455466

Цитата:

Цитата МИШАНЧИК
Но была стуация, когда не сработала русификация, хотя её файлы были записаны ниже основной папки и устанавливающаяся как компонент »

Это может быть результатом, какой-то ошибки в скрипте, т.е. не было выполнено какое-то условие, необходимое для установки данного компонента.

-S.S.V.- 19-07-2010 12:41 1455980

Цитата:

Цитата R.i.m.s.k.y.
Цитата -S.S.V.-:
Чтобы при установке отображался выбор установки дополнительных компонентов »
Код:
[Components]
Name: DIRECTX; Description: Установить DIRECTX версии ...
Name: PsysX; Description: Установить PsysX версии ...
[Run]
Components: DIRECTX; Filename: {src}\DirectX\directx_mar2009_redist.exe; Parameters: " /Q "; StatusMsg: Установка DirectX. Подождите, пожалуйста; Flags: runhidden waituntilterminated
Components: PsysX; Filename: {src}\PsysX\PsysX.exe; Parameters: " ??? "; StatusMsg: Установка PsysX. Подождите, пожалуйста; Flags: runhidden waituntilterminated
Параметры тихой установки PsysX я не знаю. Запустите установщик PsysX с ключом /? (PsysX.exe /?) - он должен написать какой параметр для тихой установки, его и пропишите вместо ???
{src} - путь к файлу вашего скомпилированного установщика. Рядом с этим установщиком должны лежать папки DirectX и PsysX »

Сделал как написано, PhysX устанавливается тихо (Скрытно), а DirectX при установке запрашивает папку для распаковки архива, пробЫвал архив DirectX распаковать и в скрипте прописать путь к файлу DXSetup, но он не понемает тихой установки. Подскажите пожалуйста как ещё можно установить DirectX в тихом режиме без участия конечного пользователя.
Спасибо!

R.i.m.s.k.y. 19-07-2010 14:19 1456034

Цитата:

Цитата -S.S.V.-
в тихом режиме без участия конечного пользователя »

Ну запустили бы установщик дирекса с ключом /? - он бы вам сразу растолковал что необходимо указать еще /t:D:\Temp - папку для временной установки

Вот полная команда
[Run]
Components: DIRECTX; Filename: {src}\DirectX\directx_mar2009_redist.exe; Parameters: " /Q /T:%TMP%"; StatusMsg: Установка DirectX. Подождите, пожалуйста; Flags: runhidden waituntilterminated

У всех мелкософтских прог ключ /Q - стандартный. Я просто не знал что для дирекса еще надо указывать папку.

Serega 19-07-2010 17:08 1456134

Цитата:

Цитата R.i.m.s.k.y.
необходимо указать еще /t:D:\Temp - папку для временной установки »

Насколько я помню, хотя могу и ошибаться, согласно вашему примеру архив просто распакуется в папку Temp, а после этого ещё нужно запустить сам инсталлятор, по-моему он должен называться setup.exe и запустить его для тихой установки нужно, если не ошибаюсь, с ключом /silent.

P.S.
и папку Temp, лучше записывать как {tmp}, т.е.:
...Parameters: /q /t:{tmp}; ...
;)

R.i.m.s.k.y. 19-07-2010 17:21 1456143

Цитата:

Цитата Serega
лучше записывать как {tmp} »

%TMP% - системная папка временных файлов, а {tmp} - это папка временной установки Инно (она находится в %TMP%\is-*.tmp)
Параметр DXSETUP.exe /silent - верно, тихо ставится.

Components: DIRECTX; Filename: {src}\DirectX\directx_mar2009_redist.exe; Parameters: " /Q /T:%TMP%"; StatusMsg: Распаковка DirectX. Подождите, пожалуйста; Flags: runhidden waituntilterminated
Components: DIRECTX; Filename: %TMP%\DXSETUP.exe; Parameters: " /silent"; StatusMsg: Установка DirectX. Подождите, пожалуйста; Flags: runhidden waituntilterminated

или так
Components: DIRECTX; Filename: {src}\DirectX\directx_mar2009_redist.exe; Parameters: /Q /T:{tmp}; StatusMsg: Распаковка DirectX. Подождите, пожалуйста; Flags: runhidden waituntilterminated
Components: DIRECTX; Filename: {tmp}\DXSETUP.exe; Parameters: /silent; StatusMsg: Установка DirectX. Подождите, пожалуйста; Flags: runhidden waituntilterminated

И пару раз сталкивался с тем, что проги не принимали ключ /q, но принимали /Q

Serega 19-07-2010 20:34 1456273

Цитата:

Цитата R.i.m.s.k.y.
%TMP% - системная папка временных файлов »

я прекрасно знаю, назначение папок, только вот одно замечание, при {tmp} инсталлятор сам удалит все файлы, а точнее саму папку, в которую распаковывается архив во время инсталляции и вам не надо заботиться об удалении лишнего мусора, который останется после установки программы.

Цитата:

Цитата R.i.m.s.k.y.
сталкивался с тем, что проги не принимали ключ /q, но принимали /Q »

бывает такое

CSKA_fan_n.1 19-07-2010 23:15 1456370

Вложений: 1
Ребята, помогите связать вот эти скрипты.
Я не понимаю, почему вылезают ошибки, сначала "....че то там FilenameLabel...", потом разные другие!
Я новичок в этом деле...

Alexx73 20-07-2010 03:00 1456469

Цитата:

Цитата Serega
Цитата Alexx73:
как сделать »
в том же сообщении прочитайте P.S., т.е. всё писать руками... »

Я новичек в этом деле, написать сложно...
Может напишешь? пожалуйста :) Мне нужно только для страничек перед установкой и после данные для которых берутся из .txt

Цитата:

Цитата Serega
WizardForm.DirEdit.Font.Color »

за это большое спасибо

МИШАНЧИК 20-07-2010 08:31 1456524

Подскажите пожалуйста как правильно записать.
Есть компоненты:
Код:

[Components]
Name: "patch_1"; Description: "{cm:ххх}"; Flags: exclusive
Name: "patch_2"; Description: "{cm:ххх}"; Flags: exclusive
[Files]
Source: Game_1\*; DestDir: {app}; Components: patch_1; Flags: ignoreversion recursesubdirs createallsubdirs
Source: Game_2\*; DestDir: {app}; Components: patch_2; Flags: ignoreversion recursesubdirs createallsubdirs

А как сделать чтоб при выборе компонента "patch_2" сначала установились файлы относящиеся к "patch_1", а потом, поверх файлы отвечающие за "patch_2"?
Поясню. Сначала ставятся основные файлы игры, затем если выбран "patch_1" ставятся оф.патчи, а если выбран "patch_2" сначала ставятся оф.патчи, а поверху неофициальный патч.

R.i.m.s.k.y. 20-07-2010 08:36 1456527

Цитата:

Цитата МИШАНЧИК
А как сделать чтоб при выборе компонента "patch_2" сначала установились файлы относящиеся к "patch_1", »

Source: Game_1\*; DestDir: {app}; Components: patch_1 or patch_2; Flags: ignoreversion recursesubdirs createallsubdirs

CSKA_fan_n.1 20-07-2010 09:39 1456545

ээммм.... мне то кто нибудь поможет?

SkarM 20-07-2010 18:03 1456833

Я новичек в в работе с Inno Setup, и вот столкнулся с проблемой:
Вот исходный код:

[Components]
name: one1; Description:component 1;types:compact; Flags: checkablealone exclusive
name: one2; Description:component 2;types:compact;Flags: dontinheritcheck
name: one3; Description:component 3;types:compact;Flags: dontinheritcheck

name:two; Description:component 4;types:full; Flags: checkablealone exclusive
name:two1; Description:component 5;types: full;Flags: dontinheritcheck
name:two2; Description:component 6;types: full;Flags: dontinheritcheck
name:two3; Description:component 7;types: full;Flags: dontinheritcheck

В результате элементы one1 и two автоматически выбраны без возможности снять выбор с них. Я хочу чтоб выбирался только один из них вручную. И по возможности чтоб можно было выбрать компоненты one2, one3 только если выбран компонент one1, и соответственно с компонентом two можно было по желанию выбрать компоненты two1, two2, two3.

И каким образом можно прочитать версию ранее установленого приложения, если она указываеться в простом текстовом файле, который лежит в определенной папке?

Помогите пожалуйста).

SeDmY 21-07-2010 01:59 1457194

У кого есть скрипт распаковки архивов 7z? Чисто этих архивов!

МИШАНЧИК 21-07-2010 02:02 1457195

R.i.m.s.k.y., спасибо.
А
Цитата:

Цитата R.i.m.s.k.y.
Source: Game_1\*; DestDir: {app}; Components: patch_1 or patch_2; »

подразумевает что файлы из папки Game_1 будут копироваться при выборе компонента patch_2, но перед копированием файлов из папки Game_2?

R.i.m.s.k.y. 21-07-2010 08:47 1457296

Цитата:

Цитата МИШАНЧИК
подразумевает что файлы из папки Game_1 будут копироваться при выборе компонента patch_2, но перед копированием файлов из папки Game_2 »

Инно работает в секциях в порядке строк - будет строчка первая - первой и скопирует.

Цитата:

Цитата SeDmY
У кого есть скрипт распаковки архивов 7z? Чисто этих архивов! »

Можно воспользоваться бесплатной утилиткой UnRAR, входящей в WinRAR. Она консольная и WinRAR давно поддерживает распаковку из 7zip

SeDmY 21-07-2010 08:48 1457299

Цитата:

Цитата R.i.m.s.k.y.
Цитата SeDmY:
У кого есть скрипт распаковки архивов 7z? Чисто этих архивов! »
Можно воспользоваться бесплатной утилиткой UnRAR, входящей в WinRAR. Она консольная и WinRAR давно поддерживает распаковку из 7zip »

А в Inno Setup как это реализовать!?

R.i.m.s.k.y. 21-07-2010 09:54 1457349

Цитата:

Цитата SeDmY
А в Inno Setup как это реализовать »

Код:

Тащим с собой в инно Unrar
[Files]
Source: Unrar.exe; DestDir: {tmp}; Flags: ignoreversion
Source: arc.7zip; DestDir: {tmp}; Flags: ignoreversion
[Run]
Filename: {tmp}\unrar.exe; Parameters: x {tmp}\arc.7zip {app}\; StatusMsg: Распаковываем, немножко терпения; Flags: runhidden waituntilterminated

По идее так, но я не проверял

А вот пример из сборника скриптов (в шапке темы)
Код:

[Setup]
AppName=Need for Speed - Carbon
AppVerName=Need for Speed - Carbon v1.3
DefaultDirName={sd}\Games\NFSCarbon

[Components]
Name: eng; Description: Английская версия; Flags: exclusive
Name: rus; Description: Русская версия; Flags: exclusive

[Types]
Name: custom; Description: Выборочная установка; Flags: iscustom

[Files]
;Source: D:\NFSCarbon\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs

[Run]
Filename: {src}\Rus\NFSC_RUS.exe; Components: rus; WorkingDir: {src}\Rus; Parameters: "-y -o""{app}"""; StatusMsg: Установка русификации...; Flags: waituntilterminated

[_Code]
procedure CurStepChanged(CurStep: TSetupStep);
var
  res:Integer;
  app, arc, dest:string;
begin
If CurStep=ssPostInstall
then
begin
  app:=ExpandConstant('{src}')+'\7za.exe';
  arc:=ExpandConstant('{src}')+'\ARC.7z';
  dest:=ExpandConstant('{app}');
  Exec(app, 'x "'+ arc + '" -y -o"'+ dest + '"', '', SW_SHOWNORMAL, ewWaitUntilTerminated, res);
end;
end;


SeDmY 21-07-2010 10:37 1457380

Цитата:

Цитата R.i.m.s.k.y.
R.i.m.s.k.y. »

Спасибо)))) проверим-с)))

R.i.m.s.k.y. 21-07-2010 10:46 1457383


Цитата:

Цитата SeDmY
Спасибо)))) проверим-с))) »

За спасибо давим кнопочку "полезное сообщение" на сообщении, которое принесло Вам пользу :-)

CSKA_fan_n.1 21-07-2010 11:33 1457414

Блин, вы мне то ответьте, поможете или нет?

Devils0411 21-07-2010 11:38 1457419

Serega, Включите в шапку данную программу, она ничуть не хуже других Inno Setup Unpacker

R.i.m.s.k.y. 21-07-2010 11:50 1457423

Цитата:

Цитата CSKA_fan_n.1
Блин, вы мне то ответьте, поможете или нет »

Поиск рулит.
От себя могу намекнуть. FilenameLabel может не поддерживать метод Hide. Если надо спрятать метки файлов, делается это так:
Код:

procedure InitializeWizard();
WizardForm.FileNameLabel.Visible:= False;


bas32un 21-07-2010 16:16 1457687

Для удобства хоту задать путь к файлам (их много) в [files] Source: "C:\ляляляля\My.exe" с помощью переменной или константы или чего-нибудь подобного.
Почитал хелпы и сделал:
[code]
function MySourcePath(): String;
begin
Result := 'C:\ляляляляляля';
end;
Теперь пытаюсь Source: "{code:MySourcePath}\My.exe", но выдает ошибку неизвестный файлнейм префик {code
Как же сделать правильно?

и еще
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
MsgBox('Программа ' + '{#SetupSetting("AppName")}' + ' установлена!', mbInformation, MB_OK);
end;
-- {#SetupSetting("AppName")} так и выводится почему то, а не имя программмы....

CSKA_fan_n.1 21-07-2010 16:56 1457718

R.i.m.s.k.y., спасибо тебе! Но теперь у меня на этот код Инно ругается...

SkarM 21-07-2010 17:03 1457723

Так а по моему вопросу ктот поможет?...

R.i.m.s.k.y. 21-07-2010 17:12 1457731

Цитата:

Цитата SkarM
Так а по моему вопросу ктот поможет »

читаем справку

Код:

[Components]
name: one; Description:...; ; Flags: exclusive
name: one\one1; Description:component 1;types:compact; Flags: dontinheritcheck
name: one\one2; Description:component 2;types:compact;Flags: dontinheritcheck
name: one\one3; Description:component 3;types:compact;Flags: dontinheritcheck

name:two; Description:component 4;types:full; Flags: exclusive
name:two\two1; Description:component 5;types: full;Flags: dontinheritcheck
name:two\two2; Description:component 6;types: full;Flags: dontinheritcheck
name:two\two3; Description:component 7;types: full;Flags: dontinheritcheck

checkablealone - можно выбрать компоненту без "дочек"
dontinheritcheck- компонента не отммечается даже при выборе "дочки"

Поэкспериментируйте с ними - увидите как меняется

exclusive - можно выбрать только один компонент из всех с данным флагом

Или поставьте IsTool и русификацию к нему (ссылки в шапке темы) - там все эти флаги можно по ПКМ выбирать.

Цитата:

Цитата CSKA_fan_n.1
Но теперь у меня на этот код Инно ругается »

Знаете форумную присказку - "Здесь телепатов нет". Какая ошибка? скрин. У меня Инно 5,3,7 - такой код не понимает.
И вообще откуда этот код. Судя по всему от новой версии Инно или какого-то препроцессора. У кого скачали там и спросите на чем его компилили.

CSKA_fan_n.1 21-07-2010 17:47 1457766

R.i.m.s.k.y., вот с вашим кодом:


Вот без кода:


Вот когда без вашего кода, у мя вылезает ошибка, которая на скрине, я специально удалял тот параметр (FilenameLabel....), пробовал снова, эта ошибка исчезает, появляется другая и так все время!

Habetdin 21-07-2010 22:46 1457932

bas32un, Секция [code] выполняется при запуске "готового" инсталлятора.. :read:
Код:

#define MySourcePath "C:\Program Files\Inno Setup 5\Examples"

[Files]
Source: {#MySourcePath}\MyProg.exe; DestDir: {app}; Flags: ignoreversion


boss911 21-07-2010 23:25 1457950

bas32un

А не проще ли так:
Код:

[Files]
Source: C:\MyProg\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs

Или я чего-то не понял. Непонятно, для чего делать переменную в "Source", там, что трудно указать прямой, можно и относительный, путь к файлу, тем более этот путь нужен только для компиляции и все.

Цитата:

Цитата bas32un
-- {#SetupSetting("AppName")} так и выводится почему то, а не имя программмы.... »

Код:

MsgBox('Программа ' + '{#SetupSetting('AppName')}' + ' установлена!', mbInformation, MB_OK);

UltimaReDragON 22-07-2010 06:21 1458086

Вложений: 2
Привет. Скачал скрипт ExecAndWait.iss. Вставил в основной проект при помощи препоцессора, но у меня при комплияции пишет "PM_REMOVE Duplicate Identifier". Скрипты прикрепил, очень надеюсь на вашу помощь, заранее спасибо.

R.i.m.s.k.y. 22-07-2010 09:15 1458125

Цитата:

Цитата CSKA_fan_n.1
Вот когда без вашего кода, у мя вылезает ошибка, которая на скрине, »

эээ процедура InitializeWizard() пишется в секции Code и она в данном скрипте должна быть одна, отсутствуют begin-end,
Код:

[_Code] // пишем в скрипт без "_"
procedure InitializeWizard();
begin
  WizardForm.FileNameLabel.Visible:= False;
end;

И откуда скриптик FreeArc.iss взяли? Не от доброва случаем? Может еще Serega подскажет что добавить чтобы заработало в оригинале.

CSKA_fan_n.1 22-07-2010 11:27 1458229

R.i.m.s.k.y., и все равно не работает(((
Скрипт брал отсюда
- Самый краткий скрипт распаковки FreeArc от Shegorat, 14-06-2010.

А может быть вы мне дадите свой рабочий скрипт, наподобие этого?
Мне не нужно никаких красивых распаковок, мне нужно чтобы просто распаковал и все))

R.i.m.s.k.y. 22-07-2010 11:35 1458233

Цитата:

Цитата CSKA_fan_n.1
А может быть вы мне дадите свой рабочий скрипт, наподобие этого? »

Инно сам жмет очень неплохо, ведьмака с фильмом, музыкой и собственно ведьмаком сжал на 20 метров лучше чем 7zip (все на максимальное сжатие было настроено).
+ нет заморочки с разбивкой на тома - просто в секции Setup указал размер тома по 1/3 двд болванки, при запуске с болванки пишет - смени болванку.
Чего так на фриарк заморачиваются - не понимаю.

Почитал про него немного. Зачем он нужен - не понял, но вроде ему нужен http://code.google.com/p/isprecomp/

Если не нужно красивых распаковок я чуть выше писал про Unrar.

bas32un 22-07-2010 13:33 1458354

"C:\MyProg\*" - не подходило потому что можно либо то, либо другое (компоненты)...
С остальным понял - не было установлено Tools.

Вот еще с чем не могу разобраться: язык программы зависит от строчки language=ru в текстовом файле language.txt
Сделал папки по язык и туда поместил этот файл с нужной записью. А вот как правильно это добавить в [Files] Source: "lng_ru\language.txt"; DestDir: "{app}\";.... и в [Tasks] чтобы автоматом копировался нужный файл что-то не пойму.

МИШАНЧИК 22-07-2010 13:47 1458365

Подскажите пожалуйста, можно ли как-то сделать чтоб данные в реестр вносились в самом начале распаковки инсталятора? То есть, сначала данные в реестр, а затем все остальные файлы(ну кроме тех что отвечают за внешний вид инсталятора).

Habetdin 22-07-2010 14:03 1458373

bas32un,
Код:

[Files]
Source: C:\MyProg\russian.txt; DestDir: {app}; DestName: language.txt; Tasks: rus

[Tasks]
Name: rus; Description: Русификация


R.i.m.s.k.y. 22-07-2010 14:05 1458378

Цитата:

Цитата МИШАНЧИК
можно ли как-то сделать чтоб данные в реестр вносились в самом начале распаковки инсталятора »

Может быть так?
Код:

procedure CurStepChanged(CurPageID: Integer);
var res:integer;
begin
  if CurStep=ssInstall then begin
    Exec('regsvr32.exe', ' /s ' + AddQuotes(_путь_),ExpandConstant('{sys}'),SW_HIDE,ewWaitUntilTerminated,res);
    // или читаем справку по команде reg import
  end;
end;


bas32un 23-07-2010 13:20 1459127

1. Помогите с такой задачей:
Папка Demo содержит демофайлы, на вкладке компоненты для демофайлов ставится или нет галочка, на вкладке task выбирается куда их поместить (папка с программой, документы....). Так как сделал имеет один недостаток - не отображается размер ее на вкладке компоненты, хотя когда пробЫвал просто ее сделать компонентом (без выбора куда) все вродебы было хорошо. Как вернуть размер?
Что есть:
Код:

[Components]
...
Name: "Demo"; Description: "Demo"; Types: full
[Tasks]
....
Name: Demo_app; Description: "{cm:DescriptionDemoApp}"; GroupDescription: "{cm:GroupDescriptionDemo}"; Components: Demo; Flags: exclusive unchecked;
Name: Demo_userdocs; Description: "{cm:DescriptionDemoUserdocs}"; GroupDescription: "{cm:GroupDescriptionDemo}"; Components: Demo; Flags: exclusive;
Name: Demo_commondocs; Description: "{cm:DescriptionDemoCommondocs}"; GroupDescription: "{cm:GroupDescriptionDemo}"; Components: Demo; Flags: exclusive unchecked;
[Files]
...
Source: "My\Demo\*"; DestDir: "{app}\Demo\"; Flags: ignoreversion recursesubdirs createallsubdirs; Tasks: Demo_app
Source: "My\Demo\*"; DestDir: "{userdocs}\Demo\"; Flags: ignoreversion recursesubdirs createallsubdirs; Tasks: Demo_userdocs
Source: "My\Demo\*"; DestDir: "{commondocs}\Demo\"; Flags: ignoreversion recursesubdirs createallsubdirs; Tasks: Demo_commondocs


2. Второй вопрос: в Task выбирается для чего создать ярлыки на раб. столе. Но создавать можно и у пользователя и у всех. Как бы удобно спросить куда (для всех или пользователю)? Тоже добавить в Task следом за галочками ярлыки переключатель куда? А как его скрывать когда не выбран ни один из ярлыком?

dracosha 23-07-2010 20:51 1459416

Всем привет!
Небольшой вопрос:
Что в этом коде нужно изменить:
читать дальше »
[code]
Код:

// Домашняя страничка
procedure URLLabelOnClick(Sender: TObject);
var
  ErrorCode: Integer;
begin
  ShellExec('open', '{#MyAppURL}', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;
procedure InitializeWizard();
var
  URLLabel: TNewStaticText;
begin
  URLLabel := TNewStaticText.Create(WizardForm);
  URLLabel.Caption := 'Homepage';
  URLLabel.Cursor := crHand;
  URLLabel.OnClick := @URLLabelOnClick;
  URLLabel.Parent := WizardForm;
 { URLLabel.Font.Style := URLLabel.Font.Style + [fsUnderline];}
  URLLabel.Font.Color := $646464;
  URLLabel.Top := 330;
  URLLabel.Left := 40;
  end;

что бы при наведении мышки на URLLabel, она становилась подчеркнутой и менялась на другой цвет?

nik1967 24-07-2010 08:35 1459656

dracosha,
Пример
Код:

[Setup]
AppName=AppName
AppVerName=AppVerName
DefaultDirName={pf}\AppName

[_Code]
var
MouseLabel,SiteLabel: TLabel;

procedure SiteLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://forum.ru-board.com', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

procedure SiteLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clRed;
SiteLabel.Font.Style:=[fsUnderline, fsBold];
end;

procedure SiteLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clBlue;
SiteLabel.Font.Style:=[fsBold];
end;

procedure SiteLabelMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clGreen;
SiteLabel.Font.Style:=[fsUnderline, fsBold];
end;

procedure SiteLabelMouseMove2(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clBlue;
SiteLabel.Font.Style:=[fsBold];
end;

procedure InitializeWizard();
begin
MouseLabel:=TLabel.Create(WizardForm);
MouseLabel.Width:=WizardForm.Width;
MouseLabel.Height:=WizardForm.Height;
MouseLabel.Autosize:=False;
MouseLabel.Transparent:=True;
MouseLabel.OnMouseMove:=@SiteLabelMouseMove2;
MouseLabel.Parent:=WizardForm;

SiteLabel:=TLabel.Create(WizardForm);
SiteLabel.Left:=10;
SiteLabel.Top:=330;
SiteLabel.Cursor:=crHand;
SiteLabel.Font.Color:=clBlue;
SiteLabel.Font.Style:=[fsBold];
SiteLabel.Caption:='Forum Ru-Board';
SiteLabel.OnClick:=@SiteLabelOnClick;
SiteLabel.OnMouseDown:=@SiteLabelMouseDown;
SiteLabel.OnMouseUp:=@SiteLabelMouseUp;
SiteLabel.OnMouseMove:=@SiteLabelMouseMove;
SiteLabel.Parent:=WizardForm;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then
begin
// DelTree использовать не рекомендуется,
// так как будут удалены все вложенные папки!
 DelTree(ExpandConstant('{app}\Backup'), True, True, True);
end;
end;


Raf-9600 25-07-2010 16:53 1460342

Ктонить может подправить этот скрипт? Там трабл с отображением винчестеров (они вобще не отображаются). В благодарность, могу выслать пригласительный на tracker.0day.kiev.ua или поделиться "бубликами" на нем, или pslan.com

читать дальше »

Код:

[ Code]
const
n=21; //количество слайдов
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);
TRandNumbers = array[1..N] of byte;

function WrapTimerProc(callback:TProc; paramcount:integer):longword;
external 'wrapcallback@files:InnoCallback.dll stdcall';

function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
external 'SetTimer@user32.dll stdcall';

function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
external 'KillTimer@user32.dll stdcall';

function get_unique_random_number(X:byte):TRandNumbers;
var
A,b,c: string;
i,j,k:byte;
begin
For i:=1 to X do A:=A+chr(i);
B:='';
For i:=1 to X do begin
j:=Random(Length(A)-1)+1;
C:='';
B:=B + A[j];
for k:=1 to Length(A) do
if k<>j then C:=C+A[k];
A:=C;
end;
for i:=1 to X do Result[i]:=ord(B[i]);
end;

var
TimerID: LongWord;
currTime: Integer;
SplashImage: TBitmapImage;
bmp: TRandNumbers;
z:byte;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
currTime := currTime + 1;
if (currTime mod {#20} = 0) // здесь, вместо TIME_FOR_VIEW ввести время показа слайда (в секундах)
then begin
SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[currTime/{#20}])+'.bmp')); // здесь тоже
if (currTime/{#20} = N) then currTime:=0 ; // и здесь
end;
end;


procedure InitializeWizard1;
begin
bmp:=get_unique_random_number(N);
ExtractTemporaryFile('Image_'+inttostr(bmp[1])+'.bmp');

currTime := 0;

WizardForm.ProgressGauge.Parent := WizardForm;
WizardForm.ProgressGauge.Top := WizardForm.CancelButton.Top + ScaleY(12);
WizardForm.ProgressGauge.Left := ScaleX(10);
WizardForm.ProgressGauge.Width := WizardForm.MainPanel.Width - ScaleX(20);
WizardForm.ProgressGauge.Height := 16;
WizardForm.ProgressGauge.Hide;

WizardForm.StatusLabel.Parent := WizardForm;
WizardForm.StatusLabel.Top := WizardForm.ProgressGauge.Top - ScaleY(18);
WizardForm.StatusLabel.Left := ScaleX(10);
WizardForm.StatusLabel.Width := ScaleX(397);
WizardForm.StatusLabel.Hide;

SplashImage := TBitmapImage.Create(WizardForm);
SplashImage.Top := 0;
SplashImage.Left := 0;
SplashImage.Width := WizardForm.MainPanel.Width;
SplashImage.Height := WizardForm.Bevel.Top;
SplashImage.Parent := WizardForm.InnerPage;
SplashImage.Stretch := True;
SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[1])+'.bmp'));
SplashImage.Hide;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
WizardForm.StatusLabel.Caption := 'Распаковка слайдов ...';
for z:=2 to N do ExtractTemporaryFile('Image_'+inttostr(bmp[z])+'.bmp');
end;
end;

procedure CurPageChanged1(CurPageID: Integer);
var
pfunc: LongWord;
begin
if (CurPageID = wpInstalling) then
begin
pfunc := WrapTimerProc(@OnTimer, 5);
TimerID := SetTimer(0, 0, 1000, pfunc);
WizardForm.PageNameLabel.Visible := False;
WizardForm.PageDescriptionLabel.Visible := False;
WizardForm.InnerNotebook.Hide;
WizardForm.Bevel1.Hide;
WizardForm.MainPanel.Hide;
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.ProgressGauge.Show;
WizardForm.StatusLabel.Show;
SplashImage.Show;
WizardForm.CancelButton.Enabled := True;
WizardForm.CancelButton.Top := WizardForm.Bevel.Top + ScaleY(100);
end else
begin
WizardForm.ProgressGauge.Hide;
SplashImage.Hide;
WizardForm.FileNameLabel.Hide;
WizardForm.StatusLabel.Hide;
if (CurPageID > wpInstalling) and (CurPageID < wpFinished) then
begin
WizardForm.InnerNotebook.Show;
WizardForm.Bevel1.Show;
WizardForm.MainPanel.Show;
WizardForm.PageNameLabel.Show;
WizardForm.PageDescriptionLabel.Show;
end;
If CurPageID = wpFinished then
end;
end;

procedure DeInitializeSetup1();
begin
KillTimer(0, TimerID);
end;

function ShouldSkipPage(CurPage: Integer): Boolean;
begin
if Pos('/SP-', UpperCase(GetCmdTail)) > 0 then
case CurPage of
wpLicense, wpPassword, wpInfoBefore, wpUserInfo,
wpSelectDir, wpSelectProgramGroup, wpInfoAfter:
Result := True;
end;
end;

const
WM_LBUTTONDOWN = 513;
WM_LBUTTONUP = 514;

procedure InitializeWizard2();
begin
if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) then
begin
PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONDOWN,0,0);
PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONUP,0,0);
end;
end;

procedure CurPageChanged2(CurPageID: Integer);
begin
if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) and
(CurPageID = wpSelectComponents) then
WizardForm.BackButton.Visible := False;
end;


//I?iaa?ea ia inoaaouany oaeeu
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
Res: Integer;
begin
case CurUninstallStep of
usPostUninstall:
begin
if DirExists(ExpandConstant('{app}')) then
if ExpandConstant('{language}') = 'ua' then
case MsgBox('Iaiea "' + ExpandConstant('{app}') + '" ia ii?i?iy.'#13#13 +
'"Oae" – iiaia aeaaeaiiy an?o oaee?a o iaio?, aee??a??e naio iaieo.' #13#13 +
'"I?" – a?ae?eoe iaieo a i?ia?aieeo, uia a?o?io aeaaeeoe oaeee.'#13#13 +
'"Neanoaaoe" – i??iai ia ?iaeoe, aeaaeeoe iaieo i?ci?oa naiino?eii.', mbInformation, MB_YESNOCANCEL) of

IDYES:
if not DelTree(ExpandConstant('{app}'), True, True, True) then
MsgBox('Iaiea ia aeaaeaia.' #13#13 'Iaiea aai iaei c oaee?a o i?e caa?yi? ?ioi? i?ia?aii?.', mbError, MB_OK);

IDNO:
if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Iiieeea a?ae?eooy.' #13#13 'Iaiea ia ciaeaaia.', mbError, MB_OK);

IDCANCEL:;
end
else
if ExpandConstant('{language}') = 'ru' then
case MsgBox('Iaiea "' + ExpandConstant('{app}') + '" ia ionoa.'#13#13 +
'"Aa" – iieiia oaaeaiea anao oaeeia a iaiea, aee??ay naio iaieo.' #13#13 +
'"Iao" – ioe?uou iaieo a i?iaiaieea, ?oiau a?o?io? oaaeeou oaeeu.'#13#13 +
'"Ioiaia" – ie?aai ia aaeaou, oaaeeou iaieo iic?a naiinoiyoaeuii.', mbInformation, MB_YESNOCANCEL) of

IDYES:
if not DelTree(ExpandConstant('{app}'), True, True, True) then
MsgBox('Iaiea ia oaaeaia.' #13#13 'Iaiea eee iaei ec oaeeia a iae caaaenoaiaaiu a?oaei i?eei?aieai.', mbError, MB_OK);

IDNO:
if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Ioeaea ioe?uoey.' #13#13 'Iaiea ia iaeaaia.', mbError, MB_OK);

IDCANCEL:;
end
else
case MsgBox('Directory "' + ExpandConstant('{app}') + '" is not empty.'#13#13 +
'"Yes" to delete all of the files in the directory, including the directory itself.' #13#13 +
'"No" to open the directory with explorer to delete the files manually.'#13#13 +
'"Cancel" to do nothing and delete the directory later manually.', mbInformation, MB_YESNOCANCEL) of

IDYES:
if not DelTree(ExpandConstant('{app}'), True, True, True) then
MsgBox('Directory is not deleted.' #13#13 'Directory or one of the files are used by the other application.', mbError, MB_OK);

IDNO:
if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Error opening the directory.' #13#13 'Directory is not found.', mbError, MB_OK);

IDCANCEL:;
end
end
end
end;

procedure InitializeWizard3();
begin
with WizardForm do begin
with MainPanel do
Height := Height - 1;
with WizardSmallBitmapImage do begin
Left := 0;
Top := 0;
Height := 58; //Размер рисунка
Width := 497; //
end;
with PageNameLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
with PageDescriptionLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
end;
end;

function enabledesc(ComponentsListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';

function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';

var
Info: TNewStaticText;
InfoCaption: TNewStaticText;
InfoPanel: TPanel;

procedure DeinitializeSetup2();
begin
disabledesc();
end;

procedure InitializeWizard4();
begin
WizardForm.TYPESCOMBO.Visible:= false;
WizardForm.ComponentsList.Height := WizardForm.ComponentsList.Height + WizardForm.ComponentsList.Top - WizardForm.TYPESCOMBO.Top;
WizardForm.ComponentsList.Top := WizardForm.TYPESCOMBO.Top;
WizardForm.ComponentsList.Width := ScaleX(200);
InfoPanel := TPanel.Create(WizardForm);
InfoPanel.Parent := WizardForm.SelectComponentsPage;
InfoPanel.Caption := '';
InfoPanel.Top := WizardForm.ComponentsList.Top;
InfoPanel.Left := ScaleX(216);
InfoPanel.Width := ScaleX(200);
InfoPanel.Height := WizardForm.ComponentsList.Height;
InfoPanel.BevelInner := bvRaised;
InfoPanel.BevelOuter := bvLowered;
InfoCaption := TNewStaticText.Create(WizardForm);
InfoCaption.Parent := WizardForm.SelectComponentsPage;
InfoCaption.Caption := 'ГиКц';
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 := 'Переместите ваш указатель мыши на компоненты чтобы увидеть их описание.';
Info.WordWrap := true;
enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,
'Английская озвучка;'+ // SoundUnit\eng
'Французская озвучка;'+ // SoundUnit\fra
'Немецкая озвучка;'+ // SoundUnit\deu
'Итальянская озвучка;'+ // SoundUnit\ita
'Испанская озвучка;' // SoundUnit\spa
);
end;

var
NeedSize:Integer;
FreeMB, TotalMB: Cardinal;
NeedSpaceLabel: TLabel;
n1: Integer;
VolumeName, FileSystemName: String;
VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint;
ListBox: TListBox;
StartMenuTreeView: TStartMenuFolderTreeView;

procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False else
WizardForm.NextButton.Enabled := True; end;

procedure GetNeedSpaceCaption;
begin
if NeedSize > 1024 then
NeedSpaceLabel.Caption := 'Требуется как минимум '+ FloatToStr(round(NeedSize/1024*100)/100) + ' Гб свободного дискового пространства.' else
NeedSpaceLabel.Caption := 'Требуется как минимум '+ IntToStr(NeedSize)+ ' Мб свободного дискового пространства.';end;

const oneMB= 1024*1024;
function GetLogicalDrives: DWord; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(nDrive: String): Longint; external 'GetDriveTypeA@kernel32.dll stdcall';
function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';
function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';

Function ByteOrTB(Bytes: Extended; noMB: Boolean): String; { Перевод числа в значение бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)}
Begin
if not noMB then Result:= FloatToStr(Int(Bytes)) +' Мб' else
if Bytes < 1024 then Result:= FloatToStr(Int(Bytes)) +' Бт' else
if Bytes/1024 < 1024 then Result:= FloatToStr(round((Bytes/1024)*10)/10) +' Кб' else
If Bytes/oneMB < 1024 then Result:= FloatToStr(round(Bytes/oneMB*100)/100) +' Мб' else
If Bytes/oneMB/1000 < 1024 then Result:= FloatToStr(round(Bytes/oneMB/1024*1000)/1000) +' Гб' else
Result:= FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Тб'
StringChange(Result, ',', '.')
End;

Function DelSP(String: String): String; { Удаление начальных, конечных и повторных пробелов }
Begin while (Pos(' ', String) > 0) do Delete(String, Pos(' ', String), 1); Result:= Trim(String); End;

Function CutString(String: String; MaxLength: Longint): String; { Обрезать строку до заданного кол-ва символов}
Begin
if Length(String) > MaxLength then Result:= Copy(String, 1, 6) +'...'+ Copy(String, Length(String) - MaxLength +9, MaxLength)
else Result:= String;
End;

Procedure GetDiskInfo(Disk: String);
Begin
FileSystemName:= StringOfChar(' ', 32); VolumeName:= StringOfChar(' ', 256);
GetVolumeInformation(Disk, VolumeName, 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, 31);
FileSystemName:= DelSp(FileSystemName); VolumeName:= DelSp(VolumeName); if VolumeName='' then VolumeName:='без метки';
End;

Procedure ListBoxRefresh; var FreeB, TotalB: Cardinal; Path, String: string; Begin
ListBox.Items.Clear
for n1:= 1 to 31 do // диск 'А' пропустить
if (GetLogicalDrives and (1 shl n)) > 0 then
if (GetDriveType(Chr(ord('A') + n) +':\') = 2) or (GetDriveType(Chr(ord('A') + n) +':\') = 3) then
if GetSpaceOnDisk(Chr(ord('A') + n) +':\', True, FreeMB, TotalMB) then ListBox.Items.Add(Chr(ord('A') + n) +':');
for n1:= 0 to ListBox.Items.Count -1 do begin
Path:= Copy(ListBox.Items[n],1,2) +'\' { если в накопителе нет диска, пропустить обновление }
if GetSpaceOnDisk(Path, False, FreeB, TotalB) and GetSpaceOnDisk(Path, True, FreeMB, TotalMB) then begin GetDiskInfo(Path);
if FreeB >= $7FFFFFFF then String:= PadL(ByteOrTB(FreeMB*oneMB, true),10) else String:= PadL(ByteOrTB(FreeB, true),10);
if TotalB >= $7FFFFFFF then begin TotalB:= TotalMB; FreeB:= FreeMB; String:= PadL(ByteOrTB(TotalMB*oneMB, true),11) +' всего -'+ String end else String:= PadL(ByteOrTB(TotalB, true),11) +' всего| '+ String;
ListBox.Items[n]:= Copy(Path,1,2) + String + PadL(FloatToStr(round(FreeB/TotalB*100)),3)+ '% своб|'+ PadL(FileSystemName,5)+ '| '+ CutString(VolumeName,9); end; end;
End;

Procedure ObjectOnClick(Sender: TObject); Begin
Case TObject(Sender) of
ListBox: for n1:= 0 to ListBox.Items.Count-1 do if ListBox.Selected[n] then WizardForm.DirEdit.Text:= Copy(ListBox.Items[n],1,1) +Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text))
StartMenuTreeView: if StartMenuTreeView.Directory <> '' then WizardForm.GroupEdit.Text:= StartMenuTreeView.Directory else WizardForm.GroupEdit.Text:= '{#SetupSetting("DefaultGroupName")}'
WizardForm.NoIconsCheck: begin WizardForm.GroupEdit.Enabled:= not(WizardForm.GroupEdit.Enabled); StartMenuTreeView.Enabled:= WizardForm.GroupEdit.Enabled; WizardForm.GroupBrowseButton.Enabled:= WizardForm.GroupEdit.Enabled end;
end; End;

procedure InitializeWizard5();
begin
NeedSize := 6100; //Здесь указывается место для приложения
WizardForm.DiskSpaceLabel.Hide;
NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(220);
Width := ScaleX(209);
Height := ScaleY(13);
end;
ListBox:= TListBox.Create(WizardForm)
ListBox.SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 8, WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left, WizardForm.DiskSpaceLabel.Top - (WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 12))
ListBox.Font.Size:= 9
ListBox.Font.Style:= []
ListBox.Font.Name:= 'Courier New';
ListBox.OnClick:= @ObjectOnClick;
ListBox.Parent:= WizardForm.SelectDirPage;
WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;

procedure CurPageChanged3(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then
begin
GetNeedSpaceCaption;
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled:=False
ListBoxRefresh
end;
end;

Var
Text: TNewStaticText;

Procedure InitializeWizard6();
begin
Text:=TNewStaticText.Create(WizardForm)
Text.Left:=10  // сдвиг влево
Text.Top:=305  // сдвиг вниз
Text.Color:=WizardForm.Color;
Text.Font.Name:='Courier New'  // шрифт
Text.Font.Color:=clGray  // цвет шрифта
Text.Caption:='Created by Raf-9600'  // надпись
Text.Parent:=WizardForm
end;

procedure CurPageChanged4(CurPageID: Integer);
begin
if (CurPageID = wpWelcome) or (CurPageID = wpFinished) or (CurPageID = wpInstalling) then  // скроем надпись на стриницах Приветствия, Завершения (картинку портит) и Установки :)
    begin
      Text.Visible:= False;
    end;

  if (CurPageID = wpLicense) or (CurPageID = wpInfoBefore) or (CurPageID = wpSelectDir) then  // начиная с любой из этих страниц надпись появится
    begin
      Text.Visible:= True;
    end;
end;

procedure InitializeWizard();
begin
InitializeWizard1();
InitializeWizard2();
InitializeWizard3();
InitializeWizard4();
InitializeWizard5();
InitializeWizard6();
end;

procedure CurPageChanged(CurPageID: Integer);
begin
CurPageChanged1(CurPageID);
CurPageChanged2(CurPageID);
CurPageChanged3(CurPageID);
CurPageChanged4(CurPageID);
end;

procedure DeinitializeSetup();
begin
DeinitializeSetup1();
DeinitializeSetup2();
end;


bas32un 26-07-2010 14:37 1460855

Как в code использовать текст из CustomMessages, т.е. чтобы тоже под разные языки можно было?

SkarM 26-07-2010 22:07 1461108

Пытаюсь сделать чтоб одновременно было слайдшоу и играла в фоне музыка с кнопками плей\пауза и стоп.
При компиляции ошибка:
duplicate identifier 'InitializeWizard'

И еще: можно ли как-то организовать ,например, всплывающие подсказки при наведении курсора мыши на компонент при установке? Можно при установке компонентов оставить только сам список компонентов а выпадающие меню "полная установка"/"компактная"/"выборочная" убрать?

Habetdin 27-07-2010 00:17 1461158

Цитата:

Цитата SkarM
При компиляции ошибка:
duplicate identifier 'InitializeWizard' »

У вас 2 разных InitializeWizard(); - объедините их :)

R.i.m.s.k.y. 27-07-2010 08:24 1461263

Цитата:

Цитата SkarM
Можно при установке компонентов оставить только сам список компонентов а выпадающие меню "полная установка"/"компактная"/"выборочная" убрать »

procedure InitializeWizard();
WizardForm.TypesCombo.Hide;

SkarM 27-07-2010 10:00 1461323

А куда именно вставлять строку WizardForm.TypesCombo.Hide;? После первой procedure InitializeWizard(); или второй, или после обоих таких строк? Объеденить не получиться- пытался, не работает.

R.i.m.s.k.y. 27-07-2010 11:35 1461371

Цитата:

Цитата SkarM
После первой procedure InitializeWizard() »

Их не должно быть две, в крайнем случае вторую InitializeWizard переменуйте например в IW и из первой InitializeWizard сделайте вызов второй. Но это способ через гланды. Правильнее их объединить.

Цитата:

Цитата SkarM
А куда именно вставлять строку WizardForm.TypesCombo.Hide »

в InitializeWizard в любое место, хоть перед end

svoboda_serega 27-07-2010 12:52 1461410

Плз дайте скрипт на установку Convision, видел тут, но что тоне найду.
Зы буду оч благодарен

mariolast 29-07-2010 14:05 1462839

Подскажите как сделать. Нужно чтобы на странице выбора компонентов (выбор из ниспадающего списка) при выборе "Сетевая версия" становилось активным поле с вводом текста (cbEdit) а если выбрано "Локальная версия", то чтобы это поле было недоступным.

Мой код

[Types]
Name: local; Description: Локальная версия
Name: network; Description: Сетевая версия

[Components]
Name: local; Description: Локальная версия; Types: local; Flags: exclusive
Name: network; Description: Клиент по сети; Types: network; Flags: exclusive checkablealone

[code]
Var
cbEdit : TEdit;

procedure OnClickCheck(Sender: TObject);
begin
if WizardForm.ComponentsList.Checked[1] then cbEdit.Visible:=false;
if WizardForm.ComponentsList.Checked[2] then cbEdit.Visible:=true;
end;

procedure InitializeWizard();
begin
cbEdit:= TEdit.Create(WizardForm.SelectComponentsPage);
cbEdit.Parent := WizardForm.SelectComponentsPage;
cbEdit.Text := IPServer('1');
cbEdit.Left := ScaleX(16);
cbEdit.Top := ScaleY(68);
cbEdit.Width := ScaleX(165);
cbEdit.Height := ScaleY(124);
cbEdit.Text := IPServer('1');
cbEdit.Font.Color := -16777208;
cbEdit.Font.Height := ScaleY(-13);
cbEdit.Font.Name := 'Tahoma';

WizardForm.ComponentsList.OnClickCheck:=@OnClick
end;

ChVL 29-07-2010 17:16 1463002

Некоторые приложения *.msi не запускаются из секции [Run], при выполнении скрипта появляется окно с описанием ошибки:
“Невозможно выполнить файл…
CreateProcess: сбой; код 193.
%1 не является приложением Win32”
Из секции [Сode] тоже не запускаются.
В то же время они нормально выполняются двойным кликом или из командной строки.
Как прописать запуск из скрипта?

R.i.m.s.k.y. 29-07-2010 17:35 1463016

Цитата:

Цитата ChVL
Как прописать запуск из скрипта »

А если попробовать флаг ShellExec или попробовать почитать справку про cmd (cmd /c или cmd /k)
Filename: cmd.exe; Parameters: " /c msi.msi"; StatusMsg: попробуем MSI

Habetdin 29-07-2010 19:22 1463097

ChVL,
Код:

[Run]
Filename: msiexec; Parameters: "/i ""{src}\example15.msi"" /qn"; StatusMsg: Установка Example v1.5...


ChVL 29-07-2010 22:15 1463185

R.i.m.s.k.y.,
Действительно, для моего файла достаточно Flags: ShellExec.

Habetdin,
Ваш классический вариант тоже, естественно, работает.

Diesel123denpda 30-07-2010 10:59 1463394

Мне нужно, чтобы инсталлятор искал в реестре ключ, копировал оттуда значение пути, а потом просто устанавливал этот путь как "корневой" для установочных файлов или DefaultDirName={code:FunctionRegPath|{pf}\Vmd}

где FunctionRegPath - это имя функции, возвращающей то, что надо - как прописать FunctionRegPath, подкиньте пример. Заранее спасибо!

R.i.m.s.k.y. 30-07-2010 14:56 1463577

Цитата:

Цитата Diesel123denpda
как прописать FunctionRegPath, подкиньте пример. »

попробуй так к примеру {reg:HKLM\SOFTWARE\AviSynth,plugindir2_5}\DirName

Habetdin 30-07-2010 16:00 1463620

Diesel123denpda,
Код:

DefaultDirName={reg:HKLM\Software\My Company\My Program,InstallPath|{pf}\My Company\My Program}

T3X 31-07-2010 18:32 1464191

Люди, как мне сделать что то подобное:
http://s004.radikal.ru/i207/1007/a8/a7d390e8ff50.jpg

Кнопки я сделал, а вот изображение растянуть....

-----------------------------------

Спасибо уже не надо :)

semiono 31-07-2010 21:05 1464238

Как определить Win7 ? Что-то типа мажор-минор версии? Как покажите подробно?
Мне нужно наподобе Check: IsWin64; только в данном случае надо узнать Win7/Win6 или XP
Причём я в обозначении версий Windows в InnoSetup не разбираюсь.

Habetdin 01-08-2010 16:17 1464617

semiono, OnlyBelowVersion и MinVersion: 0,6.1:
Код:

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion; OnlyBelowVersion: 0,6.1
; все, что "старее" Windows 7

Код:

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion; MinVersion: 0,6.1
; Windows 7 и выше


tupica 01-08-2010 17:03 1464647

Подскажите, какие флаги нужно использовать, чтобы файл (dll) копировался по-любому, а потом регистрация его через Tasks по выбору.

Source: {app}\ts.dll; DestDir: {app}; Flags: regserver; Tasks: "codec" - так сейчас не работает.
Т.е если снять Tasks(в установке), то файл не копируется, а должен.

Можно выполнить через CMD, но хочется стандартным способом.

T3X 01-08-2010 22:10 1464819

Люди, столкнулся с проблемой что при замене стандартных button на свои возникают жуткие торможения программы при каждом нажатии на кнопку "Далее" так как всё время извлекаться button.bmp

Выход с данной ситуации мне помог найти хороший человек под ником ZEUStiger

Код:

procedure InitializeWizard();
begin 
  ExtractTemporaryFile('button.bmp')
end;

Для таких ламеров как я думаю сообщение будет полезно =)

alex2010 02-08-2010 12:33 1465085

del

R.i.m.s.k.y. 02-08-2010 13:58 1465162

Цитата:

Цитата tupica
Source: {app}\ts.dll; DestDir: {app}; Flags: regserver; Tasks: "codec" - так сейчас не работает.
Т.е если снять Tasks(в установке), то файл не копируется, а должен »

Я думаю двумя строчками - одна копирует, вторая регит.

tupica 02-08-2010 20:10 1465479

Ну это не совсем то, что я хотел, но за неимением другого: подойдёт.

SeDmY 02-08-2010 23:23 1465623

Друзья, какой скрипт мне может помочь реализовать это:





Надоело заморачиваться, потом если только серьезно взяться))

R.i.m.s.k.y. 03-08-2010 08:29 1465746

Камрады, в шапке темы есть Ultimate test
На старой винде/инно (вин7-32/5,3,7) этот скрипт работал, теперь же переставил винду (вин7-64) и инно (5,3,10) - этот скрипт ругается на каждую вторую строчку. ISPP тоже ставил. Русификаторы не ставил. Дистры брал отсюда: http://forum.ru-board.com/topic.cgi?forum=5&topic=34344. Скажите, чего я не доставил?

nik1967 03-08-2010 09:03 1465761

R.i.m.s.k.y.,
А Inno ISCmplr Setup 5.3.10 build 100625 установил?

R.i.m.s.k.y. 03-08-2010 09:10 1465765

Цитата:

Цитата nik1967
А Inno ISCmplr Setup 5.3.10 build 100625 установил »

Йес оф кос!
Ставил сначала инно, потом ISTool, потом Inno_ISCmplr_Setup100625(7zip).zip и InnoCompiler100707(7zip).zip.
Ставил версии Unicode

Цитата:

Цитата tupica
Ну это не совсем то, что я хотел, но за неимением другого: подойдёт »

Пардон, а вы не haali splitter ставите? Если haali - там немного не так, простой регистрацией dll не прокатит

nik1967 03-08-2010 09:25 1465776

Цитата:

Цитата R.i.m.s.k.y.
Ставил версии Unicode »

Может быть здесь собака зарыта?

R.i.m.s.k.y. 03-08-2010 09:30 1465778

Цитата:

Цитата nik1967
Может быть здесь собака зарыта »

В ANSI версии тоже ругается. Поделитесь, плиз, версиями Инно в которых Ultimate Test работает.

Еще вопросик - надо чтобы софтинка ставилась и в х32 и в х64
в секции Setup достаточно прописать ArchitecturesInstallIn64BitMode=х64 и все будет работать и в 32 битной ОС и в 64 ОС? или как правильно

nik1967 03-08-2010 13:24 1465936

R.i.m.s.k.y.,
У меня работает:

Версия Inno на скриншоте, немного правленый Ultimate Test Black
Inno взят оттуда же.

R.i.m.s.k.y. 03-08-2010 14:11 1465967

Цитата:

Цитата nik1967
У меня работает »

Дык и у меня работал, чего теперь поставить надо штоп опять заработал?
Положите свой inno (можно папку с установленным инно, согласен на любую версию)

повторяю вопрос: надо чтобы софтинка ставилась и в х32 и в х64
в секции Setup достаточно прописать ArchitecturesInstallIn64BitMode=х64 и все будет работать и в 32 битной ОС и в 64 ОС? или как правильно

nik1967 03-08-2010 14:59 1465999

R.i.m.s.k.y.,
Ну если это чем то поможет: Inno .

Цитата:

Цитата R.i.m.s.k.y.
надо чтобы софтинка ставилась и в х32 и в х64 »

Ну в принципе Inno сам знает куда пихать в зависимости от разрядности винды. А если конкретно нужно что то установить в x64 или x32, то можно воспользоваться встроенной функцией IsWin64 (not IsWin64)
Конкретный пример:

Код:

[Run]
Filename: {src}\Redist\DirectX\DXSETUP.exe; WorkingDir: {src}\Redist\DirectX\; Parameters: /silent; Flags: waituntilterminated; Check: DirectX; BeforeInstall: DirectXProgress;
Filename: {src}\Redist\VisualC++\vcredist_x86.exe; WorkingDir: {src}\Redist\VisualC++\; Parameters: /q; Flags: waituntilterminated; Check: not IsWin64; BeforeInstall: visualcProgress;
Filename: {src}\Redist\VisualC++\vcredist_x64.exe; WorkingDir: {src}\Redist\VisualC++\; Parameters: /q; Flags: waituntilterminated; Check: IsWin64; BeforeInstall: visualcProgress;


R.i.m.s.k.y. 03-08-2010 15:19 1466025

Цитата:

Цитата nik1967
Ну в принципе Inno сам знает куда пихать в зависимости от разрядности винды »

Пасиб за архивчик, поставил иино, потом просто туда же распаковал архивчик - заработало!
IsWin64 уже порастыканы по скрипту, дело в том что если я не ставлю строчку ArchitecturesInstallIn64BitMode=x64 - то в реестр не заносятся некоторые ключи, ставлю эту сточку - сразу все заносится. Отсюда и вопрос - откомпиленный с этой строчкой проект на 32битной ОС сработает? Я пробовал - ругается че-то непотребное вылезает, типа "приложение потом не может деинсталлировано в среде не х64", хрень какая-то.

Diesel123denpda 03-08-2010 22:28 1466302

Привет!!! Люди помогите как написать скрипт, чтобы, например при установке обновления, инсталлятор проверял версию программы, которую хочешь обновить, через реестр для 64-битной системы

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\GSC Game World\STALKER-SHOC]
"InstallPath"="E:\\Program Files (x86)\\GSC World Publishing\\S.T.A.L.K.E.R"
"InstallLang"="ru"
"InstallSource"="stk-rus-pack-starforce-keydisk-r"
"InstallCDKEY"=""
"InstallUserName"=""
"BonusPack1"=dword:00000000
"BonusPack2"=dword:00000000
"UnInstConfirm"="Удалить сохраненные игры и профили?"
"InstallPatchID"=dword:0000054c
"InstallVers"="1.0004"

R.i.m.s.k.y. 04-08-2010 09:41 1466500

Цитата:

Цитата Diesel123denpda
проверял версию программы »

Ну проверил - а дальше что? распихать по папкам или как?
Пока могу предложить через Check:
Код:

[Files]
Source: stalker_update\*; DestDir: {app}; Check: Is64Stalker
[_Code]
function Is64Stalker(): Boolean;
Var vers: string;
begin
  if not IsWin64 then Result := False;
  if IsWin64 then begin
    RegQueryStringValue(HKLM, 'SOFTWARE\Wow6432Node\GSC Game World\STALKER-SHOC','InstallVers', vers);
    if vers = '1.0004' then Result := True else Result := False;
  end;
end;

Если Is64Stalker возвращает True то файлы из папки stalker_update\* копируются в {app}. Такую проверку (Check: Is64Stalker) можно прикрутить к любой секции, скроме Code и Setup

Ставьте условие точнее - распишу поподробнее если смогу.

Еще нюанс - в секции Setup может придется прописать ArchitecturesInstallIn64BitMode=x64. Сам про него спрашиваю - камрады Серега и Хабетдин молчат, а здесь наверное больше никто не расскажет про что этот параметр. У меня без этой строчки в реестр не заносились данные в вин7-64. С нею - заносятся. Но вот назначение и смысл ее мне непонятны. Справку читал первым делом, яндексил.

R.i.m.s.k.y. 04-08-2010 10:21 1466525

Еще вот хотел спросить - при выходе из сетапа инно он спрашивает "... Выйти из программы установки?"
Подскажите, пожалуйста, как отключить это сообщение что бы при нажатии кнопки Отмена/закрыть это сообщение не отсвечивало, чтобы сетап закрылся сразу без предупреждений

R.i.m.s.k.y. 04-08-2010 11:18 1466551

Цитата:

Цитата R.i.m.s.k.y.
чтобы сетап закрылся сразу без предупреждений »

Отвечаю сам себе (может кому то пригодится)

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:=False;
Cancel:=True;
end;

Ответ был в шапке темы.

Но вопрос про ArchitecturesInstallIn64BitMode=x64 и ArchitecturesAllowed остался - что они означают, для чего нужны, как ведут себя в 32битных ОС. Справку читал - не понял.

Habetdin 04-08-2010 13:11 1466634

R.i.m.s.k.y., ArchitecturesAllowed - для каких архитектур разрешен запуск инсталлятора
При ArchitecturesAllowed=x64 ia64 на x86 инсталлятор выдаст ошибку

ArchitecturesInstallIn64BitMode - на какой архитектуре установить программу в x64-режиме (x64 ia64)
По умолчанию программа из инсталлятора ставится как 32-битная (в %ProgramFiles(x86)% например)

R.i.m.s.k.y. 04-08-2010 13:16 1466640

Цитата:

Цитата Habetdin
программу в x64-режиме (x64 ia64 »

Что инно понимает под x64/ia64? win-64/itanium соответсвенно?
Если инсталлер ArchitecturesInstallIn64BitMode=х64 запустить на 32битной ОС он отработает в 32битном режиме?

Habetdin 04-08-2010 13:17 1466641

R.i.m.s.k.y., X86-64 и IA-64 соответственно

R.i.m.s.k.y. 04-08-2010 13:22 1466645

Цитата:

Цитата Habetdin
X86-64 и IA-64 соответственно »

Если инсталлер ArchitecturesInstallIn64BitMode=х64 запустить к примеру на трипне, который про х86-64 отродясь не слыхивал - инсталлер выдаст ошибку или отработает на 32битном режиме?

Habetdin 04-08-2010 13:26 1466650

R.i.m.s.k.y., если вы не трогали ArchitecturesAllowed
Цитата:

Цитата R.i.m.s.k.y.
отработает на 32битном режиме »


R.i.m.s.k.y. 04-08-2010 13:29 1466653

Цитата:

Цитата Habetdin
Ну это смотря что вы запакуете »

ffdshow x86, x64, haali, kmp/gom/svp
в скрипте уже везде порасставлены IsWin64
Rimpack в общем http://rimsky.name

Serega 04-08-2010 16:01 1466758

Цитата:

Цитата R.i.m.s.k.y.
если я не ставлю строчку ArchitecturesInstallIn64BitMode=x64 - то в реестр не заносятся некоторые ключи, ставлю эту сточку - сразу все заносится. »

Интересно, но честно сказать с реестром не проверял, да 64-х битной системы нет под рукой чтоб проверить. На самом деле, эта команда говорит компилятору, что в инсталляторе присутствуют файлы работающие только на 64-х битной системе и по умолчанию эта директива не заполнена, т.е. пустая и как уже сказал Habetdin:
Цитата:

Цитата Habetdin
По умолчанию программа из инсталлятора ставится как 32-битная »

т.е. если не заполняем эту директиву, то компилятор будет считать, что инсталлятор рассчитан на 32-х битную систему...
Цитата:

Цитата R.i.m.s.k.y.
откомпиленный с этой строчкой проект на 32битной ОС сработает? Я пробовал - ругается че-то непотребное вылезает, типа "приложение потом не может деинсталлировано в среде не х64 »

специально попробовал, у меня XP SP2, всё прекрасно установилось и деинсталлировалось

R.i.m.s.k.y. 04-08-2010 16:56 1466786

Цитата:

Цитата Serega
если не заполняем эту директиву, то компилятор будет считать, что инсталлятор рассчитан на 32-х битную систему »

На вин7-64 если не стоит директива ArchitecturesInstallIn64BitMode=x64 - не заносятся параметры в реестр
Код:

к примеру
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\GNU\ffdshow; ValueType: string; ValueName: pth; ValueData: {app}\FFDShow; Flags: uninsdeletevalue deletevalue; Check: IsWin64; Components: ffd
Root: HKLM; SubKey: SOFTWARE\GNU\ffdshow64; ValueType: string; ValueName: pth; ValueData: {app}\FFDShow64; Flags: uninsdeletevalue deletevalue; Check: IsWin64; Components: ffd
причем не срабатывает даже
Check: IsWin64; Filename: {syswow64}\reg.exe; Parameters: /f add SOFTWARE\Wow6432Node\GNU\ffdshow /v pth /t REG_SZ /d {app}\FFDShow; StatusMsg: Регистрация RimPack; Components: ffd; Flags: runhidden waituntilterminated
Check: IsWin64; Filename: {syswow64}\reg.exe; Parameters: /f add HKLM\SOFTWARE\GNU\ffdshow64 /v pth /t REG_SZ /d {app}\FFDShow64; StatusMsg: Регистрация RimPack; Components: ffd; Flags: runhidden waituntilterminated
ключей

ставлю ArchitecturesInstallIn64BitMode=x64 - заносятся и без reg import
Отсюда и вопрос возник - как с такой директивой дистр чувствует себя на 32битных ОС. Habetdin уже ответил - нормально.
Ибо без нее на 64 битной ОС весьма хреново.

Diesel123denpda 04-08-2010 18:16 1466831

R.i.m.s.k.y. спасибо за такой ответ, но я имел в виду, чтобы инсталлятор при проверке версии через реестр выдавал ошибку о не совпадении версий или предлагал удалить старую версию.

И ещё, народ помогите разобраться вот с этим кодом, подкиньте пример! Заранее спасибо!

[code]

Код:

 
function InitializeSetup(): Boolean; 
var   
  ResultCode: Integer;   
  s, ResultStr:string; 
begin 
Result:=True; 
If not RegKeyExists(HKLM, 'SOFTWARE\GSC Game World\STALKER-SHOC\') 
  then 
begin 
 MsgBox('S.T.A.L.K.E.R Тени Чернобыля v 1.0005 не установлен или установлен неверно.' #13#13 'Дальнейшая работа мастера невозможна.', mbError, mb_Ok); 
 Result:=False; 
end   
 else   
  begin   
 If RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\','UninstallString', ResultStr) 
then
    begin
    If ResultStr<>''
  then
    begin
    ResultStr:=RemoveQuotes(ResultStr);    if MsgBox('Программа установки обнаружила уже установленную программу ранней версии.' #13#13 'Вы желаете предварительно удалить ее?', mbInformation, MB_YESNO) = idYes
  then
    if not Exec(ResultStr, '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode)
  then
    MsgBox('Ошибка удаления. ' #13#13 '' + SysErrorMessage(ResultCode) + '.' #13#13 'Вероятно, деинсталлятор был перемещен, удален или переименован.', mbError, MB_OK);
  end;
  end;
  end;
  end;


dracosha 04-08-2010 23:54 1467015

И снова здравствуйте!
Опять назрел вопрос:
читать дальше »
Код:

function IsPreviousVersionUpdatable(): Boolean;
var
  version, major, minor, build, revis: string;
begin
  Result := false;
  if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + GetAppID('') + '_is1', 'DisplayVersion', version) then
    begin
      major := Copy(version, 0, Pos('.', version) - 1);
      Delete(version, 1, Pos('.', version));
      minor := Copy(version, 0, Pos('.', version) - 1);
      Delete(version, 1, Pos('.', version));
      build := Copy(version, 0, Pos('.', version) - 1);
      Delete(version, 1, Pos('.', version));
      revis := Copy(version, 0, Pos('.', version) - 1);
      Delete(version, 1, Pos('.', version));
      if CompareStr(major, ExpandConstant('{#MyAppVerMajor}')) = 0 then
        if CompareStr(minor, ExpandConstant('{#MyAppVerMinor}')) = 0 then
          if CompareStr(build, ExpandConstant('{#MyAppVerBuild}')) >= 0 then
            if CompareStr(revis, ExpandConstant('{#MyAppVerRevis}')) >= 0 then
              Result := true;
    end;
end;

Господа ГУРУ! Помогите пожалуйста исправить этот код что бы получилось примерно следующее:
1. Если в системе установлена версия 0.0.5.5 то старая версия 0.0.4.4 была равна false.
2. Если в системе установлена версия 0.0.5.5 то новая версия 1.1.0.0 была равна false.
3. Если в системе установлена версия 0.0.5.5 то новая версия 0.0.6.6 была равна true.

т.е. мне хотелось бы что б при обновлении Major или Minor обновление было не доступно, а если в версии обновлены только Build и Revis, а Major и Minor не обновлялись то обновление было доступно
Serega, помоги пожалуйста?

semiono 05-08-2010 00:40 1467038

Есть ли возможность InnoSetup узнать размеры экрана десктопа текущего?

nik1967 05-08-2010 08:26 1467151

R.i.m.s.k.y.,
А не пробовал без "Wow6432Node" в строке реестра? Не знаю, у кого как, а у меня винда сама закидывает в реестре куда надо.
к примеру
Код:

 
Root: HKLM; SubKey: SOFTWARE\GNU\ffdshow; ValueType: string; ValueName: pth; ValueData: {app}\FFDShow; Flags: uninsdeletevalue deletevalue; Check: not IsWin64; Components: ffd
Root: HKLM; SubKey: SOFTWARE\GNU\ffdshow64; ValueType: string; ValueName: pth; ValueData: {app}\FFDShow64; Flags: uninsdeletevalue deletevalue; Check: IsWin64; Components: ffd


nik1967 05-08-2010 12:28 1467316

semiono,
DisplayRes
Код:

[Setup]
AppName=DisplayResoltution
AppVerName=DisplayResoltution
DefaultDirName=DisplayResoltution
DisableStartupPrompt=true
Uninstallable=false
InternalCompressLevel=none
Compression=none

[_Code]
//functions to get BPP & resolution

//
// prototype for ISX 3.X
//
function DeleteDC(hDC: Integer): Integer; external 'DeleteDC@GDI32 stdcall';
function CreateDC(lpDriverName, lpDeviceName, lpOutput: String; lpInitData: Integer): Integer; external 'CreateDCA@GDI32 stdcall';
function GetDeviceCaps(hDC, nIndex: Integer): Integer; external 'GetDeviceCaps@GDI32 stdcall';

Const
    HORZRES = 8;    //horizontal resolution
    VERTRES = 10;  //vertical resolution
    BITSPIXEL = 12; //bits per pixel
    PLANES = 14;    //number of planes (color depth=bits_per_pixel*number_of_planes)

function InitializeSetup(): Boolean;
  var xres, yres, bpp, pl, tmp: Integer;
      hDC: Integer;
begin
    //get resolution & BPP
    hDC := CreateDC('DISPLAY', '', '', 0);
    pl := GetDeviceCaps(hDC, PLANES);
    bpp := GetDeviceCaps(hDC, BITSPIXEL);
    xres := GetDeviceCaps(hDC, HORZRES); //horizontal resolution
    yres := GetDeviceCaps(hDC, VERTRES); //vertical resolution
//    tmp := DeleteDC(hDC);
    bpp := pl * bpp;  //color depth

          MsgBox( 'Current resolution is ' + IntToStr(xres) +
                  'x' + IntToStr(yres) +
                  ' and color depth is ' + IntToStr( bpp )
                  , mbInformation, MB_OK );

    Result := false;
end;


R.i.m.s.k.y. 05-08-2010 14:57 1467451

Цитата:

Цитата nik1967
А не пробовал без "Wow6432Node" »

Нет, не пробовал, попробую

nik1967 05-08-2010 15:19 1467474

R.i.m.s.k.y.,
И ещё обрати внимание на Check: not IsWin64 для x32 и Check: IsWin64 для x64.

Serega 05-08-2010 15:20 1467475

Цитата:

Цитата dracosha
что б при обновлении Major или Minor обновление было не доступно, а если в версии обновлены только Build и Revis, а Major и Minor не обновлялись то обновление было доступно »

Если я правильно понял, то так:
читать дальше »
Код:

const
  MyAppVerMajor = 1;
  MyAppVerMinor = 2;
  MyAppVerBuild = 3;
  MyAppVerRevis = 4;

function IsPreviousVersionUpdatable(): Boolean;
var
  version: string;
  major, minor, build, revis: Integer;
begin
  Result := False;
  if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + GetAppID('') + '_is1', 'DisplayVersion', version) then
    begin
      major := StrToInt(Copy(version, 1, Pos('.', version) - 1));
      Delete(version, 1, Pos('.', version));

      minor := StrToInt(Copy(version, 1, Pos('.', version) - 1));
      Delete(version, 1, Pos('.', version));

      build := StrToInt(Copy(version, 1, Pos('.', version) - 1));
      Delete(version, 1, Pos('.', version));

      revis := StrToInt(Copy(version, 1, Pos('.', version) - 1));
      Delete(version, 1, Pos('.', version));
     
      if (major <= MyAppVerMajor) and (minor <= MyAppVerMinor) then
        Result:= (build < MyAppVerBuild) or (revis < MyAppVerRevis);
    end;
end;


Сразу замечание по коду, строка начинается с 1, а массивы обычно с 0, т.е.:
Цитата:

Цитата dracosha
major := Copy(version, 0, Pos('.', version) - 1); »

грубейшая ошибка, копировать можно только с первого символа!

R.i.m.s.k.y. 05-08-2010 15:22 1467477

Цитата:

Цитата nik1967
И ещё обрати внимание на Check: not IsWin64 для x32 и Check: IsWin64 для x64 »

Первым делом расставил, думал этим и ограничится дело.

SkarM 05-08-2010 15:30 1467482

Хотел спросить: как с помощью Inno setup можно создать инсталятор драйверов? Если есть собственно только сами распакованные файлы драйвера.

R.i.m.s.k.y. 05-08-2010 15:48 1467490

Цитата:

Цитата SkarM
Хотел спросить: как с помощью Inno setup можно создать инсталятор драйверов? »

Я думаю рискованно, драйвер пишется во многие секции реестра, да еще в зависимости от карты, ОС, фазы луны... Думаю лучше распаковать и сделать тихую установку (попробовать с параметром /Q, /silent), если драйвер вообще поддерживает тихую установку.

SkarM 05-08-2010 15:52 1467491

Тоесть? Это как?У меня есть только уже распакованные файлы, и нужно сделать чтоб можно было его каким-угодно образом установить на другом компе... :dont-know

R.i.m.s.k.y. 05-08-2010 16:02 1467499

Цитата:

Цитата SkarM
Тоесть? Это как?У »

В папке с распакованными драйверами есть setup.exe, запустите его с параметром /Q или /silent. Поможет если инсталлер поддерживает тихую установку. Пару страниц назад я давал пример для PhysX (ищите по PsysX - я тогда ошибся в написании)

SkarM 05-08-2010 16:04 1467502

Вложений: 1


Есть только эти.

R.i.m.s.k.y. 05-08-2010 16:25 1467513

Цитата:

Цитата SkarM
Есть только эти »

Запускать на установку надо sbusd.inf. Запуск установки inf из командной строки
rundll32 syssetup,SetupInfObjectInstallAction DefaultInstall 128 .\<file>.inf

SeDmY 05-08-2010 22:15 1467735

Доброго времени суток! Помогите плиз вытащить скрипт, который будет отвечать только за оформление инсталятора, а точнее за то, чтобы поставить картинку на фоне из этого: http://rghost.ru/2275693

Хочу прицепить к своему, а в этом для меня слишком много ненужного хлама, да и скин не нужен...

Сделать типа этого:


SkarM 06-08-2010 09:35 1467954

У меня стоит Inno Setup 5.3.4, использую скрипт для распаковки .arc версии 3.5(с шапки), и всеравно вылетает ошибка на этой строке:
#ifdef UNICODE ; если у вас ошибка на этой строке, то установите препроцессор или исправьте скрипт для вашей версии Inno Setup

Вот сам код, может там где-то что-то не правильно:
читать дальше »
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{3696E971-EDA3-4A4E-950C-D5DD5D4166C0}
AppName=My Program
AppVerName=My Program 1.5
AppPublisher=My Company, Inc.
AppPublisherURL=http://www.example.com/
AppSupportURL=http://www.example.com/
AppUpdatesURL=http://www.example.com/
DefaultDirName=345\My Program d:\програмирование\Инсталяторы\New project\data\installfiles\
DefaultGroupName=My Program
OutputDir=D:\програмирование\Инсталяторы\New project
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Files]
;Source: *.arc; DestDir: {app}; Flags: nocompression
Source: unarc.dll; DestDir: {tmp}; Flags: dontcopy deleteafterinstall
Source: compiler:InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
Source: d:\програмирование\Инсталяторы\New project\data\installfiles\1.arc; DestDir: {app}; Flags: external dontcopy; Components: 1\one
Source: d:\програмирование\Инсталяторы\New project\data\installfiles\2.arc; DestDir: {app}; Flags: external dontcopy; Components: 1\two
Source: d:\програмирование\Инсталяторы\New project\data\installfiles\3.arc; DestDir: {app}; Flags: external dontcopy; Components: 1\three
Source: d:\програмирование\Инсталяторы\New project\data\installfiles\4.arc; DestDir: {app}; Flags: external dontcopy; Components: 1\four



[Components]
name: 1; Description: Основные файлы; Flags: fixed; Types:full
name: 1\one; Description: ««Немецкая озвучка наёмников»»; Flags: dontinheritcheck; Types:full
name: 1\two; Description: ««Украинская озвучка бандитов»»; Flags: dontinheritcheck; Types:full
name: 1\three; Description: ««Прозрачный инвентарь»»; Flags: dontinheritcheck; Types:full
name: 1\four; Description: ««Новая погода»»; Flags: dontinheritcheck; Types:full compact

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

[CustomMessages]
rus.ArcBreak=Установка прервана!
rus.ExtractedInfo=Распаковано %1 Мб из %2 Мб
rus.ArcInfo=Архив: %1 из %2
rus.ArcTitle=Распаковка архивов FreeArc
rus.ArcError=Распаковщик FreeArc вернул код ошибки: %1
rus.ArcFail=Распаковка не завершена!
rus.AllProgress=Общий прогресс распаковки: %1%%
rus.ArcBroken=Возможно, архив %1 повреждён%nили недостаточно места на диске назначения.
rus.Extracting=Распаковывается: %1
rus.taskbar=%1%%, жди %2
rus.remains=Осталось ждать %1
rus.LongTime=вечно
rus.ending=завершение
rus.hour= часов
rus.min= мин
rus.sec= сек

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

[code]
const
Archives = 'd:\програмирование\Инсталяторы\New project\data\installfiles\*.arc'; // укажите расположение архивов FreeArc; для внешних файлов строку в [Files] добавлять необязательно

PM_REMOVE = 1;
CP_ACP = 0; CP_UTF8 = 65001;
oneMb = 1048576;

type
#ifdef UNICODE ; если у вас ошибка на этой строке, то установите препроцессор или исправьте скрипт для вашей версии Inno Setup
#define A "W"
#else
#define A "A" ; точка входа в SetWindowText, {#A} меняется на A или W в зависимости от версии
PAnsiChar = PChar; // Required for Inno Setup 5.3.0 and higher. (требуется для Inno Setup версии 5.3.0 и ниже)
#endif
#if Ver < 84018176
AnsiString = String; // There is no need for this line in Inno Setup 5.2.4 and above (для Inno Setup версий 5.2.4 и выше эта строка не нужна)
#endif

TMyMsg = record
hwnd: HWND;
message: UINT;
wParam: Longint;
lParam: Longint;
time: DWORD;
pt: TPoint;
end;

TFreeArcCallback = function (what: PAnsiChar; int1, int2: Integer; str: PAnsiChar): Integer;
TArc = record Path: string; OrigSize: Integer; Size: Extended; end;

var
ExtractFile: TLabel;
lblExtractFileName: TLabel;
btnCancelUnpacking: TButton;
CancelCode, n, UnPackError, StartInstall: Integer;
Arcs: array of TArc;
msgError: string;
lastMb: Integer;
baseMb: Integer;
totalUncompressedSize: Integer; // total uncompressed size of archive data in mb
LastTimerEvent: DWORD;

Function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: string; cbMultiByte: integer; lpWideCharStr: string; cchWideChar: integer): longint; external 'MultiByteToWideChar@kernel32.dll stdcall';
Function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: string; cchWideChar: integer; lpMultiByteStr: string; cbMultiByte: integer; lpDefaultChar: integer; lpUsedDefaultChar: integer): longint; external 'WideCharToMultiByte@kernel32.dll stdcall';

function PeekMessage(var lpMsg: TMyMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMyMsg): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: TMyMsg): Longint; external 'DispatchMessageA@user32.dll stdcall';

Function OemToChar(lpszSrc, lpszDst: AnsiString): longint; external 'OemToCharA@user32.dll stdcall';
function GetWindowLong(hWnd, nIndex: Integer): Longint; external 'GetWindowLongA@user32 stdcall delayload';
function SetWindowText(hWnd: Longint; lpString: String): Longint; external 'SetWindowText{#A}@user32 stdcall delayload';

function GetTickCount: DWord; external 'GetTickCount@kernel32';
function WrapFreeArcCallback (callback: TFreeArcCallback; paramcount: integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function FreeArcExtract (callback: longword; cmd1,cmd2,cmd3,cmd4,cmd5,cmd6,cmd7,cmd8,cmd9,cmd10: PAnsiChar): integer; external 'FreeArcExtract@files:unarc.dll cdecl';

procedure AppProcessMessage;
var
Msg: TMyMsg;
begin
while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;

// Перевод числа в строку с точностью 3 знака (%.3n) с округлением дробной части, если она есть
Function NumToStr(Float: Extended): String;
Begin
Result:= Format('%.3n', [Float]); StringChange(Result, ',', '.');
while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Length(Result) > 1) do
SetLength(Result, Length(Result)-1);
End;

function cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;

Function Size64(Hi, Lo: Integer): Extended;
Begin
Result:= Lo;
if Lo<0 then Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
for Hi:= Hi-1 Downto 0 do
Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
End;

// Converts OEM encoded string into ANSI
// Преобразует OEM строку в ANSI кодировку
function OemToAnsiStr( strSource: AnsiString): AnsiString;
var
nRet : longint;
begin
SetLength( Result, Length( strSource ) );
nRet:= OemToChar( strSource, Result );
end;

// Converts ANSI encoded string into UTF-8
// Преобразует строку из ANSI в UTF-8 кодировку
function AnsiToUtf8( strSource: string ): string;
var
nRet : integer;
WideCharBuf: string;
MultiByteBuf: string;
begin
strSource:= strSource + chr(0);
SetLength( WideCharBuf, Length( strSource ) * 2 );
SetLength( MultiByteBuf, Length( strSource ) * 2 );

nRet:= MultiByteToWideChar( CP_ACP, 0, strSource, -1, WideCharBuf, Length(WideCharBuf) );
nRet:= WideCharToMultiByte( CP_UTF8, 0, WideCharBuf, -1, MultiByteBuf, Length(MultiByteBuf), 0, 0);

Result:= MultiByteBuf;
end;

// OnClick event function for btnCancel
procedure btnCancelUnpackingOnClick(Sender: TObject);
begin
if MsgBox( SetupMessage( msgExitSetupMessage ), mbInformation, MB_YESNO ) = IDYES then
CancelCode:= -127;
end;

var origsize: Integer;
// The callback function for getting info about FreeArc archive
function FreeArcInfoCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
begin
if string(what)='origsize' then origsize := Mb else
if string(what)='compsize' then else
if string(what)='total_files' then else
Result:= CancelCode;
end;

// Returns decompressed size of files in archive
function ArchiveOrigSize(arcname: string): Integer;
var
callback: longword;
Begin
callback:= WrapFreeArcCallback(@FreeArcInfoCallback,4); //FreeArcInfoCallback has 4 arguments
CancelCode:= 0;
AppProcessMessage;
try
// Pass the specified arguments to 'unarc.dll'
Result:= FreeArcExtract (callback, 'l', '--', AnsiToUtf8(arcname), '', '', '', '', '', '', '');
if CancelCode < 0 then Result:= CancelCode;
if Result >= 0 then Result:= origsize;
except
Result:= -63; // ArcFail
end;
end;

// Scans the specified folders for archives and add them to list
function FindArcs(dir: string): Extended;
var
FSR: TFindRec;
Begin
Result:= 0;
if FindFirst(ExpandConstant(dir), FSR) then begin
try
repeat
// Skip everything but the folders
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then CONTINUE;
n:= GetArrayLength(Arcs);
// Expand the folder list
SetArrayLength(Arcs, n +1);
Arcs[n].Path:= ExtractFilePath(ExpandConstant(dir)) + FSR.Name;
Arcs[n].Size:= Size64(FSR.SizeHigh, FSR.SizeLow);
Result:= Result + Arcs[n].Size;
Arcs[n].OrigSize := ArchiveOrigSize(Arcs[n].Path)
totalUncompressedSize := totalUncompressedSize + Arcs[n].OrigSize
until not FindNext(FSR);
finally
FindClose(FSR);
end;
end;
End;

// Sets the TaskBar title
Procedure SetTaskBarTitle(Title: String); var h: Integer;
Begin
h:= GetWindowLong(MainForm.Handle, -8); if h <> 0 then SetWindowText(h, Title);
End;

// Converts milliseconds to human-readable time
// Конвертирует милисекунды в человеко-читаемое изображение времени
Function TicksToTime(Ticks: DWord; h,m,s: String; detail: Boolean): String;
Begin
if detail {hh:mm:ss format} then
Result:= PADZ(IntToStr(Ticks/3600000), 2) +':'+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +':'+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2)
else if Ticks/3600 >= 1000 {more than hour} then
Result:= IntToStr(Ticks/3600000) +h+' '+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +m
else if Ticks/60 >= 1000 {1..60 minutes} then
Result:= IntToStr(Ticks/60000) +m+' '+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2) +s
else Result:= IntToStr(Ticks/1000) +s {less than one minute}
End;

// The main callback function for unpacking FreeArc archives
function FreeArcCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
var
percents, Remaining: Integer;
s: String;
begin
if GetTickCount - LastTimerEvent > 1000 then begin
// This code will be executed once each 1000 ms (этот код будет выполняться раз в 1000 миллисекунд)
// ....
// End of code executed by timer
LastTimerEvent := LastTimerEvent+1000;
end;

if string(what)='filename' then begin
// Update FileName label
lblExtractFileName.Caption:= FmtMessage( cm( 'Extracting' ), [OemToAnsiStr( str )] )
end else if (string(what)='write') and (totalUncompressedSize>0) and (Mb>lastMb) then begin
// Assign to Mb *total* amount of data extracted to the moment from all archives
lastMb := Mb;
Mb := baseMb+Mb;

// Update progress bar
WizardForm.ProgressGauge.Position:= Mb;

// Show how much megabytes/archives were processed up to the moment
percents:= (Mb*1000) div totalUncompressedSize;
s := FmtMessage(cm('ExtractedInfo'), [IntToStr(Mb), IntToStr(totalUncompressedSize)]);
if GetArrayLength(Arcs)>1 then
s := s + '. '+FmtMessage(cm('ArcInfo'), [IntToStr(n+1), IntToStr(GetArrayLength(Arcs))])
ExtractFile.Caption := s

// Calculate and show current percents
percents:= (Mb*1000) div totalUncompressedSize;
s:= FmtMessage(cm('AllProgress'), [Format('%.1n', [Abs(percents/10)])]);
if Mb > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((totalUncompressedSize - Mb)/Mb)) else Remaining:= 0;
if Remaining = 0 then SetTaskBarTitle(cm('ending')) else begin
s:= s + '. '+FmtMessage(cm('remains'), [TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)])
SetTaskBarTitle(FmtMessage(cm('taskbar'), [IntToStr(percents/10), TicksToTime(Remaining, 'h', 'm', 's', false)]))
end;
WizardForm.FileNameLabel.Caption := s
end;
AppProcessMessage;
Result:= CancelCode;
end;

// Extracts all found archives
function UnPack(Archives: string): Integer;
var
totalCompressedSize: Extended;
callback: longword;
FreeMB, TotalMB: Cardinal;
begin
// Display 'Extracting FreeArc archive'
lblExtractFileName.Caption:= '';
lblExtractFileName.Show;
ExtractFile.caption:= cm('ArcTitle');
ExtractFile.Show;
// Show the 'Cancel unpacking' button and set it as default button
btnCancelUnpacking.Caption:= WizardForm.CancelButton.Caption;
btnCancelUnpacking.Show;
WizardForm.ActiveControl:= btnCancelUnpacking;
WizardForm.ProgressGauge.Position:= 0;
// Get the size of all archives
totalUncompressedSize := 0;
totalCompressedSize := FindArcs(Archives);
WizardForm.ProgressGauge.Max:= totalUncompressedSize;
// Other initializations
callback:= WrapFreeArcCallback(@FreeArcCallback,4); //FreeArcCallback has 4 arguments
StartInstall:= GetTickCount; {время начала распаковки}
LastTimerEvent:= GetTickCount;
baseMb:= 0

for n:= 0 to GetArrayLength(Arcs) -1 do
begin
lastMb := 0
CancelCode:= 0;
AppProcessMessage;
try
// Pass the specified arguments to 'unarc.dll'
Result:= FreeArcExtract (callback, 'x', '-o+', '-dp' + AnsiToUtf8( ExpandConstant('{app}') ), '--', AnsiToUtf8(Arcs[n].Path), '', '', '', '', '');
if CancelCode < 0 then Result:= CancelCode;
except
Result:= -63; // ArcFail
end;
baseMb:= baseMb+lastMb

// Error occured
if Result <> 0 then
begin
msgError:= FmtMessage(cm('ArcError'), [IntToStr(Result)]);
GetSpaceOnDisk(ExtractFileDrive(ExpandConstant('{app}')), True, FreeMB, TotalMB);
case Result of
-1: if FreeMB < 32 {Мб на диске} then msgError:= SetupMessage(msgDiskSpaceWarningTitle)
else msgError:= msgError + #13#10 + FmtMessage(cm('ArcBroken'), [ExtractFileName(Arcs[n].Path)]);
-127: msgError:= cm('ArcBreak'); //Cancel button
-63: msgError:= cm('ArcFail');
end;
// MsgBox(msgError, mbInformation, MB_OK); //сообщение показывается на странице завершения
Log(msgError);
Break; //прервать цикл распаковки
end;
end;
// Hide labels and button
WizardForm.FileNameLabel.Caption:= '';
lblExtractFileName.Hide;
ExtractFile.Hide;
btnCancelUnpacking.Hide;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
UnPackError:= UnPack(Archives)
if UnPackError = 0 then
SetTaskBarTitle(SetupMessage(msgSetupAppTitle))
else
begin
// Error occured, uninstall it then
Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n); //откат установки из-за ошибки unarc.dll
SetTaskBarTitle(SetupMessage(msgErrorTitle))
WizardForm.Caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
end;
end;
end;

// стандартный способ отката (не нужна CurPageChanged), но архивы распаковываются до извлечения файлов инсталлятора
// if CurStep = ssInstall then
// if UnPack(Archives) <> 0 then Abort;

Procedure CurPageChanged(CurPageID: Integer);
Begin
if (CurPageID = wpFinished) and (UnPackError <> 0) then
begin // Extraction was unsuccessful (распаковщик вернул ошибку)
// Show error message
WizardForm.FinishedLabel.Font.Color:= $0000C0; // red (красный)
WizardForm.FinishedLabel.Height:= WizardForm.FinishedLabel.Height * 2;
WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) + #13#10#13#10 + msgError;
end;
End;

procedure InitializeWizard();
begin
with WizardForm.ProgressGauge do
begin
// Create a label to show current FileName being extracted
lblExtractFileName:= TLabel.Create(WizardForm);
lblExtractFileName.parent:=WizardForm.InstallingPage;
lblExtractFileName.autosize:=false;
lblExtractFileName.Width:= Width;
lblExtractFileName.top:=Top + ScaleY(35);
lblExtractFileName.Caption:= '';
lblExtractFileName.Hide;

// Create a label to show percentage
ExtractFile:= TLabel.Create(WizardForm);
ExtractFile.parent:=WizardForm.InstallingPage;
ExtractFile.autosize:=false;
ExtractFile.Width:= Width;
ExtractFile.top:=lblExtractFileName.Top + ScaleY(16);
ExtractFile.caption:= '';
ExtractFile.Hide;
end;

// Create a 'Cancel unpacking' button and hide it for now.
btnCancelUnpacking:=TButton.create(WizardForm);
btnCancelUnpacking.Parent:= WizardForm;
btnCancelUnpacking.SetBounds(WizardForm.CancelButton.Left, WizardForm.CancelButton.top, WizardForm.CancelButton.Width, WizardForm.CancelButton.Height);
btnCancelUnpacking.OnClick:= @btnCancelUnpackingOnClick;
btnCancelUnpacking.Hide;
end;

R.i.m.s.k.y. 06-08-2010 09:42 1467959

SkarM,
На прошлой странице выкладывали папку инно. Мне помогло, скачайте и распакуйте в папку установки Inno.

tupica 06-08-2010 11:06 1468039

Подскажите пожалуйста, как сделать деинсталлятор с выбором деинсталируемых компонентов.Т.е Установил птичками например CCleaner,Deragler,Speccy.Потом нужно удалить только Defragler, чтобы остальные остались.

Попробую.Теоретически всё правильно, только немного портит вид 3 проги и 3 деинсталлятора в папке(хочу чтобы удалять можно было из пуска).А так Спасибо!

R.i.m.s.k.y. 06-08-2010 11:56 1468100

Цитата:

Цитата tupica
Подскажите пожалуйста, как сделать деинсталлятор с выбором деинсталируемых компонентов. »

Интересный вопрос. Штатной такой особенности я не видел. Напишите на форуме разрабов инно - может добавят.
Я бы сделал такой деинсталлер как еще один инсталлер инно, который вытирал бы файлы и ключи реестра без добавления записей в секцию "установки программ".
Для затравки способ поубирать все ненужные окна (из коллекции скриптов в шапке темы)
Код:

Попробовать в разделе [Setup] выставить разные DisableProgramGroupPage=yes, DisableDirPage=yes, DisableFinishedPage=yes, DisableReadyPage=yes, DisableStartupPrompt=yes. Выбирай, что из этого нужно.
Если надо, чтобы совсем без диалогов, щелкнул по сетапу и все, то:

[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
DisableDirPage=yes
DisableProgramGroupPage=yes
DisableReadyPage=yes
DisableFinishedPage=yes
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes


[Files]
Source: "C:\My Program\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

[_Code]
procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID=wpWelcome then
begin
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
end;
end;

В секцию [Setup] надо дописать Uninstallable=false - прожка не появится в секции "установка и удаление программ"

R.i.m.s.k.y. 11-08-2010 08:25 1471225

Что-то затихло здесь. Оживлю форум своим вопросом, может тупым, но этот вопрос для меня умный.
Вопрос: есть вот такой список компонентов:
Код:

Name: pl; Description: Плееры; Types: full;
Name: pl\kmp; Description: The KMPlayer 2.9.4.1437; Types: full recom
Name: pl\gom; Description: GOM Player 2.1.23.5007 Rus; Types: full
Name: pl\mpc; Description: Media Player Classic Home Cinema 1.3.1249.0; Types: full
Name: pl\mpc\mpcdxva; Description: Аппаратное ускорение воспроизведения h264 и VC-1; Flags: checkablealone dontinheritcheck
Name: pl\fl; Description: Зарегестрировать файлы на:; Types: full recom
Name: pl\fl\kmp; Description: The KMPlayer; Flags: exclusive; Types: full recom
Name: pl\fl\gom; Description: GOM Player; Flags: exclusive
Name: pl\fl\mpc; Description: Media Player Classic Home Cinema; Flags: exclusive

Список плееров для установки и на какой плеер регистрировать файлы. Как сделать так, чтобы при выборе к установке плеера MPC нельзя было зарегить файлы на GOM и KMP???

Еще вопросик - есть и облегченная версия этого дистра - без плееров. Каждый раз немного напрягает по всему коду вырезать руками Components: pl. Можно ли как то поставить условие в скрипте на облегченный дистр - IsLite=1 и все Components: pl не включались в итоговый лайт-дистр?

moov1kk 14-08-2010 13:01 1473514

Помогите пожалуйста


vint56 14-08-2010 13:35 1473536

moov1kk у тебя нет процессора вот скачай http://files.jrsoftware.org/ispack/ispack-5.3.10.exe при установки поставь галочки

маркузяка 14-08-2010 17:19 1473660

я тут попробовал использовать вот этот скрипт


[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Files]
Source: compiler:Libraries\get_hw_caps.dll; Flags: dontcopy

[code]
function GetHardDriveFreeSpace(hdd: integer): Integer;
external 'hwc_GetHardDriveFreeSpace@files:get_hw_caps.dll stdcall';
function GetHardDriveName(hdd: integer): PChar;
external 'hwc_GetHardDriveName@files:get_hw_caps.dll stdcall';
function GetHardDriveTotalSpace(hdd: integer): Integer;
external 'hwc_GetHardDriveTotalSpace@files:get_hw_caps.dll stdcall';
function GetHardDrivesCount(): Integer; external 'hwc_GetHardDrivesCount@files:get_hw_caps.dll stdcall';

function InitializeSetup(): Boolean;
var
i, count: Integer;
msg: string;
begin
count:= GetHardDrivesCount();
msg:= 'Количество дисков: ' + IntToStr(count) + #13;
for i:= 0 to count - 1 do
msg:= msg + 'Размер: ' + GetHardDriveName(i) + ' - ' +
IntToStr(GetHardDriveTotalSpace(i)) + ' Мб' +
', своб.: ' + IntToStr(GetHardDriveFreeSpace(i)) + ' Мб' +#13;
MsgBox(msg, mbInformation, MB_OK);
end;

на версии от restools вылезела ошибка

почему и как исправить?

P.S. скрипт отсюда

moov1kk 14-08-2010 20:45 1473765

vint56 большое спасибо =)

alex2010 14-08-2010 23:59 1473872

маркузяка, ХЗ у меня робит:

moov1kk 15-08-2010 01:15 1473920

Народ, простите за возможно тупой вопрос, но мне просто довольно лень лазить по 219 страницам форума
Мну нужен код для изменения положения кннопок далее, назад и т.д. и строки где указываеться путь установки, заранее благодарю...

Habetdin 15-08-2010 05:42 1473959

маркузяка, замените PChar на PAnsiChar:
Код:

[Code]
function GetHardDriveFreeSpace(hdd: integer): Integer;
  external 'hwc_GetHardDriveFreeSpace@files:get_hw_caps.dll stdcall';
function GetHardDriveName(hdd: integer): PAnsiChar;
  external 'hwc_GetHardDriveName@files:get_hw_caps.dll stdcall';
function GetHardDriveTotalSpace(hdd: integer): Integer;
  external 'hwc_GetHardDriveTotalSpace@files:get_hw_caps.dll stdcall';
function GetHardDrivesCount(): Integer; external 'hwc_GetHardDrivesCount@files:get_hw_caps.dll stdcall';

function InitializeSetup(): Boolean;
var
  i, count: Integer;
  msg: string;
begin
  count:= GetHardDrivesCount();
  msg:= 'Количество дисков: ' + IntToStr(count) + #13;
  for i:= 0 to count - 1 do
    msg:= msg + 'Размер: ' + GetHardDriveName(i) + ' - ' +
      IntToStr(GetHardDriveTotalSpace(i)) + ' Мб' +
        ', своб.: ' + IntToStr(GetHardDriveFreeSpace(i)) + ' Мб' +#13;
  MsgBox(msg, mbInformation, MB_OK);
end;

Цитата:

Цитата alex2010
у меня робит »

У вас ansi-версия компилятора :happy:

R.i.m.s.k.y. 16-08-2010 08:23 1474525

народ, а мне кто нить подскажет?

Serega 16-08-2010 14:33 1474769

Цитата:

Цитата R.i.m.s.k.y.
чтобы при выборе к установке плеера MPC нельзя было зарегить файлы на GOM и KMP??? »

Не понял суть вопроса, у вас сейчас и так стоят флаги exclusive, уточните что вы хотите сделать...
Цитата:

Цитата R.i.m.s.k.y.
Можно ли как то поставить условие в скрипте на облегченный дистр - IsLite=1 и все Components: pl не включались в итоговый лайт-дистр? »

Так и сделайте в скрипте проверку, т.е. добавьте условие к тем компонентам, которые отображать не нужно, пример:
читать дальше »
Код:

[Components]
Name: pl; Description: Плееры; Types: full
Name: pl\kmp; Description: The KMPlayer 2.9.4.1437; Types: full recom; Check: IsLite
Name: pl\gom; Description: GOM Player 2.1.23.5007 Rus; Types: full; Check: IsLite
Name: pl\mpc; Description: Media Player Classic Home Cinema 1.3.1249.0; Types: full; Check: IsLite
Name: pl\mpc\mpcdxva; Description: Аппаратное ускорение воспроизведения h264 и VC-1; Flags: checkablealone dontinheritcheck
Name: pl\fl; Description: Зарегестрировать файлы на:; Types: full recom
Name: pl\fl\kmp; Description: The KMPlayer; Flags: exclusive; Types: full recom
Name: pl\fl\gom; Description: GOM Player; Flags: exclusive
Name: pl\fl\mpc; Description: Media Player Classic Home Cinema; Flags: exclusive

[Code]
const
  sLite = False;

function IsLite: Boolean;
begin
  Result := sLite;
end;


R.i.m.s.k.y. 16-08-2010 15:53 1474840

Цитата:

Цитата Serega
Так и сделайте в скрипте проверку, т.е. добавьте условие к тем компонентам, которые отображать не нужно, пример: »

Сделал, в лайт версии IsLite возвращает True, в полной - False (не легкая сборка)
Робит, в списке компонентов не появляется, но лайт-сборка весит как полная, резать по скрипту не хочется - можно че-нить пропустить или приотрезать лишнего.

Про выбор плееров: выбираю для установки KMP и MPC - надо чтобы можно было зарегить файлы либо на KMP или MPC (это сделано флагом exclusive) но нельзя было выбрать GOM. В текущей реализации можно для установки выбрать KMP и MPC и зарегить видеофайлы на GOM, что неправильно. Как сделать так, чтобы регистрация видеофайлов становилась активной при выборе соответствующего плеера?

Это я RimPack дотачиваю.

Serega 16-08-2010 17:33 1474900

Цитата:

Цитата R.i.m.s.k.y.
можно че-нить пропустить или приотрезать лишнего. »

при большом желании, можно хоть что, пример:
читать дальше »
Код:

; здесь указываем какая версия, т.е. облегчённая или нет...
# define IsLite = False

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra64
InternalCompressLevel=ultra64
SolidCompression=yes

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

[Types]
Name: full; Description: Полная установка
Name: recom; Description: Выборочная установка; Flags: iscustom

[Components]
Name: pl; Description: Плееры; Types: full
#if IsLite == True
  Name: pl\kmp; Description: The KMPlayer 2.9.4.1437; Types: full recom
  Name: pl\gom; Description: GOM Player 2.1.23.5007 Rus; Types: full
#endif
Name: pl\mpc; Description: Media Player Classic Home Cinema 1.3.1249.0; Types: full
Name: pl\mpc\mpcdxva; Description: Аппаратное ускорение воспроизведения h264 и VC-1; Flags: checkablealone dontinheritcheck
Name: pl\fl; Description: Зарегестрировать файлы на:; Types: full recom
Name: pl\fl\kmp; Description: The KMPlayer; Flags: exclusive; Types: full recom
Name: pl\fl\gom; Description: GOM Player; Flags: exclusive
Name: pl\fl\mpc; Description: Media Player Classic Home Cinema; Flags: exclusive

[Files]
#if IsLite == True
  Source: compiler:Examples\MyProg.exe; DestDir: {app}; Components: pl\kmp; Flags: ignoreversion
  Source: compiler:Examples\Readme-ru.txt; DestDir: {app}; Components: pl\gom; Flags: ignoreversion
#endif
Source: compiler:Examples\Readme-en.txt; DestDir: {app}; Components: pl\mpc; Flags: ignoreversion



Цитата:

Цитата R.i.m.s.k.y.
Как сделать так, чтобы регистрация видеофайлов становилась активной при выборе соответствующего плеера? »

т.е. если мы снимаем отметку с чебокса какого-то плеера, то и соответствующий радиобатон был не доступен?
Если да, то нужно просто добавить функцию обработки кликов.
Если надо, чуть позже накидаю пример...

medved_orbitel 16-08-2010 18:22 1474930

как сделать так,что на протяжении всего процесса установки в инсталле стояла моя картинка,а не белый фон,скрипт могу написать


ПОМОГИТЕЕЕЕЕЕ!!!!!!!!!!!!!!!!

SkarM 16-08-2010 23:12 1475097

Не могу токлом найти информацию: как использовать два раза функцию InitializeSetup? Вот два скрипта:


читать дальше »

Function InitializeSetup: Boolean; Begin
If Uppercase(ExpandConstant('1.6.02')) = Uppercase(ExpandConstant('{reg:HKLM\Software\GSC Game World\STALKER-COP,installvers}')) then Result:= True else
Begin; Result:= True; MsgBox('Тут текст какой-то ', mbInformation, mb_Ok); end;
End;
procedure BevelLabelClick(Sender: TObject);
var ErrorCode: Integer;
begin
ShellExec('open','http://tfile.ru','', '', SW_SHOW, ewNoWait, ErrorCode)
end;


procedure InitializeWizard();
begin
with WizardForm do begin
with BeveledLabel do begin
OnClick:=@BevelLabelClick;
Font.Color:=clBlue;
Enabled:=True;
Cursor:=crHand;
end;
end;
end;

function InitializeSetup :Boolean;
begin
if DirExists({reg:HKLM\Software\GSC Game World\STALKER-COP,installvers}\gamedata) then
DelTree({reg:HKLM\Software\GSC Game World\STALKER-COP,installvers}\gamedata, True, True, True);
end;


И еще: где-то видел скрипт, который сворачивает окно распаковки в маленькое в углу типа Installshield. Где можно найти пример того скрипта, а то я у себя его найти не могу...

Serega 16-08-2010 23:56 1475128

R.i.m.s.k.y., накидал вам пример, как это делается:
читать дальше »
Код:

; здесь указываем какая версия
# define IsLite = True
; задаём описания компонентов
# define kmpDesc "The KMPlayer 2.9.4.1437"
# define gomDesc "GOM Player 2.1.23.5007 Rus"
# define mpcDesc "Media Player Classic Home Cinema 1.3.1249.0"
# define aDesc "Зарегестрировать файлы на:"
# define kDesc "The KMPlayer"
# define gDesc "GOM Player"
# define mDesc "Media Player Classic Home Cinema"

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra64
InternalCompressLevel=ultra64
SolidCompression=yes

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

[Types]
Name: full; Description: Полная установка
Name: recom; Description: Выборочная установка; Flags: iscustom

[Components]
Name: pl; Description: Плееры; Types: full
#if IsLite == True
  Name: pl\kmp; Description: {#kmpDesc}; Types: full recom
  Name: pl\gom; Description: {#gomDesc}; Types: full
#endif
Name: pl\mpc; Description: {#mpcDesc}; Types: full
Name: pl\mpc\mpcdxva; Description: Аппаратное ускорение воспроизведения h264 и VC-1; Flags: checkablealone dontinheritcheck
Name: pl\fl; Description: {#aDesc}; Types: full
#if IsLite == True
  Name: pl\fl\kmp; Description: {#kDesc}; Flags: exclusive; Types: full recom
  Name: pl\fl\gom; Description: {#gDesc}; Flags: exclusive
#endif
Name: pl\fl\mpc; Description: {#mDesc}; Flags: exclusive

[Files]
#if IsLite == True
  Source: compiler:Examples\MyProg.exe; DestDir: {app}; Components: pl\kmp; Flags: ignoreversion
  Source: compiler:Examples\Readme-ru.txt; DestDir: {app}; Components: pl\gom; Flags: ignoreversion
#endif
Source: compiler:Examples\Readme-en.txt; DestDir: {app}; Components: pl\mpc; Flags: ignoreversion

[Code]
var
  kmp, gom, mpc, aReg, kReg, gReg, mReg: Integer;

procedure CorCheck;
{ корректируем отмеченность радиобатонов }
var
  i: Integer;
begin
  for i := kReg to mReg do
    if WizardForm.ComponentsList.ItemEnabled[i] then
      begin
        WizardForm.ComponentsList.Checked[i] := True;
        Break;
      end;
end;

procedure ComponentsListClick(Sender: TObject);
var
  Correct: Boolean;
begin
  Correct := True;
  { сразу проверим, все ли интиресующие компоненты доступны... }
  if not WizardForm.ComponentsList.Checked[kmp] and
    not WizardForm.ComponentsList.Checked[gom] and
    not WizardForm.ComponentsList.Checked[mpc] then
  { если нет, снимем отметку с aDesc }
    WizardForm.ComponentsList.Checked[aReg] := False;
  { в зависимости от того на кого кликнули, производим действия }
  case WizardForm.ComponentsList.ItemIndex of
    kmp: WizardForm.ComponentsList.ItemEnabled[kReg] := WizardForm.ComponentsList.Checked[kmp];
    gom: WizardForm.ComponentsList.ItemEnabled[gReg] := WizardForm.ComponentsList.Checked[gom];
    mpc: WizardForm.ComponentsList.ItemEnabled[mReg] := WizardForm.ComponentsList.Checked[mpc];
    else Correct := False;
  end;
  if Correct then
    CorCheck;
  { перерисуем лист компонентов }
  WizardForm.ComponentsList.Repaint;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpSelectComponents then
    begin
{ выполняем в случае если IsLite := True }
#if IsLite == True
      { узнаем порядковые номера наших компонентов... }
      kmp := WizardForm.ComponentsList.Items.IndexOf('{#kmpDesc}');
      gom := WizardForm.ComponentsList.Items.IndexOf('{#gomDesc}');
      mpc := WizardForm.ComponentsList.Items.IndexOf('{#mpcDesc}');
      aReg := WizardForm.ComponentsList.Items.IndexOf('{#aDesc}');
      kReg := WizardForm.ComponentsList.Items.IndexOf('{#kDesc}');
      gReg := WizardForm.ComponentsList.Items.IndexOf('{#gDesc}');
      mReg := WizardForm.ComponentsList.Items.IndexOf('{#mDesc}');
      WizardForm.ComponentsList.OnClick := @ComponentsListClick;
#endif
    end;
end;



Цитата:

Цитата medved_orbitel
на протяжении всего процесса установки в инсталле стояла моя картинка »

в шапке темы есть ссылка на пример, "Ссылки на примеры скриптов:" > "Картинка на страницах инсталлятора"

Цитата:

Цитата SkarM
как использовать два раза функцию InitializeSetup? »

никак, одинаковых процедур быть не может, делается путём объединения кода, либо руками, либо InnoSetup Script Joiner из шапки темы.
Вы откуда брали код? просто первая function InitializeSetup, там всегда результат True. т.е. будет запускаться инстал всегда, а вторая function InitializeSetup не рабочая.

R.i.m.s.k.y. 17-08-2010 08:22 1475260

Serega,
СПАСИБИЩЕ!!!

SkarM 17-08-2010 09:03 1475280

Первую- я специально сделал чтоб появлялось только сообщение, а установка продолжалась. А вот по поводу второй- мне надо скрипт, который будет удалять папку, в которую будут ставиться файлы программы.

UltimaReDragON 17-08-2010 10:19 1475330

парни, привет. Нуждаюсь в вашей помощи) Комплияция проходит успешно. Но подскажите пожалуйста, как можно сменить значки? (см. ниже)

http://rghost.ru/2364155

R.i.m.s.k.y. 17-08-2010 14:40 1475555

Вот такой инно-код для тихой установки без вопросов

Код:

[Setup]
DisableDirPage=true
DisableProgramGroupPage=true
DisableReadyPage=true
DisableFinishedPage=true
DisableStartupPrompt=true
DisableReadyMemo=true
[_Code]
procedure CurPageChanged(CurPageID: Integer);

begin

  If CurPageID=wpWelcome then
  begin
    SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
    SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
  end;

  If CurPageID=wpReady then
  begin
    SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
    SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
  end;

  If CurPageID=wpPreparing then
  begin
    SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
    SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
  end;

  If CurPageID=wpInstalling then
  begin
    SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
    SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
  end;

  If CurPageID=wpInfoAfter then
  begin
    SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
    SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
  end;

  If CurPageID=wpLicense then
  begin
    SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
    SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
  end;

  If CurPageID=wpPassword then
  begin
    SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
    SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
  end;

  If CurPageID=wpInfoBefore then
  begin
    SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
    SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
  end;

  If CurPageID=wpUserInfo then
  begin
    SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
    SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
  end;

  If CurPageID=wpSelectDir then
  begin
    SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
    SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
  end;

  If CurPageID=wpSelectComponents then
  begin
    SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
    SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
  end;

  If CurPageID=wpSelectProgramGroup then
  begin
    SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
    SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
  end;

  If CurPageID=wpSelectTasks then
  begin
    SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
    SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
  end;

  If CurPageID=wpReady then
  begin
    SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
    SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
  end;

  If CurPageID=wpPreparing then
  begin
    SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
    SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
  end;

  If CurPageID=wpInstalling then
  begin
    SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
    SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
  end;

  If CurPageID=wpInfoAfter then
  begin
    SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
    SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
  end;

  If CurPageID=wpFinished then
  begin
    SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
    SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
  end;

end;

При запуске инсталлера все равно появляется одно окно "Все готово к установке. Нажмите установить чтобы продолжить". Как его убрать, как сделать так бы при запуске экзешника все ставилось без нажатий далее/установить?
Про параметры /silent знаю, но сейчас не подходят

Serega 17-08-2010 17:08 1475670

Цитата:

Цитата R.i.m.s.k.y.
Вот такой инно-код для тихой установки без вопросов »

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

Цитата R.i.m.s.k.y.
Как его убрать, как сделать так бы при запуске экзешника все ставилось без нажатий далее/установить? »

допустим так:
читать дальше »
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra64
InternalCompressLevel=ultra64
SolidCompression=yes

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

[Code]
{ отобpажает или пpячет окно обpазом, указанным паpаметpом в nCmdShow }
function ShowWindow(hWnd: HWND; nCmdShow: Integer): BOOL; external 'ShowWindow@user32.dll stdcall';

const
  { обычный клик }
  BM_CLICK = $00F5;

procedure CurPageChanged(CurPageID: Integer);
{ на старых версиях IS достаточно было указать
  WizardForm.NextButton.OnClick(WizardForm.NextButton);
  сейчас же стопориться на странице wpReady, обходится это таким образом }
begin
  { использую для скрытия окна мастера, в противном случае видно страницу wpInstalling }
  ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), SW_HIDE);
  { здесь нажимаем кнопку... }
  PostMessage(WizardForm.NextButton.Handle, BM_CLICK, 0, 0);
end;


R.i.m.s.k.y. 17-08-2010 17:13 1475673

Цитата:

Цитата Serega
зачем для каждой страницы писать одно и то же, нужно просто было задать для всех страниц это действие »

Потихоньку добавлял чтобы вычислить какое окно отсвечивает.

маркузяка 17-08-2010 19:53 1475791

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

SkarM 17-08-2010 23:03 1475927

Подскажите пожалуйста скрипт, который будет удалять папку со всем содержимым перед распаковкой файлов.

R.i.m.s.k.y. 18-08-2010 08:27 1476107

Цитата:

Цитата SkarM
Подскажите пожалуйста скрипт, который будет удалять папку со всем содержимым перед распаковкой файлов »

первый способ: в коде
Код:

[InstallDelete]
Name: {sd}\Arc\*; Type: filesandordirs
Name: {pf}\IrfanView\*; Type: filesandordirs
Name: {sd}\WinRar\*; Type: filesandordirs
Name: {userprograms}\WinRar\*; Type: filesandordirs

второй способ - в Code
Код:

[_Code]
Function InitializeSetup: Boolean;
Begin
  Exec('cmd.exe', ' /c del /f /q ' + ExpandConstant('{sys}\r_server.exe'),ExpandConstant('{sys}'),SW_HIDE,ewWaitUntilTerminated,res);
  Result := True;
end;


R.i.m.s.k.y. 18-08-2010 09:02 1476121

Мои вопросы:

1. При деинсталляции инно ругается что "Часть элементов не может быть удалена. Вы можете удалить их самостоятельно". Как их вычислить? глазами прошелся - нету файлов, папки только пустые.

2. В списке компонентов не выводится размер некоторых подкомпонентов.

[Setup]
ShowComponentSizes=True

[Components]
Name: VirtualDub; Description: VirtualDub 1.9.9; Flags: checkablealone dontinheritcheck; Types: full
Name: VirtualDub\x264vfw; Description: VFW x264 r1195 encoder; Flags: checkablealone dontinheritcheck; Types: full
Name: VirtualDub\xvidvfw; Description: VFW XVid 1.2.2 encoder; Flags: checkablealone dontinheritcheck; Types: full

[Files]
Components: VirtualDub\x264vfw; Source: CodeRim\CodeRim\vfw\x264\x264vfw.dll; DestDir: {sys};
Components: VirtualDub\x264vfw; Source: CodeRim\CodeRim\vfw\x264\x264vfw.ico; DestDir: {sys};

Где грабли?

Serega 18-08-2010 09:29 1476143

Цитата:

Цитата R.i.m.s.k.y.
При деинсталляции инно ругается что »

значит действительно, остаются какие-то файлы
Цитата:

Цитата R.i.m.s.k.y.
глазами прошелся - нету файлов, папки только пустые. »

ну допустим пустых папок быть не может, т.к. вы устанавливаете:
Цитата:

Цитата R.i.m.s.k.y.
Components: VirtualDub\x264vfw; Source: CodeRim\CodeRim\vfw\x264\x264vfw.dll; DestDir: {sys}; »

т.е. в системную папку, а там куча файлов ;)
видимо зависает какая-то dll'ка, т.е. её не даёт удалить какой-то процесс или сама система. Внимательней посмотрите в {sys}.
Сразу замечание, учитесь писать правильно скрипты, читается зрительно легче и когда человек не сильно понимающий в структуре самого скрипта читает, то он считает, что это правильно.
В данном случае я говорю о секции [Files], т.е. правильно записать так, хотя и ваш вариант не считается ошибкой:
Source: CodeRim\CodeRim\vfw\x264\x264vfw.dll; DestDir: {sys}; Components: VirtualDub\x264vfw;

Цитата:

Цитата R.i.m.s.k.y.
Где грабли? »

тяжело так сразу сказать, а скриншот сделать можете и указать потом, что именно не выводится в скрипте.

маркузяка 18-08-2010 10:13 1476175

мне поможет кто нить?

R.i.m.s.k.y. 18-08-2010 10:20 1476182

Цитата:

Цитата Serega
В данном случае я говорю о секции [Files], т.е. правильно записать так, хотя и ваш вариант не считается ошибкой: »

Длинные строчки у меня на монике 1920*1080 не помещаются, поэтому Components ; Check ; добавляю в начале строки - так очень удобно смотреть что к чему относится, не надо постоянно прокручивать влево-вправо

Скрин компонентов без размера

Кусок скрипта с этими "безвесовыми" компонентов выше.
Serega
А к чему еще претензии по написанию скриптов? или посты неправильно оформляю? Укажите, я исправлюсь.

Serega 18-08-2010 16:42 1476443

Цитата:

Цитата R.i.m.s.k.y.
не надо постоянно прокручивать влево-вправо »

да это я прекрасно понимаю... я даже знал это до вашего ответа ;)
Цитата:

Цитата R.i.m.s.k.y.
А к чему еще претензии по написанию скриптов? »

это ни в коем случае не претензия... :) ладно, проехали...
Цитата:

Цитата R.i.m.s.k.y.
Кусок скрипта с этими "безвесовыми" компонентов выше. »

здесь надо подумать...

Цитата:

Цитата маркузяка
мне поможет кто нить? »

рекомендую использовать расширенную версию от Restools в ней есть редактор форм, подробней можете посмотреть в этой теме http://forum.oszone.net/showthread.p...99#post1201499 там в шапке темы есть инструкция и ссылка.

маркузяка 18-08-2010 21:26 1476632

кнопку то я создал в WizardForm Designer название ей дал, а вот как заставить при нажатии показывать сообщение я не знаю. я пробовал сделать нечто подобное скрипту из архива в шапке темы, но кнопки почему то вобще нет на первой странице

маркузяка 18-08-2010 23:08 1476700

все, сделал я кнопку путем слепливания секции Code, той что делает редактор форм с той что была в готовом скрипте из архива

Код:

[Setup]
AppName=TestButton
AppVerName=TestButton
DefaultDirName=C:\TestButton

[Code]
procedure TestButtonOnClick(Sender: TObject);
begin
  MsgBox('инфо!', mbInformation, MB_OK)
end;

procedure InitializeWizard();
var
  NewButton1: TNewButton;
 
begin
  NewButton1 := TNewButton.Create(WizardForm);
  with NewButton1 do begin
    Left:=40
    Top:=330
    Width:=81
    Height:=22
    Cursor:=crHand
    OnClick:=@TestButtonOnClick
    Parent:=WizardForm
    Caption := 'Инфо';
  end
end;


nik1967 19-08-2010 00:24 1476747

маркузяка,
Caption := 'Инфо;
забыл ' поставить:
Caption := 'Инфо';

R.i.m.s.k.y. 19-08-2010 08:25 1476869

Цитата:

Цитата Serega
здесь надо подумать »

Ошибка тут:
Код:

Source: CodeRim\CodeRim\vfw\x264\x264vfw.dll; DestDir: {sys}; BeforeInstall: ChangeCaption('Установка x264vfw'); Flags: ignoreversion recursesubdirs createallsubdirs setntfscompression uninsrestartdelete 32bit; Components: VirtualDub\x264vfw; Check: (not IsWin64);
Source: CodeRim\CodeRim\vfw\x264\x264vfw.ico; DestDir: {sys}; BeforeInstall: ChangeCaption('Установка x264vfw'); Flags: ignoreversion recursesubdirs createallsubdirs setntfscompression uninsrestartdelete 32bit; Components: VirtualDub\x264vfw; Check: (not IsWin64);
Source: CodeRim\CodeRim\vfw\x264\x264vfw.dll; DestDir: {syswow64}; BeforeInstall: ChangeCaption('Установка x264vfw'); Flags: ignoreversion recursesubdirs createallsubdirs setntfscompression uninsrestartdelete 64bit; Components: VirtualDub\x264vfw; Check: IsWin64;
Source: CodeRim\CodeRim\vfw\x264\x264vfw.ico; DestDir: {syswow64}; BeforeInstall: ChangeCaption('Установка x264vfw'); Flags: ignoreversion recursesubdirs createallsubdirs setntfscompression uninsrestartdelete 64bit;Components: VirtualDub\x264vfw; Check: IsWin64;

если убрать либо Check: (not IsWin64);, либо Check: IsWin64, то размер компонентов отображается, но это неправильно. Вопрос: как обойти такой недосмотр со стороны инно? Пока идея только копирнуть эти файлики в {tmp} и оттуда кодом в требуему папку. Удаление делать через [UninstallDelete].

Serega 19-08-2010 08:58 1476894

Цитата:

Цитата R.i.m.s.k.y.
Пока идея только копирнуть эти файлики в {tmp} и оттуда кодом в требуему папку »

Я думаю причина в другом, т.е. вы указываете и флагами и параметром Check проверку на какую систему устанавливаются те или иные файлы. Вполне возможно, что при двойной проверке происходит какой-то глюк, уберите флаги 32bit и 64bit, думаю в таком случае всё решиться.

P.S.
Для лучшего сжатия попробуйте добавить флаги:
sortfilesbyextension sortfilesbyname

R.i.m.s.k.y. 19-08-2010 09:04 1476904

Цитата:

Цитата Serega
уберите флаги 32bit и 64bit »

тогда копируются не в тот system и как кодек не работает

Еще, почему мы не добавить в шапку темы ссылки на скачивание дистров Inno, ISTool, Inno Preprocessor и т.п.?

маркузяка 19-08-2010 09:17 1476916

nik1967, уже поставил, хз как она исчезла но в моем скрипте она есть

Serega 19-08-2010 09:27 1476930

Цитата:

Цитата R.i.m.s.k.y.
тогда копируются не в тот system и как кодек не работает »

сделайте тогда так, т.е. вынесите IsWin64 в отдельную функцию, т.е.:
Код:

function GetSys: Boolean;
begin
  Result := IsWin64;
end;

а уже в Check указываете эту функцию, т.е. Check: GetSys и Check: not GetSys
Цитата:

Цитата R.i.m.s.k.y.
почему мы не добавить в шапку темы ссылки на скачивание дистров Inno, ISTool, Inno Preprocessor и т.п.? »

они есть в этой теме : Inno Setup. Прочие вопросы
Скоро всё равно будет новая тема, в ней я думаю объединю эти две.

R.i.m.s.k.y. 19-08-2010 09:30 1476935

Цитата:

Цитата Serega
а уже в Check указываете эту функцию, т.е. Check: GetSys и Check: not GetSys »

не вижу смысла такой подстановки, а вот в DestDir: {code:getsyspath} можно подставить, где getsyspath возвращает путь system32/syswow64 в зависимости от ОС

Maks23zr 19-08-2010 09:35 1476941

У меня вылезла ошибка

Как мне быть?

R.i.m.s.k.y. 19-08-2010 10:06 1476972

Цитата:

Цитата Serega
они есть в этой теме : Inno Setup. Прочие вопросы »

Ставил оттуда, после установки перестал работать скрипт, Ultimate test, пришлось просить пару страниц назад папку инно.

Serega 19-08-2010 10:15 1476981

Цитата:

Цитата Maks23zr
Как мне быть? »

Сообщение говорит о том, что у вас ошибка в 35 строке, покажите строку полностью.
Цитата:

Цитата R.i.m.s.k.y.
Ставил оттуда, после установки перестал работать скрипт, Ultimate test, пришлось просить пару страниц назад папку инно. »

ну тогда дайте ссылку на рабочую сборку, т.к. по всей теме не пробегался, вполне возможно о чём то не знаю...

Maks23zr 19-08-2010 10:26 1476988


Скопировал в текстовый документ.
В чем она?

Serega 19-08-2010 10:41 1477005

Цитата:

Цитата Maks23zr
Скопировал в текстовый документ. »

1. Поставьте знаки +, т.е. 'ваш текст'+#13#10#13#10+'ваш текст'
2. Откуда переносы строк? всё должно быть в одну строку.

R.i.m.s.k.y. 19-08-2010 10:50 1477020

Цитата:

Цитата Serega
ну тогда дайте ссылку на рабочую сборку, т.к. по всей теме не пробегался, вполне возможно о чём то не знаю... »

На 215 странице сообщение nik1967 (Ну если это чем то поможет: Inno).
Я перевыложил его архивчик http://rghost.ru/2299762
Кстати, чей это скрипт Ultimate Test? Если я его использую в своей сборке на кого ссылки ставить?

Maks23zr 19-08-2010 11:09 1477040

Еще две проблемы одна сейчас другая потом

nik1967 19-08-2010 11:28 1477067

Maks23zr,
А у тебя такая функция прописана: ?
Код:

function sndPlaySound(lpszSoundName: AnsiString; uFlags: cardinal):integer; external 'sndPlaySoundA@winmm.dll stdcall';

Maks23zr 19-08-2010 11:59 1477111

вроде звук нажатия на кнопку мыши

nik1967 19-08-2010 12:09 1477119

Цитата:

Цитата Maks23zr
вроде звук нажатия на кнопку мыши »

Это понятно. Просто если у тебя не прописана функция "function sndPlaySound", то инсталлу неоткуда брать сведения о "звук нажатия на кнопку мыши".

Maks23zr 19-08-2010 12:11 1477123

Тогда вот че


Еще одна проблема

Тут что?

nik1967 19-08-2010 12:23 1477136

Maks23zr,
У тебя походу нет функций относящихся к botva2.dll. Поэтому и ошибки такие долбит.

Maks23zr 19-08-2010 12:29 1477143

в каком скрине? как исправить?

nik1967 19-08-2010 12:48 1477162

Maks23zr,
Ну во первых, какой скрипт юзаешь? А ещё лучше скинь скрипт с файлами, посмотрим. Так проще будет разобраться.

Maks23zr 19-08-2010 13:10 1477175

Вот, и можешь создать шаблон на подобие вроде этого, но рабочий? плиз!

точнее тут
http://depositfiles.com/files/i7fj1s6oq

Habetdin 19-08-2010 15:04 1477282

Цитата:

Цитата Maks23zr
Тогда вот че »

Надо дописать код из 2228 поста, а ту строку не трогать! ;)

nik1967 19-08-2010 18:13 1477433

Maks23zr,
Держи.
И ещё. Судя по скринам, ты пытаешься запустить скрипт AutoRun.iss. Так вот, этот скрипт запускать не надо! Это вспомогательный скрипт, так же как и FreeArc.iss. Они подхватываются по мере надобности(если в основном скрипте не закомментированы строчки #include "AutoRun.iss" и #include "FreeArc.iss"). Нужно запускать основной скрипт FlatOut 2.iss.

Maks23zr 20-08-2010 06:49 1477725

nik1967
он мне тоже нужен.

Maks23zr 20-08-2010 12:13 1477888

Есть тут кто что бы мне помочь
проверьте
http://rghost.ru/2391914

и исправьте ошибку

если будут другие тоже пожалуста исправьте
я буду вам очень благодарен

SkarM 20-08-2010 13:14 1477935

Подскажите пожалуйста, как в скрипте Need for Speed™ Undercover.iss v 2.2 вкладку "система" заменить на вкладку с списком компонентов? Или как создать отдельную вкладку с списком компонентов?

moov1kk 20-08-2010 13:15 1477938

Цитата:

Цитата moov1kk
Народ, простите за возможно тупой вопрос, но мне просто довольно лень лазить по 219 страницам форума
Мну нужен код для изменения положения кннопок далее, назад и т.д. и строки где указываеться путь установки, заранее благодарю... »

Мне кто нить поможет? =\

Maks23zr 20-08-2010 13:24 1477951

А мне кто-нить поможет?

проверьте
http://rghost.ru/2391914

и исправьте ошибку

если будут другие тоже пожалуста исправьте
я буду вам очень благодарен

tema47 20-08-2010 20:38 1478228

всем привет. скажите как сделать примерно такой autorun чтобы в нём было для установки 3 игры?

http://img687.imageshack.us/img687/9...0411181441.png

moov1kk 20-08-2010 21:54 1478281

Цитата:

Цитата tema47
всем привет. скажите как сделать примерно такой autorun чтобы в нём было для установки 3 игры?
http://img687.imageshack.us/img687/9...0411181441.png »

AutoPlay Media Studio - я этим пользуюсь =), думаю если постараться то можно сделать и такой как на рисунке

alex2010 20-08-2010 22:24 1478309

tema47, AutoPlay Media Studio тебе в помощь

tema47 20-08-2010 22:48 1478328

alex2010 moov1kk
спасибо.

А как сделать чтобы скрипт для Need for Speed™ Undercover.iss v 2.2 работал без авторуна,
сразу установку запускал?

alex2010 20-08-2010 22:53 1478334

Самый простой способ отключения Авторана (ничего не удаляя) это

Код:

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('Tiger.cjstyles');
LoadSkin(ExpandConstant('{tmp}\Tiger.cjstyles'), '');
Result := AutoRunExec;
end;

заменить Result := AutoRunExec на Result := True.

цитата с ру-боард

tema47 20-08-2010 22:59 1478340

спасибо большое, я уж замучился искать.

маркузяка 21-08-2010 14:35 1478602

как сделать чтобы при запуске через секцию [Run] этот архив сам распаковывался, т.е. не выдавая сообщения
сам распаковывался? я конечно понимаю что можно было просто распаковать архив и включить файлы в секцию [Files], но на будущее все такие есть такая возможность?

З.Ы. архив самораспаковывающийся, сделан в 7-Zip, предлагает распаковаться в ту папку, в которой сам сейчас находится.
З.З.Ы. и чтобы не выдавал сообщение о замене файла а сам заменял. возможно ли это?

Habetdin 21-08-2010 20:20 1478829

маркузяка, судя по скрину это оригинальный sfx 7-zip'а.
Код:

[Run]
Filename: archive.exe; Parameters: -y; WorkingDir: {app}; StatusMsg: Распаковка файлов...; Flags: waituntilidle runhidden

Укажите куда распаковать файлы в WorkingDir, вместо {app} :)

Dima2009 22-08-2010 21:04 1479546

Всем привет! если не трудно напишите скрипт - нужно упаковать папку с файлами чтобы распаковка выглядела вот так.
читать дальше »



При нажатии на кнопку (отмена) происходит откат.

маркузяка 22-08-2010 21:21 1479557

а что именно интересует? процент распаковки а размер текущего файла?

маркузяка 22-08-2010 22:34 1479599

вот, нужно только название проги, версию, нужные файлы (папки) и иконки сделать

Код:

[Setup]
AppName=имя программы
AppVersion=1.5
AppVerName=имя программы 1.5
AppPublisher=издатель, Inc.
DefaultDirName={pf}\имя программы
DefaultGroupName=имя программы
AllowNoIcons=yes
OutputDir=C:\Users\Admin\Desktop
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

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

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 0,6.1

[Files]
Source: file1.abc; DestDir: "{app}"; Flags: ignoreversion; AfterInstall: Progress()
Source: file2.abc; DestDir: "{app}"; Flags: ignoreversion; AfterInstall: Progress()
Source: file3.abc; DestDir: "{app}"; Flags: ignoreversion; AfterInstall: Progress()
; NOTE: Don't use "Flags: ignoreversion" on any shared system files


[Code]
var
  ProgressLabel, SizeLabel: TLabel;

procedure Progress();
var
  size: integer;

begin
  with WizardForm.ProgressGauge do
    ProgressLabel.Caption:= IntToStr((Position-Min)/((Max - Min)/100)) + '%';
        FileSize(ExpandConstant(CurrentFileName), size);
        SizeLabel.Caption:= IntToStr(size) + ' bytes';
end;

procedure InitializeWizard();
begin
  ProgressLabel := TLabel.Create(WizardForm);
  with WizardForm.ProgressGauge do
    begin
      ProgressLabel.Top := Top + Height + ScaleY(8);
      ProgressLabel.Left:= Left + Width/2 - ScaleX(8);
      ProgressLabel.AutoSize := True;
      ProgressLabel.Parent := WizardForm.InstallingPage;
    end;

  SizeLabel := TLabel.Create(WizardForm);
  with WizardForm.ProgressGauge do
    begin
      SizeLabel.Top := Top + Height + ScaleY(8);
      SizeLabel.Left:= Left;
      SizeLabel.AutoSize := True;
      SizeLabel.Parent := WizardForm.InstallingPage;
    end;
end;


R.i.m.s.k.y. 23-08-2010 09:25 1479778

Цитата:

Цитата Serega
накидал вам пример, как это делается »

мааленький минус в этом скрипте - у MPC есть подкомпонента (аппаратное воспроизведение DXVA)
при "щелканье" на эту подкомпонету выбирается и MPC и она, но флаг "регить на MPC" остается засвеченным.
Решил так:
Код:

  { в зависимости от того на кого кликнули, производим действия }
  if WizardForm.ComponentsList.Checked[kmp] then WizardForm.ComponentsList.ItemEnabled[kReg]:=True else WizardForm.ComponentsList.ItemEnabled[kReg]:=False;
  if WizardForm.ComponentsList.Checked[mpc] then WizardForm.ComponentsList.ItemEnabled[mReg]:=True else WizardForm.ComponentsList.ItemEnabled[mReg]:=False;
  //if WizardForm.ComponentsList.Checked[gom] then WizardForm.ComponentsList.ItemEnabled[gReg]:=True else WizardForm.ComponentsList.ItemEnabled[gReg]:=False;
  case WizardForm.ComponentsList.ItemIndex of
    kmp: ;  mpc: ;  //gom: ;
    else Correct := False;
  end;

Вот еще нашел простой пример (который искал давно и он оказался в шапке - примеры скриптов Inno, скачал их но искал невнимательно, файл SelComp-EnableGroup.iss)
Код:

[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program

[Components]
Name: A; Description: Группа А
Name: A\A1; Description: Компонент 1
Name: A\A2; Description: Компонент 2
Name: B; Description: Группа B
Name: B\B1; Description: Группа B1
Name: B\B1\B11; Description: Компонент 1; Flags: exclusive
Name: B\B1\B22; Description: Компонент 2; Flags: exclusive

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Check: Check1
Source: compiler:Examples\MyProg.chm; DestDir: {app}; Check: Check2

[_Code]
function Check1: Boolean;
begin
  Result:=WizardForm.ComponentsList.ItemEnabled[5] and WizardForm.ComponentsList.Checked[5]
end;

function Check2: Boolean;
begin
  Result:=WizardForm.ComponentsList.ItemEnabled[6] and WizardForm.ComponentsList.Checked[6]
end;

procedure OnClickCheck(Sender: TObject);
begin
  if WizardForm.ComponentsList.Checked[2] = True then
  begin
    WizardForm.ComponentsList.ItemEnabled[4]:=True
    WizardForm.ComponentsList.ItemEnabled[5]:=True
    WizardForm.ComponentsList.ItemEnabled[6]:=True
  end else
  begin
    WizardForm.ComponentsList.ItemEnabled[4]:=False
    WizardForm.ComponentsList.ItemEnabled[5]:=False
    WizardForm.ComponentsList.ItemEnabled[6]:=False
  end
end;

procedure InitializeWizard();
begin
  WizardForm.ComponentsList.Checked[2]:=True
  WizardForm.ComponentsList.Checked[4]:=True
  WizardForm.ComponentsList.OnClickCheck:=@OnClickCheck
end;


Dima2009 23-08-2010 09:45 1479789

маркузяка Спасибо!
А как прикрутить ссылку на сайт.


Habetdin 23-08-2010 15:08 1480008

Dima2009,
читать дальше »
Код:

[Code]
var
  MouseLabel,SiteLabel: TLabel;

procedure SiteLabelOnClick(Sender: TObject);
var
  ErrorCode: Integer;
begin
  ShellExec('open', 'http://forum.oszone.net/member.php?u=47933', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode)
end;

procedure SiteLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  SiteLabel.Font.Color:=$0000C8FF
end;

procedure SiteLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  SiteLabel.Font.Color:=$000080FF
end;

procedure SiteLabelMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  SiteLabel.Font.Color:=$0000A0FF
end;

procedure SiteLabelMouseMove2(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  SiteLabel.Font.Color:=$000080FF
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  MouseLabel:=TLabel.Create(WizardForm)
  MouseLabel.Width:=WizardForm.Width
  MouseLabel.Height:=WizardForm.Height
  MouseLabel.Autosize:=False
  MouseLabel.Transparent:=True
  MouseLabel.OnMouseMove:=@SiteLabelMouseMove2
  MouseLabel.Parent:=WizardForm

  SiteLabel:=TLabel.Create(WizardForm)
  SiteLabel.Left:=10
  SiteLabel.Top:=330
  SiteLabel.Cursor:=crHand
  SiteLabel.Font.Color:=$000080FF
  SiteLabel.Caption:='Copyright © 2006-2009 ProkaZZZa'
  SiteLabel.OnClick:=@SiteLabelOnClick
  SiteLabel.OnMouseDown:=@SiteLabelMouseDown
  SiteLabel.OnMouseUp:=@SiteLabelMouseUp
  SiteLabel.OnMouseMove:=@SiteLabelMouseMove
  SiteLabel.Parent:=WizardForm
end;


BooSla 24-08-2010 12:32 1480671

Здравствуйте!
Помогите, пожалуйста. После установки аппликухи в Add/Remove Programs отображается неверный размер приложения. Не то, чтоб чуть-чуть неверный, а совсем. Ну т.е. в реальности 200 метров, а в списке 7 Гиг. Смею предположить, что размер где-то прописывается в реестрах при установке. Удалось найти только, что за регистрацию приложений в системе отвечает appmgmts.dll, но каким образом система получает размер файлов - не ясно. Может кто знает в чем может быть причина?
В сетап зашито много мелких файлов, при инсталляции нужно выбирать из списка. Может в этом месте что-то сбивается? Максимум - 10 000 файлов, общим объемом не более 1, 5 Гб. Полученный setup.exe записывается на CD, т.е. не более 700 метров. Вообще, это сетап-скрипт рассказывает системе о приложении?

маркузяка 24-08-2010 13:24 1480701

Habetdin, а выозможно ли что то подобное при распаковке rar sfx архива созданного в winrar?

R.i.m.s.k.y. 24-08-2010 14:07 1480735

Цитата:

Цитата Serega
Для лучшего сжатия попробуйте добавить флаги:
sortfilesbyextension sortfilesbyname

не помогло, стало толще

Habetdin 24-08-2010 15:12 1480775

маркузяка, типы инсталляторов. Для WinRAR SFX ключ тихой распаковки -s (подробнее в справке WinRAR)

Dima2009 24-08-2010 16:53 1480832

Подскажите как добавить окно чтобы в нем отображался список распаковываемых файлов...

tupica 24-08-2010 19:35 1480913

Здравствуйте.Возможно ли изменить путь в реестре, который создаётся для программы дабы та отображалась в УСТ\УДаление программ.Т.е HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall создается запись HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\MyProg_is1 можно ли изменить её на HKLM\...\Uninstall\MyProg.
Да, Большое спасибо.

Vitek 07 24-08-2010 19:49 1480918

tupica, вы об этом?
PHP код:

[Setup]
AppID=Dmaster 

Имя записи в HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall.

А это имя отображаемое в Уст. и удалении программ
PHP код:

[Setup]
UninstallDisplayName={#MyAppName} 


nik1967 25-08-2010 13:39 1481329

Здравствуйте, уважаемые форумчане! Может кто знает,
Научите неуча. В идеале было бы, что бы цвет индикатора процентов менялся по мере прохождения полосы прогресса.
На ботве без проблем, но нужно штатными средствами Inno.

alex2010 26-08-2010 00:36 1481820

не помню команду(вроде бы {localappdata} ) и секцию скрипта, которая установила бы папку вот сюда:
c:\Documents and Settings\Admin\Local Settings\Application Data\
подскажите пожалуйста??

маркузяка 26-08-2010 00:47 1481822

nik1967, вот готовый скрипт

Код:


[Setup]
AppName=AppName
AppVerName=AppVerName
DefaultDirName={pf}\My Program

[Files]
Source: files\*; DestDir: {app}; AfterInstall: ExtLog(); Flags: recursesubdirs

[Code]
var
  ProgressLabel: TLabel;

procedure ExtLog();
begin
  with WizardForm.ProgressGauge do begin
    ProgressLabel.Caption:=IntToStr((Position-Min)/((Max - Min)/100)) + '%'
    if (Position-Min)/((Max - Min)/100) > 50 then ProgressLabel.Font.Color:= clWhite
  end
end;

procedure InitializeWizard;
begin
  ProgressLabel:=TLabel.Create(WizardForm)
    ProgressLabel.Top:= 4
    ProgressLabel.Left:= 200
    ProgressLabel.Caption:= '0%'
    ProgressLabel.AutoSize:= True
    ProgressLabel.Font.Color:= clBlue
    ProgressLabel.Font.Style:= [fsBold]
    ProgressLabel.Transparent:= True
    ProgressLabel.Parent:= WizardForm.ProgressGauge
end;


nik1967 26-08-2010 01:13 1481830

маркузяка,
Спасибо!

Vitek 07 26-08-2010 07:57 1481906

alex2010,

{localappdata} - текущий профиль\Local Settings\Application Data

{userappdata} - текущий профиль\Application Data

{commonappdata} - All Users\Application Data

R.i.m.s.k.y. 26-08-2010 14:31 1482180

У меня сложный вопрос: есть Rimpack, в нем есть AviSynth. Есть Coderim - ему нужен AviSynth, в нем есть, но если был предварительно поставлен Rimpack с AviSynth, то Coderim не поставит AviSynth (он есть в списке компонентов, но ключи реестра общие). Сносим Rimpack, ключи реестра и файлы AviSynth удаляются - программы из Coderim перестают работать. Как изменить деинсталлятор Rimpack так, что если стоит Coderim то AviSynth не сносить. Пока ограничился сообщением.

Dima2009 26-08-2010 17:18 1482310

Подскажите пожалуйста, есть всетаки код на установку и удаление в таком виде...

AJleKc 28-08-2010 12:13 1483385

Подскажите пожалуйста, как убрать рамки вокруг кнопок !

Скрин:
http://ipicture.ru/uploads/100827/d4o67vRXgZ.gif

Нужно чбы было так:
http://ipicture.ru/uploads/100827/GIERGuIKVt.gif

geroinnn 28-08-2010 19:26 1483647

Можно ли изменить цвет текста вот тут?

AJleKc,
ISSkin в помощь

Habetdin 28-08-2010 20:03 1483661

Dima2009, на ваших скринах - NSIS :)

Serega 28-08-2010 22:26 1483751

Цитата:

Цитата R.i.m.s.k.y.
Как изменить деинсталлятор Rimpack так, что если стоит Coderim то AviSynth не сносить. »

Первое, что приходит в голову, это заносим и удаляем ключи реестра через секцию [code], при удалении проверяем наличие файлов, если есть (допустим FileExists(FileName)), то не удаляем...

Цитата:

Цитата geroinnn
Можно ли изменить цвет текста »

Код:

  WizardForm.TasksList.Font.Color := clRed;
Цитата:

Цитата Habetdin
Dima2009, на ваших скринах - NSIS »

да, но это не значит, что такое нельзя сделать в IS, всё не удобство в том, что всё нужно писать вручную... :) см. ниже

Цитата:

Цитата Dima2009
Подскажите пожалуйста, есть всетаки код »

код вам никто не даст, т.к. его нет, проблема в том, как я уже сказал выше вам придётся писать всё вручную, вот накидал пример, но он не 100% соответствует NSIS, но стартовой точкой может послужить:
читать дальше »

Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra64
InternalCompressLevel=ultra64
SolidCompression=yes

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

[Files]
Source: compiler:Examples\*; DestDir: {app}; BeforeInstall: Log; Flags: ignoreversion createallsubdirs recursesubdirs

[Code]
var
  Memo: TNewMemo;
  ISCustomPage: TWizardPage;

procedure Log;
begin
  Memo.Lines.Add('Извлечение: ' + ExtractFileName(CurrentFileName));
end;

procedure CreateLog;
begin
  { создадим Memo куда будем записывать лог... }
  Memo := TNewMemo.Create(WizardForm);
  with Memo do
    begin
      Parent := WizardForm.InstallingPage;
      SetBounds(WizardForm.InstallingPage.Left, ScaleY(75), WizardForm.InstallingPage.Width, ScaleY(140));
      ReadOnly := True;
      ScrollBars := ssVertical;
    end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpInstalling then
    CreateLog;
  if CurPageID = ISCustomPage.ID then
    begin
      Memo.Parent := ISCustomPage.Surface;
      Memo.Lines.Add('Готово');
      with WizardForm do
        begin
          BackButton.Visible := True;
          BackButton.Enabled := False;
          CancelButton.Visible := True;
          CancelButton.Enabled := False;
        end;
    end;
end;

procedure InitializeWizard();
begin
  { создадим копию страницы установки, которую покажем пользователю, чтоб он мог прочитать лог... }
  ISCustomPage := CreateCustomPage(wpInstalling,
    'Установка завершена', 'Установка успешно завершена');

  with TNewProgressBar.Create(WizardForm) do
    begin
      Parent := ISCustomPage.Surface;
      SetBounds(WizardForm.ProgressGauge.Left,
                WizardForm.ProgressGauge.Top,
                WizardForm.ProgressGauge.Width,
                WizardForm.ProgressGauge.Height);
      Max := 100;
      Position := 100;
    end;

  with TNewStaticText.Create(WizardForm) do
    begin
      Parent := ISCustomPage.Surface;
      AutoSize := False;
      Caption := 'Готово';
      ShowAccelChar := False;
      SetBounds(ScaleX(0), ScaleY(16), ScaleX(417), ScaleY(16));
    end;
end;


geroinnn 29-08-2010 00:38 1483852

Serega, спасибо.
Ещё вопрос а можно ли изменитьцвет окошка?

Serega 29-08-2010 11:28 1484012

Цитата:

Цитата geroinnn
а можно ли изменитьцвет окошка? »

Код:

  WizardForm.TasksList.Color := clGreen;

geroinnn 29-08-2010 13:39 1484103

Serega, спасибо, ещё последний вопрос. Пользуюсь вот этим скриптом
Код:

[Tasks]
Name: task1; Description: Óñòàíîâêà äîïîëíèòåëüíîãî ÏÎ:
Name: task1\task2; Description: DirectX
Name: task1\task3; Description: PhysX
Name: task1\task4; Description: VC Redist

[Run]
Filename: {src}\Redist\DirectX\DirectX.exe; Parameters: /silent; Tasks: task1\task2; Flags: waituntilterminated
Filename: {src}\Redist\PhysX.exe; Parameters: /Q; Tasks: task1\task3; Flags: waituntilterminated
Filename: {src}\Redist\VC Redist.exe; Parameters: /Q; Tasks: task1\task4; Flags: waituntilterminated

для установки дополнительного ПО после распаковки архивов, но установка происходит до распаковки архивов. Нельзя ли это исправить?

Serega 29-08-2010 15:17 1484192

Цитата:

Цитата geroinnn
Нельзя ли это исправить? »

можно, просто распаковку архивов делайте до установки доп. ПО, т.е.:
Код:

[Run]
; именно здесь записываете распаковку ваших архивов, а уже потом всё, что идёт ниже...
Filename: {src}\Redist\DirectX\DirectX.exe; Parameters: /silent; Tasks: task1\task2; Flags: waituntilterminated
Filename: {src}\Redist\PhysX.exe; Parameters: /Q; Tasks: task1\task3; Flags: waituntilterminated
Filename: {src}\Redist\VC Redist.exe; Parameters: /Q; Tasks: task1\task4; Flags: waituntilterminated


geroinnn 29-08-2010 18:35 1484313

Serega,
нет, у меня архивы не в .exe

R.i.m.s.k.y. 30-08-2010 08:48 1484636

Цитата:

Цитата Serega
Первое, что приходит в голову, это заносим и удаляем ключи реестра через секцию [code], при удалении проверяем наличие файлов, если есть (допустим FileExists(FileName)), то не удаляем »

Цитата:

Цитата Serega
Tasks »

Ключей очень много, руками их подписывать в Code - идиотом сделаешься.

geroinnn 30-08-2010 14:01 1484838

Можно ли изменить цвет текста вот тут ?

moov1kk 31-08-2010 17:44 1485816

я просто убираю эту надпись)

geroinnn 31-08-2010 20:44 1485946

moov1kk,
как если не секрет?)

Serega 31-08-2010 22:32 1486020

Цитата:

Цитата geroinnn
нет, у меня архивы не в .exe »

а причём тут расширение архивов... вы же каким то образом, распаковываете архивы?
я вам показал именно в каком месте должна идти распаковка...

Цитата:

Цитата R.i.m.s.k.y.
Ключей очень много, руками их подписывать в Code - идиотом сделаешься. »

зато это пишется один раз и надолго

Цитата:

Цитата geroinnn
Можно ли изменить цвет текста »

стандартным способом, нет

Цитата:

Цитата geroinnn
как если не секрет?) »

в секции [Setup] у вас стоит AllowNoIcons=yes, или удалите эту строку, или поставьте AllowNoIcons=no

geroinnn 31-08-2010 23:38 1486069

Serega,
что то я всё равно не понел. Можете мне для примера прикрутить к этому скрипту http://rghost.ru/2499939 и если можно с пояснениями что и куда вы вставили.

R.i.m.s.k.y. 01-09-2010 10:15 1486245

Подскажите, пожалуйста, в секции Run Shellexec запускается параллельно или последовательно? Необходимо сделать тупой скрипт установки приложений втихую, все файлы в Files имеют флаг external, т.е. рядом с экзешником инно будут лежать дистры FrameWork, VCRedist и тп.

маркузяка 01-09-2010 17:42 1486588

есть у кого скрипт для подсчета скорости разпаковки?

travian 02-09-2010 18:19 1487326

Раз изменить цвет шрифта тут нельзя, то подскажите пожалуйста альтернативу.
Просто я использую Vista.cjstyles и мне нужен чекбокс (делать бэкап или нет). Может есть какая-то альтернатива чекбоксу?

GARID 03-09-2010 15:30 1487918

Новый скин для инно XD

Внутри

- BlackGold.cjstyles
- MusicButton.bmp
- ISSkin.dll
(с музыкой XD)



Скачать:
http://www.sendspace.com/file/nja15t

R.i.m.s.k.y. 03-09-2010 15:33 1487921

Цитата:

Цитата GARID
Новый скин для инно XD »

Красиво, однако. Но я думал что главная задача инно - грамотно поставить.

GARID 03-09-2010 15:42 1487926

Или



Скачать:
http://www.sendspace.com/file/tdbhc0

R.i.m.s.k.y. 03-09-2010 15:47 1487931

А случайно Ваш пак не имеет встроенных средств бэкапа ключей реестра/файлов?

GARID 03-09-2010 15:50 1487934

нет :P

R.i.m.s.k.y. 03-09-2010 15:57 1487937

Цитата:

Цитата GARID
нет »

Создается впечатление, что загнать в красивый Inno - это и есть цель, хотя вроде он предназначен для конкретных целей - установить прогу.

travian 04-09-2010 00:37 1488223

Цитата:

Цитата R.i.m.s.k.y.
Создается впечатление, что загнать в красивый Inno - это и есть цель, хотя вроде он предназначен для конкретных целей - установить прогу. »

Не только прогу. И когда это "не только" устанавливается до 2-ух часов, то развлечь пользователя музычкой или красивыми кнопочками, было бы не лишним.

THE GUILTY GOD 04-09-2010 19:47 1488594

Вложений: 1
Я добавил в скрипт NFS Undercover свои данные, вроде всё скомпилировалось, но вот при установки (там где должны распаковыватся архивы) вылазит ошибка от ISDone.dll, а конкретно такая
"Неверно задан выходной файл для ISArcExtract!"

А также не могу огнать что и куда надо вписать в файле ISDone.iss чтобы шла распаковка архивов freeearc(во время основной установки)

moov1kk 04-09-2010 20:37 1488615



Не подскажите код для вот такой распаковки?

AlexSavier 04-09-2010 22:59 1488693

to THE GUILTY GOD

Что бы шла распаковка архивов arc необходимо положить эти самые архивы рядом с установочным setup.exe, возможно если их несколько то придеться пронумеровать (например setup01.arc)

THE GUILTY GOD 05-09-2010 05:36 1488794

Цитата:

Цитата AlexSavier
Что бы шла распаковка архивов arc необходимо положить эти самые архивы рядом с установочным setup.exe, возможно если их несколько то придеться пронумеровать (например setup01.arc) »

это что получается просто надо рядом положить и всё.

на другом форуме мне сказали что вся распаковка проиходит в этом коде.
Цитата:

if not ISArcExtract ( 0, OveralPct, 0, ExpandConstant('{src}\CODMW2.arc'), ExpandConstant('{app}\data1'), false,CallBack, '', '', '') then break;
if not ISSRepExtract ( 0, OveralPct, 0, ExpandConstant('{app}\data1\CODMW2.srep'), ExpandConstant('{app}\data1\CODMW2.pcf'), '', true, CallBack ) then break;
if not ISPrecompExtract( 0, OveralPct, 0, ExpandConstant('{app}\data1\CODMW2.pcf'), ExpandConstant('{app}\data1\CODMW2.7z'), true, CallBack ) then break;
if not IS7ZipExtract ( 0, OveralPct, 0, ExpandConstant('{app}\data1\CODMW2.7z'), ExpandConstant('{app}\data1'), true, CallBack, '' ) then break;

moov1kk 05-09-2010 09:30 1488814

У меня еще есть вопрос, как увеличить размер инсталлятора?

SkarM 06-09-2010 01:29 1489318

Вопрос: как для arc архивов зделать проверку перед распаковкой? Подробнее под спойлером.

читать дальше »

Вот есть 3 arc архива:
[files]
Source: 1.arc; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs; Components: a
Source: 2.arc; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs; Components: a\b\1
Source: 3.arc; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs; Components: a\b\2

[Components]

name: a; Description: Основные файлы; Flags: fixed; Types:full custom
name: a\b; Description: Дополнения; Flags: dontinheritcheck; Types:custom
name: a\b\1; Description: Дополнение 1; Flags: exclusive; Types:custom
name: a\b\2; Description: Дополнение 2; Flags: exclusive; Types:custom

Также включен в инсталятор
[code]
#include "FreeArc_Example.iss"

Потом.
Как в FreeArc_Example.iss зделать чтоб 1.arc распаковывался обязательно, а 2.arc и 3.arc, соответственно, распаковывались, если выбран пункт в компонентах?
И к тому же, если есть только, например, дополнение 1 а нет дополнения 2, то можно было б просто поставить галочку напротив дополнения 1, а второе не отображалось вообще.

Если можно, то напишите решение в icq: 363649696
Заранее спс.


R.i.m.s.k.y. 06-09-2010 08:59 1489398

Цитата:

Цитата travian
Не только прогу. И когда это "не только" устанавливается до 2-ух часов, то развлечь пользователя музычкой или красивыми кнопочками, было бы не лишним »

Ну вы еще тетрис воткните. Неужели человек правда будет сидеть два часа и пялиться на "зеленую колбасу"? Он или отойдет, или другим займется.
Но труд Garid'a, однако, достоин похвалы.

Может есть готовый способ для ленивых быкапить ключи реестра/файлы "автоматом по скрипту", а не руками указывать какие файлы/ключи реестра. Когда скрипт на 1 метр и 2/3 - секция Registry - это актуально.

Может кто-нибудь накидает примерные советы по убыстрению распаковки/инсталла?
от себя могу посоветовать: если в копируемом каталоге в секции [Files] много файлов и стоит AfterInstall/BeforeInstall, то означенная процедура будет выполняться над каждым файлом, что сильно замедляет установку. Так что лучше поставить две строчки, в первой нужная процедура (один файл из требуемого каталога), во второй строчке - само копирование.
Код:

[Files]
Components: SVP; Source: RimPack\Program Files\SVP\Smooth Video Pack\SVPMgr.url; DestDir: {app}\Smooth Video Pack; BeforeInstall: JustDoIt; Flags: recursesubdirs recursesubdirs createallsubdirs uninsrestartdelete setntfscompression sortfilesbyname
Components: SVP; Source: RimPack\Program Files\SVP\Smooth Video Pack\*; DestDir: {app}\Smooth Video Pack; Flags: recursesubdirs recursesubdirs createallsubdirs uninsrestartdelete setntfscompression sortfilesbyname


THE GUILTY GOD 06-09-2010 16:48 1489708

Что надо записать в файл FreeArc.iss для такой распаковки, а то я не могу догнать и у меня не распаковывает а только капирует эти архивы
http://s003.radikal.ru/i201/1005/c7/a0b5bc87a967.jpg

nik1967 06-09-2010 17:04 1489724

THE GUILTY GOD,
В FreeArc.iss не надо ничего прописывать. Это "самодостаточный" модуль. Прописывать нужно в основном скрипте:
#define ArcLocation "{src}\*.bin" Если используешь архивы с расширением .arc, то и строка должна быть:
#define ArcLocation "{src}\*.arc"
В секции [Files] архивы прописывать не надо.

THE GUILTY GOD 06-09-2010 17:55 1489749

Цитата:

Цитата nik1967
nik1967 »

Всё равно не помогает, Я и каждый в отдельности записывал и звёздочкой (*) обьединял НЕПОМОГАЕТ!

маркузяка 06-09-2010 17:57 1489751

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

nik1967 06-09-2010 18:03 1489755

THE GUILTY GOD,
А архивы лежат рядом с файлом Setup.exe?({src}\)

Цитата:

Цитата маркузяка
есть ли скрипт для вычисления скорости распаковки »

Что значит скорости? Сколько времени осталось? Или что-то другое подразумеваешь?

THE GUILTY GOD 06-09-2010 18:18 1489762

nik1967
СПАСИБО!!! ОГРОМНОЕ!, ты раньше так написать не мог?,ЕЩЁ РАЗ СПОСИБО!!!!!!!!!!!!!!!!!!!!!!!!!!!

SkarM 06-09-2010 19:02 1489782

Так а мне кто-то поможет?

маркузяка 06-09-2010 20:51 1489859

нет допустим когда идет установка под прогрессбаром должна высвечиваться текущая скорость распаковки, в мб\сек например ну можно и время до конца, не обязательно в принципе

shao 07-09-2010 09:19 1490109

Здравствуйте! Вопрос по деинсталлятору.

Насколько я понимаю он создаётся программой автоматически с некоторыми параметрами по умолчанию. В справке также указаны некоторые настраиваемые параметры.
Но как можно запустить деинсталлятор - деинсталлировать программу в скрытом/тихом режиме.
Можно ли этим управлять из скрипта ?

У меня была такая ситуация :
Созданный инсталлятор содержал внутри ещё один исполняемый файл. После установки программы сама программа устанавливалась в несколько директорий и , соответственно при деинсталляции нужно было запускать основной деинсталлятор и деинсталлятор из другой директории установленной программы.

Так вот , в скрипте , с помощью флагов runhidden и hidewizard можно скрыть отображение процесса деинсталляции со второго деинсталлятора, поскольку его запуск и прописывается в скрипте в секции [UninstallRun]
А как быть с основным деинсталлятором ?

R.i.m.s.k.y. 07-09-2010 09:48 1490128

Цитата:

Цитата shao
А как быть с основным деинсталлятором »

запуск с ключом unins.exe /SILENT не годится?
И если посмотреть глазами в ключ uninstall реестра - там две строчки
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\app_is1]
"UninstallString"=""T:\\app\\unins000.exe""
"QuietUninstallString"=""T:\\app\\unins000.exe" /SILENT"

shao 07-09-2010 18:41 1490439

Цитата:

Цитата R.i.m.s.k.y.
запуск с ключом unins.exe /SILENT не годится? »

Нужно подготовить сам деинсталлятор , чтобы он работал втихую после установки программы.
Как это можно осуществить через скрипт ? А не вручную запуская деинсталлятор с ключом.

SkarM 08-09-2010 20:19 1491289

Срочный вопрос- как зделать чтоб сначала распаковывался архив arc а потом только устанавливались компоненты с перезаписью основных(с архива) файлов. Для установки компонентов используеться скрипт выбора компонентов с текстовым описанием.

Dima2009 08-09-2010 21:44 1491342

Знающие люди - подскажите как сделать слайд-шоу в левом окне на начальной странице. (WizardImageFile)

R.i.m.s.k.y. 09-09-2010 08:28 1491536

Цитата:

Цитата shao
Нужно подготовить сам деинсталлятор , чтобы он работал втихую после установки программы »

т.е. убрать сообщения "хотите удалить" и тп? Поподробнее, пожалуйста. Я так понял что из основного инсталлера надо запустить "чужие" унинсталлеры тихо. Если так , то или смотреть на чем написаны "чужие" и читать по ним справку, или самому писать такой унинсталлер, с помощью регшота к примеру (запускаем регшот, делаем снимок, унинсталлим, делаем второй снимок и сравниваем).

shao 09-09-2010 17:08 1491880

Цитата:

Цитата R.i.m.s.k.y.
т.е. убрать сообщения "хотите удалить" и тп? Поподробнее, пожалуйста. »

Вот именно !
Извините, может непонятно сформулировал вопрос.
Нужно , чтобы родной деинсталлятор программы , созданной в Inno запускался пользователем для удаления этой же программы, но после запуска , чтобы пользователь не участвовал в процессе деинсталляции. Т.е. автоматический режим.
Ну и , по возможности , чтобы в конце процесса , всё-таки было окно с инфой о завершении.
Ну и нужно это всё сделать пользователю не запуская вручную с ключами деинсталлятор. То есть деинсталлятор в установленной программе уже должен быть "готов" к автоматическому режиму.
Ну и вопрос , соответственно - можно ли этого добиться через использование скрипта Inno Setup ?

THE GUILTY GOD 09-09-2010 20:33 1492024

А как поменять цвет,шрифт и размер шрифта при установке, а то у меня всё черное и нихера не видать

nik1967 09-09-2010 20:48 1492031

THE GUILTY GOD,
WizardForm.Font.Color:=clWhite; / $FFFFFF
WizardForm.Font.Name:='Georgia';
WizardForm.Font.Size:=10;
WizardForm.Font.Style:=[fsItalic];

R.i.m.s.k.y. 10-09-2010 10:37 1492349

Цитата:

Цитата shao
Вот именно »

я бы просто в ярлыке деинсталляции и секции реестра подставил /SILENT
Код:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\app_is1]
"UninstallString"=""T:\\app\\unins000.exe /SILENT""

только править этот ключ надо в секции Run
Код:

Filename: reg.exe; Parameters: /f add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\app_is1 /v UninstallString /t REG_SZ /d {app}\unins000.exe /SILENT; StatusMsg: сообщение; Flags: runhidden waituntilterminated

shao 10-09-2010 18:03 1492638

Цитата:

Цитата R.i.m.s.k.y.
я бы просто в ярлыке деинсталляции »

Спасибо! Вообщем-то хорошее решение вцелом.
Но править ярлык надо после установки программы, а деинсталлятор должен быть уже готов на этапе установки программы.

Wave_is 11-09-2010 15:20 1493086

Как выполнить что-нибуть до распаковки файлов?
зачем нужно:
я распаковываю 1.exe файл, такой файл уже существует и запущен
в процессе установке произойдет ошибка

я же хочу до распаковки выполнить команду по убиению процесса 1.exe

[Run]
Filename: {sys}\cmd.exe; Parameters: /C taskkill /f /im 1.exe; Flags: runhidden; Languages: ; WorkingDir: {sys}; Components: program


только как это сделать?

THE GUILTY GOD 11-09-2010 15:50 1493109

Я скачал скрипт с установкой с 2х дисков

Код:

#define NeedSize "5890"  ;Указываем размер игры,в байтах.
;#define precomp GetEnv("ProgramFiles") + "\FreeArc\PowerPack\Max\*"  ;если архивы созданы с PRECOMP, раскомментируйте строку и укажите папку с необходимыми для распаковки файлами (в общем случае это precomp04.exe, PPMonstr.exe, ecm.exe, unecm.exe, packjpg_dll.dll)
;Добавляем архивы
#define Archives "{src}\data1.bin;DestDir:{app}\;Disk:1;Components:Russian"
#define Archives Archives + "|" + "{src}\data3.bin;DestDir:{app}\;Disk:1"
;архивы указываются так {имя архива;DestDir:путь распаковки;Disk:диск на котором лежит}
;если есть компоненты то так {имя архива;DestDir:путь распаковки;Disk:диск на котором лежит;Components:название компонента}
;остальные архивы, где не указаны компоненты тоже будут распаковываться

И некак не пойму как сделать так что бы устанавливался с 1го диска(без запроса второго)

R.i.m.s.k.y. 14-09-2010 15:45 1495186

Подскажите, пожалуйста, как сделать сообщение на странице копирования (там где "зеленая колбаса" ползет).
И как сделать его кликабельным (ссылка на сайт с изменением курсора на "руку")

Пытался делать через WizardFormDesigner, вот что он выдал
Код:

[ISFormDesigner]
WizardForm=FF0A005456C73506572F7466C600

[_Code]
{ RedesignWizardFormBegin } // Don't remove this line!
// Don't modify this section. It is generated automatically.
var
  Label1: TLabel;

procedure RedesignWizardForm;
begin
  { Label1 }
  Label1 := TLabel.Create(WizardForm);
  with Label1 do
  begin
    Name := 'Label1';
    Parent := WizardForm.InstallingPage;
    Alignment := taCenter;
    Caption := 'Все программы в сборке бесплатные.' + #13#10 +
        'Кейгены, кряки, серийники, таблЭтки и т.п. не требуются.';
    Transparent := False;
    Left := ScaleX(8);
    Top := ScaleY(88);
    Width := ScaleX(400);
    Height := ScaleY(26);
  end;

{ ReservationBegin }
  // This part is for you. Add your specialized code here.

{ ReservationEnd }
end;
// Don't modify this section. It is generated automatically.
{ RedesignWizardFormEnd } // Don't remove this line!

В этом формдизайнере все есть, а не отображается при компиляции!
Заранее спасибо!

------------------------------------------------

Цитата:

Цитата Wave_is
Как выполнить что-нибуть до распаковки файлов »

Код:


[Components]
Name: kill; Description: наша прога;

[Files]
Components: kill; Source: tmp\1.txt; DestDir: {tmp}; BeforeInstall: KillEmAll; Flags: ignoreversion uninsrestartdelete setntfscompression
Components: kill; Source: уже нужные файлы...

[_Code]
procedure KillEmAll;
var Res : Integer;
Begin
  Exec('taskkill.exe', ' /f /im 1.exe ',ExpandConstant('{sys}'),SW_HIDE,ewWaitUntilTerminated,res);
end;

В секции Files процедура KillEmAll, означенная в параметре BeforeInstall, выполняется ПЕРЕД КОПИРОВАНИЕМ КАЖДОГО ФАЙЛА. Т.е. если в каталоге DestDir у вас кучка файлом - процедура KillEmAll будет выполняться перед копированием каждого файла, здорово замедляя установку. Поэтому разумно скопировать один левый файлик в папку {tmp}, а потом уже требуемое.

nik1967 14-09-2010 17:48 1495270

R.i.m.s.k.y.,
Эээ..., а зачем через WizardFormDesigner? Так не проще?
читать дальше »

Код:

procedure MyLabel1OnClick(Sender: TObject);
var
  ErrorCode: Integer;
begin
  ShellExec('open', 'http://forum.ru-board.com/topic.cgi?forum=5&topic=34344', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode); // Ваш URL
end;

procedure InitializeWizard;
var
  MyLabel1: TLabel;
begin
  MyLabel1 := TLabel.Create(WizardForm);
  with MyLabel1 do
  begin
    Parent := WizardForm.InstallingPage;
    Alignment := taCenter;
    Caption := 'Все программы в сборке бесплатные.' + #13#10 +
        'Кейгены, кряки, серийники, таблЭтки и т.п. не требуются.';
    Transparent := True;
    Left := ScaleX(28);
    Top := ScaleY(88);
    Width := ScaleX(400);
    Height := ScaleY(26);
    Cursor := crHand;
    OnClick:=@MyLabel1OnClick;
  end;
end;


Cheatkiller 16-09-2010 14:39 1496743

Доброго времени суток всем. Я новичок в этой программе, потому наверно вопросы, которые я задам покажутся вам глупыми.

1. У меня не получается, чтобы установщик включал в себя две и более папок (например я хочу в игре Сталкер упаковать отдельно папку bin и gamedata)
2. И как сделать просто фоновый рисунок сзади вместо BackColor? у меня не получается, я только находил про слайды.

[Setup]
DiskSpanning=no
DiskSliceSize=1500000000
AppName= S.T.A.L.K.E.R.
AppVerName=S.T.A.L.K.E.R. MeDVeD EDITION
AppPublisher=S.T.A.L.K.E.R. MeDVeD EDITION
AppPublisherURL=
AppVersion=
AppSupportURL=
AppUpdatesURL=
AppCopyright=Здесь закон - Тайга, а прокурор MeDVeD(С)
DefaultDirName={reg:HKLM\Software\GSC Game World\STALKER-SHOC,InstallPath|}\gamedata
DefaultGroupName=S.T.A.L.K.E.R. MeDVeD EDITION
DisableProgramGroupPage=yes
InfoAfterFile=D:\Games\S.T.A.L.K.E.R.\gamedata\описание.doc
LicenseFile=D:\12\лицензия.txt
OutputDir=C:\
OutputBaseFilename=S.T.A.L.K.E.R. MeDVeD EDITION
SetupIconFile=D:\12\иконка.ico
UninstallDisplayName=S.T.A.L.K.E.R. MeDVeD EDITION - удаление
Compression=lzma
SolidCompression=yes
WizardImageFile=D:\12\stsmall.bmp
WizardSmallImageFile=D:\12\st2.bmp
WindowVisible=yes
WindowShowCaption=no
BackColor=clBlack
BackColor2=clBlack
VersionInfoVersion=
VersionInfoCopyright=
UninstallDisplayIcon=D:\12\иконка.ico

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

[Files]
Source: "D:\Games\S.T.A.L.K.E.R.\gamedata\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "D:\Games\S.T.A.L.K.E.R.\bin\XR_3DA.exe"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "BASS.dll"; DestDir: "{tmp}"; Flags: dontcopy noencryption nocompression
Source: "sound.mp3"; DestDir: "{tmp}"; Flags: dontcopy noencryption nocompression

[Icons]
Name: "{group}\{cm:UninstallProgram,AMК}"; Filename: "{uninstallexe}"

[code]
const
BASS_SAMPLE_LOOP = 4;

var
mp3Handle: HWND;
mp3Name: String;

function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean; external 'BASS_Init@files:BASS.dll stdcall delayload';
function BASS_StreamCreateFile(mem: BOOL; f: PChar; offset1: DWORD; offset2: DWORD; length1: DWORD; length2: DWORD; flags: DWORD): DWORD; external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';
function BASS_Start: Boolean; external 'BASS_Start@files:BASS.dll stdcall delayload';
function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean; external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';
function BASS_Stop: Boolean; external 'BASS_Stop@files:BASS.dll stdcall delayload';
function BASS_Free: Boolean; external 'BASS_Free@files:BASS.dll stdcall delayload';

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('sound.mp3');
mp3Name := ExpandConstant('{tmp}\sound.mp3');
BASS_Init(-1, 44100, 0, 0, 0);
mp3Handle := BASS_StreamCreateFile(FALSE, PChar(mp3Name), 0, 0, 0, 0, BASS_SAMPLE_LOOP);
BASS_Start();
BASS_ChannelPlay(mp3Handle, False);
Result := True;
end;

procedure DeinitializeSetup();
begin
BASS_Stop();
BASS_Free();
end;

Можете подсказать, что и куда добавить?

R.i.m.s.k.y. 16-09-2010 14:48 1496749

Цитата:

Цитата Cheatkiller
У меня не получается, чтобы установщик включал в себя две и более папок (например я хочу в игре Сталкер упаковать отдельно папку bin и gamedata) »

Код:

[Files]
Source: stalcker\*; DestDir: {app}\; Flags: ignoreversion recursesubdirs createallsubdirs

Флаги "recursesubdirs createallsubdirs" обрабатывают подкаталоги и создают их соответственно.
А по второму вопросу не скажу - я не делал фоновые изображения. Могу только указать на коллекцию скриптов в шапке темы, что-то подобное там есть. Вот пример оттуда
Код:


[Files]
Source: "C:\background.bmp"; DestDir: "{tmp}"; Flags: dontcopy

[_Code]
function GetSystemMetrics(nIndex:Integer):Integer;
external 'GetSystemMetrics@user32.dll stdcall';

procedure InitializeWizard();
var
BackgroundBitmapImage: TBitmapImage;
s:string;
width, height:Integer;
bitmap:TBitmap;
begin
ExtractTemporaryFile('background.bmp');
WizardForm.Position:=poScreenCenter;
MainForm.BORDERSTYLE:=bsNone;
width:=GetSystemMetrics(61);
height:=GetSystemMetrics(62);
MainForm.Width:=width;
MainForm.Height:=height;
width:=MainForm.ClientWidth;
height:=MainForm.ClientHeight;
s:=ExpandConstant('{tmp}')+'\background.bmp';
BackgroundBitmapImage := TBitmapImage.Create(MainForm);
BackgroundBitmapImage.Bitmap.LoadFromFile(s);
BackgroundBitmapImage.Align := alClient;
BackgroundBitmapImage.Parent := MainForm;
BackgroundBitmapImage.Stretch:=True;
MainForm.Visible:=True;
end;


R.i.m.s.k.y. 17-09-2010 11:08 1497526

Сделал на инно поддержку параметров командной строки
Если ставлю /haaliavi /verysilent - работает, если /verysilent /haaliavi - не работает!
Код:

procedure InitializeWizard();
...
  for i:= 1 to ParamCount do begin
    if (Pos(Lowercase('silent'), Lowercase(ParamStr(i))) > 0) then silent := 1 else silent := 0;
  end;
...
if (silent = 1) then begin
//перебор различных параметров ком.строки
    for i:= 1 to ParamCount do begin
      if ( (Pos(Lowercase('/haaliavi'), Lowercase(ParamStr(i))) > 0) and haaliexists) then
      WizardForm.ComponentsList.Checked[WizardForm.ComponentsList.Items.IndexOf('{#haaliaviDesc}')]:=True;
    end;
end; // silent=1
...
[Registry]
Components: haaliavi...

WTF???

South 17-09-2010 12:51 1497634

R.i.m.s.k.y.,

Код:

  for i:=0 to ParamCount do begin
    s:= ParamStr(i);
    MsgBox(IntToStr(i)+#10#13+s, mbInformation, MB_OK);
          if (Lowercase(ParamStr(i))='/silent') or (Lowercase(ParamStr(i))='/verysilent') then silent := 1 else silent := 0;
  end;
 
  if silent=1 then
    for i:= 1 to ParamCount do
      if (Lowercase(ParamStr(i))='/haaliavi') and haaliexists then MsgBox('haaliexists', mbInformation, MB_OK);;
      //WizardForm.ComponentsList.Checked[WizardForm.ComponentsList.Items.IndexOf('{#haaliaviDesc}')]:=True;


R.i.m.s.k.y. 17-09-2010 13:04 1497647

South, спасибо, но я уже сделал проще - в InitializeSetup получаю строчку параметров целиком, а потом если требуемый параметр найден в этой строчке то...
Код:

var GetCmdTail : string;
function InitializeSetup(): Boolean;
begin
  CMDLine := GetCmdTail;
  if ( Pos(Lowercase('/silent'),Lowercase(CMDLine)) > 0 ) then silent := 1 else silent := 0;


South 17-09-2010 13:10 1497652

R.i.m.s.k.y., вот это вот
Код:

if ( Pos(Lowercase('silent'),Lowercase(CMDLine)) > 0 ) then
не очень правильно, т.к. я могу запустить инсталл вот таким образом setup.exe -silent /tipasilent \silent и т.д. и получишь ты бяку

R.i.m.s.k.y. 17-09-2010 13:18 1497662

Цитата:

Цитата South
не очень правильно »

согласен, но это прожка для моего применения, так что годится. К тому же как я понял в параметрах командной строки инно при считывании имеется некое подобие курсора, если ему получается важен порядок расстановки параметров. Вопрос был не в том как прочитать параметры строки - как в вашем примере так и было изначально, просто выяснилось что важен порядок расстановки параметров, повторяю /haaliavi /verysilent - работает, /verysilent /haaliavi - не работает! Инно запускается, но требуемое действие по haaliavi не выполняется. Вот и хотел узнать - чего инно так дуркует?

South 17-09-2010 13:29 1497672

R.i.m.s.k.y., да он не дуркует, что написано, то и выполняется. я тоже проглядел
вот так надо
Код:

  silent := 0;
  for i:=0 to ParamCount do begin
    s:= ParamStr(i);
    MsgBox(IntToStr(i)+#10#13+s, mbInformation, MB_OK);
          if (Lowercase(ParamStr(i))='/silent') or (Lowercase(ParamStr(i))='/verysilent') then begin
      silent := 1
      break;
    end;
  end;
 
  if silent=1 then
    for i:= 1 to ParamCount do
      if (Lowercase(ParamStr(i))='/haaliavi') and haaliexists then MsgBox('haaliexists', mbInformation, MB_OK);;


R.i.m.s.k.y. 17-09-2010 13:31 1497675

Цитата:

Цитата South
вот так надо »

break - чтобы дальше по строке не шел не годится - если кучка параметров надо громоздить кучку циклов на каждый из них.
Ни у кого больше идей нет почему если в ком.строке /silent стоит первый после него параметры не воспринимаются? А если /silent передвинуть в конец ком.строки - все воспринимается?

Забацал сейчас отдельный цикл на половину кучки параметров и проверил их - индейская хижина - все равно срабатывание параметров ком.строки зависит от положения /silent. What The FFFFUUUUU...!

Есть подозрение что это "хороший" инно 5.3.9 (неюникод)

South 17-09-2010 17:31 1497935

1.
Цитата:

Цитата R.i.m.s.k.y.
Ни у кого больше идей нет почему если в ком.строке /silent стоит первый после него параметры не воспринимаются? А если /silent передвинуть в конец ком.строки - все воспринимается?
. . .
Есть подозрение что это "хороший" инно 5.3.9 (неюникод) »

есть подозрение, что ты думать не хочешь
при обработке последнего параметра, если он не 'silent', то переменной silent (от которой зависит все остальное, как я понимаю) присвоится 0 - else silent:=0. это ты так пишешь. инно здесь не причем.
2. если у тебя гора параметров и использование всех парамтров зависит от того в тихом режиме или нет запущена установка, то нужно всего 2 цикла. первый поиск того самого silent (причем тот цикл, что написал я более правильный). во втором цикле можно благополучно использовать case и в нем определить остальные переменные

R.i.m.s.k.y. 17-09-2010 19:06 1497989

Цитата:

Цитата South
есть подозрение, что ты думать не хочешь »

Я сегодня весь день рабочий день бился квадратной башкой об эти параметры ком строки.
Код:

[Components]

# define ffdresizeDesc "FFDShow - увеличивать картинку до размеров экрана"
# define haaliaviDesc "Haali - воспроизводить avi"

Name: ffd; Description: Настройка FFDShow; Flags: checkablealone; Check: ffdexist
Name: ffd\resize; Description: {#ffdresizeDesc}; Flags: checkablealone dontinheritcheck
Name: haaliavi; Description: {#haaliaviDesc}; Check: HaaliExists

[_code]
function InitializeSetup(): Boolean;
var ErrorCode, err, i, j : integer; s, st : string;  param0 : TArrayOfString;
begin

 param0 := ['silent','verysilent','ffdresize','noffdresize','nohaaliavi','haaliavi']; //список допустимых параметров
        s := '';

  for i:=2 to ParamCount do begin
    err := 0;
    for j:=0 to GetArrayLength(param0)-1 do begin //проверяем корректность параметров
      st := ParamStr(i);
      if ( Pos(Lowercase(param0[j]), Lowercase(st)) > 0 ) then break else err := err + 1;  //MsgBox(Lowercase(param0[j]) + ' ' + Lowercase(st), mbInformation, MB_OK);
    end;
    if (err = GetArrayLength(param0)) then begin s := s + ParamStr(i) + ' '; end;
          if (Pos(Lowercase('haaliavi'), Lowercase(ParamStr(i))) > 0) then haaliavi := 1;
          if (Pos(Lowercase('nohaaliavi'), Lowercase(ParamStr(i))) > 0) then nohaaliavi := 1;
          if (Pos(Lowercase('ffdresize'), Lowercase(ParamStr(i))) > 0) then ffdresize := 1;
          if (Pos(Lowercase('noffdresize'), Lowercase(ParamStr(i))) > 0) then noffdresize := 1;
          if ( (Lowercase('/silent') = Lowercase(ParamStr(i))) or (Lowercase('/verysilent') = Lowercase(ParamStr(i)))) then silent := 1 else silent := 0;
  end; //ParamCount

  if (s <> '') then begin
    MsgBox('Недопустимые параметры командной строки: ' + #13#10 + s, mbInformation, mb_Ok);
    Result := False;

end; //InitializeSetup

procedure InitializeWizard();
...
  if (silent = 1) then begin
    if ( (haaliavi = 1) and haaliexists) then WizardForm.ComponentsList.Checked[WizardForm.ComponentsList.Items.IndexOf('{#haaliaviDesc}')]:=True;
    if ( (nohaaliavi = 1) and haaliexists) then WizardForm.ComponentsList.Checked[WizardForm.ComponentsList.Items.IndexOf('{#haaliaviDesc}')]:=false;
    if ( (ffdresize = 1) and ffdexist) then WizardForm.ComponentsList.Checked[WizardForm.ComponentsList.Items.IndexOf('{#ffdresizeDesc}')]:=True;
    if ( (noffdresize = 1) and ffdexist) then WizardForm.ComponentsList.Checked[WizardForm.ComponentsList.Items.IndexOf('{#ffdresizeDesc}')]:=false;
  end; // silent = 1

end; //InitializeWizard

end.

[Registry]

Components: haaliavi...
Components: ffdresize...


South 17-09-2010 19:36 1498015

R.i.m.s.k.y., ляг поспи и все пройдет. ты зациклился на какой-то хрени
еще раз повторяю -
допустим у тебя 4 параметра
3-ий параметр=/silent
4-ый=/haaliavi.
когда цикл обрабатывает 3-ий параметр, то переменная silent присваивается 1 вот по этому условию
Код:

if ( (Lowercase('/silent') = Lowercase(ParamStr(i))) or (Lowercase('/verysilent') = Lowercase(ParamStr(i)))) then silent := 1 else silent := 0;
когда цикл обрабатывает 4-ый парамет, то по этому же самому условию
Код:

if ( (Lowercase('/silent') = Lowercase(ParamStr(i))) or (Lowercase('/verysilent') = Lowercase(ParamStr(i)))) then silent := 1 else silent := 0;
твоя переменная silent становится равной 0

что написал, то и получил

R.i.m.s.k.y. 17-09-2010 20:00 1498045

Цитата:

Цитата South
ляг поспи и все пройдет. ты зациклился на какой-то хрени »

Действительно, СПАСИБИЩЕ! так всегда - самое сложное решается просто

El Sanchez 18-09-2010 11:34 1498391

South, R.i.m.s.k.y., так сойдет?
Код:

function CheckDefinedKey(S: String): Boolean;
var
  i: Byte;
begin
  Result := False;
  for i := 1 to ParamCount() do
  begin
    if (Pos(LowerCase(S), LowerCase(ParamStr(i))) > 0) And (Length(S) = Length(ParamStr(i))) Then Result := True;
  end;
end;
...
if WizardSilent and CheckDefinedKey('/haaliavi') then blablabla;


South 18-09-2010 12:19 1498415

El Sanchez, загвоздка была в другом, R.i.m.s.k.y. никак не мог понять где у него ошибка. сделал ошибку с самого начала, а потом слишком долго смотрел на свой код.:) такое бывает и ошибку найдешь либо на следующий день, либо тебя кто-то конкретно ткнет носом и до тебя наконец-то дойдет

по поводу твоего кода. да он рабочий, но
1.
Код:

if LowerCase(S)=LowerCase(ParamStr(i)) then ...
сделает ровно тоже самое, что и твой код, но отработает быстрее :).
2. ему я так понял нужно проверить наличие определенных ключей, которые он дальше будет обрабатывать. используя твою функцию уйдет ParamCount*ParamCount итераций, чтобы проверить их наличие. а если сделать
Код:

silent:=False;
haaliavi:=False;
. . .
for i:=1 to ParamCount do
  case LowerCase(ParamStr(i)) of
    '/silent' or '/verysilent': silent:=True;
    'haaliavi': haaliavi:=True;
    . . .
  end;

тогда потребуется всего ParamCount итераций. если поиск и инициализация переменных завист от того тихая установка или нет, то первым циклом ищем '/silent' и '/verysilent' ключи (не забываем в нем поставить break, чтобы не бегать лишний раз по циклу), второй делаем такой как в предыдущем случае, тогда потребуется максимум 2*ParamCount итераций, что в любом случае быстрее, чем предложенный тобой вариант

El Sanchez 18-09-2010 13:17 1498459

htuos, тогда ладно. В плане оптимизации кода твой вариант хорош и принимается , ну а разницу в несколько миллисекунд во времени выполнения я не замечу :)

moov1kk 18-09-2010 21:00 1498737



Знающие люди, как сделать такую распаковку?

moov1kk 18-09-2010 22:45 1498775



и подскажите пожалуйста что это за ошибка?

alex2010 19-09-2010 16:08 1499135

Цитата:

Цитата moov1kk
Знающие люди, как сделать такую распаковку? »

в скрипте распаковки freearc это реализовано
Цитата:

Цитата moov1kk
и подскажите пожалуйста что это за ошибка? »

данный идентификатор filenamelabel нужно прописать в переменных var

moov1kk 19-09-2010 17:49 1499188

Цитата:

Цитата alex2010
Цитата moov1kk:Знающие люди, как сделать такую распаковку? »
в скрипте распаковки freearc это реализовано »

а можно подробней?

alex2010 19-09-2010 18:14 1499202

во время распаковки архива прогресс бар отображается также - прогресс в процентах, саму полоску выполнения(бар), и файл, который распаковывается в данный момент.

moov1kk 19-09-2010 18:47 1499221

http://rghost.ru/2671600

помогите соеденить этот скрипт с freearcom ( буду очень благодарен

http://rghost.ru/2671690

alex2010 19-09-2010 23:36 1499423

moov1kk, вот:
http://rghost.ru/2675352
ЗЫ: у тебя картинка перекрывает процент распаковки архива в мегабайтах( сам прогресс отображается)

маркузяка 20-09-2010 22:26 1500269

кто знает че надо дописать в Ultimate Test чтобы Windows 7 тоже поддерживалась? :help:

nik1967 20-09-2010 22:33 1500273

маркузяка,
Код:

  if (Pos('2000 Service Pack 4', SystemVersionPanel.Text) = 0) and  // Windows 2000 SP4
    (Pos('XP Service Pack 2', SystemVersionPanel.Text) = 0) and  // Windows XP SP2
    (Pos('XP Service Pack 3', SystemVersionPanel.Text) = 0) and  // Windows XP SP3
    (Pos('Vista', SystemVersionPanel.Text) = 0) and  // Windows Vista (c любым SP или без него)
    (Pos('Windows 7', SystemVersionPanel.Text) = 0) then // Windows 7 (c любым SP или без него)


R.i.m.s.k.y. 21-09-2010 12:27 1500625

Цитата:

Цитата маркузяка
кто знает че надо дописать »

А вообще правильнее так
Код:

[_Code]
var Version: TWindowsVersion;
GetWindowsVersionEx (Version);
if (Version.Major = 5)... - windows xp
if ( (Version.Major = 6) and (Version.Minor = 0) ) ... - svista
if ( (Version.Major = 6) and (Version.Minor = 1) ) ... - se7en

Мой вопрос - как в заголовке окна установки убрать слово "Установка - "?

Habetdin 21-09-2010 15:36 1500784

Цитата:

Цитата R.i.m.s.k.y.
как в заголовке окна установки убрать слово "Установка - "? »

Код:

[Messages]
SetupWindowTitle=%1


Arsi000 21-09-2010 21:37 1501084

у меня установка должна идти в две директориии как это сделать? как добавить ещё одно окно выбора?

alex2010 22-09-2010 00:31 1501222

Arsi000, вот здесь прописываешь путь установки файла/папки:
[Files]
Source: records.inf; DestDir: {tmp}; Flags: deleteafterinstall

R.i.m.s.k.y. 22-09-2010 08:40 1501356

Подскажите, пожалуйста, как в коде получить айпишник машины ОКТЕТАМИ, т.е. набором четырех чисел, имя пользователя и имя компа?

И народ, имеющий железки на ай3/ай5, и различных интеграшках GMA, отпишитесь, пожалуйста, как в диспетчере устройств отображаются эти видеокарты, мне надо в скоде инно определить тип видухи и от этого уже плясать.

маркузяка 22-09-2010 13:36 1501616

Цитата:

Цитата nik1967
(Pos('Windows 7', SystemVersionPanel.Text) = 0) then // Windows 7 (c любым SP или без него) »


R.i.m.s.k.y. 22-09-2010 13:46 1501628

маркузяка, ну ептыть, подставить жеж надо после Then свои действия.
этот Ваш if (pos... вообще бессмысленен, - вы просто проверяете что если вин2000 и винХР и виста тогда вин7 тогда ... как будто пушистый белый зверь наследил. Вообще эта проверка бессмыслена, и так ясно что вин95/98 уже нигде нет, а на линуксе инно и так не запуститься. Этой проверкой Вы просто перебираете все ОС и естественно на выходе будет False (ну после того кк правильно переписать эту проверку).
Попробуйте разобраться что делает код
Вы чего хочите? определить ОС? что после этого нужно сделать? Из приведенного кода можно вообще можно иф выбросить, или так сделать:
Код:

var Version: TWindowsVersion;
begin // ваша функция
...
GetWindowsVersionEx (Version);
if (Version.Major >= 5) then begin // все что выше 2000 (вин 2000 определяется как 5,0, хр - 5,1, виста 6,0, вин - 6,1
  SystemVersionPanel.Color := clBlack
  SystemVersionPanel.Font.Color := clRed
  ChangeText := True
end; // if (Version.Major >= 5)
end; // ваша функция


маркузяка 22-09-2010 14:32 1501661

исправил.

а проверка все же не бессмыслена. некоторые игры не запускаются под XP, например Just Cause 2

nik1967 22-09-2010 14:57 1501685

маркузяка,
А повнимательнее нельзя? Всё работает.
Код:

(Pos('Vista', SystemVersionPanel.Text) = 0) and  // Windows Vista (c любым SP или без него)
    (Pos('Windows 7', SystemVersionPanel.Text) = 0) then // Windows 7 (c любым SP или без него)

И вообще можно воспользоваться готовыми решениями:
isUtils.dll v1.00 [18.08.2010] от ExpeditorR
HWREQ v 1.0 от Shegorat

R.i.m.s.k.y. 22-09-2010 14:59 1501687

Цитата:

Цитата маркузяка
а проверка все же не бессмыслена »

Проверка бессмыслена в том виде в каком была написана - я ж расписал что она просто перебирает все ОС с условием and и естественно на выходе пинцет и тот нерабочий.
для ХР проверка if ( (Version.Major = 5) and (Version.Minor = 1) ) then begin...
почитайте справку про GetWindowsVersionEx - там можно проверять и сервис паки

nik1967,
Pos('Vista', SystemVersionPanel.Text) = 0 - значит слово Виста не встречается в строке SystemVersionPanel.Text, значит ОС НЕВИСТА, и так для каждой проверки, как такое может работать? Получается же Если НЕВИН2000 и НЕВИНХР и НЕВИСТА и НЕВИН7 тогда...

nik1967 22-09-2010 15:45 1501739

R.i.m.s.k.y.,
читать дальше »
В данном куске кода проверяется версия оси, и если не найдена версия, как ты уже говорил
Цитата:

Pos('Vista', SystemVersionPanel.Text) = 0 - значит слово Виста не встречается в строке SystemVersionPanel.Text
, то надпись становиться красной:
Код:

if (Pos('2000 Service Pack 4', SystemVersionPanel.Text) = 0) and  // Windows 2000 SP4
    (Pos('XP Service Pack 2', SystemVersionPanel.Text) = 0) and  // Windows XP SP2
    (Pos('XP Service Pack 3', SystemVersionPanel.Text) = 0) and  // Windows XP SP3
    (Pos('Vista', SystemVersionPanel.Text) = 0) and  // Windows Vista (c любым SP или без него)
    (Pos('Windows 7', SystemVersionPanel.Text) = 0) then  // Windows 7 (c любым SP или без него)
    begin
      SystemVersionPanel.Color := clBlack
      SystemVersionPanel.Font.Color := clRed
      ChangeText := True
    end

, а если встречается, зелёной:
Код:

GetWindowsVersionEx(Version)
  // Операционная система:
  SystemVersionPanel.Color := clBlack
    SystemVersionPanel.Font.Color := clLime


nik1967 22-09-2010 16:08 1501771

маркузяка,
Вот рабочий
Ultimate Test Black with Win 7
Код:

[Setup]
AppName=Ultimate Test
AppVerName=Ultimate Test 1.0
DefaultDirName={pf}\Ultimate Test

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

[_Code]
type
 PDisplay_Device = record
  cb: DWord;
  DeviceName: array [0..31] of char;
  DeviceString: array [0..127] of char;
  StateFlags: DWord;
  DeviceID, DeviceKey: array [0..127] of char;
 end;

 TMixerCaps = record
  vPid, vDriverVersion: DWord;
  sName: array [0..31] of char;
  Support, cDestinations: DWord;
 end;

// Проверка версии Windows
#if Pos("4.", GetFileVersion(AddBackslash(GetEnv("windir")) + "Explorer.exe")) == 1
    {Win9x}
  TMemoryStatusEx = record
    dwLength, dwMemoryLoad: DWord;
    LoTotalPhys, LoAvailPhys, LoTotalPageFile, LoAvailPageFile,
    LoTotalVirtual, LoAvailVirtual, LoAvailExtendedVirtual, HiTotalPhys,
    HiAvailPhys, HiTotalPageFile, HiAvailPageFile, HiTotalVirtual, HiAvailVirtual,
    HiAvailExtendedVirtual: Integer;
  end;
  function GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx): Boolean;
  external 'GlobalMemoryStatus@kernel32.dll stdcall';
#else
    {WinNT}
  TMemoryStatusEx = record
    dwLength, dwMemoryLoad: DWord;
    LoTotalPhys, HiTotalPhys, LoAvailPhys, HiAvailPhys,
    LoTotalPageFile, HiTotalPageFile, LoAvailPageFile, HiAvailPageFile,
    LoTotalVirtual, HiTotalVirtual, LoAvailVirtual, HiAvailVirtual, LoAvailExtendedVirtual,
    HiAvailExtendedVirtual: Integer;
  end;
  function GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx): Boolean;
  external 'GlobalMemoryStatusEx@kernel32.dll stdcall';
#endif

const
  DISPLAY_DEVICE_PRIMARY_DEVICE = 4;
  oneMB = 1024*1024;
  NeedMHz = 2200;
  NeedVideoRAM = 256;
  NeedSoundCard = 'Realtek HD';
  NeedMB = 1024;
  NeedPageFile = 2048;

var
  InfoPage: TWizardPage;
  TopText, BottomText: TNewStaticText;
  ChangeText: Boolean;
  SystemPanel, ProcessorPanel, VideoPanel,
  AudioPanel, RAMPanel, PageFilePanel: TMemo;
  SystemVersionPanel, ProcessorMHzPanel, VideoRAMPanel,
  AudioNamePanel, RAMTotalPanel, PageFileTotalPanel: TMemo;
  lpCaps: TMixerCaps;
  Version: TWindowsVersion;
  MemoryEx: TMemoryStatusEx;
  n, errCode: Integer;
  Keys: TArrayOfString;
  DeviceValue: Cardinal;
  lpDisplayDevice: PDisplay_Device;

function GetSystemMetrics(nIndex: Integer): Integer;
 external 'GetSystemMetrics@user32.dll stdcall';

function GetDeviceCaps(hDC, nIndex: Integer): Integer;
 external 'GetDeviceCaps@GDI32 stdcall';

function CreateDC(lpDriverName, lpDeviceName, lpOutput: String; lpInitData: Integer): Integer;
 external 'CreateDCA@GDI32 stdcall';

function EnumDisplayDevices(lpDevice, iDevNum: DWord; var lpDisplayDevice: PDisplay_Device; dwFlags: DWord): Boolean;
 external 'EnumDisplayDevicesA@user32.dll stdcall';

function mixerGetDevCaps(uDeviceID: LongInt; var lpCaps: TMixerCaps; uSize: LongInt): LongInt;
 external 'mixerGetDevCapsA@winmm.dll stdcall';

function mixerGetNumDevs: Integer;
 external 'mixerGetNumDevs@winmm.dll stdcall';

// Дополнить число до кратного Multiple
function ToMultiple(Bytes, Multiple: Integer): Integer;
begin
  if Abs(Bytes/Multiple) > Bytes/Multiple then
    Result := (Bytes/Multiple + 1)*Multiple
  else
    Result := Bytes
end;

// Перевод числа в значение Бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)
function ByteOrTB(Bytes: Extended; noMB: Boolean): String;
begin
 if not noMB then
    Result := FloatToStr(Int(Bytes)) + ' Мб'
 else
        if Bytes < 1024 then
      Result := FloatToStr(Int(Bytes)) + ' Бт'
    else
            if Bytes/1024 < 1024 then
          Result := FloatToStr(round((Bytes/1024)*10)/10) + ' Кб'
      else
                    if Bytes/oneMB < 1024 then
            Result := FloatToStr(round(Bytes/oneMB*100)/100) + ' Мб'
          else
            if Bytes/oneMB/1000 < 1024 then
                Result := FloatToStr(round(Bytes/oneMB/1024*1000)/1000) + ' Гб'
            else
                              Result := FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) + ' Тб'
 StringChange(Result, ',', '.')
end;

// Удаление начальных, конечных и повторных пробелов
function DelSp(String: String): String;
begin
 while (Pos('  ', String) > 0) do Delete(String, Pos('  ', String), 1)
 Result := Trim(String)
end;

function Size64(Hi, Lo: Integer): Extended;
begin
 Result := Lo
 if Lo < 0 then
    Result := Result + $7FFFFFFF + $7FFFFFFF + 2
 for Hi := Hi-1 downto 0 do Result := Result + $7FFFFFFF + $7FFFFFFF + 2
end;

function CheckCPU(NeedMHz: Integer): Boolean;
var
  String: String;
begin
    String := 'Hardware\Description\System\CentralProcessor'; RegGetSubkeyNames(HKLM, String, Keys)    // Количество ядер
    for n := 0 to GetArrayLength(Keys)-1 do
      RegQueryStringValue(HKLM, String + '\' + Keys[n], 'ProcessorNameString', Keys[n])
    if not RegQueryDWordValue(HKLM, String + '\0', '~MHz', DeviceValue) or (DeviceValue < NeedMHz) then
        Exit
  else
    Result := True
end;

function CheckMemorySize(NeedRAM: Integer): Boolean;
begin
    MemoryEx.dwLength := SizeOf(MemoryEx)
    if not GlobalMemoryStatusEx(MemoryEx) then
        MsgBox('Ошибка функции:' + #13 + 'GlobalMemoryStatusEx', mbError, mb_Ok)
  else
      if (ToMultiple(trunc(Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys)/oneMB), 16) < NeedRAM) then
        Exit
    else
        Result := True
end;

procedure CreateCheckForm();
begin

  TopText := TNewStaticText.Create(InfoPage)
  with TopText do
  begin
    Parent := InfoPage.Surface
    Left := 0
    AutoSize := True
  end

  BottomText := TNewStaticText.Create(InfoPage)
  with BottomText do
  begin
    Parent := InfoPage.Surface
    Caption := 'Когда Вы будете готовы продолжить установку, нажмите «Далее»'
    Font.Color := clGray
    Left := 0
    Top := 200
    AutoSize := True
  end

  SystemPanel := TMemo.Create(InfoPage)
  with SystemPanel do
  begin
    Text := 'Система'
    Font.Color :=clLime
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := ScaleY(33)
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := clBlack
  end

  SystemVersionPanel := TMemo.Create(InfoPage)
  with SystemVersionPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := SystemPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  ProcessorPanel := TMemo.Create(InfoPage)
  with ProcessorPanel do
  begin
    Text := 'Процессор'
    Font.Color :=clLime
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := SystemPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := clBlack
  end

  ProcessorMHzPanel := TMemo.Create(InfoPage)
  with ProcessorMHzPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := ProcessorPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  VideoPanel := TMemo.Create(InfoPage)
  with VideoPanel do
  begin
    Text := 'Видеоадаптер'
    Font.Color :=clLime
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := ProcessorPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := clBlack
  end

  VideoRAMPanel := TMemo.Create(InfoPage)
  with VideoRAMPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := VideoPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  AudioPanel := TMemo.Create(InfoPage)
  with AudioPanel do
  begin
    Text := 'Звуковая карта'
    Font.Color :=clLime
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := VideoPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := clBlack
  end

  AudioNamePanel := TMemo.Create(InfoPage)
  with AudioNamePanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := AudioPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  RAMPanel := TMemo.Create(InfoPage)
  with RAMPanel do
  begin
    Text := 'Объём памяти'
    Font.Color :=clLime
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := AudioPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := clBlack
  end

  RAMTotalPanel := TMemo.Create(InfoPage)
  with RAMTotalPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := RAMPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  PageFilePanel := TMemo.Create(InfoPage)
  with PageFilePanel do
  begin
    Text := 'Файл подкачки'
    Font.Color :=clLime
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := RAMPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := clBlack
  end;

  PageFileTotalPanel := TMemo.Create(InfoPage)
  with PageFileTotalPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := PageFilePanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

end;

procedure UpdateInfo();
var
  DeviceName, DeviceKey: String;
begin
  ChangeText := False

  GetWindowsVersionEx(Version)

  // Операционная система:
  SystemVersionPanel.Color := clBlack
    SystemVersionPanel.Font.Color := clLime

  DeviceKey := 'Software\Microsoft\Windows NT\CurrentVersion'
  if not UsingWinNT then StringChange(DeviceKey, 'Windows NT', 'Windows')
    RegQueryStringValue(HKLM, DeviceKey, 'ProductName', DeviceName)
  if RegQueryStringValue(HKLM, DeviceKey, 'CSDVersion', DeviceKey) then
    DeviceName := DeviceName + ' ' + DeviceKey
    StringChange(DeviceName, 'Microsoft ', '')
  SystemVersionPanel.Text := ' ' + DeviceName + ' сборка ' + IntToStr(Version.Major) + '.' + IntToStr(Version.Minor) +
                            '.' + IntToStr(Version.Build)

  if (Pos('2000 Service Pack 4', SystemVersionPanel.Text) = 0) and  // Windows 2000 SP4
    (Pos('XP Service Pack 2', SystemVersionPanel.Text) = 0) and  // Windows XP SP2
    (Pos('XP Service Pack 3', SystemVersionPanel.Text) = 0) and  // Windows XP SP3
    (Pos('Vista', SystemVersionPanel.Text) = 0) and  // Windows Vista (c любым SP или без него)
    (Pos('Windows 7', SystemVersionPanel.Text) = 0) then  // Windows 7 (c любым SP или без него)
    begin
      SystemVersionPanel.Color := clBlack
      SystemVersionPanel.Font.Color := clRed
      ChangeText := True
    end

  // Процессор:
  ProcessorMHzPanel.Color := clBlack
  ProcessorMHzPanel.Font.Color := clLime

  if not CheckCPU(NeedMHz) then
    begin
      ProcessorMHzPanel.Color := clBlack
      ProcessorMHzPanel.Font.Color := clRed
      ChangeText := True
    end

  ProcessorMHzPanel.Text := ' ' + DelSp(Keys[0]) + ' @' + IntToStr(DeviceValue) + ' MHz'
  if GetArrayLength(Keys) > 1 then
    ProcessorPanel.Text := 'Процессоры' // + ' (' + IntToStr(GetArrayLength(Keys)) + ')'

  // Видеокарта:
  VideoRAMPanel.Color := clBlack
  VideoRAMPanel.Font.Color := clLime

  lpDisplayDevice.cb := SizeOf(lpDisplayDevice)
  DeviceKey := ''
    n := 0
  while not (EnumDisplayDevices(0, n, lpDisplayDevice, 0) and
            (lpDisplayDevice.StateFlags and DISPLAY_DEVICE_PRIMARY_DEVICE > 0)) and (n < 127) do n := n + 1
    for n := 0 to 127 do DeviceKey := DeviceKey + lpDisplayDevice.DeviceKey[n]
  Delete(DeviceKey, Pos(Chr(0), DeviceKey), 127)  // Ключ драйвера получаем из API
    StringChange(DeviceKey, '\Registry\Machine\', '')
  errCode := 1
  DeviceValue := 0
  if RegQueryBinaryValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', DeviceName) then
        for n := 1 to Length(DeviceName) do
      begin
        DeviceValue := DeviceValue + Ord(DeviceName[n])*errCode
        errCode := errCode*$100
      end
  else
    if RegQueryDWordValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', DeviceValue) then
    else
        RegQueryDWordValue(HKLM, DeviceKey + '\Info', 'VideoMemory', DeviceValue)
    DeviceName := ''
  for n := 0 to 127 do DeviceName := DeviceName + lpDisplayDevice.DeviceString[n]
  Delete(DeviceName, Pos(Chr(0), DeviceName), 127)

  if DeviceName <> '' then
    if DeviceValue > 0 then
      VideoRAMPanel.Text := ' ' + DelSp(DeviceName) + ', '+ ByteOrTB(DeviceValue/oneMB, False)
    else
      VideoRAMPanel.Text := ' ' + DelSp(DeviceName) + ' (Standard), '+ ByteOrTB(DeviceValue/oneMB, False)
  else
    begin
      VideoRAMPanel.Text := ' Драйвер устройства не обнаружен'
      VideoRAMPanel.Color := clBlack
      VideoRAMPanel.Font.Color := clRed
      ChangeText := True
    end
  if (DeviceValue/oneMB < NeedVideoRAM) then
    begin
      VideoRAMPanel.Color := clBlack
      VideoRAMPanel.Font.Color := clRed
      ChangeText := True
    end
  VideoRAMPanel.Text := VideoRAMPanel.Text + ', ' + IntToStr(GetSystemMetrics(0)) + 'x' +
                        IntToStr(GetSystemMetrics(1)) + ' (' + IntToStr(GetDeviceCaps(CreateDC('DISPLAY','','',0),14) *
                        GetDeviceCaps(CreateDC('DISPLAY','','',0),12)) + ' bit)'

  // Звуковая карта:
  AudioNamePanel.Color := clBlack
  AudioNamePanel.Font.Color := clLime

  // for errCode := 0 to 1 do  // Вывод основного звукового устройства
  for errCode := 0 to mixerGetNumDevs do
    begin
          mixerGetDevCaps(errCode-1, lpCaps, SizeOf(lpCaps))
      DeviceName := ' '
          for n := 0 to 31 do DeviceName := DeviceName + lpCaps.sName[n]
      Delete(DeviceName, Pos(Chr(0), DeviceName), 31)
      Delete(DeviceName, Pos(' [', DeviceName), 31)
      StringChange(DeviceName, 'SB ', 'Creative ')
      Delete(DeviceName, Pos(' Audio', DeviceName), 31)
          SetArrayLength(Keys, errCode)
      if errCode > 0 then Keys[errCode-1] := DeviceName
    end

    if GetArrayLength(Keys) > 1 then
    begin
    AudioPanel.Text := 'Звуковые карты'
    // AudioPanel.Text := 'Звуковые карты (' + IntToStr(GetArrayLength(Keys)) +')'
    AudioNamePanel.Text := ''
    for n := 1 to GetArrayLength(Keys) do
        AudioNamePanel.Text := AudioNamePanel.Text + Keys[n-1]  // + '(' + IntToStr(n) + ')'
    end
  else
    if GetArrayLength(Keys) = 0 then
    begin
      AudioNamePanel.Text := ' Драйвер устройства не обнаружен'
      AudioNamePanel.Color := clBlack
      AudioNamePanel.Font.Color := clRed
      ChangeText := True
    end
      else
      AudioNamePanel.Text := Keys[0]
  if Pos(NeedSoundCard, AudioNamePanel.Text) = 0 then
    AudioNamePanel.Text := AudioNamePanel.Text + ' (рекомендуется ' + NeedSoundCard + ')'

  // Объём памяти:
    RAMTotalPanel.Color := clBlack
    RAMTotalPanel.Font.Color := clLime
  if not CheckMemorySize(NeedMB) then
    begin
    RAMTotalPanel.Color := clBlack
    RAMTotalPanel.Font.Color := clRed
      ChangeText := True
    end
  RAMTotalPanel.Text := ' ' + ByteOrTB(ToMultiple(trunc(Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys)/oneMB), 16), False) + ' всего, ' +
                              ByteOrTB(ToMultiple(trunc(Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys)/oneMB), 16) -
                                                        Size64(MemoryEx.HiAvailPhys, MemoryEx.LoAvailPhys)/oneMB, False) + ' используется, ' +
                              ByteOrTB(Size64(MemoryEx.HiAvailPhys, MemoryEx.LoAvailPhys)/oneMB, False) + ' свободно'

  // Виртуальная память:
  PageFileTotalPanel.Color := clBlack
  PageFileTotalPanel.Font.Color := clLime
  PageFileTotalPanel.Text := ' ' + ByteOrTB(Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile)/oneMB, False) + ' всего, ' +
                                  ByteOrTB((Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile) -
                                            Size64(MemoryEx.HiAvailPageFile, MemoryEx.LoAvailPageFile))/oneMB, False) + ' занято системным кэшем'
  if Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile)/oneMB < NeedPageFile then
    begin
  PageFileTotalPanel.Color := clBlack
  PageFileTotalPanel.Font.Color := clRed
      ChangeText := True
    end

  if ChangeText = True then
    begin
      TopText.Top := 0
      TopText.Caption := 'Не все компоненты удовлетворяют минимальным требованиям игры.' #13
                        'Пожалуйста, проверьте позиции, выделенные красным цветом.'
      TopText.Font.Color := clRed
      // WizardForm.NextButton.Enabled := False
    end
  else
    begin
      TopText.Caption := 'Все компоненты соответствуют минимальным требованиям игры.'
      TopText.Font.Color := clGreen
      TopText.Top := 8
      // WizardForm.NextButton.Enabled := True
    end
end;

procedure InitializeWizard();
begin
  InfoPage := CreateCustomPage(wpLicense, 'Аппаратное и программное обеспечение',
                                          'Программа установки обнаружила следующие наобходимые компоненты.')
  CreateCheckForm()  // Создание объектов TMemo, в которых будет выводится информация о системе
  UpdateInfo()  // Обновление информации о системе
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = InfoPage.ID then UpdateInfo()  // Обновление информации о системе
end;


R.i.m.s.k.y. 23-09-2010 08:43 1502235

Цитата:

Цитата nik1967
то надпись становиться красной »

Цитата:

Цитата nik1967
, а если встречается, зелёной: »

Понял, я подумал что в скрипте в зависимости от ОС свои действия, а там просто проверка. Но мне кажется что грамотнее было бы организовать через GetWindowsVersionEx (Version).

nik1967 23-09-2010 10:04 1502298

Цитата:

Цитата R.i.m.s.k.y.
Но мне кажется что грамотнее было бы организовать через GetWindowsVersionEx (Version). »

а если встречается, зелёной:
Код:

GetWindowsVersionEx(Version)
  // Операционная система:
  SystemVersionPanel.Color := clBlack
    SystemVersionPanel.Font.Color := clLime


R.i.m.s.k.y. 23-09-2010 10:18 1502305

Цитата:

Цитата nik1967
а если встречается, зелёной »

Хотя моя недолга жизнь в ИТ подтверждает главное правило айтишника - работает - не трожь.

ivsatel 24-09-2010 11:49 1503227

Подскажите пожалуйста как прописать эти пути:
Код:

Documents and Settings\Admin\Application Data\Azureus
и
Documents and Settings\Admin\Local Settings\Application Data\Vuze_Remote

как у меня
Код:

Source: "{localappdata}\ThirdPartyComponents.xml"; DestDir: "{localappdata}\Documents and Settings\{username}\Local Settings\Application Data\Vuze_Remote"; Flags: promptifolder
Source: "{userappdata}\.certs"; DestDir: "{userappdata}\Documents and Settings\{username}\Application Data\Azureus"; Flags: promptifolder


kotkovets 24-09-2010 12:28 1503245

Цитата:

Цитата ivsatel
Documents and Settings\Admin\Application Data\Azureus »

Код:

DestDir: {userappdata}\Azureus
Цитата:

Цитата ivsatel
Documents and Settings\Admin\Local Settings\Application Data\Vuze_Remote »

Код:

DestDir: {localappdata}\Vuze_Remote

R.i.m.s.k.y. 25-09-2010 14:18 1503967

Повторяю вопрос - как в коде инно получить айпишник машины? Желательно октетами - четыре числа, но и строка целиком пойдет. Заранее спасибо

THE GUILTY GOD 25-09-2010 15:57 1504025

Народ помогите у меня есть скрипт с установкой в 2 диска, а мне нужно с 1 диска
Скажите что и где нужно пеменять! Ну или что куда вписать!
Код:

#define NeedSize "5890"  ;Указываем размер игры,в байтах.
;#define precomp GetEnv("ProgramFiles") + "\FreeArc\PowerPack\Max\*"  ;если архивы созданы с PRECOMP, раскомментируйте строку и укажите папку с необходимыми для распаковки файлами (в общем случае это precomp04.exe, PPMonstr.exe, ecm.exe, unecm.exe, packjpg_dll.dll)
;Добавляем архивы
#define Archives "{src}\data1.bin;DestDir:{app}\;Disk:1;Components:Russian"
#define Archives Archives + "|" + "{src}\data3.bin;DestDir:{app}\;Disk:1"
;архивы указываются так {имя архива;DestDir:путь распаковки;Disk:диск на котором лежит}
;если есть компоненты то так {имя архива;DestDir:путь распаковки;Disk:диск на котором лежит;Components:название компонента}
;остальные архивы, где не указаны компоненты тоже будут распаковываться

C помощью чего можно хорошенько запокавать звуковые файлы и файлы формата .bik.
И есть ли русификатор для Inno Setup GameScript Generator

moov1kk 26-09-2010 00:27 1504370

Народ, я создал репак Mirrors Edge но когда устанавливаю и запускаю игру она полностью на английском, в чем дело?

Super Atreides 26-09-2010 11:41 1504541

Цитата:

Цитата serg aka lain
Цитата Lancer2404:А поподробнее можно а то я новичек в этом деле »
Можно, нужна сама библиотека "GameuxInstallHelper.dll".
Сам скрипт (Пример для юникод версии Inno):
читать дальше » »

У меня при компиляции на строке
Код:

TGUID = record
выдаёт ошибку: Duplicate identifier 'TGUID'

Что я делаю не так?

маркузяка 26-09-2010 12:15 1504566

Цитата:

Цитата moov1kk
Народ, я создал репак Mirrors Edge но когда устанавливаю и запускаю игру она полностью на английском, в чем дело? »

возможно язык игры записан в реестре. я сталкивался с этим в Battlefield 2.

нужно найти нужный ключ и сделать так чтобы установщик при установке вносил его в реестр.
в моем случае это было так:

Код:

[Registry]
Root: HKLM; Subkey: "SOFTWARE\Electronic Arts\EA GAMES\Battlefield 2\"; ValueName: Language; ValueType: string; ValueData: "Russian"


max129 26-09-2010 15:47 1504778

уважаемые гуру!
подскажите если не трудно,как организовать в инно такую последовательность копирования и распаковки(одного) файлов:

1. сначала устанавливается основная папка игры через инно.
2. потом уже в основную папку происходит распаковка архива(внешнего для инно я так думаю?).
3. и напоследок в папку с распакованным архивом просто кидается другая папка(наверно тоже придётся с сетупом рядом ложить?).
++++++++++++++++++++++++++
если можно,хотя бы примерчик основных моментов.
и ещё один вопросик-при использовании связки 7z,precomp,freearc-размер файла получаетя 6 гиг-так вот не страшно ли это и каким методом лучше распаковывать,ис доном или через обычный скрипт.

R.i.m.s.k.y. 28-09-2010 08:51 1506207

Цитата:

Цитата max129
ложить »

КЛАСТЬ!
Код:

[Files]
Source: Folder1; DestDir: {app}; BeforeInstall: ChangeCaption('Установка первой папки'); Flags: ignoreversion recursesubdirs createallsubdirs uninsrestartdelete setntfscompression restartreplace
Source: unrar.exe; Destdir: {tmp}; BeforeInstall: ChangeCaption('Копирование архива'); 
Source: rar.rar; Destdir: {tmp}; BeforeInstall: ChangeCaption('Копирование архива'); AfterInstall: Unrar(ExpandConstant('{app}\2'));
Source: Folder2; DestDir: {app}; BeforeInstall: ChangeCaption('Установка второй папки'); Flags: ignoreversion recursesubdirs createallsubdirs uninsrestartdelete setntfscompression restartreplace

[_Code]
procedure ChangeCaption(str: string);
begin
    WizardForm.StatusLabel.Caption:= str;
end;

procedure Unrar (path : string);
var res : integer;
begin
    ChangeCaption('Распаковка архива');
    Exec(ExpandConstant('{tmp}\unrar.exe'), ' x ' + ExpandConstant('{tmp}\rar.rar') + ' ' + path, ExpandConstant('{tmp}'),SW_HIDE,ewWaitUntilTerminated,res);
end;

Примерно так. unrar.exe идет вместе с архиватором Winrar и является бесплатным приложением.

Цитата:

Цитата max129
размер файла получаетя 6 гиг-так вот не страшно ли это »

Я средствами инно ведьмака на 14,5 гиг упаковывал и ничего - все живы.

Henry_Townsend 30-09-2010 19:36 1508406

Товарищи,у вас есть предположения,каким образом можно создать такой прогресбар?
Я вообще поначалу думал,что это даже не окно,а слайд шоу... Перепробовав кучу скриптов ответ так и не нашёл,как разместить окно в правом нижнем углу да и ещё над панелью задач?
Буду благодарен за любые советы.

nik1967 30-09-2010 20:38 1508435

Henry_Townsend,
Прогресс-бар справа внизу
Код:

[_Code]
function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';
 
procedure InitializeWizard();
begin
 //Выносим кнопку "Отмена" на передний план
  WizardForm.CancelButton.BringToFront;
  WizardForm.Bevel1.Hide;
end;
 
 procedure CurPageChanged(CurPageID: Integer);
 begin
  if CurPageID=wpInstalling then
  begin
    WizardForm.BorderStyle:=bsDialog;
    WizardForm.MainPanel.Visible:=False;
    WizardForm.Width:=ScaleX(320);
    WizardForm.Height:=ScaleY(91);
    WizardForm.InnerNotebook.Left:=ScaleX(7);
    WizardForm.InnerNotebook.Top:=ScaleY(7);
    WizardForm.InnerNotebook.Width:=ScaleX(300);
    WizardForm.StatusLabel.Left:=ScaleX(0);
    WizardForm.StatusLabel.Top:=ScaleY(0);
    WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
    WizardForm.FileNameLabel.Left:=ScaleX(0);
    WizardForm.FileNameLabel.Top:=ScaleY(17);
    WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
    WizardForm.ProgressGauge.Top:=ScaleY(15);
    WizardForm.ProgressGauge.Left:=ScaleX(0);
    WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
    WizardForm.CancelButton.Left:=ScaleX(122);
    WizardForm.CancelButton.Top:=ScaleY(70);
    WizardForm.Left:=GetSystemMetrics(16)-ScaleX(325);
    WizardForm.Top:=GetSystemMetrics(17)-ScaleX(68);
  end;
if CurPageID=wpFinished
 then
  begin
  WizardForm.Width:=502;{Размер окна по горизонтали}
  WizardForm.Height:=392;{Размер окна по вертикали}
  WizardForm.Position:=poScreenCenter; {Возврат в исходное состояние}
 end
end;


Henry_Townsend 30-09-2010 20:57 1508444

Огромное спасибо!А то уже начал думать,что без WindowVisible никак не обойтись.

R.i.m.s.k.y. 01-10-2010 09:06 1508671

Камрады, как сделать вывод надписи над прогрессбаром при деинсталляции приложения для секции UninstallRun? Для секции Run эта надпись выводится через StatusMsg: Надпись, а вот для UninstallRun этот StatusMsg никакого эффекта не оказывает.

koler 01-10-2010 13:41 1508882

подскажите с помощью какого скрипта оформлять инсталлятор

R.i.m.s.k.y. 01-10-2010 13:46 1508887

Цитата:

Цитата koler
подскажите с помощью какого скрипта оформлять инсталлятор »

к примеру на 235 странице этого форума есть оформление инно http://forum.oszone.net/post-1487918.html#post1487918

koler 01-10-2010 14:10 1508911

Цитата:

Цитата R.i.m.s.k.y.
Цитировать »

Цитата:

Цитата R.i.m.s.k.y.
Цитировать »

Цитата:

Цитата R.i.m.s.k.y.
Цитировать »

да типо инно помоги пожалуйста будь как можно менять цвет фона инсталлятора вставлять картинку в инсталлятор

R.i.m.s.k.y. 01-10-2010 14:35 1508940

Цитата:

Цитата koler
помоги пожалуйста будь как можно менять цвет фона инсталлятора вставлять картинку в инсталлятор »

Извини, я оформлением не занимался. В шапке темы посмотри Коллекция скриптов и Сборник вопросов. Другие вопросы, от простых до не очень сложных - распишу, а оформление я лично считаю лишним, главная задача инсталлера - правильно поставить и деинсталлить.

koler 01-10-2010 14:51 1508951

Цитата:

Цитата R.i.m.s.k.y.
Цитировать »

Цитата:

Цитата R.i.m.s.k.y.
Цитировать »

спасибо
люди помогите как менять внешнее оформление инсталляторов как менять цвет фона цвет кнопок цвет текстов

маркузяка 01-10-2010 15:52 1508993

для внешнего оформления нужно наложить на окно скин. сделать это можно прогой ISSkin, есть в шапке темы, с ее же помощью можно менять цвет шрифта. на кнопки тоже можно наложить текстуры, код есть в сборнике ISScripting от Kindly

koler 01-10-2010 17:55 1509094

как можно поменять цвет фона инсталлятора

люди помогите гдеможно скачать скины как можно менять шрифт цвет фона шрифт текста инсталллятора
как в skin builder делать все это там ничего не понять

как можно создать такой инсталлятор

маркузяка 01-10-2010 20:40 1509193

скины делаешь сам из обычных виндовых тем, а в окне справа есть стобик, где все цвета прописаны.

с помощю ISSkin'а я создал вот это



я использую это во всех своих репаках

P.S. koler пиши в аську, 498863759, может чем и помогу.

R.i.m.s.k.y. 02-10-2010 11:17 1509503

Повторяю вопрос - как изменить надпись при деинсталляции над зеленой колбасой в секции UninstallRun? Для Run это StatusMSG, а для UninstallRun?

ivsatel 02-10-2010 12:03 1509528

Установлена версия 5.3.11
Помогите победить не корректное отображение в этой секции CustomMessages:
читать дальше »

[CustomMessages]
Russian.NameAndVersion=%1, веÑ?Ñ�иÑ� %2
Russian.AdditionalIcons=Дополнительные значки:
Russian.CreateDesktopIcon=Создать значок на &Ð*абочем Ñ�толе
Russian.CreateQuickLaunchIcon=Создать значок в &Панели быÑ�Ñ‚Ñ?ого запуÑ�ка
Russian.ProgramOnTheWeb=Сайт %1 в ИнтеÑ?нете
Russian.UninstallProgram=ДеинÑ�таллиÑ?овать %1
Russian.LaunchProgram=Запу�тить %1
Russian.AssocFileExtension=Св&Ñ�зать %1 Ñ� файлами, имеющими Ñ?аÑ�шиÑ?ение %2
Russian.AssocingFileExtension=Св�зывание %1 � файлами %2...
Russian.FullInstallation=Полна� у�тановка
Russian.CompactInstallation=Компактна� у�тановка
Russian.CustomInstallation=ВыбоÑ?очнаÑ� уÑ�тановка
Russian.CDBXPFiles=Файлы пÑ?огÑ?аммы
Russian.Languages=Языки
Russian.IconForAll=Дл� в�ех пользователей
Russian.IconForCurrent=Только дл� текущего пользовател�
Russian.OtherTasks=ДÑ?угие задачи:
Russian.AssociateCompilations=&СвÑ�зать файлы пÑ?оектов данных (.dxp) и аудио (.axp) Ñ� CDBurnerXP
Russian.AssociateISO=&Св�зать файлы ISO (.iso) � CDBurnerXP
Russian.NMSAccessDesc=Обе�печить до�туп к CD/DVD дл� любого пользовател�
Russian.NMSAccessServiceDesc=Позвол�ет в�ем пользовател�м и�пользовать CDBurnerXP
Russian.NMSAccessStop=ОÑ�тановка Ñ�еÑ?виÑ�а NMSAccess
Russian.NMSAccessInstall=УÑ�тановка Ñ�еÑ?виÑ�а NMSAccess
Russian.NMSAccessStart=ЗапуÑ�к Ñ�еÑ?виÑ�а NMSAccess
Russian.NMSAccessUninstall=Удаление Ñ�еÑ?виÑ�а NMSAccess
Russian.BurnDisc=Запи�ать ди�к
Russian.CDBurnerXPDesc=ПÑ?огÑ?амма длÑ� запиÑ�и CD/DVD
Russian.CDBurnerXPHomepage=ДомашнÑ�Ñ� Ñ�Ñ‚Ñ?аница
Russian.CDBurnerXPLicense=Лицензионное �оглашение
Russian.CDBurnerXPOnlineHelp=Онлайнова� помощь
Russian.CDBurnerXPForum=ФоÑ?ум
Russian.NeedFramework=CDBurnerXP веÑ?Ñ�ии 4.0 (или выше) Ñ‚Ñ?ебует наличиÑ� .NET Framework. ПожалуйÑ�та Ñ�качайте и уÑ�тановите .NET Framework v2.0 или выше и запуÑ�тите уÑ�тановку еще Ñ?аз. Хотите Ñ�качать его Ñ�ейчаÑ�?
Russian.DXNotFound=DirectX 8 не найден. CDBurnerXP может не запуÑ�титьÑ�Ñ� и может не Ñ?аботать ноÑ?мально. Хотите пÑ?одолжить?
Russian.UpgradeYourDX=Пожалуй�та обновите Ваш DirectX по ��ылке http://www.microsoft.com/directx
Russian.LicensePrint=Хотите напечатать лицензионное Ñ�оглашение на пÑ?интеÑ?е по-умолчанию ?
Russian.ProblemPrintingLicense=Ошибка печати лицензионного �оглашени� !
Russian.ProblemPrintingLicenseDet=Ошибка пÑ?и печати лицензионного Ñ�оглашениÑ�:
Russian.PrintButton=&Печать

j8r60 02-10-2010 12:12 1509536

Всем привет! подскажите мне пожалуйста как сделать что бы распаковка SFX-Arc архивы происходили перед распаковкой основных файлов инсталлятора? вот пример кода который мне дали
Код:

Exec(ExpandConstant('{src}\Programs\game.exe'), '-x -y -s2 -d'+AddQuotes(ExpandConstant('{app}')), ExpandConstant('{src}'), SW_SHOW, ewWaitUntilTerminated, ResCode)

R.i.m.s.k.y. 02-10-2010 12:19 1509540

Цитата:

Цитата j8r60
как сделать что бы распаковка SFX-Arc архивы происходили перед распаковкой основных файлов инстоллятора? »

Можно так, архив распакуется при выводе начального экрана, но если инсталлер запускается тихо (с ключем /silent или /verysilent этот способ не сработает)
Код:

procedure CurPageChanged(CurPageID: Integer);
var ResCode:integer;
begin
  If CurPageID=wpWelcome then begin
    Exec(ExpandConstant('{src}\Programs\game.exe'), '-x -y -s2 -d'+AddQuotes(ExpandConstant('{app}')), ExpandConstant('{src}'), SW_SHOW, ewWaitUntilTerminated, ResCode)
end;
end;


j8r60 02-10-2010 12:46 1509551

R.i.m.s.k.y.

Нет не совсем так вот пример на картинке http://rghost.ru/2790442.view блин уже как два месяца не могу это реализовать

R.i.m.s.k.y. 02-10-2010 12:54 1509556

Цитата:

Цитата j8r60
Нет не совсем так вот пример на картинке http://rghost.ru/2790442.view блин уже как два месяца не могу это реализовать »

Не стараемся, батенька. И не пытаемся поискать, на предыдущей 238 странице я расписывал http://forum.oszone.net/post-1506207.html#post1506207
Процедура BeforeInstall выполняется ПЕРЕД копированием, AfterInstall - после копирования. Только учтите что эти Before / After Install выполняются над каждым файлом в папке, так что имеет смысл сначала скопировать один левый файлик и над выполнить требуемое, а потом уже саму папку.



А куда подевались камрады Serega и Habetdin? Без них я не вытяну, ведь я просто продвинутый пользователь Инно...

j8r60 02-10-2010 13:32 1509577

R.i.m.s.k.y.

Я на 238 странице был уже смотрел ваш пример но это не то что мне нужно, у меня другая ситуация. Я упаковал игру в один SFX-ARC архив всю игру целиком, Inno Setup я изпользоваю только для-того чтобы он распаковал этот SFX-ARC архив установил дополнительные программы и поставил ярлык на рабочий стол только в конце установки, понимаете наверное для чего это нужно

R.i.m.s.k.y. 02-10-2010 13:46 1509585

Цитата:

Цитата j8r60
Я упаковал игру в один SFX-ARC »

А смысл? Инно сам хорошо жмет, на максе настройках чуть получше 7зип (тестил на ведьмаке с видео и мп3 от бонусного издания).
И почему тогда распаковку не подсунуть в секцию Run?
Все равно пример годится, просто в секции Files копируем файлик лицензии (или любой другой мелкий текстовичок) в {tmp} (он очищается после установки) и к строке копирования приделываем BeforeInstall.

В CurPageChanged вместо wpWelcome можно подставлять свои требуемые события: wpLicense, wpPassword, wpInfoBefore, wpUserInfo, wpSelectDir, wpSelectComponents, wpSelectProgramGroup, wpSelectTasks, wpReady, wpPreparing, wpInstalling, wpInfoAfter, wpFinished

Можно по аналогии с CurPageChanged использовать системную функцию CurStepChanged и события ssInstall, ssPostInstall, ssDone
Код:

procedure CurStepChanged(CurStep: TSetupStep);
var  ResCode : integer;
begin
if CurStep = ssInstall then
Exec(ExpandConstant('{src}\Programs\game.exe'), '-x -y -s2 -d'+AddQuotes(ExpandConstant('{app}')), ExpandConstant('{src}'), SW_SHOW, ewWaitUntilTerminated, ResCode)
end;

Три способа я привел - через CurPageChanged, CurStepChanged и BeforeInstall, полуспособ стандартный - Run, больше мне способов неведомо.

И еще - добавь пробелы в ' -x -y -s2 -d ' - а то следующая AddQuotes прибавит путь и параметры и сам путь собъются.

j8r60 02-10-2010 14:29 1509615

R.i.m.s.k.y.

Ура!!! :clapping: :yahoo: наконец-то это то что мне нужно было прямо точно как в картине, а говоришь не осилишь недооцениваешь себя огромное спасибо. Теперь этот кусок кода можно ка-кто приклеить procedure ChangeCaption(str: string);
begin
WizardForm.StatusLabel.Caption:= str;
ChangeCaption('Распаковка архива');

R.i.m.s.k.y. 02-10-2010 21:41 1509880

Цитата:

Цитата j8r60
а говоришь не осилишь недооцениваешь себя »

Это грубая лесть ;-). Я на самом деле просто опытный инно-пользователь, собезъянничал пару скриптов из этого форума, из примеров и тд. Если вопросы на форуме совпадают с тем что я знаю - отвечаю. Но я не смогу написать, к примеру, Ultimate test - тяму не хватит.

[старый брюзга mode ON]
И вообще я догадываюсь почему исчезли с форума Serega и Habetdin - ответы на все задаваемые в последнее время вопросы уже есть в шапке темы. В частности, j8r60, ответы на твои вопросы есть в сборнике вопросов в шапке темы. Неужели так трудно потратить 30 минут и прочитать его? Видимо таки лучше сутками ждать ответа. И поиск по форуму рулит. Выводим версию для печати, сохраняем и ищем.
[старый брюзга mode OFF]

Цитата:

Цитата j8r60
огромное спасибо »

Огромное пожалуйста!

THE GUILTY GOD 02-10-2010 21:52 1509896

Народ обьясните поподробнее как с помощью precomp сжать файлы да посильнее, и как потом распокавать

max129 02-10-2010 23:07 1509944

Спасибо за пример,он подходит для маленьких архивов,а в моём случае с архивом в 6г. кидать её в тмп как-то очково да и у друзей может не зафурычить из-за нехватки места на це диске.
Попробую объяснить максимально понятно.

Идеальная структура любого репака без наворотов:
1.подготавливаем файлы как угодно,то есть анализируем и делаем всё по своему для макс.сжатия и мин.времени распаковки.
2.делаем(компилируем) установщик со всеми игровыми папками,архивами и т.д. как обычно,т.е. без внешних архивов,папок и т.д.-это нужно что бы инно разбил всё на свои архивы (без зжатия,т.к.всё уже что можно сжато) и не юзать тмп.
Этот момент мне всё ясно и понятно и уже сделано.

2.после отработки сетупа все файлы будут в одной папке ,дальше все телодвижения будут происходить внутри неё:
а)мне надо сначала распаковать архив
б) и дальше в распакованый архив переместить папку(которая не пакуется,надеюсь ясно почему так и зачем).

как я понял всё это надо делать через секцию коде,вообщем нужен кусок скрипта в секции код который-бы раскручивал связку фриарк-прекомп-7z в обратную сторону,и после этого переместить туда папку.
Мне например неясно в какой последовательности всё это будет выполняться после компилирования и какие условия последовательноти обработки и как их изменить.

вот такой бы дельный примерчик с коментариями не помешал,а без этого всё стопорнулось намертво,да и у других бы сразу дело пошло.

moov1kk 03-10-2010 09:40 1510086

всем привет, я создал вот такой инсталлер:


но при наложении текстур на кнопки у меня получается вот такое:


кто знает подскажите как изменить положение текстур кнопок

Henry_Townsend 03-10-2010 20:45 1510516

Товарищи,оформлял инсталятор,и столкнулся с такими 3мя косяками:

1


Никак не могу сделать задний фон надписей прозрачным(в Form Editor такого цвета нет и есть подозрение,что это нереально)


2 Сместил кнопки и текстурировал их...Всё бы хорошо,но надписи "Установить" и "Завершить" спозли вправо

если выставляю меньший отступ текста,то "Отмена" и "Далее" становятся очень близки к краю кнопки...


3 Сделал маленькое окно с прогресбаром в правом нижнем углу,но для отображения кнопки "Отмена",её нужно вынести на передний план,а в этом случае текстура кнопки не отображается во всех окнах.


Буду признателен за помощь по любому из этих вопров.

koler 04-10-2010 15:32 1511139

помогите люди как в программе InnoIDE разделять на части разделение ничегоне понятно помогите
ну к примеру хочу разделить на 3 части

kotkovets 04-10-2010 18:14 1511265

Цитата:

Цитата koler
помогите люди как в программе InnoIDE разделять на части разделение ничегоне понятно помогите
ну к примеру хочу разделить на 3 части »

Берем Руссификатор InnoIDE от vadimsva копируем в папку программы.
Дальше:
Проект > настройки установщика >разделение размера
Ставим галочку "разделение размера" активируются следующие элементы:
  • Размер кластера
  • Резерв байтов
  • Размер части - задаем размер одной части в байтах (100мб~104857600)
  • Кол-во частей - к примеру ставим 3, установщик будет с 3 частями (файлами *.bin)
Или пользуемся шаблонами.
Должно получится как то так:
Код:

[Setup]
DiskSpanning=true
DiskSliceSize=104857600
SlicesPerDisk=3


Henry_Townsend 04-10-2010 22:14 1511467

1я проблема отпала, огромное спасибо чуваку,что делал установку хитмана!

А вот 2я и 3я... особенно 3я...

komsomolets 06-10-2010 00:29 1512396

Вложений: 1
Народ, есть скрипт для распаковки FreeArc архива, а есть такой же, чтобы он создавал иконку на рабочем столе, а не только в меню пуск, и как сделать, чтобы он добавлял информацию с reg файла приложения, и куда все это добро кидать (reg-файл и файл иконку)

R.i.m.s.k.y. 06-10-2010 08:29 1512501

Интересно, здесь хоть кто-нибудь читает справку/FAQ в шапке темы перед тем как задавать вопросы?

Цитата:

Цитата komsomolets
создавал иконку на рабочем столе »

Name: {commondesktop}\Total Commander XP; Filename: {app}\TOTALCMD.exe; WorkingDir: {app}\; IconFilename: {app}\icon.ico;

Цитата:

Цитата komsomolets
добавлял информацию с reg файла приложения »

Filename: reg.exe; Parameters: " import ""{tmp}\0.reg"""; StatusMsg: Импорт файла реестра; Flags: runhidden waituntilterminated

Цитата:

Цитата komsomolets
куда все это добро кидать (reg-файл и файл иконку) »

[Files]
Source: icon.ico; DestDir: {app};
Source: 0.reg; DestDir: {tmp};

komsomolets 06-10-2010 23:09 1513142

Вставил строку кода в скрипт для установки DirecrX, а он устанавливается в начале установки приложения. Что я сделал неправильно: не в том месте вставил код или еще что то?

Цитата:

[Run] Filename: "{src}\Redist\directx\DXSETUP.exe"; WorkingDir: "{src}\Redist"; Flags: waituntilterminated;
И куда вставлять код с рег-файлом, не пойму.
Для иконки я понял, что под [Icons]

Sotonisto 07-10-2010 03:37 1513246

komsomolets, не проще было б, если бы изменения в реестре вносил сам инсталл (через [Registry])?
А по поводу DirecrX - точно такой вопрос уже звучал ранее. Полистай эту тему (лично я FreeArc не часто использую, так что больше
ничего посоветовать не могу) :) Да и псолушай совет, который дал R.i.m.s.k.y. - скачай для начала руководство и примеры скриптов,
а потом уже задавай вопросы :)

Henry_Townsend, если у тебя все еще проблемы с скриптом - кинь мне его в личку :) Посмотрим что там :)

R.i.m.s.k.y. 07-10-2010 08:31 1513310

Цитата:

Цитата komsomolets
И куда вставлять код с рег-файлом, не пойму »

Потому что не стараешься! ;-) В секцию Run
Цитата:

Цитата komsomolets
Вставил строку кода в скрипт для установки DirecrX, а он устанавливается в начале установки приложения »

Секция Run запускается в конце установки, когда зеленая колбаса доползает до конца. Ты все ставишь в секции Run? Тогда расставляй правильно порядок строк, инсталлер идет по ним сверху вниз. Я кстати и давал пример скрипта на DirectX в этой теме, юзай поиск.

Если почитать справку то там можно найти такую бесполезную информацию как порядок выполнения скрипта: сначала копируются файлы, потом реестр, потом иконки создаются, потом секция Run. Деинсталляция в обратном порядке.
Это на табуреточном уровне. Еще вклиниваются CurPageChanged и CurStepChanged и секции InstallDelete и UninstallDelete, служебные InitializeWizard/InitializeSetup. В секции Files можно заюзать BeforeInstall/AfterInstall. В общем ключевые слова для поиска я написал, можно поилстать темку на 8-10 страниц назад - кое что из этого было.

Henry_Townsend 07-10-2010 08:38 1513312

Товарищи,ответьте,пожалуйста,на простой(или не очень,раз задаю его второй раз) вопрос:можно ли вообще текстурировать кнопку если она вынесена на передний план?А если можно,то как?

R.i.m.s.k.y. 07-10-2010 09:05 1513322

Цитата:

Цитата Henry_Townsend
Товарищи,ответьте,пожалуйста,на простой(или не очень,раз задаю его второй раз) вопрос:можно ли вообще текстурировать кнопку если она вынесена на передний план?А если можно,то как? »

Можно. А можно для общего развития скачать и полистать коллекцию скриптов. Подсказка - Button, папка там такая есть. Твой случай.
И вообще зачем камрад Serega создавал эту тему и собирал в одну кучку ништячки в шапке темы?

Больше всего удивляет детская наивность анонимусов - ща как задам вопрос и не потратив ни одной калории получу ответ на свои вопросы. Можете еще в форточку покричать "Халява ловись". Между человеком, который ищет ответы на вопросы, но не врубается в данном пространственно-временном континууме по разным причинам, и человеком, ищущим халяву, разницу видно сразу уже по характеру написания постов. Первым стараются помочь не только в этом форуме, вторым не помогут даже здесь.
Мораль - юзайте FAQ, поиск и оба-два полушария мозга. Всегда и везде. Ведь вам еще жить да жить!

R.i.m.s.k.y. 07-10-2010 09:48 1513348

Цитата:

Цитата Sotonisto
если у тебя все еще проблемы с скриптом - кинь мне его в личку »

А результаты сюда можно? Вдруг пригодится.

Sotonisto 07-10-2010 12:16 1513441

Цитата:

Цитата R.i.m.s.k.y.
А результаты сюда можно? Вдруг пригодится. »

Ну эт если он мне его кинет :)

P.S.: Я не уверен, но вроде бы за основу он использует скрипт Черного инсталла? :)

R.i.m.s.k.y. 07-10-2010 12:18 1513445

Цитата:

Цитата Sotonisto
Я не уверен, но вроде бы за основу он использует скрипт Черного инсталла »

Легенда о "ч0рном инсталле" ;) Я по оформлениям не очень...

komsomolets 07-10-2010 18:20 1513743

Спасибо что помогаете, ну а насчет FAQ, то там не все работает, а то что есть, не отвечает на мои вопросы. Прийдется листать форум и юзать поиск. Спасибо еще раз. Секцию [Run] последней ставить?

-S.S.V.- 08-10-2010 01:12 1513995

Здравствуйте, подскажите пожалуйста возможно ли как встроить архив FreeArc в инсталятор, чтобы было одним файлом.
Заранее благодарю.

shao 08-10-2010 03:06 1514029

Использую в скрипте код для изменения названия файла деинсталляции:
unins000.exe на uninstall.exe
unins000.dat на uninstall.dat

Вот сам код :
Код:

[_Code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
RenameFile(ExpandConstant('{app}\unins000.exe'), ExpandConstant('{app}\uninstall.exe'))
RenameFile(ExpandConstant('{app}\unins000.dat'), ExpandConstant('{app}\uninstall.dat'))
RegWriteStringValue(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\Моя Прога_is1','UninstallString', ExpandConstant('{app}\uninstall.exe'))
RegWriteStringValue(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\Моя Прога_is1','QuietUninstallString', ExpandConstant('{app}\uninstall.exe /SILENT'))
end;

В результате при компиляции вот такая вот штука получается :






В чем дело, подскажите пожалуйста ?

R.i.m.s.k.y. 08-10-2010 08:41 1514087

Цитата:

Цитата komsomolets
Секцию [Run] последней ставить »

Секцию Run без разницы где в скрипте ставить - инно сам порядок расставляет. А вот порядок строчек внутри Run уже имеет значение, в секции Run инно идет сверху вниз.

Цитата:

Цитата shao
В чем дело, подскажите пожалуйста »

Инно ясно говорит - "Хачу точку_с_запятой". Код Инно - это Паскаль. А в Паскале каждая строчка должна заканчиваться ";" (без кавык). Если стоит препроцессор из шапки темы - то по барабану, но по скринам видно - не установлен. И не понял юмора - зачем один скрин выкладывать два раза?

Код:

[_Code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
RenameFile(ExpandConstant('{app}\unins000.exe'), ExpandConstant('{app}\uninstall.exe'));
RenameFile(ExpandConstant('{app}\unins000.dat'), ExpandConstant('{app}\uninstall.dat'));
RegWriteStringValue(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\Моя Прога_is1','UninstallString', ExpandConstant('{app}\uninstall.exe'));
RegWriteStringValue(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\Моя Прога_is1','QuietUninstallString', ExpandConstant('{app}\uninstall.exe /SILENT'));
end;


Krinkels 08-10-2010 13:45 1514277

Друзья, накатал сборник скриптов с часто спрашиваемыми вопросами. Вот ссылка для скачивания.

R.i.m.s.k.y. 08-10-2010 14:13 1514302

Цитата:

Цитата Krinkels
Друзья, накатал сборник скриптов с часто спрашиваемыми вопросами. Вот ссылка для скачивания »

Мне кажется или там половина из сборника скриптов?
Без комментариев очень тяжело разобраться - расставьте комментарии, пожалуйста.
И моя личная ИМХА - в связи в возросшим кол-вом "базовых" вопросов стоит расписать как работает инно и скрипты - порядок запуска, значения секций и параметров, общие правила синтаксиса инно.

Что за символы & a p o s в chm?
с разделе "Ассоциация файлов" ошибка в строчке Root: HKLM; Subkey: SOFTWARE\Classes\MP64; ValueType: string; ValueData: My Program; Name: uninsdeletekey
uninsdeletekey - это флаг

В общем причешите файлик.

Задумка хорошая, после пары релизов, если не будете относится спустя рукава, получится хороший хелп. Спасибо за начинание!

Krinkels 08-10-2010 16:29 1514410

R.i.m.s.k.y.
Цитата:

Цитата R.i.m.s.k.y.
Без комментариев очень тяжело разобраться - расставьте комментарии, пожалуйста. »

Ну это проект одного человека, и я не могу просто все успеть. Да и честно говоря Inno и паскаль порядочно подзабыл.
Цитата:

Цитата R.i.m.s.k.y.
И моя личная ИМХА - в связи в возросшим кол-вом "базовых" вопросов стоит расписать как работает инно и скрипты - порядок запуска, значения секций и параметров, общие правила синтаксиса инно. »

Это все можно узнать из стандартной справки.
Цитата:

Цитата R.i.m.s.k.y.
Что за символы & a p o s в chm? »

Апостроф будь он не ладен, исправлю.
Цитата:

Цитата R.i.m.s.k.y.
с разделе "Ассоциация файлов" ошибка в строчке Root: HKLM; Subkey: SOFTWARE\Classes\MP64; ValueType: string; ValueData: My Program; Name: uninsdeletekey
uninsdeletekey - это флаг »

Скрипты писал не я а собирал с разных ответов, по этому они поставляются "как есть".
Цитата:

Цитата R.i.m.s.k.y.
Задумка хорошая, после пары релизов, если не будете относится спустя рукава, получится хороший хелп. Спасибо за начинание! »

Благодарю за критику. :)

shao 08-10-2010 16:43 1514420

Цитата:

Цитата Krinkels
Благодарю за критику »

Это очень хорошо , что есть такая критика и , что Вы её правильно воспринимаете !

Я полностью согласен с R.i.m.s.k.y., в том , что нужно доработать (если уж Вы занялись таким делом :) )

Krinkels 08-10-2010 17:16 1514449

shao
Я и не собираюсь бросать, и естественно буду дорабатывать

shao 08-10-2010 17:18 1514451

Цитата:

Цитата R.i.m.s.k.y.
Код Инно - это Паскаль. А в Паскале каждая строчка должна заканчиваться ";" (без кавык). »

А почему Инно не ругается на первую строчку ?

Цитата:

Цитата R.i.m.s.k.y.
Код Инно - это Паскаль. А в Паскале каждая строчка должна заканчиваться ";" (без кавык). »

Очень хотелось бы , но Паскаль я не знаю.
Но , благодаря вам , теперь по крупицам собираю информацию и буду осваивать...

Цитата:

Цитата R.i.m.s.k.y.
Если стоит препроцессор из шапки темы - то по барабану, но по скринам видно - не установлен »

Можно , несколько подробнее о препроцессоре.

Цитата:

Цитата R.i.m.s.k.y.
И не понял юмора - зачем один скрин выкладывать два раза? »

А хостинг "Радикал" недавно глючил. У кого-то скрины отображались, а у кого и нет. Вот и "подстраховался".

Krinkels 08-10-2010 17:23 1514455

Друзья, обновил сборник убрав из скриптов & a p o s ;

shao
Цитата:

Цитата shao
несколько подробнее о препроцессоре. »

Ну про препроцессор можно здесь прочитать

j8r60 08-10-2010 17:50 1514476

del

shao 08-10-2010 21:56 1514638

Ребята , ещё возник вопрос :
После установки программы , созданной Инно, автоматически открывается окно справки, хотя её запуск не описан в скрипте.
Поскольку я только осваиваю этот инсталлятор, то многого не знаю. Возможно так и должно быть.
Просветите пожалуйста меня.
Вот скрипт:

читать дальше »
Код:

[Setup]
AppName=Xentient Thumbnails
AppVerName=Xentient Thumbnails v1.0.2
DefaultDirName={pf}\Xentient\Thumbnails
DefaultGroupName=Xentient
OutputBaseFilename=thumbs
Compression=lzma
LicenseFile=embedded\License.txt
WizardImageFile=embedded\WizardImage.bmp
WizardSmallImageFile=embedded\WizardSmallImage.bmp

[Files]
Source: "{app}\Thumbnails.chm"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\license.txt"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete ignoreversion
Source: "{app}\thumbs.dll"; DestDir: "{app}"; Flags: restartreplace regserver uninsrestartdelete ignoreversion

[Icons]
Name: "{group}\Xentient Thumbnails Help"; Filename: "{app}\Thumbnails.chm"; IconFilename: "{app}\thumbs.dll";

[CustomMessages]
default.NameAndVersion=%1 version %2
default.AdditionalIcons=Additional icons:
default.CreateDesktopIcon=Create a &desktop icon
default.CreateQuickLaunchIcon=Create a &Quick Launch icon
default.ProgramOnTheWeb=%1 on the Web
default.UninstallProgram=Uninstall %1
default.LaunchProgram=Launch %1
default.AssocFileExtension=&Associate %1 with the %2 file extension
default.AssocingFileExtension=Associating %1 with the %2 file extension...

[_Code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
RenameFile(ExpandConstant('{app}\unins000.exe'); ExpandConstant('{app}\uninstall.exe'));
RenameFile(ExpandConstant('{app}\unins000.dat'); ExpandConstant('{app}\uninstall.dat'));
RegWriteStringValue(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\Xentient Thumbnails_is1';'UninstallString', ExpandConstant('{app}\uninstall.exe'));
RegWriteStringValue(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\Xentient Thumbnails_is1';'QuietUninstallString', ExpandConstant('{app}\uninstall.exe /SILENT'));
end;

[Languages]
Name: "default"; MessagesFile: "embedded\default.isl";


tor62 09-10-2010 12:45 1514939

Привет Всем!
Пытаюсь освоить прогу,и создать первый свой инсталятор для мода на СТАЛКЕР ТЧ
Имеется собранная папка gamedata-размер 6,26 ГБ,создаю сборку,запускаю компилятор и получаю ошибку

Прошу объясните мне пожалуйста,что я не так делаю?
Спасибо за понимание.

Vitek 07 09-10-2010 13:01 1514946

Цитата:

Цитата tor62
Имеется собранная папка gamedata »

Ну так вы в source указали именно на файл, а не папку. Папка указывается так
Код:

Source: {app}\*
Из кода немного видно что все прописано, уберите ту выделенную строку. Да и вообще покажите код интсталлятора, телепатов тут нет

tor62 09-10-2010 13:39 1514968

Vitek 07,
Вот что я "наваял"
читать дальше »
[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{BF4E0944-D2DE-447D-94E7-E4474EB86B74}
AppName=Народная Солянка
AppVersion=3.09
;AppVerName=Народная Солянка 3.09
AppPublisher=Arhara&Co, Inc.
AppPublisherURL=http://www.amk-team.ru/
AppSupportURL=http://www.amk-team.ru/
AppUpdatesURL=http://www.amk-team.ru/
DefaultDirName={pf}\Народная Солянка
DefaultGroupName=Народная Солянка
AllowNoIcons=yes
OutputDir=D:\Инсталятор НС 2010\Солянка
OutputBaseFilename=Солянка setup
SetupIconFile=F:\SOLYANKA\stalker.ico
DiskSpanning=yes
SlicesPerDisk=1
DiskSliceSize=2100000000
DiskClusterSize=4096
ReserveBytes=0
Compression=lzma/ultra
Compression=lzma
SolidCompression=yes

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

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

[Files]
Source: "E:\STALKER SOC\Солянка\Инсталятор Солянки\gamedata"; DestDir: "{app}\*"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{group}\Народная Солянка"; Filename: "{app}\gamedata"
Name: "{commondesktop}\Народная Солянка"; Filename: "{app}\gamedata"; Tasks: desktopicon

Habetdin 09-10-2010 14:58 1515020

tor62,
Цитата:

Цитата tor62
Source: "E:\STALKER SOC\Солянка\Инсталятор Солянки\gamedata"; DestDir: "{app}\*"; Flags: ignoreversion »

Код:

Source: E:\STALKER SOC\Солянка\Инсталятор Солянки\gamedata\*; DestDir: {app}; Flags: recursesubdirs ignoreversion sortfilesbyextension createallsubdirs

tor62 09-10-2010 15:35 1515037

Habetdin,
Спасибо большое ,вроде запустился.
А ещё вопрос:какой максимальный размер файла setup можно создать без файлов bin?

Krinkels 09-10-2010 22:02 1515253

tor62
Цитата:

Цитата tor62
какой максимальный размер файла setup можно создать без файлов bin »

2 гига

shao 09-10-2010 22:53 1515284

Перефразирую свой вопрос из поста №2426

Как в Инно подавить запуск файла после установки программы?
В скрипте запуск этого файла не прописан.
В моём случае это запуск файла справки.

kotkovets 09-10-2010 23:11 1515294

[shao
Может у вас используется тип предыдущей установки и использование предыдущих задач? а записи в реестре хранятся..
Скрипт скомпилил, ниче не запускается, скорее вы запустили и распаковали оригинальный установщик, а в оригинале справка запускалась, вот и наверно и осталась запись о предыдущей установке.
Попробуйте добавить в скрипт эти строчки:
Код:

UsePreviousSetupType=false
UsePreviousTasks=false


Sotonisto 10-10-2010 00:29 1515337

Ветераны инно, помогите!
1. Можно ли удалить кнопки свернуть/на весь экран/удалить из шапки инсталла? (что б дизайн был похож на инсталл DirectX)

2. Есть flv клип-заставка (продолжительность ~20 сек). Можно ли "заставить" инно перед установкой проиграть ее? (например положить видео рядом с инсталлом, и что б оно запускалось)
Надеюсь вопросы не из мира фантастики :)

shao 10-10-2010 02:29 1515390

Цитата:

Цитата kotkovets
Попробуйте добавить в скрипт »

kotkovets, Спасибо , попробую.

Цитата:

Цитата kotkovets
скорее вы запустили и распаковали оригинальный установщик »

Я перепаковывал.
Что в перепакованном , что с оригинальном - одна и та же ситуация..

kotkovets 10-10-2010 03:37 1515400

Цитата:

Цитата shao
одна и та же ситуация »

Ситуация исправилась?..попробуйте не регистрировать thumbs.dll (убрать флаг regserver)- может в этом причина?

Sotonisto 10-10-2010 05:54 1515414

Цитата:

Цитата shao
После установки программы , созданной Инно, автоматически открывается окно справки, хотя её запуск не описан в скрипте. »

Я вот посмотрел скрипт... А что ты сам хотел от инсталла? В смысле что б он просто установил эти файлы в папку? или другое?
Если просто проверял что может инно - кинь все файлы в одну папку c файлом скрипта и попробуй так:

читать дальше »
Код:

#define MyAppName "Xentient Thumbnails"
#define MyAppVerName "Xentient Thumbnails 1.0.2"
#define MyAppPublisher "Xentient, Inc."
#define MyAppExeName "Thumbnails.chm"

[Setup]
AppId={{B11E7F02-F7C6-4810-B84C-DBE6B907C712}
AppName={#MyAppName}
AppVerName={#MyAppVerName}
AppPublisher={#MyAppPublisher}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
OutputBaseFilename=setup
OutputDir=example
LicenseFile=License.txt
WizardImageFile=WizardImage.bmp
WizardSmallImageFile=WizardSmallImage.bmp
SetupIconFile=example.ico
DisableReadyPage=True
Compression=lzma
SolidCompression=yes

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

[Files]
Source: Thumbnails.chm; DestDir: {app}; Flags: ignoreversion
Source: License.txt; DestDir: {app}; Flags: ignoreversion
Source: Thumbs.dll; DestDir: {app}; Flags: ignoreversion

[Icons]
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}

[Code_]
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
RenameFile(ExpandConstant('{app}\unins000.exe'); ExpandConstant('{app}\uninstall.exe'));
RenameFile(ExpandConstant('{app}\unins000.dat'); ExpandConstant('{app}\uninstall.dat'));
RegWriteStringValue(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\Xentient Thumbnails_is1';'UninstallString', ExpandConstant('{app}\uninstall.exe'));
RegWriteStringValue(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\Xentient Thumbnails_is1';'QuietUninstallString', ExpandConstant('{app}\uninstall.exe /SILENT'));
end;


Или я снова все не так понял? :)

shao 10-10-2010 11:38 1515514

Цитата:

Цитата kotkovets
Попробуйте добавить в скрипт эти строчки »

Не помогло. Ситуация та же. Файл справки запускается после установки программы.

Цитата:

Цитата kotkovets
попробуйте не регистрировать thumbs.dll (убрать флаг regserver)- может в этом причина? »

Попробовал - помогло.
Но , тогда теряется целевое назначение программы/файла.
После установки программы и перезагрузки компьютера все-равно нужно регистрировать вручную thumbs.dll. Вот тут то и вылазит файл справки. Значит дело не в Инно...
(Значит вопрос выходит за рамки данной темы... )
Значит после установки нужно подавить запуск справки. И это надо указать в скрипте. Я так думаю...
А Вы ?

ivsatel 10-10-2010 11:41 1515521

Подскажите, есть ли возможность задать маску для всей директории. Я делаю вот так:
Код:

Source: "{app}\*"; DestDir: "{pf}\Mozilla Firefox"; Flags: replacesameversion
Source: "{userappdata}\Mozilla\*"; DestDir: "{userappdata}\Mozilla\Firefox"; Flags: replacesameversion

Не получается.

Есть подозрение что первая строчка прошла лиш с файлами без директорий.
И к примеру, можно ли все таки как-то выразиться маской для такого пути:
Код:

{userappdata}\Mozilla\Firefox\Profiles\5ogizszn.default\extensions\{de1b245c-de57-11da-ba2d-0050c2490048}\components\
Что бы со всеми директориями и файлами из Source: в DestDir:

Vitek 07 10-10-2010 11:54 1515526

ivsatel,
вот так получится
Код:

Source: "{app}\*"; DestDir: "{pf}\Mozilla Firefox"; Flags: replacesameversion createallsubdirs recursesubdirs
Source: "{userappdata}\Mozilla\*"; DestDir: "{userappdata}\Mozilla\Firefox"; Flags: replacesameversion createallsubdirs recursesubdirs

Флаг createallsubdirs - создавать все подкаталоги, recursesubdirs - обрабатывать все подкаталоги

kotkovets 10-10-2010 11:55 1515527

Цитата:

Цитата shao
Значит после установки нужно подавить запуск справки. И это надо указать в скрипте. Я так думаю...
А Вы ? »

Ну если файл Thumbnails.chm запускается, то пишем:
Код:

[Run]
Filename: {sys}\Taskkill.exe; Parameters: /F /IM hh.exe; Flags: waituntilidle runhidden


tor62 10-10-2010 20:28 1515841

Ветераны Инно!Нужна Ваша помощь.У меня есть несколько файлов gamedata.db* скажем это оригинал игры.Но помимо этого к игре есть адаптация для широкоформатных мониторов ,эти файлы я тоже запаковал.Теперь вопрос:как мне скомпилировать инсталятор,с возможностью выбора установки под нужный моник?Извиняюсь если объяснил непонятно.
это для основных файлов
Код:

[Files]
Source: E:\Инсталятор запакованной Солянки 2010\S.T.A.L.K.E.R\*; DestDir: {app}; Flags: recursesubdirs ignoreversion sortfilesbyextension createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files


Habetdin 10-10-2010 23:27 1515960

tor62, можно сделать так:
Код:

[Files]
...
Source: widescreen\*; DestDir: {app}; Flags: recursesubdirs ignoreversion sortfilesbyextension createallsubdirs; Components: ws

[Components]
Name: ws; Description: У меня широкоформатный экран; Flags: disablenouninstallwarning dontinheritcheck


ivsatel 10-10-2010 23:36 1515967

Еще вопрос. Как добиться максимальной степени сжатия. Я делаю так:

Код:

[Setup]
MergeDuplicateFiles=yes
SolidCompression=yes
Compression=lzma/ultra

Но на деле сжатие отличается. Я к примеру взял от туда файл пакованный на "ИННО". И для сравнения создал проект, абсолютно одинаковый во содержимому и по размеру с тем который я скачал, и когда я компилирую свой то он все равно получается больше чем тот который я скачал.
И еще один вопрос, можно ли создать без фреймовый инсталлятор?

kotkovets 10-10-2010 23:48 1515971

Цитата:

Цитата ivsatel
Как добиться максимальной степени сжатия »

Код:

[Setup]
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=true
MergeDuplicateFiles=true


ivsatel 11-10-2010 00:18 1515980

kotkovets, А вот это разумный подход:?
Код:

[Setup]
Compression=lzma2/ultra
LZMAMatchFinder=BT
LZMAUseSeparateProcess=true
LZMANumFastBytes=273
LZMADictionarySize=131072
InternalCompressLevel=ultra
SolidCompression=true
MergeDuplicateFiles=true

В смысле на всех машинах будет работаь?

kotkovets 11-10-2010 01:26 1516011

Цитата:

Цитата ivsatel
В смысле на всех машинах будет работаь? »

Чем больше, сжатие, тем дольше будет распаковываться и больше ресурсов будет тратится, что не очень хорошо для слабых, ну довольно слабых машин...

R.i.m.s.k.y. 11-10-2010 08:24 1516082

Цитата:

Цитата Krinkels
Это все можно узнать из стандартной справки »

Вот ее то и не читают, я тоже этот талмуд не читаю, я юзаю поиск
Цитата:

Цитата Krinkels
Скрипты писал не я а собирал с разных ответов, по этому они поставляются "как есть" »

ага, мопед не мой... Разместили Вы, а ошибки не Ваши, хотя бы ссылку на первоисточник дали

R.i.m.s.k.y. 11-10-2010 08:41 1516086

Цитата:

Цитата Sotonisto
Ветераны инно, помогите!
1. Можно ли удалить кнопки свернуть/на весь экран/удалить из шапки инсталла? (что б дизайн был похож на инсталл DirectX) »

может так? http://forum.oszone.net/post-1426180-1867.html
по второму вопросу не знаю.

shao 12-10-2010 09:40 1516924

Подскажите пожалуйста , как реализовать такую задачу ?
Созданный инсталлятор программы состоит только из DLL файлов , которые устанавливаются в системную папку и , соответственно регистрируются.
Как при деинсталляции указать возможность выбора файлов для удаления.
Например:
Установлены в системную папку файлы: 1.dll, 2.dll, 3.dll, 4.dll, 5.dll
При деинсталляции необходимо указать возможность выбора каждого.

R.i.m.s.k.y. 12-10-2010 10:01 1516941

Цитата:

Цитата shao
При деинсталляции необходимо указать возможность выбора каждого. »

А если просто сообщения - вы хотите удалить 1.dll?
Тогда в Function InitializeUninstall делаем проверку If FileExists then MsgBox..., в секции Files для этих файлов флаг uninsneveruninstall.

Вот что наковырял
Код:

var
UnChoice: array[0..4] of TRadioButton
UnInstallPage: TWizardPage;

UnInstallPage:= CreateCustomPage(wpUserInfo,ExpandConstant('{cm:UninstallLabel}'),ExpandConstant('{cm:UninstallDescription}'));
        for n:= 0 to 4 do begin
UnChoice[n]:= TRadioButton.Create(UnInstallPage)
        UnChoice[n].Parent:= UnInstallPage.Surface;
        UnChoice[n].Caption:= ExpandConstant(' {cm:UnChoice'+ IntToStr(n) +'} ');
        UnChoice[n].SetBounds(WizardForm.PreparingLabel.Left + 16, WizardForm.PreparingLabel.Top + 25 + 25*(n+1), WizardForm.PreparingLabel.Width, UnChoice[n].Height); end;

if CurPageID = UnInstallPage.ID then begin

В шапке коллекция скриптов - InnoSetup_Upgrade. Я щаз два часа ковырял - тяму не хватило заставить работать.

necromanster 12-10-2010 11:48 1517011

Здравствуйте господа. У меня проблема. После создания репака, и установки с него игры, я ее не могу удалить не с "установка и удаление программ", не с меню "Пуск".

Только физическое удаление папки игры. Скрипт создавался Inno Setup GameScript Generator 1.1.0.62 для Inno Setup Compiler 5-2-2.

Если создаю скрипт самим Inno Setup Compiler и правлю его istool, то все работает.

Пишет при попытке удаления что : Файл протокола для инстализации не распознан данной верией программы - деинстализатора.

Прошу помочь, и подсказать где проблема.

Вот скрипт:

Код:


;      Скрипт создан с помощью
; IS GameScript Generator by South
;  специально для www.csmania.ru

[Setup]
SourceDir=.
OutputDir=D:\
AppName=Две сорваные башни.
AppVerName=Две сорваные башни.
AppVersion=Две сорваные башни.
AppPublisher=Necromant SOFT
AppCopyright=Necromant SOFT
AppPublisherURL=www.norcom.ru
AppSupportURL=www.norcom.ru
AppUpdatesURL=www.norcom.ru
DefaultDirName={pf}\Две сорваные башни.
DefaultGroupName=Две сорваные башни.
AllowNoIcons=yes
OutputBaseFilename=setup
WizardImageFile=C:\Program Files (x86)\Smart Install Maker\Bitmaps\Import\Bmp002.bmp
WizardSmallImageFile=C:\Program Files (x86)\Smart Install Maker\Bitmaps\Import\Bmp013.bmp
WindowVisible=no
WindowShowCaption=no
WindowResizable=no
Compression=lzma/ultra
SolidCompression=yes
DiskSpanning=yes
DiskSliceSize=314572800
SlicesPerDisk=1

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

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

[Files]
Source: "C:\Fraps\Screenshots\towers 2010-10-11 04-00-08-61.bmp"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: "C:\Fraps\Screenshots\kmplayer 2010-10-11 21-18-45-61.bmp"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: "C:\Fraps\Screenshots\kmplayer 2010-10-11 21-24-14-22.bmp"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: "C:\Fraps\Screenshots\kmplayer 2010-10-11 21-25-34-98.bmp"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: "C:\Fraps\Screenshots\towers 2010-10-11 03-59-56-43.bmp"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: "G:\образы игр\2Bashni\2bashni\dve_sorvannye_bashni-1243956405.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: "G:\образы игр\2Bashni\2bashni\dve_sorvannye_bashni-1243956406.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: "G:\образы игр\2Bashni\2bashni\dve_sorvannye_bashni-1243956407.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: "G:\образы игр\2Bashni\2bashni\dve_sorvannye_bashni-1243956409.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: "G:\образы игр\2Bashni\2bashni\091095d.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: "isgsg.dll"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: C:\Users\necromantster\Desktop\ппкрпрку.reg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression

Source: "D:\Games\Две сорванные башни\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension

[Icons]
Name: "{group}\2bachni"; Filename: "{app}\towers.exe"; WorkingDir: "{app}"; Parameters: autorun;
Name: "{userdesktop}\2bachni"; Filename: "{app}\towers.exe"; WorkingDir: "{app}"; Tasks: desktopicon; Parameters: autorun;
Name: "{group}\launcher"; Filename: "{app}\launcher.exe"; WorkingDir: "{app}"; Parameters: launcher;
Name: "{userdesktop}\launcher"; Filename: "{app}\launcher.exe"; WorkingDir: "{app}"; Tasks: desktopicon; Parameters: launcher;
Name: "{group}\{cm:UninstallProgram,Две сорваные башни.}"; Filename: "{uninstallexe}"

[Run]
Description: "{cm:LaunchProgram, 2bachni}"; Filename: "{app}\towers.exe"; WorkingDir: "{app}"; Parameters: autorun; Flags: nowait postinstall skipifsilent unchecked
Description: "{cm:LaunchProgram, launcher}"; Filename: "{app}\launcher.exe"; WorkingDir: "{app}"; Parameters: launcher; Flags: nowait postinstall skipifsilent unchecked
Filename: {win}\regedit.exe; Parameters: /s {tmp}\ппкрпрку.reg; StatusMsg: "Вносим изменения в реестр ..."; Flags: waituntilterminated runasoriginaluser

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

[_code]
const
  Indent=25;
  dURL=2;

var
  URLLabel,URLLabelShadow:TLabel;

function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall delayload';
function ssInitialize(hParent:HWND;ssTimeShow:integer;FadeOut:boolean;StretchMode:integer;BkgColor:DWORD):boolean; external 'ssInitialize@files:isgsg.dll stdcall delayload';
procedure ssDeInitialize; external 'ssDeInitialize@files:isgsg.dll stdcall delayload';
procedure ssSetBkgImage(FileName:PChar); external 'ssSetBkgImage@files:isgsg.dll stdcall delayload';
procedure ssAddImage(FileName:PChar); external 'ssAddImage@files:isgsg.dll stdcall delayload';
procedure ssStartShow; external 'ssStartShow@files:isgsg.dll stdcall delayload';
procedure ssStopShow; external 'ssStopShow@files:isgsg.dll stdcall delayload';
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';
function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';

procedure URLLabelClick(Sender: TObject);
var
  ErrorCode:integer;
begin
  ShellExec('open','www.norcom.ru','','',SW_SHOWNORMAL,ewNoWait,ErrorCode);
end;

procedure URLLabelMouseDown(Sender:TObject;Button:TMouseButton;Shift:TShiftState;X,Y:Integer);
begin
  URLLabel.Top:=URLLabel.Top+dURL;
  URLLabel.Left:=URLLabel.Left+dURL;
  URLLabel.Font.Style:=URLLabel.Font.Style+[fsUnderline];
  URLLabel.Font.Color:=clBlue;
  URLLabelShadow.Visible:=False;
end;

procedure URLLabelMouseUp(Sender:TObject;Button:TMouseButton;Shift:TShiftState;X,Y:Integer);
begin
  URLLabel.Top:=URLLabel.Top-dURL;
  URLLabel.Left:=URLLabel.Left-dURL;
  URLLabel.Font.Style:=URLLabel.Font.Style-[fsUnderline];
  URLLabel.Font.Color:=clMaroon;
  URLLabelShadow.Visible:=True;
end;

procedure RunListClickCheck(Sender: TObject);
var
  i:integer;
begin
  if WizardForm.RunList.Checked[WizardForm.RunList.ItemIndex] then begin
    for i:=0 to WizardForm.RunList.Items.Count-1 do
      WizardForm.RunList.Checked[i]:=False;
    WizardForm.RunList.Checked[WizardForm.RunList.ItemIndex]:=True;
  end;
end;

function InitializeSetup:boolean;
begin
  ExtractTemporaryFile('ппкрпрку.reg');
  Result:=True;
end;

procedure InitializeWizard;
begin
  WizardForm.RunList.OnClickCheck:=@RunListClickCheck;
  URLLabelShadow:=TLabel.Create(WizardForm);
  with URLLabelShadow do begin
    Top:=ScaleY(331);
    Left:=ScaleX(25);
    Caption:='www.norcom.ru';
    AutoSize:=True;
    Parent:=WizardForm;
    Transparent:=True;
    Font.Color:=$969696;
    Font.Size:=9;
    Font.Style:=Font.Style+[fsBold];
  end;
  URLLabel:=TLabel.Create(WizardForm);
  with URLLabel do begin
    Top:=ScaleY(331)-dURL;
    Left:=ScaleX(25)-dURL;
    Caption:='www.norcom.ru';
    AutoSize:=True;
    Parent:=WizardForm;
    Cursor:=crHand;
    Transparent:=True;
    Font.Color:=clMaroon;
    Font.Size:=9;
    Font.Style:=Font.Style+[fsBold];
    BringToFront;
    OnClick:=@URLLabelClick;
    OnMouseDown:=@URLLabelMouseDown;
    OnMouseUp:=@URLLabelMouseUp;
  end;
  ExtractTemporaryFile('091095d.jpg');
  ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\091095d.jpg',1000,7000,3000,0,255,False,$FFFFFF,10);
  ssInitialize(GetWindowLong(MainForm.Handle,-8),10,False,1,$FF000000);
  ExtractTemporaryFile('towers 2010-10-11 04-00-08-61.bmp');
  ssSetBkgImage(ExpandConstant('{tmp}')+'\towers 2010-10-11 04-00-08-61.bmp');
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep=ssInstall then begin
    ExtractTemporaryFile('dve_sorvannye_bashni-1243956405.jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\dve_sorvannye_bashni-1243956405.jpg');
    ExtractTemporaryFile('dve_sorvannye_bashni-1243956406.jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\dve_sorvannye_bashni-1243956406.jpg');
    ExtractTemporaryFile('dve_sorvannye_bashni-1243956407.jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\dve_sorvannye_bashni-1243956407.jpg');
    ExtractTemporaryFile('dve_sorvannye_bashni-1243956409.jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\dve_sorvannye_bashni-1243956409.jpg');
    ExtractTemporaryFile('kmplayer 2010-10-11 21-24-14-22.bmp');
    ssAddImage(ExpandConstant('{tmp}')+'\kmplayer 2010-10-11 21-24-14-22.bmp');
    ExtractTemporaryFile('kmplayer 2010-10-11 21-18-45-61.bmp');
    ssAddImage(ExpandConstant('{tmp}')+'\kmplayer 2010-10-11 21-18-45-61.bmp');
    ExtractTemporaryFile('towers 2010-10-11 03-59-56-43.bmp');
    ssAddImage(ExpandConstant('{tmp}')+'\towers 2010-10-11 03-59-56-43.bmp');
    ExtractTemporaryFile('kmplayer 2010-10-11 21-25-34-98.bmp');
    ssAddImage(ExpandConstant('{tmp}')+'\kmplayer 2010-10-11 21-25-34-98.bmp');
    ssStartShow;
  end;
  if CurStep=ssPostInstall then ssStopShow;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID=wpInstalling then begin
    WizardForm.MainPanel.Visible:=False;
    WizardForm.Bevel1.Visible:=False;
    WizardForm.Width:=ScaleX(395);
    WizardForm.Height:=ScaleY(142);
    WizardForm.Left:=ScaleX(GetSystemMetrics(0)-WizardForm.Width-Indent);
    WizardForm.Top:=ScaleY(GetSystemMetrics(1)-WizardForm.Height-Indent);
    WizardForm.InnerNotebook.Left:=ScaleX(10);
    WizardForm.InnerNotebook.Top:=ScaleY(10);
    WizardForm.InnerNotebook.Width:=ScaleX(370);
    WizardForm.StatusLabel.Left:=ScaleX(0);
    WizardForm.StatusLabel.Top:=ScaleY(0);
    WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
    WizardForm.FileNameLabel.Left:=ScaleX(0);
    WizardForm.FileNameLabel.Top:=ScaleY(20);
    WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
    WizardForm.ProgressGauge.Top:=ScaleY(40);
    WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
    WizardForm.CancelButton.Left:=ScaleX(154);
    WizardForm.CancelButton.Top:=ScaleY(80);
  end;
  if (CurPageID=wpFinished) or (CurPageID=wpInfoAfter) then begin
    WizardForm.RunList.Checked[0]:=True;
    if WizardForm.Width<>502 then begin
      WizardForm.Visible:=False;
      WizardForm.Width:=ScaleX(502);
      WizardForm.Height:=ScaleY(392);
      WizardForm.Left:=(GetSystemMetrics(0)-WizardForm.Width) div 2;
      WizardForm.Top:=(GetSystemMetrics(1)-WizardForm.Height) div 2;
      WizardForm.MainPanel.Visible:=True;
      WizardForm.Bevel1.Visible:=True;
      WizardForm.InnerNotebook.Left:=ScaleX(40);
      WizardForm.InnerNotebook.Top:=ScaleY(72);
      WizardForm.InnerNotebook.Width:=ScaleX(417);
      WizardForm.Visible:=True;
    end;
  end;
end;

procedure DeinitializeSetup;
begin
  ssDeInitialize;
end;


R.i.m.s.k.y. 12-10-2010 12:08 1517016

Цитата:

Цитата necromanster
Здравствуйте господа. »

Господа все в Париже :)
Цитата:

Цитата necromanster
Прошу помочь, и подсказать где проблема. »

У меня все поставилось (без секции Files) и деинсталлилось...
Только при установке последнее окно где-то внизу-справа оказалось.

в папке Source: "D:\Games\Две сорванные башни\*" случайно нету файлов unins*? файлы unins*.dat и unins.exe инно создает сам в процессе установки.

И код надо заключать в теги [_code] [/_code], а такой здоровый кусок - под кат
[_ht=Заголовок скрытого текста]скрытый текст, который будет отображаться при нажатии на заголовок[/_ht]
_ убрать из тегов.

necromanster 12-10-2010 13:05 1517064

Цитата:

в папке Source: "D:\Games\Две сорванные башни\*" случайно нету файлов unins*? файлы unins*.dat и unins.exe инно создает сам в процессе установки.
Есть. Что их удалить нужно перед запаковкой ?

И еслти не трудно, еще один вопрос. Как сделать так, что бы при установке игры, устанавливалось дополнительное ПО. (DirectX и тому подобное.)

Искал ответ на форуме, но внятного описания нет.

R.i.m.s.k.y. 12-10-2010 13:18 1517076

Цитата:

Цитата necromanster
Что их удалить нужно перед запаковкой ? »

ну дык они замещают инношные unins*

Цитата:

Цитата necromanster
Как сделать так, что бы при установке игры, устанавливалось дополнительное ПО »

DirectX
http://forum.oszone.net/post-1455980.html#post1455980
http://forum.oszone.net/post-1456143.html#post1456143
Легко находится по слову DirectX

А вообще надо смотреть что за ПО, некоторое надо еще проверять на версии чтобы старым не заменить новое.

tor62 12-10-2010 14:44 1517135

Добрый день
Нужна помощь.сделал нсталятор в котором есть две группы ,как сделать чтобы на странице выбора установки не была сразу отмечена галочкой сама группа и её компоненты,при выборе группы не выбирались оба компонента,при выборе одного компонента группы снимался выбор со второго
Код:

[Types]
Name: "viborochnaya"; Description: "Выборочная установка"; Flags: iscustom
 [Components]
Name: "Gruppa1"; Description: "Название"; Types: viborochnaya 
Name: "Gruppa1\Component1"; Description: "Название"; Types: viborochnaya
Name: "Gruppa1\Component2"; Description: "Название"; Types: viborochnaya
Name: "Gruppa2"; Description: "Название"; Types: viborochnaya
Name: "Gruppa2\Component1"; Description: "Название"; Types: viborochnaya
Name: "Gruppa2\Component2"; Description: "Название"; Types: viborochnaya 
[Files]
Source: E:\Новая папка\Папка1\*; Components: Gruppa1\Component1; DestDir: {app}; Flags: recursesubdirs ignoreversion sortfilesbyextension createallsubdirs
Source: E:\Новая папка\папка2\*; Components: Gruppa1\Component2; DestDir: {app}; Flags: recursesubdirs ignoreversion sortfilesbyextension createallsubdirs
Source: E:\Новая папка\Папка3\*; Components: Gruppa2\Component1; DestDir: {app}; Flags: recursesubdirs ignoreversion sortfilesbyextension createallsubdirs
Source: E:\Новая папка\папка4\*; Components: Gruppa2\Component2; DestDir: {app}; Flags: recursesubdirs ignoreversion sortfilesbyextension createallsubdirs

Подскажите что нужно дописать?Заранее благодарю.

R.i.m.s.k.y. 12-10-2010 15:01 1517145

Цитата:

Цитата tor62
Добрый день »

Симметрично добрый!

Код:


[Types]
Name: "viborochnaya"; Description: "Выборочная установка"; Flags: iscustom
Name: "full"; Description: "Полная установка"; Flags:

[Components]
Name: "Gruppa1"; Description: "Название"; Types: full; Flags: checkablealone
Name: "Gruppa1\Component1"; Description: "Название"; Types: viborochnaya; Flags: dontinheritcheck
Name: "Gruppa1\Component2"; Description: "Название"; Types: full; Flags: dontinheritcheck
Name: "Gruppa2"; Description: "Название"; Types: viborochnaya
Name: "Gruppa2\Component1"; Description: "Название"; Types: viborochnaya; Flags: exclusive
Name: "Gruppa2\Component2"; Description: "Название"; Types: viborochnaya; Flags: exclusive

Экспериментируем с флагами exclusive (выбрать один из многих), checkablealone (можно выбрать один без "дочек"), dontinheritcheck (не выбирать "дочку" при выборе "родителя", не дружит с exclusive)
Цитата:

Цитата tor62
Подскажите что нужно дописать?Заранее благодарю. »

Если сообщение помогло - давим внизу "Полезное сообщение", не помогло - задаем наводящие вопросы.


shao,
забыл дописать, по первому варианту (вывод сообщений) если есть вопросы - в личку, напишу код, по второму (inno setup upgrade) я не подскажу, знаний не хватает. В данномвопросе вторым способом могут помочь камрады Serega и Habetdin.

shao 12-10-2010 16:27 1517216

Цитата:

Цитата R.i.m.s.k.y.
А если просто сообщения - вы хотите удалить 1.dll? »

Разве что, если нет других вариантов.
Но , желательно все-таки с возможностью выбора из , например, списка/перечня удаляемых файлов.

Цитата:

Цитата R.i.m.s.k.y.
Тогда в Function InitializeUninstall делаем проверку If FileExists then MsgBox »

Это уже из Паскаля... А я его не знаю.... :unsure:
Схожу-ка в личку

Цитата:

Цитата R.i.m.s.k.y.
В данном вопросе вторым способом могут помочь камрады Serega и Habetdin »

Да , спасибо ! Будем ждать их реакции..... :drug: :coffee:

R.i.m.s.k.y. 12-10-2010 16:42 1517231

Цитата:

Цитата shao
Это уже из Паскаля... А я его не знаю »

Ну хотя бы общие черты кода инно

Код:

Procedure www (filetodel : string);
var st : string;
begin
st := ExpandConstant('{sys}\' + filetodel;
if MsgBox('Удалить файл ' + filetodel +'?', mbError, MB_YESNO) = idYes then begin
if DeleteFile(st) = False then MsgBox('Не удалось удалить файл '+ filetodel, mbInformation, MB_OK);
end;
end;

Function InitializeUninstall: Boolean;
begin
if (FileExists(ExpandConstant('{sys}\1.dll'))) then www('1.dll');
...
if (FileExists(ExpandConstant('{sys}\5.dll'))) then www('5.dll');
end;

Могут быть орфографические ошибки.

А к старшим вопрос - как при деинсталляции создать окно выбора чего удалять? Коллекцию скриптов смотрел, курил - не понял.

shao 12-10-2010 17:03 1517245

Спасибо.
Насколько я понимаю - здесь :
Код:

Function InitializeUninstall: Boolean;
begin
if (FileExists(ExpandConstant('{sys}\1.dll'))) then www('1.dll');
...
if (FileExists(ExpandConstant('{sys}\5.dll'))) then www('5.dll');
end;

необходимо указывать свои данные. Месторасположение и сами файлы ...

R.i.m.s.k.y. 12-10-2010 17:09 1517248

Цитата:

Цитата shao
необходимо указывать свои данные. Месторасположение и сами файлы »

Да, свои файлы 1-2-3-4-5 dll. Вы написали что они хранятся в систем32 - я сделал на эту папку. Если у Вас будет время свободное - скачайте русскую справку и прочитайте что делают функции ExpandConstant и InitializeUninstall. FileExists ясно что делает из названия ;)

Советую там почитать еще и порядок установки - какие секции и функции когда выполняются. Если непонятно - спрашивайте, я подскажу.

tor62 12-10-2010 18:21 1517287

R.i.m.s.k.y., Эксперементировал по разному,ни чего у меня не получается.
Код:

[Types]
Name: "viborochnaya"; Description: "Выборочная установка"; Flags: iscustom 
[Components]
Name: "Gruppa1"; Description: "Адаптация под широкоформаты для патча 1.0004"; Types: viborochnaya; Flags:  checkablealone disablenouninstallwarning
Name: "Gruppa1\Component1"; Description: "1.0004 16х9"; Types: viborochnaya ; Flags: exclusive disablenouninstallwarning
Name: "Gruppa1\Component2"; Description: "1.0004 16х10"; Types: viborochnaya ;Flags: exclusive disablenouninstallwarning
Name: "Gruppa2"; Description: "Адаптация Солянки под патчи 1.0005 и 1.0006"; Types: viborochnaya; Flags:  checkablealone disablenouninstallwarning
Name: "Gruppa2\Component1"; Description: "1.0005"; Types: viborochnaya; Flags: exclusive disablenouninstallwarning
Name: "Gruppa2\Component2"; Description: "1.0006"; Types: viborochnaya; Flags: exclusive disablenouninstallwarning

С таким скриптом при запуске инсталятора у меня получается так



А мне надо так



Как это правильно можно сделать?

nik1967 12-10-2010 18:36 1517297

tor62,
А что, если попробовать так:
Код:

[Components]
Name: "Gruppa1"; Description: "Адаптация под широкоформаты для патча 1.0004"; Flags:  checkablealone disablenouninstallwarning
Name: "Gruppa1\Component1"; Description: "1.0004 16х9"; Flags: exclusive disablenouninstallwarning
Name: "Gruppa1\Component2"; Description: "1.0004 16х10"; Flags: exclusive disablenouninstallwarning
Name: "Gruppa2"; Description: "Адаптация Солянки под патчи 1.0005 и 1.0006"; Flags:  checkablealone disablenouninstallwarning
Name: "Gruppa2\Component1"; Description: "1.0005"; Flags: exclusive disablenouninstallwarning
Name: "Gruppa2\Component2"; Description: "1.0006"; Flags: exclusive disablenouninstallwarning

без секции [Types]

tor62 12-10-2010 18:47 1517302

nik1967,
без секции [Types]

Compile Error!
Line: 53
Column: Parameter "Types" includes an unknown type.

necromanster 12-10-2010 18:51 1517305

Я конечно понимаю что вы тут глобальные проблемы решаете, но может и мне поможете?

Пытаюсь сделать так что бы автоматически устанавливался \DirectX при загрузке игры. Вот мне подсказали.....
Но я что то не врубаюсь до конца, что здесь нужно исправить, что бы все заработало. В инсталяторе как положено высвечивается выбор, устанавливать, или нет (выбор галочкой) . Но кода заканчивается инсталяция игры, то выскакивает ошибка, что не правильно указан путь к папке DirectX. Я пробовал по разному, но не выходит. Ошибка так и появляется.
Подскажите пожалуйста. И если возможно, пример приведите, как говориться наглядно посмотреть.

[Components]
Name: DIRECTX; Description: Установить DIRECTX версии ...

[Run]
Components: DIRECTX; Filename: {src}\DirectX\DXSETUP.exe; Parameters: /Q /T:{tmp}; StatusMsg: Распаковка DirectX. Подождите, пожалуйста; Flags: runhidden waituntilterminated
Components: DIRECTX; Filename: {tmp}\DXSETUP.exe; Parameters: /silent; StatusMsg: Установка DirectX. Подождите, пожалуйста; Flags: runhidden waituntilterminated

nik1967 12-10-2010 18:51 1517306

tor62,
Ну дак естественно. Я для чего кусок кода дал? Ну если своими руками: удали Types: viborochnaya; из всех строк.

necromanster,
Ну вообще то так:
Код:

[Components]
Name: DIRECTX; Description: Установить DIRECTX версии ...
[Run]
Filename: {src}\DirectX\DXSETUP.exe; WorkingDir: {src}\DirectX\; Parameters: /silent; Flags: waituntilterminated; Components: DIRECTX;


necromanster 12-10-2010 20:02 1517356

nik1967,

Цитата:

Цитата nik1967
necromanster,
Ну вообще то так:
Код:
[Components]
Name: DIRECTX; Description: Установить DIRECTX версии ...
[Run]
Filename: {src}\DirectX\DXSETUP.exe; WorkingDir: {src}\DirectX\; Parameters: /silent; Flags: waituntilte »

Тоесть в таком виде и нужно вставлять? Переписовать ни чего не нужно?

nik1967 12-10-2010 20:05 1517361

necromanster,
Возьми и попробуй. Никто ведь не укусит. Именно в таком виде.

necromanster 12-10-2010 21:59 1517465

Цитата:

Цитата nik1967
necromanster,
Возьми и попробуй. Никто ведь не укусит. Именно в таком виде. »

Спасибо большее. Все пошло. Даже разобрался как не тихую установку сделать :)

И еще вопрос. Что нужно прописать, что бы когда эмулируеш верт.диск, работал автозапуск. То есть я знаю что нужно положить рядом с клиентом, меня интересует именно что в скрипте прописать.

Смотрел множество скриптов, сам черт ногу сломит :) Слабоват я еще. :)

Nekto78 13-10-2010 01:29 1517584

Может быть уже пробегало в теме...тогда ткните носом.

хочу чтобы в конце инсталляции к строковому значению в реестре добавлялся путь установлеенной программы. Т.е. до установки было, например так $(DELPHI)\Lib;$(DELPHI)\Bin;$(DELPHI)\Imports а после установки стало так $(DELPHI)\Lib;$(DELPHI)\Bin;$(DELPHI)\Imports;C:\Program Files\Winsoft\ComPort\Delphi7

Ниже приведен код, после его выполнения в реестре к уже имеющейся строке добавляется только \Delphi2007.
Путь по умолчанию настроен C:\Program Files\Winsoft\ComPort и в процессе установки не меняется (хотя эта возможность предусмотрена).

Вот код

[code]
procedure DeInitializeSetup();
var
D7, write: String;
begin
RegQueryStringValue(HKEY_CURRENT_USER,'Software\Borland\Delphi\7.0\Library','Search Path',D7);
write:=D7;
write:=write +';'+ {app} + '\Delphi2007';
RegWriteStringValue(HKCU,'Software\Borland\Delphi\7.0\Library','Search Path', write);
end;

Может кто подскажет куда копать?

R.i.m.s.k.y. 13-10-2010 08:29 1517667

Nekto78,
write:=write +';'+ ExpandConstant('{app}') + '\Delphi2007';
При использовании в коде системных переменных {app}, {sys}, {pf} и тп всегда надо добавлять ExpandConstant
Вы только при деинсталляции не забывайте удалять эту запись...

R.i.m.s.k.y. 13-10-2010 11:03 1517753

Цитата:

Цитата nik1967
Ну вообще то так: »

тогда при установке дирекс спросит путь. А если две строчки тогда первая распакует а вторая запустит установку дирекса действительно тихо. Если проставить дирекс - тогда да, одна строчка, но лучше добавлять флаг postinstall

Nekto78 13-10-2010 18:48 1518116

Цитата:

Цитата R.i.m.s.k.y.
write:=write +';'+ ExpandConstant('{app}') + '\Delphi2007';
При использовании в коде системных переменных {app}, {sys}, {pf} и тп всегда надо добавлять ExpandConstant
Вы только при деинсталляции не забывайте удалять эту запись... »

Спасибо! Заработало. Теперь осталось дописать код удаления записи и перепаковать инсталлер с исправленными компонентами.

j8r60 14-10-2010 01:28 1518365

Помогите пожалуйста столкнулся с такой проблемой, дело в том что в данном случае я не устанавливаю игру через Inno Setup, а устанавливаю игру через SFX архив и вся игра за-пакована в SFX архив, так вот теперь я установил игру, и в панели управления удаления программ показывает размер игры 756.кб так как инсталлятор сам пустой поэтому и показывает такой размер, теперь как заставить инсталлятор чтобы после установки игры показывал реальный размер установленой игры в панели управления удаления программ


Если кому-нибудь понадобится то вот решение. В секций добавьте [Setup]
ExtraDiskSpaceRequired=5591507721 в байтах

R.i.m.s.k.y. 14-10-2010 08:25 1518459

Цитата:

Цитата Nekto78
Спасибо! Заработало. »

Значит жмем "полезное сообщение" ;)

tor62 14-10-2010 10:07 1518509

Доброе утро всем.Создаю инстал в Inno,и у меня есть вопрос:можно ли заменить фон при инсталяции на картинку и изменить цвет названия проги

R.i.m.s.k.y. 15-10-2010 10:24 1519346

Цитата:

Цитата tor62
Доброе утро всем.Создаю инстал в Inno,и у меня есть вопрос:можно ли заменить фон при инсталяции на картинку и изменить цвет названия проги »

Я оформлением не занимаюсь, а знающих видимо нет - кошки покусали :) Придется Вам, батенька, в поиск, начните с шапки и сборника вопросов, фон там точно был, а шрифт я ни разу не видел. оформление очень любят на форуме ru-board

DevilisH 15-10-2010 18:52 1519673

Всем привет! Подскажите как сделать для окна приветсвия свой фон, а дальше- другой? Как здесь: приветствие: дальше:

Imitri7 15-10-2010 22:29 1519805

доброго времени суток
я здесь новенький, оч нужна помощь знающих
как сделать так?

R.i.m.s.k.y. 16-10-2010 09:53 1519954

Цитата:

Цитата Imitri7
как сделать так »

Код:

[Tasks]
Name: DirectX; Description: Обновить DirectX; GroupDescription: Системные задачи

[Run]
Filename: {src}\DXSetup.exe; Parameters: /SILENT; Flags: skipifdoesntexist postinstall; StatusMsg: Устанавливается DirectX; Tasks: DirectX



Эту картинку надо уже в шапку ибо актуально

Imitri7 16-10-2010 10:24 1519971

R.i.m.s.k.y., мне не абы как, мне именно как на скрине надо
зы так как ты написал я и сам делал

R.i.m.s.k.y. 16-10-2010 11:59 1520008

Цитата:

Цитата Imitri7
мне не абы как, мне именно как на скрине надо »

Код:

[Tasks]
Name: dop; Description: Дополнительное программное обеспечение; GroupDescription: Системные
Name: dop\DirectX; Description: Обновить DirectX;
Name: dop\vcredist; Description: Обновить vcredist;

[Run]
Filename: {src}\DXSetup.exe; Parameters: /SILENT; Flags: skipifdoesntexist postinstall; StatusMsg: Устанавливается DirectX; Tasks: dop\DirectX
Filename: {src}\vc_redist.exe; Parameters: /SILENT; Flags: skipifdoesntexist postinstall; StatusMsg: Устанавливается Visual C++ Redistributable; Tasks: dop\vcredist


Imitri7 16-10-2010 12:10 1520013

R.i.m.s.k.y., спасибо большое, я уже хотел из левого скрипта делать =)

R.i.m.s.k.y. 16-10-2010 12:22 1520015

Цитата:

Цитата Imitri7
спасибо большое, »

Давим кнопку "полезное сообщение". Рад помочь!

Цитата:

Цитата Imitri7
я уже хотел из левого скрипта делать »

Надо понимать чего пишете а не бездумно копировать чужое. Вы бы вместо того, чтобы обезъянничать скрипты сами сели да почитали в помощи что значат те функции, что есть в скрипте. За то и пинаю, не потому что у меня "велосипеда нет", а за бездумство Ваше.

Buketov 16-10-2010 18:33 1520219

Всем привет! Может кто знает ответ?
Что за глюк, ставлю в скрипте WizardForm.GroupEdit.Color:=clGray; WizardForm.GroupEdit.Font.Color:=clblack;
Цвет конечно меняется, но когда ставишь галку на чекбоксе (Не создавать папку в меню Пуск) цвет GroupEdit меняется на другой (и цвет текста также).
Как сделать так, чтобы цвет GroupEdit оставался clGray и цвет текста также не менялся?

dimon135 17-10-2010 12:01 1520633

помогите пожалуйста.Я сделал инсталятор, решил проверить,но при начале распаковки .arc файлов пишет"FreeArc вернул код ошибки: -1
Возможно, архив Data4.arc повреждён или недостаточно места на диске назначения."
Вот часть скрипта:



[Files]
;Source: *.arc; DestDir: {app}; Flags: nocompression
Source: C:\Program Files\Electronic Arts\Need For Speed:Shift\unarc.dll; DestDir: {tmp}; Flags: dontcopy deleteafterinstall
Source: C:\Program Files\Electronic Arts\Need For Speed:Shift\InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
Source: C:\Program Files\Electronic Arts\Need For Speed:Shift \Data4.arc; DestDir: {app}; Flags: nocompression


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

[code]
const
Archives = 'C:\Program Files\Electronic Arts\Need For Speed:Shift\Data4.arc';
PM_REMOVE = 1;
CP_ACP = 0; CP_UTF8 = 65001;
oneMb = 1048576;

И еше вопрос:как добавить несколько архивов в этой строчке:Archives = 'C:\Program Files\Electronic Arts\Need For Speed:Shift\Data4.arc'; ?

ivsatel 17-10-2010 12:29 1520652

Всем доброго времени суток.
Вопрос. Как сделать что-бы инсталлятор запустился без вопросов, я пишу так:
Код:

[Setup]
DisableWelcomePage=yes
DisableDirPage=yes
DisableFinishedPage=yes
DisableProgramGroupPage=yes
DisableReadyMemo=yes
DisableReadyPage=yes
DisableStartupPrompt=yes

Но все равно появляется вопрос "Нажмите установить чтобы продолжить"

Swotch 17-10-2010 12:35 1520657

В шапке темы есть пример, показывающий как растянуть стандартную картинку на всю страницу инсталлятора. Мне нужен пример, показывающий как вставить собственную картинку (с возможностью изменять размеры, можно и без изменения…). Желательно пример с работающим кодом… Если есть у кого такой код, буду премного благодарен!



Цитата:

Цитата ivsatel
Всем доброго времени суток.
Вопрос. Как сделать что-бы инсталлятор запустился без вопросов »

ivsatel, если надо, чтобы совсем без диалогов, пример:

Код:

[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
DisableDirPage=yes
DisableProgramGroupPage=yes
DisableReadyPage=yes
DisableFinishedPage=yes
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Files]
Source: "C:\My Program\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

[_Code] // убирает самую первую страницу, перед применением не забудьте убрать штрих...
procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID=wpWelcome then
begin
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
end;
end;


В инсталляторах выше версии Inno Setup 5.3.7 работать не будет!

THE GUILTY GOD 17-10-2010 13:01 1520673

Подскажите что надо прописать в командной строке чтобы сжать с помощью прекомпрессора REP.exe
И почему когда я сжимаю с помощью precomp эффекта сжатия никокого.
Очень надо.

ivsatel 17-10-2010 13:04 1520677

Swotch, Вот это окно не убирается:

Swotch 17-10-2010 13:22 1520688

Цитата:

Цитата ivsatel
Swotch, Вот это окно не убирается: »

Повторюсь, в инсталляторах выше версии Inno Setup 5.3.7 работать не будет. С чем связан сей недостаток не знаю. !

ivsatel 17-10-2010 13:52 1520713

Тогда перефразирую вопрос, можно ли указать что инсталляция изначальна будут в режиме /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-

dimon135 17-10-2010 13:58 1520719

помогите пожалуйста.Я сделал инсталятор, решил проверить,но при начале распаковки .arc файлов пишет"FreeArc вернул код ошибки: -1
Возможно, архив Data4.arc повреждён или недостаточно места на диске назначения."
Вот часть скрипта:



[Files]
;Source: *.arc; DestDir: {app}; Flags: nocompression
Source: C:\Program Files\Electronic Arts\Need For Speed:Shift\unarc.dll; DestDir: {tmp}; Flags: dontcopy deleteafterinstall
Source: C:\Program Files\Electronic Arts\Need For Speed:Shift\InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
Source: C:\Program Files\Electronic Arts\Need For Speed:Shift \Data4.arc; DestDir: {app}; Flags: nocompression


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

[code]
const
Archives = 'C:\Program Files\Electronic Arts\Need For Speed:Shift\Data4.arc';
PM_REMOVE = 1;
CP_ACP = 0; CP_UTF8 = 65001;
oneMb = 1048576;

И еше вопрос:как добавить несколько архивов в этой строчке:Archives = 'C:\Program Files\Electronic Arts\Need For Speed:Shift\Data4.arc'; ?

Swotch 17-10-2010 14:55 1520757

Цитата:

Цитата ivsatel
Тогда перефразирую вопрос, можно ли указать что инсталляция изначальна будут в режиме /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP- »

Я так понимаю вам нужен тихий инсталлятор, при устаноке без отображения диалоговых окон!

читать дальше »
Код:

[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
DisableDirPage=yes
DisableProgramGroupPage=yes
DisableReadyPage=yes
DisableFinishedPage=yes
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Files]
Source: C:\Program Files\Inno Setup 5\Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion

[_Code]
procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID=wpWelcome then
begin
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
end
end;

Предварительно удалить все новые версии Inno Setup, поставить версию Inno Setup 5.3.7. Взять предложенный мной пример, скопировать код в окно инсталлятора( убрать штрих _ в начеле секции [code]), скомпилировать и проверить установку! Инсталлятор должен получиться тихий, без диалоговых окон!

Возможно я вас не правильно понимаю...

THE GUILTY GOD 17-10-2010 17:02 1520849

Народ подскажите как с помощью precomp сжать всю папку, а то у меня только получается сжать каждый файл по отдельности

ArtemYa 18-10-2010 02:15 1521265

Здравствуйте, читал, читал форум и не нашел своих ответов, данным делом никогда не занимался, поэтому, если можно, расскажите поподробней.
1. Как сделать, чтобы setup не выгружал из себя файл, а копировал при запуске, например файлы-видео;
2. Как указать директорию выгрузки файла, которая на разных машинах может быть разной, но имеет имя со схожем началом;
3. Как при выгрузке файлов .dll сделать их регистрацию.
Заранее большое спасибо!!!

nik1967 18-10-2010 13:03 1521422

ArtemYa,
Когда запущен Inno Setup Compiler, нажми клавишу F1. Много чего интересного узнаешь.
читать дальше »
1. [Files] section
Flags
external
This flag instructs Inno Setup not to statically compile the file specified by the Source parameter into the installation files, but instead copy from an existing file on the distribution media or the user's system. See the Source parameter description for more information.

2. Там же: Constants

3. Там же: Pascal Scripting: RegisterServer
Prototype:
procedure RegisterServer(const Is64Bit: Boolean; const Filename: String; const FailCriticalErrors: Boolean);

Description:
Registers the DLL/OCX with the specified filename. If Is64Bit is True, the DLL/OCX will be loaded as a 64-bit image and registered in a 64-bit process. If FailCriticalErrors is True, the system will not display any critical-error-handler message boxes. Raises an exception if not successful.

Example:
begin
// Register hhctrl.ocx located in the System directory.
RegisterServer(Is64BitInstallMode, ExpandConstant('{sys}\hhctrl.ocx'), False);
end;Because we specify Is64BitInstallMode in the first parameter, it will register the 64-bit OCX in the 64-bit System directory when Setup is running in 64-bit mode. Otherwise, it will register the 32-bit OCX in the 32-bit System directory.


THE GUILTY GOD,
А ты темой не ошибся?
Внимание! Данная тема предназначена только для обсуждения написания скриптов !

R.i.m.s.k.y. 18-10-2010 13:21 1521439

Цитата:

Цитата nik1967
Когда запущен Inno Setup Compiler, нажми клавишу F1. »

+стопиццот!
А еще в шапке лежит русский F1!

Imitri7 18-10-2010 15:33 1521540

кто нибудь знает как сделать окно распаковки как у механиков?

nik1967 18-10-2010 16:21 1521576

Imitri7,
Прогрессбар в правом нижнем углу как у механиков
Код:

[_Code]
function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';

procedure InitializeWizard();
begin
 //Выносим кнопку "Отмена" на передний план
  WizardForm.CancelButton.BringToFront;
end;

 procedure CurPageChanged(CurPageID: Integer);
 begin
  if CurPageID=wpInstalling then
  begin
    WizardForm.BorderStyle:=bsDialog;
    WizardForm.MainPanel.Visible:=False;
    WizardForm.Width:=ScaleX(320);
    WizardForm.Height:=ScaleY(127);
    WizardForm.InnerNotebook.Left:=ScaleX(7);
    WizardForm.InnerNotebook.Top:=ScaleY(7);
    WizardForm.InnerNotebook.Width:=ScaleX(300);
    WizardForm.StatusLabel.Left:=ScaleX(0);
    WizardForm.StatusLabel.Top:=ScaleY(0);
    WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
    WizardForm.FileNameLabel.Left:=ScaleX(0);
    WizardForm.FileNameLabel.Top:=ScaleY(17);
    WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
    WizardForm.ProgressGauge.Top:=ScaleY(37);
    WizardForm.ProgressGauge.Left:=ScaleX(0);
    WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
    WizardForm.CancelButton.Left:=ScaleX(122);
    WizardForm.CancelButton.Top:=ScaleY(70);
    WizardForm.Left:=GetSystemMetrics(16)-ScaleX(330);
    WizardForm.Top:=GetSystemMetrics(17)-ScaleX(110);
  end;
if CurPageID=wpFinished
 then
  begin
  WizardForm.Width:=502;{Размер окна по горизонтали}
  WizardForm.Height:=392;{Размер окна по вертикали}
  WizardForm.Position:=poScreenCenter; {Возврат в исходное состояние}
 end
end;


ArtemYa 19-10-2010 10:00 1522067

nik1967, R.i.m.s.k.y., спасибо большое!

necromanster 19-10-2010 13:28 1522224

Здравствуйте господа.

У меня такая проблема.

Упаковал три папки FreeArc. Теперь возникла проблема как правильно в скриптах указать путь распаковки архивов. Тоесть мне нужно чтобы инсталятор распаковывал в папку, которая находиться в папке с игрой (например Lost planet2\ nativePC.) А он тупо распаковывает просто в папку с игрой (Lost planet2), что меня конечно не утраивает. Подскажите пожалуйста. Заранее благодарен.

Вот скрипты которые я применяю:
Код:

Filename: {src}\arcLp2Xml.exe; WorkingDir: {app}; Parameters: -x -y -s2 -d.; StatusMsg: Идет распаковка данных, подождите пожалуйста...; Flags: runasoriginaluser
Filename: {src}\arcXmlTmpPC.exe; WorkingDir: {app}; Parameters: -x -y -s2 -d.; StatusMsg: Идет распаковка данных, подождите пожалуйста...; Flags: runasoriginaluser
Filename: {src}\sound.exe; WorkingDir: {app}; Parameters: -x -y -s2 -d.; StatusMsg: Идет распаковка данных, подождите пожалуйста...; Flags: runasoriginaluser



Дошло. Спасибо.

ArtemYa 19-10-2010 16:23 1522377

Не могу найти, как сделать, чтобы файл вставлялся в папку, название которой начинается на определенную строку и не важно как заканчивается, помогите пожалуйста!

Imitri7 19-10-2010 19:11 1522500

nik1967, как убрать вот эту линию, которая по сторонам прогсбара идет? ?

ArtemYa 19-10-2010 19:21 1522507

Вычитал, что можно так сделать регистрацию dll
Filename: {sys}\regsvr32.exe; Parameters: {app}\*.dll /i
но такой путь не может найти, почему-то имя папки Programm Files делится и пишет ошибку
не найден путь С:\Programm
если кидать *.dll в корень С и задавать путь Parameters: С:\*.dll /i , то все нормально, но не кидать же все dll в корень!
помогите подалуйста!!

Кстати, через RegisterServer тоже ничего не получается

serg aka lain 19-10-2010 23:36 1522689

Цитата:

Цитата ArtemYa
почему-то имя папки Programm Files делится и пишет ошибку
не найден путь С:\Programm »

Потому-что присутствует побел в пути, параметр нужно заключить в кавычки.

Цитата:

Цитата Imitri7
как убрать вот эту линию »

Видимо в процедуре CurPageChanged, на этапе CurPageID = wpInstalling нужно ее скрыть:
WizardForm.Bevel.Hide;

nik1967 20-10-2010 11:25 1522937

Imitri7,
Почти, как написал serg aka lain, только немного проще:
Код:

WizardForm.Bevel.Hide;
перед(или после)
WizardForm.Bevel1.Hide;


Imitri7 20-10-2010 14:33 1523126

nik1967, спасибо большое =)
а еще, как :
1)сделать чтобы окошко распаковки нельзя было перемешать по экрану?
2)сделать рядом с крестиком остальные кнопки и чтобы кнопка свернуть работала,но кнопка развернуть окно была бы серой(т.е. не активной)?
3)наложить текстуру на кнопку отмены с помощью
читать дальше »
Код:

[ code]
const
  ButtonWidth = 80;    //Указываем размер кнопок
  ButtonHeight = 23;

  bidBack = 0;
  bidNext = 1;
  bidCancel = 2;
  bidDirBrowse = 3;
  bidGroupBrowse = 4;

var
  ButtonPanel: array [0..4] of TPanel;
  ButtonImage: array [0..4] of TBitmapImage;
  ButtonLabel: array [0..4] of TLabel;

procedure ButtonLabelClick(Sender: TObject);
var
  Button: TButton;
begin
  ButtonImage[TLabel(Sender).Tag].Left:=0
  case TLabel(Sender).Tag of
    bidBack: Button:=WizardForm.BackButton
    bidNext: Button:=WizardForm.NextButton
    bidCancel: Button:=WizardForm.CancelButton
    bidDirBrowse: Button:=WizardForm.DirBrowseButton
    bidGroupBrowse: Button:=WizardForm.GroupBrowseButton
  else
    Exit
  end
  Button.OnClick(Button)
end;

procedure ButtonLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if ButtonLabel[TLabel(Sender).Tag].Enabled then
    ButtonImage[TLabel(Sender).Tag].Left:=-ButtonWidth
end;

procedure ButtonLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  ButtonImage[TLabel(Sender).Tag].Left:=0
end;

procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
  Image: TBitmapImage;
  Panel: TPanel;
  Labl: TLabel;

begin
  Panel:=TPanel.Create(WizardForm)
  Panel.Left:=AButton.Left
  Panel.Top:=AButton.Top
  Panel.Width:=AButton.Width
  Panel.Height:=AButton.Height
  Panel.Tag:=AButtonIndex
  Panel.Parent:=AButton.Parent
  ButtonPanel[AButtonIndex]:=Panel

  Image:=TBitmapImage.Create(WizardForm)    //Рисунок который ложится на кнопку
  Image.Width:=160                          //Обязательно прописать оригинальный размер рисунка
  Image.Height:=23
  Image.Enabled:=False
  Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\button.bmp'))
  Image.Parent:=Panel
  ButtonImage[AButtonIndex]:=Image

  with TLabel.Create(WizardForm) do begin
    Tag:=AButtonIndex
    Parent:=Panel
    Width:=Panel.Width
    Height:=Panel.Height
    Transparent:=True
    OnClick:=@ButtonLabelClick
    OnDblClick:=@ButtonLabelClick
    OnMouseDown:=@ButtonLabelMouseDown
    OnMouseUp:=@ButtonLabelMouseUp
  end

  Labl:=TLabel.Create(WizardForm)        //Текст кнопок
  Labl.Left:=23                          //Указываем положение текста
  Labl.Top:=5
  Labl.Autosize:=True
  Labl.Alignment:=taCenter
  Labl.Tag:=AButtonIndex
  Labl.Transparent:=True
  Labl.Font.Color:=clWhite              //Цвет текста
  Labl.Caption:=AButton.Caption
  Labl.OnClick:=@ButtonLabelClick
  Labl.OnDblClick:=@ButtonLabelClick
  Labl.OnMouseDown:=@ButtonLabelMouseDown
  Labl.OnMouseUp:=@ButtonLabelMouseUp
  Labl.Parent:=Panel
  ButtonLabel[AButtonIndex]:=Labl
end;

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
  ButtonLabel[AButtonIndex].Caption:=AButton.Caption
  ButtonPanel[AButtonIndex].Visible:=AButton.Visible
  ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
  ButtonLabel[bidNext].Enabled:=True
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
  ButtonLabel[bidNext].Enabled:=False
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  UpdateButton(WizardForm.BackButton,bidBack)
  UpdateButton(WizardForm.NextButton,bidNext)
  UpdateButton(WizardForm.CancelButton,bidCancel)
  ButtonLabel[bidBack].Left := (ButtonPanel[bidBack].Width / 2 - ButtonLabel[bidBack].Width / 2);
  ButtonLabel[bidNext].Left := (ButtonPanel[bidNext].Width / 2 - ButtonLabel[bidNext].Width / 2);
  ButtonLabel[bidCancel].Left := (ButtonPanel[bidCancel].Width / 2 - ButtonLabel[bidCancel].Width / 2);
  ButtonLabel[bidDirBrowse].Left := (ButtonPanel[bidDirBrowse].Width / 2 - ButtonLabel[bidDirBrowse].Width / 2);
  ButtonLabel[bidGroupBrowse].Left := (ButtonPanel[bidGroupBrowse].Width / 2 - ButtonLabel[bidGroupBrowse].Width / 2);
end;

procedure InitializeWizard();
begin
  WizardForm.BackButton.Width:=ButtonWidth
  WizardForm.BackButton.Height:=ButtonHeight

  WizardForm.NextButton.Width:=ButtonWidth
  WizardForm.NextButton.Height:=ButtonHeight

  WizardForm.CancelButton.Width:=ButtonWidth
  WizardForm.CancelButton.Height:=ButtonHeight

  WizardForm.DirBrowseButton.Left:=337
  WizardForm.DirBrowseButton.Width:=ButtonWidth
  WizardForm.DirBrowseButton.Height:=ButtonHeight

  WizardForm.GroupBrowseButton.Left:=337
  WizardForm.GroupBrowseButton.Width:=ButtonWidth
  WizardForm.GroupBrowseButton.Height:=ButtonHeight

  WizardForm.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick

  WizardForm.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick

  ExtractTemporaryFile('button.bmp')
  LoadButtonImage(WizardForm.BackButton,bidBack)
  LoadButtonImage(WizardForm.NextButton,bidNext)
  LoadButtonImage(WizardForm.CancelButton,bidCancel)
  LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
  LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;


nik1967 20-10-2010 21:44 1523494

Imitri7,
Если честно, то я с этим со всем никогда не заморачивался, юзал botva2.dll, и поэтому ничем больше помочь не могу. Пардон за оффтоп.

Imitri7 20-10-2010 22:32 1523534

nik1967, эх((( ну и на этом спасибо

2all 1) как сделать чтобы окошко распаковки нельзя было перемешать по экрану?
2)наложить текстуру на кнопку отмены с помощью
этого скрипта
Код:

[ code]
const
  ButtonWidth = 80;    //Указываем размер кнопок
  ButtonHeight = 23;

  bidBack = 0;
  bidNext = 1;
  bidCancel = 2;
  bidDirBrowse = 3;
  bidGroupBrowse = 4;

var
  ButtonPanel: array [0..4] of TPanel;
  ButtonImage: array [0..4] of TBitmapImage;
  ButtonLabel: array [0..4] of TLabel;

procedure ButtonLabelClick(Sender: TObject);
var
  Button: TButton;
begin
  ButtonImage[TLabel(Sender).Tag].Left:=0
  case TLabel(Sender).Tag of
    bidBack: Button:=WizardForm.BackButton
    bidNext: Button:=WizardForm.NextButton
    bidCancel: Button:=WizardForm.CancelButton
    bidDirBrowse: Button:=WizardForm.DirBrowseButton
    bidGroupBrowse: Button:=WizardForm.GroupBrowseButton
  else
    Exit
  end
  Button.OnClick(Button)
end;

procedure ButtonLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if ButtonLabel[TLabel(Sender).Tag].Enabled then
    ButtonImage[TLabel(Sender).Tag].Left:=-ButtonWidth
end;

procedure ButtonLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  ButtonImage[TLabel(Sender).Tag].Left:=0
end;

procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
  Image: TBitmapImage;
  Panel: TPanel;
  Labl: TLabel;

begin
  Panel:=TPanel.Create(WizardForm)
  Panel.Left:=AButton.Left
  Panel.Top:=AButton.Top
  Panel.Width:=AButton.Width
  Panel.Height:=AButton.Height
  Panel.Tag:=AButtonIndex
  Panel.Parent:=AButton.Parent
  ButtonPanel[AButtonIndex]:=Panel

  Image:=TBitmapImage.Create(WizardForm)    //Рисунок который ложится на кнопку
  Image.Width:=160                          //Обязательно прописать оригинальный размер рисунка
  Image.Height:=23
  Image.Enabled:=False
  Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\button.bmp'))
  Image.Parent:=Panel
  ButtonImage[AButtonIndex]:=Image

  with TLabel.Create(WizardForm) do begin
    Tag:=AButtonIndex
    Parent:=Panel
    Width:=Panel.Width
    Height:=Panel.Height
    Transparent:=True
    OnClick:=@ButtonLabelClick
    OnDblClick:=@ButtonLabelClick
    OnMouseDown:=@ButtonLabelMouseDown
    OnMouseUp:=@ButtonLabelMouseUp
  end

  Labl:=TLabel.Create(WizardForm)        //Текст кнопок
  Labl.Left:=23                          //Указываем положение текста
  Labl.Top:=5
  Labl.Autosize:=True
  Labl.Alignment:=taCenter
  Labl.Tag:=AButtonIndex
  Labl.Transparent:=True
  Labl.Font.Color:=clWhite              //Цвет текста
  Labl.Caption:=AButton.Caption
  Labl.OnClick:=@ButtonLabelClick
  Labl.OnDblClick:=@ButtonLabelClick
  Labl.OnMouseDown:=@ButtonLabelMouseDown
  Labl.OnMouseUp:=@ButtonLabelMouseUp
  Labl.Parent:=Panel
  ButtonLabel[AButtonIndex]:=Labl
end;

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
  ButtonLabel[AButtonIndex].Caption:=AButton.Caption
  ButtonPanel[AButtonIndex].Visible:=AButton.Visible
  ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
  ButtonLabel[bidNext].Enabled:=True
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
  ButtonLabel[bidNext].Enabled:=False
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  UpdateButton(WizardForm.BackButton,bidBack)
  UpdateButton(WizardForm.NextButton,bidNext)
  UpdateButton(WizardForm.CancelButton,bidCancel)
  ButtonLabel[bidBack].Left := (ButtonPanel[bidBack].Width / 2 - ButtonLabel[bidBack].Width / 2);
  ButtonLabel[bidNext].Left := (ButtonPanel[bidNext].Width / 2 - ButtonLabel[bidNext].Width / 2);
  ButtonLabel[bidCancel].Left := (ButtonPanel[bidCancel].Width / 2 - ButtonLabel[bidCancel].Width / 2);
  ButtonLabel[bidDirBrowse].Left := (ButtonPanel[bidDirBrowse].Width / 2 - ButtonLabel[bidDirBrowse].Width / 2);
  ButtonLabel[bidGroupBrowse].Left := (ButtonPanel[bidGroupBrowse].Width / 2 - ButtonLabel[bidGroupBrowse].Width / 2);
end;

procedure InitializeWizard();
begin
  WizardForm.BackButton.Width:=ButtonWidth
  WizardForm.BackButton.Height:=ButtonHeight

  WizardForm.NextButton.Width:=ButtonWidth
  WizardForm.NextButton.Height:=ButtonHeight

  WizardForm.CancelButton.Width:=ButtonWidth
  WizardForm.CancelButton.Height:=ButtonHeight

  WizardForm.DirBrowseButton.Left:=337
  WizardForm.DirBrowseButton.Width:=ButtonWidth
  WizardForm.DirBrowseButton.Height:=ButtonHeight

  WizardForm.GroupBrowseButton.Left:=337
  WizardForm.GroupBrowseButton.Width:=ButtonWidth
  WizardForm.GroupBrowseButton.Height:=ButtonHeight

  WizardForm.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick

  WizardForm.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick

  ExtractTemporaryFile('button.bmp')
  LoadButtonImage(WizardForm.BackButton,bidBack)
  LoadButtonImage(WizardForm.NextButton,bidNext)
  LoadButtonImage(WizardForm.CancelButton,bidCancel)
  LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
  LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;



или хотябы подскажите есть ли какой нибудь параметр для "procedure InitializeWizard();" чтобы действия выполнялись на определенной странице например установки

Прогрессбар в правом нижнем углу как у механиков
Код:

[_Code]
function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';

procedure InitializeWizard();
begin
 //Выносим кнопку "Отмена" на передний план
  WizardForm.CancelButton.BringToFront;
end;

 procedure CurPageChanged(CurPageID: Integer);
 begin
  if CurPageID=wpInstalling then
  begin
    WizardForm.BorderStyle:=bsDialog;
    WizardForm.MainPanel.Visible:=False;
    WizardForm.Width:=ScaleX(320);
    WizardForm.Height:=ScaleY(127);
    WizardForm.InnerNotebook.Left:=ScaleX(7);
    WizardForm.InnerNotebook.Top:=ScaleY(7);
    WizardForm.InnerNotebook.Width:=ScaleX(300);
    WizardForm.StatusLabel.Left:=ScaleX(0);
    WizardForm.StatusLabel.Top:=ScaleY(0);
    WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
    WizardForm.FileNameLabel.Left:=ScaleX(0);
    WizardForm.FileNameLabel.Top:=ScaleY(17);
    WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
    WizardForm.ProgressGauge.Top:=ScaleY(37);
    WizardForm.ProgressGauge.Left:=ScaleX(0);
    WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
    WizardForm.CancelButton.Left:=ScaleX(122);
    WizardForm.CancelButton.Top:=ScaleY(70);
    WizardForm.Left:=GetSystemMetrics(16)-ScaleX(330);
    WizardForm.Top:=GetSystemMetrics(17)-ScaleX(110);
  end;
if CurPageID=wpFinished
 then
  begin
  WizardForm.Width:=502;{Размер окна по горизонтали}
  WizardForm.Height:=392;{Размер окна по вертикали}
  WizardForm.Position:=poScreenCenter; {Возврат в исходное состояние}
 end
end;


dimon135 21-10-2010 16:12 1524075

помогите пожалуйста народ.Как в этой строчке добавить более одного архива?
#define ArcLocation "C:\Users\Администратор\Desktop\nfs\Data4.arc";

THE GUILTY GOD 22-10-2010 12:14 1524708

Всем здорова!
Такой вопрос! у меня несколько архивов формата xxx.arc и идут они через srep+pcf+arc и как мне сделать чтобы всё фархива формата arc распаковывались поочерёдно, так же они проходят через ISDone. Я знаю что надо в этой
if not ISSRepExtract ( 0, OveralPct, 0, ExpandConstant('{app}\data1\CODMW2.srep'), ExpandConstant('{app}\data1\CODMW2.pcf'), '', true, CallBack ) then break;
if not ISPrecompExtract( 0, OveralPct, 0, ExpandConstant('{app}\data1\CODMW2.pcf'), ExpandConstant('{app}\data1\CODMW2.arc'), true, CallBack ) then break;
if not ISArcExtract ( 0, OveralPct, 0, ExpandConstant('{src}\CODMW2.arc'), ExpandConstant('{app}\data1'), false,CallBack, '', '', '') then break;


значения на свои, но здесь только если один архив а мне нужно на несколько

nik1967 22-10-2010 13:16 1524749

THE GUILTY GOD,
ISDone.dll v0.5

j8r60 23-10-2010 13:57 1525454

как правильно в этом коде прописать реестр

Код:

function InitializeSetup: Boolean;
 var
  path: string;
  res: Integer;
begin
  Result:= True;
  if RegValueExists(HKLM, 'Software\Что нужно указать', 'InstallPath') then
    if RegQueryStringValue(HKLM, 'Software\Что нужно указать', 'InstallPath', path) then
      if FileExists(path + '\xrEngine.exe') then
  if MsgBox('Запустить S.T.A.L.K.E.R. - Чистое Небо?', mbConfirmation, MB_YESNO) = IDYES then
    begin
      Exec(path + '\xrEngine.exe', '', '', SW_SHOW, ewWaitUntilTerminated, res);
      Result:= False;
    end
  else Result:= False;
end;


moov1kk 23-10-2010 16:52 1525552

подскажите пожалуйста, как сделать так чтобы при переключении страниц в инсталле буквы не выделялись вот так:

Habetdin 25-10-2010 16:16 1527004

Цитата:

Цитата Imitri7
чтобы действия выполнялись на определенной странице например установки »

Код:

procedure CurPageChanged(CurPageID: Integer);
begin
 if CurPageID=wpInstalling then
 begin
  // код, выполняющийся на странице установки
 end;
end;

Из вашего сообщения не совсем понятно, какой результат нужен :unsure:

STRAYKER 25-10-2010 16:53 1527023

Serega,

У меня к вам просьба я создал инсталятор со скином , картинка на весь инсталятор
Но такая проблема когда я устанавливаю то оно не создаёт ярлыки хотя в скрипте прописано чтобы создало как быть

R.i.m.s.k.y. 25-10-2010 17:00 1527031

STRAYKER,
Надо выполнить кое-какие действия, написать нужное в скрипте и тогда ошибки исчезнут.

Habetdin 25-10-2010 17:05 1527037

Цитата:

Цитата STRAYKER
не создаёт ярлыки хотя в скрипте прописано чтобы создало »

Выложите проблемную часть скрипта

shao 25-10-2010 18:50 1527132

При деинсталляции программы на удаляются разделы из реестра, хотя в секции [Registry] указаны соответствующие флаги.
Один раздел после деинсталляции программы пустой. В другом остались кое-какие параметры.
Пробовал ставить флаги uninsdeletekey, uninsdeletekeyifempty, uninsdeletevalue, комбинировал их - всё безрезультатно...

Вот часть скрипта:

Код:

[Registry]
Root: HKCU; SubKey: Software\MyProg; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\MyProg; Flags: uninsdeletevalue uninsdeletekeyifempty

Что я не так делаю, подскажите пожалуйста.

***********************************

З.Ы. Пришла мысля потом :teeth:

Если никак нельзя удалить параметр реестра тем способом , тогда можно ли так :

Код:

[UninstallRun]
Filename: {sys}\cmd.exe; Parameters: /c Reg Delete "HKCU\Software\MyProg" /f; Flags: runhidden

?

serg aka lain 25-10-2010 19:37 1527170

Цитата:

Цитата shao
Код:
[Registry]
Root: HKCU; SubKey: Software\MyProg; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\MyProg; Flags: uninsdeletevalue uninsdeletekeyifemptyЧто я не так делаю, подскажите пожалуйста. »

uninsdeletevalue - это удаление параметра типа:
Root: HKLM; SubKey: SOFTWARE\MyProg; ValueType: string; ValueName: Name; ValueData: "";
А в данном случае, (если нужно удалить раздел Root: HKCU; SubKey: Software\MyProg) - задаётся флаг uninsdeletekey

STRAYKER 25-10-2010 20:07 1527194

Весь скрипт ?

Та я сам незнаю в чем проблемма
1.Должно предложить содать папку в меню " ПУСК " оно не предлагает
2.Должно предложить содать ярлык --- тоже не предлагает
так что делать

Весь скрипт ?

Та я сам незнаю в чем проблемма
1.Должно предложить содать папку в меню " ПУСК " оно не предлагает
2.Должно предложить содать ярлык --- тоже не предлагает
так что делать

STRAYKER 25-10-2010 20:24 1527206

У меня не создает ярліки и папку в пуск
хотя в скрипте прописано чтобі оно создало

Imitri7 25-10-2010 21:58 1527295

Habetdin
есть скрипт
Прогрессбар в правом нижнем углу как у механиков
Код:

[_Code]
function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';

procedure InitializeWizard();
begin
 //Выносим кнопку "Отмена" на передний план
  WizardForm.CancelButton.BringToFront;
end;

 procedure CurPageChanged(CurPageID: Integer);
 begin
  if CurPageID=wpInstalling then
  begin
    WizardForm.BorderStyle:=bsDialog;
    WizardForm.MainPanel.Visible:=False;
    WizardForm.Width:=ScaleX(320);
    WizardForm.Height:=ScaleY(127);
    WizardForm.InnerNotebook.Left:=ScaleX(7);
    WizardForm.InnerNotebook.Top:=ScaleY(7);
    WizardForm.InnerNotebook.Width:=ScaleX(300);
    WizardForm.StatusLabel.Left:=ScaleX(0);
    WizardForm.StatusLabel.Top:=ScaleY(0);
    WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
    WizardForm.FileNameLabel.Left:=ScaleX(0);
    WizardForm.FileNameLabel.Top:=ScaleY(17);
    WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
    WizardForm.ProgressGauge.Top:=ScaleY(37);
    WizardForm.ProgressGauge.Left:=ScaleX(0);
    WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
    WizardForm.CancelButton.Left:=ScaleX(122);
    WizardForm.CancelButton.Top:=ScaleY(70);
    WizardForm.Left:=GetSystemMetrics(16)-ScaleX(330);
    WizardForm.Top:=GetSystemMetrics(17)-ScaleX(110);
  end;
if CurPageID=wpFinished
 then
  begin
  WizardForm.Width:=502;{Размер окна по горизонтали}
  WizardForm.Height:=392;{Размер окна по вертикали}
  WizardForm.Position:=poScreenCenter; {Возврат в исходное состояние}
 end
end;



как наложить текстуру на кнопку отмены в этом скрипте с помошью этого
наложение текстуру на кнопки
Код:

[ code]
const
  ButtonWidth = 80;    //Указываем размер кнопок
  ButtonHeight = 23;

  bidBack = 0;
  bidNext = 1;
  bidCancel = 2;
  bidDirBrowse = 3;
  bidGroupBrowse = 4;

var
  ButtonPanel: array [0..4] of TPanel;
  ButtonImage: array [0..4] of TBitmapImage;
  ButtonLabel: array [0..4] of TLabel;

procedure ButtonLabelClick(Sender: TObject);
var
  Button: TButton;
begin
  ButtonImage[TLabel(Sender).Tag].Left:=0
  case TLabel(Sender).Tag of
    bidBack: Button:=WizardForm.BackButton
    bidNext: Button:=WizardForm.NextButton
    bidCancel: Button:=WizardForm.CancelButton
    bidDirBrowse: Button:=WizardForm.DirBrowseButton
    bidGroupBrowse: Button:=WizardForm.GroupBrowseButton
  else
    Exit
  end
  Button.OnClick(Button)
end;

procedure ButtonLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if ButtonLabel[TLabel(Sender).Tag].Enabled then
    ButtonImage[TLabel(Sender).Tag].Left:=-ButtonWidth
end;

procedure ButtonLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  ButtonImage[TLabel(Sender).Tag].Left:=0
end;

procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
  Image: TBitmapImage;
  Panel: TPanel;
  Labl: TLabel;

begin
  Panel:=TPanel.Create(WizardForm)
  Panel.Left:=AButton.Left
  Panel.Top:=AButton.Top
  Panel.Width:=AButton.Width
  Panel.Height:=AButton.Height
  Panel.Tag:=AButtonIndex
  Panel.Parent:=AButton.Parent
  ButtonPanel[AButtonIndex]:=Panel

  Image:=TBitmapImage.Create(WizardForm)    //Рисунок который ложится на кнопку
  Image.Width:=160                          //Обязательно прописать оригинальный размер рисунка
  Image.Height:=23
  Image.Enabled:=False
  Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\button.bmp'))
  Image.Parent:=Panel
  ButtonImage[AButtonIndex]:=Image

  with TLabel.Create(WizardForm) do begin
    Tag:=AButtonIndex
    Parent:=Panel
    Width:=Panel.Width
    Height:=Panel.Height
    Transparent:=True
    OnClick:=@ButtonLabelClick
    OnDblClick:=@ButtonLabelClick
    OnMouseDown:=@ButtonLabelMouseDown
    OnMouseUp:=@ButtonLabelMouseUp
  end

  Labl:=TLabel.Create(WizardForm)        //Текст кнопок
  Labl.Left:=23                          //Указываем положение текста
  Labl.Top:=5
  Labl.Autosize:=True
  Labl.Alignment:=taCenter
  Labl.Tag:=AButtonIndex
  Labl.Transparent:=True
  Labl.Font.Color:=clWhite              //Цвет текста
  Labl.Caption:=AButton.Caption
  Labl.OnClick:=@ButtonLabelClick
  Labl.OnDblClick:=@ButtonLabelClick
  Labl.OnMouseDown:=@ButtonLabelMouseDown
  Labl.OnMouseUp:=@ButtonLabelMouseUp
  Labl.Parent:=Panel
  ButtonLabel[AButtonIndex]:=Labl
end;

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
  ButtonLabel[AButtonIndex].Caption:=AButton.Caption
  ButtonPanel[AButtonIndex].Visible:=AButton.Visible
  ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
  ButtonLabel[bidNext].Enabled:=True
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
  ButtonLabel[bidNext].Enabled:=False
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  UpdateButton(WizardForm.BackButton,bidBack)
  UpdateButton(WizardForm.NextButton,bidNext)
  UpdateButton(WizardForm.CancelButton,bidCancel)
  ButtonLabel[bidBack].Left := (ButtonPanel[bidBack].Width / 2 - ButtonLabel[bidBack].Width / 2);
  ButtonLabel[bidNext].Left := (ButtonPanel[bidNext].Width / 2 - ButtonLabel[bidNext].Width / 2);
  ButtonLabel[bidCancel].Left := (ButtonPanel[bidCancel].Width / 2 - ButtonLabel[bidCancel].Width / 2);
  ButtonLabel[bidDirBrowse].Left := (ButtonPanel[bidDirBrowse].Width / 2 - ButtonLabel[bidDirBrowse].Width / 2);
  ButtonLabel[bidGroupBrowse].Left := (ButtonPanel[bidGroupBrowse].Width / 2 - ButtonLabel[bidGroupBrowse].Width / 2);
end;

procedure InitializeWizard();
begin
  WizardForm.BackButton.Width:=ButtonWidth
  WizardForm.BackButton.Height:=ButtonHeight

  WizardForm.NextButton.Width:=ButtonWidth
  WizardForm.NextButton.Height:=ButtonHeight

  WizardForm.CancelButton.Width:=ButtonWidth
  WizardForm.CancelButton.Height:=ButtonHeight

  WizardForm.DirBrowseButton.Left:=337
  WizardForm.DirBrowseButton.Width:=ButtonWidth
  WizardForm.DirBrowseButton.Height:=ButtonHeight

  WizardForm.GroupBrowseButton.Left:=337
  WizardForm.GroupBrowseButton.Width:=ButtonWidth
  WizardForm.GroupBrowseButton.Height:=ButtonHeight

  WizardForm.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick

  WizardForm.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick

  ExtractTemporaryFile('button.bmp')
  LoadButtonImage(WizardForm.BackButton,bidBack)
  LoadButtonImage(WizardForm.NextButton,bidNext)
  LoadButtonImage(WizardForm.CancelButton,bidCancel)
  LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
  LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;




если просто объединить то вот что выйдет


chuvak 25-10-2010 22:16 1527307

здравствуйте я здесь новенький и хочу узнать как установить скрипт Need for Speed™ Undercover.iss v 2.2 (Final) и другие ???я умею делать простые репаки без всяких картинок и.т.д Но я хочу научиться делать такие как в этом скрипте который я указал выше !!! очень надеюсь на вашу помощь.

shao 25-10-2010 22:23 1527309

Цитата:

Цитата serg aka lain
А в данном случае »

То есть , если я правильно понял для удаления раздела используется флаг uninsdeletekey
Для удаления параметров - флаг uninsdeletevalue

Но дело в том , что я ..
Цитата:

Цитата shao
Пробовал ставить флаги uninsdeletekey, uninsdeletekeyifempty, uninsdeletevalue, комбинировал их - всё безрезультатно... »

Может ли влиять на удаление параметров реестра то , что при деинсталляции программы сразу не удаляются несколько файлов , которые задействованы системой/которые висят в процессах, а также зарегистрированные DLL-ки. А полностью удаляются эти файлы только после перезагрузки системы. Перезагрузку предлагает сама программа после отработки деинсталляции, поскольку в секции [Files]
для этих файлов указан флаг uninsrestartdelete .

И подскажите пожалуйста, как альтернативу, можно ли использовать такой вариант для удаления раздела реестра ?
Код:

[UninstallRun]
Filename: {sys}\cmd.exe; Parameters: /c Reg Delete "HKCU\Software\MyProg" /f; Flags: runhidden


kenny_danger 25-10-2010 23:23 1527348

здравствуйте уважаемые пользователи
хочу задать вам такие вопросы

1----------------------------------------
допустим у меня в скрипте
Код:

DefaultDirName={pf}\Steam\steamapps\your_account\counter-strike source\
но вовремя установки при выборе путя куда устанавливать данную программу автоматом дописывается "counter-strike source"
как сделать так что это не дописывалось

2----------------------------------------
как сделать так чтобы после выбора пользователем определенной папки установки программы в ней удалялись определенные
файлы или папки перед копированием самой программы через инсталлятор

serg aka lain 25-10-2010 23:49 1527364

Цитата:

Цитата shao
Может ли влиять на удаление параметров реестра то , что при деинсталляции программы сразу не удаляются несколько файлов , которые задействованы системой/которые висят в процессах, а также зарегистрированные DLL-ки. А полностью удаляются эти файлы только после перезагрузки системы. Перезагрузку предлагает сама программа после отработки деинсталляции, поскольку в секции [Files]
для этих файлов указан флаг uninsrestartdelete . »

Возможно они и загружены(используются).
Цитата:

Цитата shao
И подскажите пожалуйста, как альтернативу, можно ли использовать такой вариант для удаления раздела реестра ? »

Можно конечно, только имхо cmd нужно юзать тогда, когда стандартными средствами никак ...
Еще можно попытаться закрыть программу перед удалением.
Вот ещё вариант, в принципе тоже самое uninsdeletekey
Код:

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usDone then
    RegDeleteKeyIncludingSubkeys(HKCU, 'Software\MyProg');
end;


kenny_danger

Цитата:

Цитата kenny_danger
как сделать так что это не дописывалось »

[Setup]
AppendDefaultDirName=False
Цитата:

Цитата kenny_danger
как сделать так чтобы после выбора пользователем определенной папки установки программы в ней удалялись определенные
файлы или папки перед копированием самой программы через инсталлятор »

[InstallDelete]
Type: files; Name: "{app}\File.txt"
Type: filesandordirs; Name: "{app}\Path";

shao 26-10-2010 00:05 1527383

serg aka lain, Благодарю, за предложенные варианты!

Цитата:

Цитата serg aka lain
Еще можно попытаться закрыть программу перед удалением. »

Об этом я тоже думал, но не знаю как сделать стандартными средствами. Только через CMD.
Хотя , перед деинсталляцией программы пробовал все процессы вручную остановить и все-равно раздел реестра не удалялся.

serg aka lain 26-10-2010 00:43 1527401

Цитата:

Цитата shao
Хотя , перед деинсталляцией программы пробовал все процессы вручную остановить и все-равно раздел реестра не удалялся. »

Тогда через перезагрузку.

Вариант с RegDeleteKeyIncludingSubkeys(HKCU, 'Software\MyProg') помог?

shao 26-10-2010 01:06 1527418

Цитата:

Цитата serg aka lain
Вариант с RegDeleteKeyIncludingSubkeys(HKCU, 'Software\MyProg') помог? »

Я не пробовал ещё. Нет возможности, поскольку я на работе.
Попробую - обязательно отпишусь.

З.Ы. Раз уж такое дело, не могли бы ещё написать код на случай , если это будет параметр реестра , а не раздел.

chuvak 26-10-2010 12:02 1527666

Здравствуйте это снова я мне так и не помогли с объединением скрипта !!! я сам начал подставлять как по обычной сборке , и когда начал комплирировать и вышла ошибка function BtnCreate(hParent:HWND; Left,Top,Width,Height:integer; FileName:PAnsiChar; ShadowWidth:integer; IsCheckBtn:boolean):HWND; external 'BtnCreate@{tmp}\botva2.dll stdcall delayload'; что это я не знаю ???

STRAYKER 26-10-2010 13:18 1527716

когда добавляю скрипт с картинкой на весь инсталятор то оно не выносит ярлыков и не создаёт папку в пуск
А когда убираю скрипт с кодом на отоброжение картинок на всех страницах инстолятора оно работает нормально чо за трабл ???

THE GUILTY GOD 26-10-2010 15:12 1527833

Вложений: 2
Помагите что это и как исправить.
Появились при написании кода на проценты

Habetdin 26-10-2010 17:06 1527926

Вложений: 1
Цитата:

Цитата Imitri7
если просто объединить то вот что выйдет »

Прикрепил к сообщению..

THE GUILTY GOD,
Цитата:

Цитата THE GUILTY GOD
1.jpg »

У вас дублируется процедура InitializeWizard(), нужно их объединить.

Цитата:

Цитата STRAYKER
чо за трабл ??? »

Телепаты в отпуске :not-me:

Imitri7 26-10-2010 18:33 1527994

Habetdin, спасиб большое, а еще как сделать чтоб окошко нельзя перемешать по экрану?

serg aka lain 26-10-2010 18:49 1528008

Цитата:

Цитата shao
если это будет параметр реестра , а не раздел. »

RegDeleteValue(HKCU, 'Software\MyProg', 'Name');

STRAYKER 26-10-2010 19:34 1528044

Habetdin,
ПОМОГИТЕ
Цитата:

Цитата STRAYKER
когда добавляю скрипт с картинкой на весь инсталятор то оно не выносит ярлыков и не создаёт папку в пуск
А когда убираю скрипт с кодом на отоброжение картинок на всех страницах инстолятора оно работает нормально чо за трабл ??? »


Serega 26-10-2010 20:08 1528066

Цитата:

Цитата Imitri7
как сделать чтоб окошко нельзя перемешать по экрану? »

Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra64
InternalCompressLevel=ultra64
SolidCompression=yes

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

[Code]
function GetSystemMenu(Wnd: HWND; bRevert: Boolean): HWND; external 'GetSystemMenu@user32.dll stdcall';
function RemoveMenu(hMenu: HWND; uPosition: Integer; uFlags: Longint): Boolean; external 'RemoveMenu@user32.dll stdcall';

procedure InitializeWizard();
begin
  RemoveMenu(GetSystemMenu(WizardForm.Handle, False), $F010, 0);
end;



Цитата:

Цитата STRAYKER
когда добавляю скрипт с картинкой на весь инсталятор то оно не выносит ярлыков и не создаёт папку в пуск
А когда убираю скрипт с кодом на отоброжение картинок на всех страницах инстолятора оно работает нормально чо за трабл ??? »

Посмотрите внимательно свой скрипт, видимо где-то происходит ошибка при добавлении кода с картинкой...

STRAYKER 26-10-2010 20:38 1528086

Serega,
а можно я сюда скину его (скрипт) а вы посмотрите ???

Потомушто я в них неочинь хорошо шарю :sorry: :(

Одна надежна только на вас

Habetdin 26-10-2010 20:46 1528095

Цитата:

Цитата STRAYKER
а можно я сюда скину его (скрипт) а вы посмотрите ??? »

Не можно, а нужно :)
О чем писалось вчера:
Цитата:

Цитата Habetdin
Выложите проблемную часть скрипта »


Imitri7 26-10-2010 21:02 1528106

Habetdin, если делать скриптом что дал ты вот что выходит
а если просто объединить то

как убрать кнопку отмены на странице завершения?

kenny_danger 26-10-2010 22:15 1528161

Цитата:

[InstallDelete]
Type: files; Name: "{app}\File.txt"
Type: filesandordirs; Name: "{app}\Path";
а вот как сделать чтоб удалось все в папке {app}\Path кроме определенного файла

Serega 27-10-2010 07:17 1528359

Цитата:

Цитата kenny_danger
как сделать чтоб удалось все в папке {app}\Path кроме определенного файла »

Без доп. манипуляций, никак... Пути решения:
1. Прописать удаление файлов и папок через код, т.е. пишите функцию удаления в которой перебираете все вложенные папки и файлы и если имя не совпадает с вашим нужным файлом, то удаляете;
2. Используем BeforeInstall и AfterInstall
Пример
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra64
InternalCompressLevel=ultra64
SolidCompression=yes

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

[InstallDelete]
Type: filesandordirs; Name: {app}\Path; BeforeInstall: MyBeforeInstall; AfterInstall: MyAfterInstall

[Code]
procedure MyBeforeInstall;
begin
  // здесь копируем нужный файл, допустим в ExpandConstant('{tmp}')
end;

procedure MyAfterInstall;
begin
  // здесь копируем его обратно
end;


j8r60 27-10-2010 09:26 1528398

Кто-нибудь подскажите пожалуйста как правильно в этом коде прописать реестр

Код:

function InitializeSetup: Boolean;
 var
  path: string;
  res: Integer;
begin
  Result:= True;
  if RegValueExists(HKLM, 'Software\Что нужно указать', 'InstallPath') then
    if RegQueryStringValue(HKLM, 'Software\Что нужно указать', 'InstallPath', path) then
      if FileExists(path + '\xrEngine.exe') then
  if MsgBox('Запустить S.T.A.L.K.E.R. - Чистое Небо?', mbConfirmation, MB_YESNO) = IDYES then
    begin
      Exec(path + '\xrEngine.exe', '', '', SW_SHOW, ewWaitUntilTerminated, res);
      Result:= False;
    end
  else Result:= False;
end;


Serega 27-10-2010 10:25 1528442

Цитата:

Цитата j8r60
как правильно в этом коде прописать реестр »

Не совсем понял, что именно вы хотите, вот описание из Справки на русском:
Цитата:

Цитата из Справки
Support function: RegQueryStringValue

Образец:

function RegQueryStringValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultStr: String): Boolean;

Описание:

Запрашивает указанные REG_SZ или REG_EXPAND_SZ ключи/параметры реестра и возвращает значение в ResultStr. Возвращает True при успешном завершении. При возвращенном False ResultStr не изменяется.


j8r60 27-10-2010 10:58 1528466

Вот реестр от S.T.A.L.K.E.R. Чистое Небо

Код:

[Registry]
Root: HKLM; Subkey: "Software\GSC Game World"; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: "Software\GSC Game World\STALKER-STCS"; Flags: uninsdeletekey
Root: HKLM; Subkey: "Software\GSC Game World\STALKER-STCS"; ValueName: "InstallPath"; ValueType: String; ValueData: "{app}";
Root: HKLM; Subkey: "Software\GSC Game World\STALKER-STCS"; ValueName: "InstallLang"; ValueType: String; ValueData: "ru";
Root: HKLM; Subkey: "Software\GSC Game World\STALKER-STCS"; ValueName: "InstallSource"; ValueType: String; ValueData: "stkcs-rus-pack-r";
Root: HKLM; Subkey: "Software\GSC Game World\STALKER-STCS"; ValueName: "InstallVers"; ValueType: String; ValueData: "1.0010";
Root: HKLM; Subkey: "Software\GSC Game World\STALKER-STCS"; ValueName: "InstallCDKEY"; ValueType: String;
Root: HKLM; Subkey: "Software\GSC Game World\STALKER-STCS"; ValueName: "InstallUserName"; ValueType: String;
Root: HKLM; Subkey: "Software\GSC Game World\STALKER-STCS"; ValueName: "UnInstConfirm"; ValueType: String; ValueData:
Root: HKLM; Subkey: "Software\GSC Game World\STALKER-STCS"; ValueName: "InstallPatchID"; ValueType: Dword; ValueData: "$1";
Root: HKLM; Subkey: "Software\GSC Game World\STALKER-STCS\Keys"; Flags: uninsdeletekey

теперь какие значение припесать в этом коде
Код:

function InitializeSetup: Boolean;
 var
  path: string;
  res: Integer;
begin
  Result:= True;
  if RegValueExists(HKLM, 'Software\Что нужно указать', 'InstallPath') then
    if RegQueryStringValue(HKLM, 'Software\Что нужно указать', 'InstallPath', path) then
      if FileExists(path + '\xrEngine.exe') then
  if MsgBox('Запустить S.T.A.L.K.E.R. - Чистое Небо?', mbConfirmation, MB_YESNO) = IDYES then
    begin
      Exec(path + '\xrEngine.exe', '', '', SW_SHOW, ewWaitUntilTerminated, res);
      Result:= False;
    end
  else Result:= False;
end;


Serega 27-10-2010 12:25 1528523

Цитата:

Цитата j8r60
какие значение припесать в этом коде »

Код:

////////////////////////////
    if RegQueryStringValue(HKLM, 'Software\GSC Game World\STALKER-STCS', 'InstallPath', path) then
////////////////////////////


STRAYKER 27-10-2010 13:07 1528571

Serega,
Вот етот скрипт и инсталятор сложений по етому скрипту
Скрипт и инсталятор

j8r60 27-10-2010 13:52 1528602

Serega

Спасибо все разобрался проста сам ошибся мне надо была всего-лишь дописать правильно путь к exe файлу у меня был путь \xrEngine.exe а надо было \bin\xrEngine.exe

j8r60 27-10-2010 14:45 1528648

Serega

Рано по радовался когда запускаешь S.T.A.L.K.E.R. Чистое Небо он выдает ошибку я знаю почему эта ошибка произошла этот файл xrEngine.exe его надо запускать с WorkingDir: как и в секций [Icons] вообще S.T.A.L.K.E.R. Чистое Небо - S.T.A.L.K.E.R. Зов Припяти они запускаются только с WorkingDir: теперь как и куда припесать чтобы этот файл xrEngine.exe запустился с WorkingDir:

R.i.m.s.k.y. 27-10-2010 16:49 1528766

j8r60,
Держи ,,,,,,,,,,
Расставь сам в сообщении
Как бонус - скрипт (кусок) и сообщение ошибки.

j8r60 27-10-2010 17:15 1528785

R.i.m.s.k.y.

Не совсем понял твое сообщение если нужен скриншот то вот http://rghost.ru/3061338.view

R.i.m.s.k.y. 27-10-2010 17:29 1528798

Цитата:

Цитата j8r60
Не совсем понял твое сообщение если нужен скриншот то вот http://rghost.ru/3061338.view »

Первое - расставь запятые, трудно без них читать, сплошной поток сознания.
Второе - скрипт в студию, телепатов на форуме нет.
И третье - желательно описание на каком шаге происходит ошибка.

j8r60 27-10-2010 17:42 1528808

Цитата:

Цитата R.i.m.s.k.y.
И третье - желательно описание на каком шаге происходит ошибка. »

на этом самом скрипте, мне надо чтобы он запускался с WorkingDir:

Вот скрипт
Код:

function InitializeSetup: Boolean;
var
  path: string;
  res: Integer;
begin
  Result:= True;
  if RegValueExists(HKLM, 'Software\GSC Game World\STALKER-STCS', 'InstallPath') then
    if RegQueryStringValue(HKLM, 'Software\GSC Game World\STALKER-STCS', 'InstallPath', path) then
      if FileExists(path + '\bin\xrEngine.exe') then
  if MsgBox('Запустить S.T.A.L.K.E.R. - Чистое Небо?', mbConfirmation, MB_YESNO) = IDYES then
    begin
      Exec(path + '\bin\xrEngine.exe', '', '', SW_SHOW, ewWaitUntilTerminated, res);
      Result:= False;
    end
  else Result:= False;
end;


R.i.m.s.k.y. 28-10-2010 08:29 1529173

Цитата:

Цитата j8r60
мне надо чтобы он запускался с WorkingDir »

предположу что надо прописать в параметрах рабочу папку path + '\bin'
Exec(path + '\bin\xrEngine.exe', '', path + '\bin', SW_SHOW, ewWaitUntilTerminated, res);

STRAYKER 28-10-2010 15:13 1529511

люди где скачать inno setup preprocessor ??????????

kotkovets 28-10-2010 15:19 1529515

Цитата:

Цитата STRAYKER
люди где скачать inno setup preprocessor ?????????? »

http://forum.oszone.net/showthread.p...99#post1201499 :)

j8r60 28-10-2010 19:53 1529698

Цитата:

Цитата R.i.m.s.k.y.
Exec(path + '\bin\xrEngine.exe', '', path + '\bin', SW_SHOW, ewWaitUntilTerminated, res); »

Без изменений таже ошибка вылетает, игра запускается с табличкой ошибки как показано на скриншоте

Serega 28-10-2010 21:35 1529755

Цитата:

Цитата Neutron
Как реализовать так чтобы при установке, распаковывались ZIP архивы, с тем учётом что сами архивы не паковались вместе с инсталятором, а лежали рядом »

Почитайте в Справке про константу {src}, пример распаковки внешних архивов есть в шапке темы в Inno Setup Scripting...
Вы не поверите, сколько всего интересного можно найти прочитав Справку и хотя бы бегло просмотрев примеры скриптов...
Простой пример:
Код:

procedure CurStepChanged(CurStep: TSetupStep);
var
  ResultCode: Integer;
  app, arc, dir: string;
begin
  if CurStep = ssPostInstall then
    begin
      app := ExpandConstant('{src}\7za.exe'); // консольная утилита 7z
      arc := ExpandConstant('{src}\ARC.7z');  // сам архив
      dir := ExpandConstant('{app}');          // путь распаковки
      Exec(app, 'x "' + arc + '" -y -o"' + dir + '"', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode); //ключи командной строки 7z
    end;
end;

Цитата:

Цитата j8r60
таже ошибка вылетает »

Вы внимательно прочитайте, что именно написано в сообщении об ошибке?
Ошибка то, не инсталлятора, а самой программы, которую вы запускаете.
Программа не может найти файл fsgame.ltx о котором и говориться в сообщении, что он должен находиться в одном каталоге с программой, а его видимо там нет, отсюда и ошибка.

j8r60 29-10-2010 03:00 1529885

Serega

Вы меня точно не поняли что я имел ввиду, я знаю что ошибка происходит не в инсталляторе, этот файл fsgame.ltx он у меня имеется в папке с игрой, дело не в ней хоть ошибка указывает на то что fsgame.ltx нет, если запустить игру с рабочего стола то игра запускается бз ошибки, игру надо запускать с WorkingDir: как в секций
Код:

[Icons]
Name: "{group}\S.T.A.L.K.E.R. - Чистое Небо"; Filename: "{app}\bin\xrEngine.exe"; WorkingDir: "{app}\bin";
Name: "{commondesktop}\S.T.A.L.K.E.R. - Чистое Небо"; Filename: "{app}\bin\xrEngine.exe"; WorkingDir: "{app}";
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\S.T.A.L.K.E.R. - Чистое Небо"; Filename: "{app}\bin\xrEngine.exe"; WorkingDir: "{app}";


Habetdin 29-10-2010 07:13 1529911

j8r60,
Цитата:

Цитата j8r60
WorkingDir: "{app}"; »

Если path={app}, то:
Код:

Exec(path + '\bin\xrEngine.exe', '', path, SW_SHOW, ewWaitUntilTerminated, res);

R.i.m.s.k.y. 29-10-2010 08:29 1529933

Цитата:

Цитата j8r60
Без изменений таже ошибка вылетает, игра запускается с табличкой ошибки как показано на скриншоте »

Попробуй
Exec(path + '\bin\xrEngine.exe', '', path, SW_SHOW, ewWaitUntilTerminated, res);
А вообще на панели есть кнопка "Run" - запуск с отслеживанием (зеленый квадрат с белым треугольничком на панели, кнопка F9), проект скомпилится и запустится, при этом инно будет отслеживать ошибки, где возникнет ошибка - инно сразу подсветит.

j8r60 29-10-2010 09:54 1529972

Цитата:

Цитата R.i.m.s.k.y.
Попробуй Exec(path + '\bin\xrEngine.exe', '', path, SW_SHOW, ewWaitUntilTerminated, res); »

Все работает отлично :up большое тебе спасибо, и всем кто пытался помочь, вот блин капризный код оказался столько шума сколько ребят подключились помогать жесть!!!

R.i.m.s.k.y. 29-10-2010 10:56 1530000

Цитата:

Цитата j8r60
сколько ребят подключились »

Да похоже тут процентов 40 проектов - этот самый сталкер

by_pbh 29-10-2010 12:28 1530059

how to make .bin files

example: prince of persia the forgotten sands by R.G. Mechanics
when extracting files in {pf}. there are 2 files data1a.bin and data1b.bin
how can I do data1a.bin and data1b.bin
sorry for my BAD English

STRAYKER 29-10-2010 13:38 1530125

Serega,Скрипт и инсталятор

Serega 29-10-2010 16:26 1530258

Цитата:

Цитата by_pbh
how to make .bin files »

You need to use DiskSpanning in section [Setup], the directive description, can read in Help to Inno Setup
Цитата:

Цитата by_pbh
sorry for my BAD English »

My English, too not at height... ;)

Henry_Townsend 29-10-2010 16:33 1530268

Доброго времени суток. Не так давно столкнулся с одним обидным косяком при текстурировании кнопок - если язык установки русский, надписи "Установить" и "Завершить" очень сползают вправо, хотя с английскими надписями всё впорядке. Отступ для всех кнопок задаётся одним параметром, и его изменение ведёт до смещения остальных надписей(что тоже не очень красиво). Пробовал задать отступ на конкретных страницах, но, судя по страшных ошибках, знаний явно не хватает. Можно ли как-то это реализовать ?

P.S.пересмотрел четверть форума, а ответа так и не нашёл.

R.i.m.s.k.y. 29-10-2010 16:36 1530276

Цитата:

Цитата Serega
My English, too not at height »

Шпрехен зе инглиш? Парлеву ля рюсский? ;-)

Serega 29-10-2010 16:57 1530292

Цитата:

Цитата STRAYKER
Serega,Скрипт и инсталятор »

т.е. вы мне предлагаете дописать за вас инсталлятор? я же уже говорил в своё время, что для остальных страниц пишите по аналогии...

Цитата:

Цитата Henry_Townsend
столкнулся с одним обидным косяком при текстурировании кнопок - если язык установки русский, надписи "Установить" и "Завершить" очень сползают вправо, хотя с английскими надписями всё впорядке. Отступ для всех кнопок задаётся одним параметром, и его изменение ведёт до смещения остальных надписей(что тоже не очень красиво) »

Где-то уже попадался такой вопрос, уже не помню где, но если не ошибаюсь решение было таким: Label.Alignment := taCenter;
т.е. центрирование надписи...

Цитата:

Цитата R.i.m.s.k.y.
Шпрехен зе инглиш? »

Шпрехен, но не много...

Henry_Townsend 29-10-2010 17:12 1530299

Цитата:

Цитата Serega
Где-то уже попадался такой вопрос, уже не помню где, но если не ошибаюсь решение было таким: Label.Alignment := taCenter;
т.е. центрирование надписи... »

В скрипте такая строка присутствует, но ничего не даёт ( закоментировал,разкоментирова - эффект нулевой)

Serega 29-10-2010 17:21 1530306

Цитата:

Цитата Henry_Townsend
закоментировал,разкоментирова - эффект нулевой »

попробуйте поставить taRightJustify

Imitri7 29-10-2010 17:21 1530307

Henry_Townsend, разгадка была примерно десять страниц назад
http://forum.oszone.net/post-1523534-2510.html

Henry_Townsend 29-10-2010 17:32 1530316

Цитата:

Цитата Serega
попробуйте поставить taRightJustify »

Вы гений! А то я тут уже половину страниц форума перелистал в поиске правды.

Цитата:

Цитата Imitri7
разгадка была примерно десять страниц назад »

Я задавал вопрос ещё раньше, но меня елементарно послали, а этот фанат механиков своего таки добился, несправедливо! :)

Imitri7 29-10-2010 17:59 1530339

Henry_Townsend, я не фан мехов, свой стайл вырабатываю

by_pbh 29-10-2010 18:22 1530364

Serega on dvd are:
redist
autorun.inf
data1.bin
data2.bin
data3.bin
data4.bin
Setup.exe

but when you install in {pf} the 2 files are extracted data1a.bin and data1b.bin
what software used to make the two files: data1a.bin and data1b.bin
sorry for my bad english

nik1967 29-10-2010 18:36 1530373

by_pbh,
Create archive FreeArc, and change the extension with *.arc on *.bin
Simply rename
Forgive for my bad English too
Цитата:

Цитата by_pbh
sorry for my bad english »

Can is easier translate into Russian?

Henry_Townsend 29-10-2010 18:46 1530381

Цитата:

Цитата Imitri7
я не фан мехов, свой стайл вырабатываю »

Что не говори, а инсталятор у них простенький и со вкусом - ни разу мне на глаза не попадались настолько "нормальные" творения других самоделкинов - почти все с каким-то изьяном, либо авторы слишком перестараются
.

Serega 29-10-2010 18:51 1530383

Цитата:

Цитата by_pbh
what software used to make the two files: data1a.bin and data1b.bin »

Simple example
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
; we specify, that we wish to divide into some disks
DiskSpanning=yes
; setup-1a.bin, setup-1b.bin and so on
SlicesPerDisk=2
; we specify the demanded size in bytes... here the diskette size, i.e. 1,44 MB is specified
DiskSliceSize=1457664

Or it is necessary, that there was a name data1a.bin?

Imitri7 29-10-2010 23:30 1530588

Henry_Townsend, как я убедился, сложно повторить окно распаковки :(

Imitri7 30-10-2010 13:43 1530855

del

STRAYKER 30-10-2010 14:43 1530923

как сделать чтобы файлы были не >>>> Setup-1a.bin Setup-1b.bin ......
а было Setup-1.bin Seup-2.bin

somename 30-10-2010 15:38 1530964

Как полчить домашнюю папку пользователя который запустил инсталл? {userdocs} возвращает папку админа, так как для инстала нужны права админа, %USERPROFILE возвращает также папку админа. {commondocs} не подходит

shao 30-10-2010 17:18 1531020

Код:

Filename: "{sys}\cmd.exe"; Parameters: /c Reg Delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "ShellPicture" /f; Flags: runhidden
Подскажите пож. , как правильно оформить этот код.
При компиляции виходит ошибка о кавычках :

Код:

Mismatched or misplaced quotes on parameter "Parameters"
И как правильно кавычки указать. Уже пробовал вот так :

Код:

Filename: "{sys}\cmd.exe"; Parameters: "/c Reg Delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "ShellPicture" /f"; Flags: runhidden
Всё-равно ошибка.

kotkovets 30-10-2010 17:39 1531047

shao,
Попробуй так
Код:

Filename: {sys}\reg.exe; Parameters: Delete ""HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"" /v ""ShellPicture"" /f""; Flags: runhidden

Serega 30-10-2010 17:50 1531058

Цитата:

Цитата STRAYKER
а было Setup-1.bin Seup-2.bin »

Удалите из секции [Setup] - SlicesPerDisk

Цитата:

Цитата somename
Как полчить домашнюю папку пользователя который запустил инсталл? {userdocs} возвращает папку админа, так как для инстала нужны права админа, %USERPROFILE возвращает также папку админа »

А при чем тут права для инсталлятора и папка текущего пользователя? Простой пример:
читать дальше »

Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.

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

[Code]
function InitializeSetup(): Boolean;
begin
  MsgBox(ExpandConstant('{%USERPROFILE}'), mbInformation, MB_OK);
end;


После запуска инсталлятора, появится сообщение в котором будет указан полный путь до папки текущего пользователя, из под которого запущен инсталлятор.

Цитата:

Цитата shao
Уже пробовал вот так : »

Удвойте внутренние кавычки, т.е. должно быть:
Код:

Filename: "{sys}\cmd.exe"; Parameters: "/c Reg Delete ""HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"" /v ""ShellPicture"" /f"; Flags: runhidden
Цитата:

Цитата kotkovets
Попробуй так »

не правильно, все кавычки внутри параметров, если есть, то должны быть двойными, а обрамляться одинарными

shao 30-10-2010 18:20 1531084

Исходя из
Цитата:

Цитата Serega
все кавычки внутри параметров, если есть, то должны быть двойными, а обрамляться одинарными »

вариант от kotkovets должен быть такой
Код:

Filename: {sys}\reg.exe; Parameters: "Delete ""HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"" /v ""ShellPicture"" /f"; Flags: runhidden
Верно ?

kotkovets 30-10-2010 18:31 1531090

Цитата:

Цитата shao
Filename: {sys}\reg.exe; Parameters: "Delete ""HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"" /v ""ShellPicture"" /f"; Flags: runhidden »
Верно ? »

Верно, если путь к системной папке нету пробелов
Код:

Filename: "{sys}\reg.exe"; Parameters: "Delete ""HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"" /v ""ShellPicture"" /f"; Flags: runhidden
Работает и так, если путь к системной папке есть пробелы или нету

superalex 31-10-2010 02:41 1531358

Такая проблема в папке maps большое количество файлов, примерно на 1GB после компиляции установщик весит 611мб. Проблема в том что после компиляции ярлык pack.ico не прикрепляется то есть устанавливается обычный системный ярлык. Проверял скрипт на нескольких файлах в папке - все нормально. Как сделать чтобы при больших количествах файлов прикреплялся нормально ярлык к установщику? Моя версия inno setup 5.3.9 unicode

код:
Код:

[Setup]
AppName=BigMapPack
AppVersion=1.0
AppPublisher=Publisher
AppPublisherURL=http://www.site.ru./
AppVerName=BigMapPack version 1.0
DefaultDirName={pf}\Steam\SteamApps\<your steam login>
Compression=lzma2
SetupIconFile=pack.ico      <------- этот ярлык не крепится при большом количестве файлов
WizardImageFile=logo.bmp
Uninstallable=no

[Files]
Source: "maps\*"; DestDir: "{app}\counter-strike source\cstrike\maps";

[Languages]
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"
Name: "en"; MessagesFile: "compiler:Default.isl"
[Messages]
ru.SelectDirBrowseLabel=Вместо <your steam login> введите ваш логин в steam, программа сама установит в директорию с:\program files\steam\SteamApps\<ваш логин в steam>\counter-strike source\cstrike\maps
en.SelectDirBrowseLabel=Enter your steam login, end click next


somename 31-10-2010 07:53 1531409

Цитата:

Цитата Serega
А при чем тут права для инсталлятора и папка текущего пользователя? Простой пример: »

Спасибо за ответ! Но вот в чем проблема, когда на виндовс 7 запускаешь инсталятор, он спрашивает пароль админа, и запускает инсталл от его имени, в итоге твоя программа вывела путь к папке админа а не к папке запустившего юзера..

Serega 31-10-2010 08:45 1531417

Цитата:

Цитата somename
в итоге твоя программа вывела путь к папке админа а не к папке запустившего юзера. »

В том то всё и дело, что на данный момент для инсталлятора, админ и есть текущий пользователь, т.к. именно он и запустил инсталлятор...
Да, конечно интересная ситуация, но попробуйте так:
Пример

Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra64
InternalCompressLevel=ultra64
SolidCompression=yes

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

[Code]
function SHGetSpecialFolderPath(hwndOwner: HWND; lpszPath: PAnsiChar; nFolder: Integer; fCreate: BOOL): BOOL;
  external 'SHGetSpecialFolderPathA@shell32.dll stdcall';

const
  MAX_PATH = 260;
  // Папка пользователя (обычно C:\Documents and Settings\username)
  CSIDL_PROFILE                = $28;

function GetSpecialPath(CSIDL: Word): string;
var
  s:  string;
begin
  SetLength(s, MAX_PATH);
  if not SHGetSpecialFolderPath(0, PAnsiChar(s), CSIDL, True) then s := '';
  Result := PAnsiChar(s);
end;

function InitializeSetup(): Boolean;
begin
  // определим расположение папки пользователя
  MsgBox(GetSpecialPath(CSIDL_PROFILE), mbInformation, MB_OK);
end;


Запустите инсталлятор от имени админа и какой путь покажет в сообщении?
Ну откровенно говоря, мне кажется, что должен показать папку админа...

somename 31-10-2010 08:49 1531420

Цитата:

Цитата Serega
Запустите инсталлятор от имени админа и какой путь покажет в сообщении?
Ну откровенно говоря, мне кажется, что должен показать папку админа... »

Так и есть, папка админа. На сайте инно сетап еще было написано про жту проблему но про решение ничего не сказано.
p.s. я и батник бытался запускать после установки, но он также от админа запусскается..

Imitri7 31-10-2010 10:25 1531468

как сделать выбор записей реестра в зависимости от выбранных компонентов?

Serega 31-10-2010 11:09 1531490

Цитата:

Цитата somename
Так и есть, папка админа. »

Немного поразмыслив и поковырявшись в реестре... накидал такой пример, попробуйте:
Пример

Ссылка на исправленный скрипт


при редактировании ссылки, случайно удалил ответ Imitri7

somename 31-10-2010 11:40 1531514

Цитата:

Цитата Serega
Немного поразмыслив и поковырявшись в реестре... накидал такой пример, попробуйте: »

На windows 7 пустое окошко.. Ладно, видимо придется обратится к другому инсталлеру

R.i.m.s.k.y. 01-11-2010 08:58 1532106

Цитата:

Цитата somename
Ладно, видимо придется обратится к другому инсталлеру »

Да ладно, к другому инсталлеру, напишите сюда нормальный путь к папке на диске ЦЭ, и в скрипте Сереги я бы подставил UpperCase()

(Pos(UpperCase(LogonUser), UpperCase(Result))

чтобы все буквы при сравнении были большими.


А вообще я бы в коде подписал

MsgBox('{localappdata} ' + ' = ' + ExpandConstant('{localappdata}'), mbInformation, MB_OK);
MsgBox('{userappdata}' + ' = ' + ExpandConstant('{userappdata}'), mbInformation, MB_OK);
MsgBox('{commonappdata}' + ' = ' + ExpandConstant('{commonappdata}'), mbInformation, MB_OK);

ну и тд перебрать все константы:
{userdesktop} & {commondesktop} *
{userdocs} & {commondocs}
{userfavorites} & {commonfavorites} *
{userfavorites}.
{userprograms} & {commonprograms} *
{userstartmenu} & {commonstartmenu} *
{userstartup} & {commonstartup} *
{usertemplates} & {commontemplates} *

Будет видно какая константа на какую папку ссылается


Когда у меня возникла необходимость в папках юзера я тоже писал код, похожий как у Сереги, а потом просто сделал перебор папок с выводом на экран - и о чудо, папка нашлась в списке ;)

STRAYKER 01-11-2010 16:48 1532381

как сделать чтобы в конце установки игры , предлагало установить дополнительные программы

R.i.m.s.k.y. 01-11-2010 16:53 1532388

Цитата:

Цитата STRAYKER
как сделать чтобы в конце установки игры , предлагало установить дополнительные программы »

[RUN]
Filename: {src}\directx\dxsetup.exe; Description: установить Дирекс; Flags: shellexec skipifsilent postinstall

самый главный флаг - postinstall, именно он указывает будет ли строчка с выбором.
shellexec - запустить от оболочки (полезно для файлов помощи, страничек...)
skipifsilent и так понятно

Henry_Townsend 01-11-2010 18:55 1532474

Доброго времени суток. Обращаюсь с таким нелёгким вопросом - как можно запретить выполнение "LoadButtonImage(WizardForm.CancelButton,bidCancel)" на странице завершения, если запуск функции производится на странице установки?

Habetdin 01-11-2010 22:14 1532614

superalex, попробуйте посмотреть на свой инсталлятор в Total Commander - иконка будет показываться. А то, что ее в проводнике не видно - "фича" от майкрософт :)
Можете сделать так:
Код:

[Setup]
DiskSpanning=true

Тогда в проводнике тоже будет видна иконка, а инсталлятор разделится на несколько "кусков" — *exe + *bin

Serega 02-11-2010 10:28 1532888

Цитата:

Цитата Neutron
Здрасти приехали, я ему про Фому а он мне про Ерёму, не работает у меня твой код »

Ну во первых, мы с Вами вместе водку не пили и не являемся близкими знакомыми или тем более друзьями... тон смените и не надо тыкать.
Цитата:

Цитата Neutron
в справке там рядом не стоял мой вопрос. »

В Справке и не будет прямых ответов, а лишь описание функционала, просто всегда нужно немного подумать...
Цитата:

Цитата Neutron
1) Мне простая распаковка не впилась! »

Ну я же не знаю, что конкретно там у Вас впилось...
Цитата:

Цитата Neutron
2) Нужна распаковка только zip а не 7zip или тем более rar. »

Ну так вы немного хоть подумайте, какие архивы умеет распаковывать утилита 7z
Цитата:

Цитата Neutron
3) Распаковка должна происходить только тогда когда этот компонент выбран. »

Так и привижите Вашу распаковку к выбору определённого компонента, прочитайте в Справке про BeforeInstall и AfterInstall, так же почитайте про IsComponentSelected
Цитата:

Цитата Neutron
4) Распаковка только в графическом виде. »

Здесь у Вас несколько путей решения, изменить Ваш архив на самораспаковывающийся, либо использовать сторонние dll'ки для распаковки архивов с отображением в прогрессбаре, но насколько помню ни у одной нет поддержки обычных .zip архивов, хотя могу и заблуждаться, посмотрите ISDone.dll

somename 02-11-2010 18:19 1533267

Цитата:

Цитата R.i.m.s.k.y.
Да ладно, к другому инсталлеру, напишите сюда нормальный путь к папке на диске ЦЭ, и в скрипте Сереги я бы подставил UpperCase()
(Pos(UpperCase(LogonUser), UpperCase(Result))
чтобы все буквы при сравнении были большими. »

Сделал! Не работает на седьмой винде

R.i.m.s.k.y. 03-11-2010 09:08 1533644

Цитата:

Цитата somename
Сделал! Не работает на седьмой винде »

Какую ошибку пишет?
Есть еще функция AnsiUppercase, она даже предпочтительнее, тк использует текущую кодировку системы.

А перебирать системные папки через MSGbox пробовали? нету нужной папки?

by_pbh 03-11-2010 14:54 1533904

I need a code for extracting files from dvd: bin\gamedata.arc in {app}
sorry for my bad english

R.i.m.s.k.y. 03-11-2010 15:22 1533923

Цитата:

Цитата by_pbh
sorry for my bad english »

your russian is more terrible?

STRAYKER 03-11-2010 18:13 1534028

У каво есть Stem.cjstyles ?
Если не жалко дайте скачать !?

Serega 03-11-2010 20:02 1534101

Цитата:

Цитата somename
Не работает на седьмой винде »

Вот код... проверил на W7, Vista под рукой нет, поэтому добавил условие проверки, что не Vista:
Пример

Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra64
InternalCompressLevel=ultra64
SolidCompression=yes

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

[Code]
function GetLogonUserProfile: string;
{ функция вернёт полный путь до папки пользователя, вошедшего в систему тестировалась на XP и W7 }
var
  Version: TWindowsVersion;
  RootKey: Integer;
  SubKeyName: string;
  ValueName: string;
  LogonUser: string;
  ActiveUser: string;
begin
  try
    Result := '';
    GetWindowsVersionEx(Version);
    if Version.NTPlatform then
      begin
        case Version.Major of
          5:  begin  // XP
                case IsWin64 of
                  True : RootKey := HKEY_CURRENT_USER_64;
                  False: RootKey := HKEY_CURRENT_USER;
                end;
                RootKey := HKEY_CURRENT_USER;
                SubKeyName := 'Software\Microsoft\Windows\CurrentVersion\Explorer';
                ValueName := 'Logon User Name';
              end;
          6: // W7 и Vista
            if Version.Minor = 1 then // здесь проверяем, что не Vista, т.к. на Vista я не тестировал и не знаю результата...
              begin
                case IsWin64 of
                  True : RootKey := HKEY_LOCAL_MACHINE_64;
                  False: RootKey := HKEY_LOCAL_MACHINE;
                end;
                SubKeyName := 'SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI';
                ValueName := 'LastLoggedOnUser';
              end;
        end;
        if RegQueryStringValue(RootKey, SubKeyName, ValueName, LogonUser) then
          begin
            while (LogonUser <> '') and ((LogonUser[1] = '.') or (LogonUser[1] = '\')) do
              Delete(LogonUser, 1, 1);
            ActiveUser := ExpandConstant('{%USERNAME}');
            Result := ExpandConstant('{%USERPROFILE}');
            if (Result <> '') and (Pos(Lowercase(LogonUser), Lowercase(Result)) = 0) then
              StringChange(Result, ActiveUser, LogonUser);
          end;
      end;
  finally
    SetLength(SubKeyName, 0);
    SetLength(ValueName, 0);
    SetLength(LogonUser, 0);
    SetLength(ActiveUser, 0);
  end;
end;

function InitializeSetup(): Boolean;
begin
  MsgBox(GetLogonUserProfile, mbInformation, MB_OK);
end;


Serega 03-11-2010 20:21 1534115

Цитата:

Цитата by_pbh
I need a code for extracting files from dvd: bin\gamedata.arc in {app} »

Look on this site, as there there are usage examples.

serg aka lain 03-11-2010 21:05 1534163

Цитата:

Цитата Neutron
P.S Кстати это не та прога которая в 7зипе лежит, а эта вообще какая то замороченая, но зато распаковка в графическом режиме!»

Смотрел, действительно, софтинка может извлекать и .zip и .7z,
но ещё к ней нужна 7-zip32.dll, без нее не хочет.

serg aka lain 03-11-2010 22:50 1534256

Цитата:

Цитата Serega
Вот код... проверил на W7 »

Ради интереса проверил у себя (Win7 64), показывает пустое окно.
имхо, нужно доработать этот кусок кода
Код:

            if Version.Minor = 1 then // здесь проверяем, что не Vista, т.к. на Vista я не тестировал и не знаю результата...
              begin
                if IsWin64 then
                  RootKey := HKEY_LOCAL_MACHINE_64
                else
                RootKey := HKEY_LOCAL_MACHINE;


somename 03-11-2010 23:23 1534286

Цитата:

Цитата Serega
Вот код... проверил на W7, Vista под рукой нет, поэтому добавил условие проверки, что не Vista: »

эх.. Может у тебя пароль админа не спрашивается когда под юзером сидишь? У меня - опять путь к папке админа, хотя я под юзером сижу..

Serega 04-11-2010 00:28 1534318

Цитата:

Цитата serg aka lain
проверил у себя (Win7 64) »

да... про 64 битные, я и забыл, сейчас исправлю... а после такого изменения, показывает нормально?

Цитата:

Цитата somename
Может у тебя пароль админа не спрашивается когда под юзером сидишь? »

всё спрашивает, как положено и пароль ввожу...
Прочитайте у себя в реестре раздел - HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI, какое значение LastLoggedOnUser ?

serg aka lain 04-11-2010 00:44 1534326

Цитата:

Цитата Serega
а после такого изменения, показывает нормально? »

:yes:

serg aka lain 04-11-2010 02:28 1534362

Цитата:

Цитата Neutron
какие ключи вставлять в инно?! »

Там вроде всё просто, вот пример без привязки к дополнительным задачам.
Код:

[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program

[Files]
Source: un7zip.exe; DestDir: {tmp}; Flags: ignoreversion;
Source: 7-zip32.dll; DestDir: {tmp}; Flags: ignoreversion;
Source: un7zip.ini; DestDir: {tmp}; Flags: ignoreversion;
Source: Data.zip; DestDir: {app}; Flags: ignoreversion nocompression deleteafterinstall;

[Run]
Filename: {tmp}\un7zip.exe; Parameters: """{app}\*.zip"" ""{app}"" ""{app}\extract.log"""; Flags: waituntilterminated;

[UninstallDelete]
Type: filesandordirs; Name: {app}\Data;
Type: files; Name: {app}\extract.log;


somename 04-11-2010 10:48 1534473

Цитата:

Цитата Serega
Прочитайте у себя в реестре раздел - HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI, какое значение LastLoggedOnUser ? »

значение соападает с именем пользователя
т.е. то что надо.
но скрипт выводи расположение папки админа

necromanster 04-11-2010 23:45 1535018

Господа. Прошу помощи. Всю голову себе сломал, но ни чего не получается. Одна надежда на профи, то есть на вас.

Пытался сделать репак на Fallout New Vegas, со всеми дополнениями, русиком, и кряком.

Но при запуске игры, она пишет, что не видит INI файлы. То есть лаучер не работает, В игре начинаются баги, такие как крутящиеся головы, народ не ходит, а просто ездит. Но при замене файлов реэстра на оригинальные, все встает на место. Прошу подсказать, что сделал не так. Скрипт прилагаю. Заранее благодарен.

Код:

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

[Setup]
DiskSpanning=true
DiskSliceSize=1457664000
AppName=Fallout New Vegas
AppVerName=Fallout New Vegas 1.2
AppPublisher=Bethesda Softworks
AppPublisherURL=Necromant Soft
AppSupportURL=Necromant Soft
AppUpdatesURL=Necromant Soft
DefaultDirName={pf}\Bethesda Softworks\Fallout New Vegas
DefaultGroupName=Fallout New Vegas
AllowNoIcons=yes
OutputDir=G:\инсталятор\1
OutputBaseFilename=setup
WizardImageFile=C:\Program Files (x86)\Smart Install Maker\Bitmaps\Import\Bmp008.bmp
WizardSmallImageFile=C:\Program Files (x86)\Smart Install Maker\Bitmaps\Import\Bmp004.bmp
Compression=none
SolidCompression=true
InternalCompressLevel=none
WindowVisible=true
BackColor=clMaroon

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

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Files]
Source: G:\инсталятор\Fallout New Vegas\FalloutNV.exe; DestDir: {app}; Flags: ignoreversion
Source: G:\инсталятор\Fallout New Vegas\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs

[Icons]
Name: {group}\Fallout New Vegas; Filename: {app}\FalloutNV.exe
Name: {group}\{cm:ProgramOnTheWeb,Fallout New Vegas}; Filename: Necromant Soft
Name: {group}\{cm:UninstallProgram,Fallout New Vegas}; Filename: {uninstallexe}
Name: {commondesktop}\Fallout New Vegas; Filename: {app}\FalloutNV.exe; Tasks: desktopicon; Flags: createonlyiffileexists; WorkingDir: {app}
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\Fallout- New Vegas; Filename: {app}\FalloutNV.exe; Tasks: quicklaunchicon

[Run]
Filename: {app}\FalloutNV.exe; Description: {cm:LaunchProgram,Fallout- New Vegas}; Flags: nowait postinstall skipifsilent

[Registry]
Root: HKLM; SubKey: SOFTWARE\Bethesda Softworks\FalloutNV; ValueType: string; ValueName: Installed Path; ValueData: {app}


serg aka lain 05-11-2010 01:22 1535064

Цитата:

Цитата necromanster
при замене файлов реэстра на оригинальные, все встает на место. »

Ну и допишите эти ключи реестра в свой скрипт.

necromanster 05-11-2010 01:39 1535070

Цитата:

Цитата serg aka lain
Ну и допишите эти ключи реестра в свой скрипт. »

Так я и вписал их:

Код:

[Registry]
Root: HKLM; SubKey: SOFTWARE\Bethesda Softworks\FalloutNV; ValueType: string; ValueName: Installed Path; ValueData: {app}

Я взял файлы реэстра. которые были туда вложены при распаковке оригинального образа (фениксом)

Но что то не стыкуется. Игра их не видит. И по этому все на перекосяк. У меня просто сохранены оригинальные файлы, и после того как я удаляю те которые были вложены в реэстр уже репаком, и заменяю оригинальными, то все работает. Странно. Ведь одно и тоже.

serg aka lain 05-11-2010 02:57 1535085

Цитата:

Цитата necromanster
Странно. Ведь одно и тоже. »

Пробуйте так:
Код:

[Registry]
Root: HKLM; Subkey: SOFTWARE\Bethesda Softworks; Flags: uninsdeletekeyifempty;
Root: HKLM; Subkey: SOFTWARE\Bethesda Softworks\FalloutNV; Flags: uninsdeletekey;
Root: HKLM; Subkey: SOFTWARE\Bethesda Softworks\FalloutNV; ValueType: string; ValueName: Installed Path; ValueData: {app}\;


Henry_Townsend 05-11-2010 17:24 1535537

Вобщем, есть такой скрипт для текстурирования кнопки "Отмена", вынесеную на передний план. Всё хорошо, вот только текстура отображается и на странице завершения установки где самой кнопки нет и быть не должно . Можно ли как-то отключить LoadButtonImage(WizardForm.CancelButton,bidCancel) ?


П.С.Задаю вопрос второй раз и буду благодарен за любую помощь, даже за сообщения, что это в Inno Setup невыполнимо.


читать дальше »

[Setup]
AppName=Test Setup
AppVerName=1.0
DefaultDirName={pf}\Temp
OutputDir=.
AppCopyright=© forum.oszone.net

[Files]
Source: button.bmp; DestDir: {tmp}; Flags: dontcopy;
Source: compiler:Examples\*; DestDir: {app}; Flags: IgnoreVersion recursesubdirs createallsubdirs;

[_code_]
function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';

const
ButtonWidth = 80; //Указываем размер кнопок
ButtonHeight = 23;

bidBack = 0;
bidNext = 1;
bidCancel = 2;
bidDirBrowse = 3;
bidGroupBrowse = 4;

var
ButtonPanel: array [0..4] of TPanel;
ButtonImage: array [0..4] of TBitmapImage;
ButtonLabel: array [0..4] of TLabel;

procedure ButtonLabelClick(Sender: TObject);
var
Button: TButton;
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
case TLabel(Sender).Tag of
bidBack: Button:=WizardForm.BackButton;
bidNext: Button:=WizardForm.NextButton;
bidCancel: Button:=WizardForm.CancelButton;
bidDirBrowse: Button:=WizardForm.DirBrowseButton;
bidGroupBrowse: Button:=WizardForm.GroupBrowseButton;
else
Exit
end
Button.OnClick(Button)
end;

procedure ButtonLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if ButtonLabel[TLabel(Sender).Tag].Enabled then
ButtonImage[TLabel(Sender).Tag].Left:=-ButtonWidth
end;

procedure ButtonLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
end;

procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
Image: TBitmapImage;
Panel: TPanel;
Labl: TLabel;

begin
Panel:=TPanel.Create(WizardForm)
Panel.Left:=AButton.Left
Panel.Top:=AButton.Top
Panel.Width:=AButton.Width
Panel.Height:=AButton.Height
Panel.Tag:=AButtonIndex
Panel.Parent:=AButton.Parent
ButtonPanel[AButtonIndex]:=Panel

Image:=TBitmapImage.Create(WizardForm) //Рисунок который ложится на кнопку
Image.Width:=160 //Обязательно прописать оригинальный размер рисунка
Image.Height:=23
Image.Enabled:=False
Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\button.bmp'))
Image.Parent:=Panel
ButtonImage[AButtonIndex]:=Image

with TLabel.Create(WizardForm) do begin
Tag:=AButtonIndex
Parent:=Panel
Width:=Panel.Width
Height:=Panel.Height
Transparent:=True
OnClick:=@ButtonLabelClick
OnDblClick:=@ButtonLabelClick
OnMouseDown:=@ButtonLabelMouseDown
OnMouseUp:=@ButtonLabelMouseUp
end;

Labl:=TLabel.Create(WizardForm) //Текст кнопок
Labl.Left:=23 //Указываем положение текста
Labl.Top:=5
Labl.Autosize:=True
Labl.Alignment:=taCenter
Labl.Tag:=AButtonIndex
Labl.Transparent:=True
Labl.Font.Color:=clWhite //Цвет текста
Labl.Caption:=AButton.Caption
Labl.OnClick:=@ButtonLabelClick
Labl.OnDblClick:=@ButtonLabelClick
Labl.OnMouseDown:=@ButtonLabelMouseDown
Labl.OnMouseUp:=@ButtonLabelMouseUp
Labl.Parent:=Panel
ButtonLabel[AButtonIndex]:=Labl
end;

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
ButtonLabel[AButtonIndex].Caption:=AButton.Caption
ButtonPanel[AButtonIndex].Visible:=AButton.Visible
ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=True
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=False
end;

procedure InitializeWizard();
begin
WizardForm.BackButton.Width:=ButtonWidth
WizardForm.BackButton.Height:=ButtonHeight

WizardForm.NextButton.Width:=ButtonWidth
WizardForm.NextButton.Height:=ButtonHeight

WizardForm.CancelButton.BringToFront;
WizardForm.CancelButton.Width:=ButtonWidth
WizardForm.CancelButton.Height:=ButtonHeight

WizardForm.DirBrowseButton.Left:=337
WizardForm.DirBrowseButton.Width:=ButtonWidth
WizardForm.DirBrowseButton.Height:=ButtonHeight

WizardForm.GroupBrowseButton.Left:=337
WizardForm.GroupBrowseButton.Width:=ButtonWidth
WizardForm.GroupBrowseButton.Height:=ButtonHeight

WizardForm.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick

WizardForm.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick

ExtractTemporaryFile('button.bmp')
LoadButtonImage(WizardForm.BackButton,bidBack)
LoadButtonImage(WizardForm.NextButton,bidNext)
LoadButtonImage(WizardForm.CancelButton,bidCancel)
LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;

procedure CurPageChanged(CurPageID: Integer);
begin
UpdateButton(WizardForm.BackButton,bidBack)
UpdateButton(WizardForm.NextButton,bidNext)
UpdateButton(WizardForm.CancelButton,bidCancel)
ButtonLabel[bidBack].Left := (ButtonPanel[bidBack].Width / 2 - ButtonLabel[bidBack].Width / 2);
ButtonLabel[bidNext].Left := (ButtonPanel[bidNext].Width / 2 - ButtonLabel[bidNext].Width / 2);
ButtonLabel[bidCancel].Left := (ButtonPanel[bidCancel].Width / 2 - ButtonLabel[bidCancel].Width / 2);
ButtonLabel[bidDirBrowse].Left := (ButtonPanel[bidDirBrowse].Width / 2 - ButtonLabel[bidDirBrowse].Width / 2);
ButtonLabel[bidGroupBrowse].Left := (ButtonPanel[bidGroupBrowse].Width / 2 - ButtonLabel[bidGroupBrowse].Width / 2);
if CurPageID=wpInstalling then
begin
WizardForm.BorderStyle:=bsDialog;
WizardForm.MainPanel.Visible:=False;
WizardForm.Width:=ScaleX(320);
WizardForm.Height:=ScaleY(127);
WizardForm.InnerNotebook.Left:=ScaleX(7);
WizardForm.InnerNotebook.Top:=ScaleY(7);
WizardForm.InnerNotebook.Width:=ScaleX(300);
WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(17);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(37);
WizardForm.ProgressGauge.Left:=ScaleX(0);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(122);
WizardForm.CancelButton.Top:=ScaleY(70);
LoadButtonImage(WizardForm.CancelButton,bidCancel) // вот тут и есть корень зла
WizardForm.Left:=GetSystemMetrics(16)-ScaleX(330);
WizardForm.Top:=GetSystemMetrics(17)-ScaleX(110);
end;
if CurPageID=wpFinished then
begin
WizardForm.Width:=502;{Размер окна по горизонтали}
WizardForm.Height:=392;{Размер окна по вертикали}
WizardForm.Position:=poScreenCenter; {Возврат в исходное состояние}
end;
end;

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


necromanster 05-11-2010 18:28 1535576

Цитата:

Цитата serg aka lain
Пробуйте так:
Код:
[Registry]
Root: HKLM; Subkey: SOFTWARE\Bethesda Softworks; Flags: uninsdeletekeyifempty;
Root: HKLM; Subkey: SOFTWARE\Bethesda Softworks\FalloutNV; Flags: uninsdeletekey;
Root: HKLM; Subkey: SOFTWARE\Bethesda Softworks\FalloutNV; ValueType: string; ValueName: Installed »

Спасибо большее. Теперь все работает. И на семерке, и на ХР. Респект, и уважуха.

serg aka lain 05-11-2010 19:44 1535644

Цитата:

Цитата Henry_Townsend
Всё хорошо, вот только текстура отображается и на странице завершения установки где самой кнопки нет и быть не должно . Можно ли как-то отключить LoadButtonImage(WizardForm.CancelButton,bidCancel) ? »

а зачем вы её загружаете ещё один раз?, она и так там есть.
если вы меняете положение кнопки Cancel, то и меняйте положение ButtonPanel.
выбросите вот это LoadButtonImage(WizardForm.CancelButton,bidCancel),
и добавьте новое положение ButtonPanel:
Код:

WizardForm.CancelButton.Left := ScaleX(122);
WizardForm.CancelButton.Top := ScaleY(70);
ButtonPanel[bidCancel].Left := WizardForm.CancelButton.Left;
ButtonPanel[bidCancel].Top :=  WizardForm.CancelButton.Top;


by_pbh 06-11-2010 15:08 1536156

when i try to compile FreeArc_Example.iss gives me this error

serg aka lain 06-11-2010 16:39 1536225

Цитата:

Цитата by_pbh
when i try to compile FreeArc_Example.iss gives me this error »

Perhaps you need to remove duplicate "PAnsiChar" identifiers

STRAYKER 06-11-2010 19:00 1536310

Как сделать чтобы ПЕРЕД или ВКОНЦЕ предлагало установку дополнительных елементов ????

shao 06-11-2010 20:08 1536355

После компиляции скрипта , при запуске программы, она не отрабатывает некоторые секции.

Вот исходный скрипт :

читать дальше »
Код:

; InnoSetupVersion=5.3.10 (Unicode)

[Setup]
AppName=XXX
AppVerName=XXX
DefaultDirName={pf}\XXX
DefaultGroupName=XXX
OutputBaseFilename=setup
Compression=lzma
WizardImageFile=embedded\WizardImage.bmp
WizardSmallImageFile=embedded\WizardSmallImage.bmp

[Files]
Source: "{app}\XXX"; DestDir: "{app}"; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Resources\XXX"; DestDir: "{app}\Resources"; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Resources\XXX"; DestDir: "{app}\Resources"; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Resources\XXX"; DestDir: "{app}\Resources"; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Resources\taskbar_groupmenu.png"; DestDir: "{app}\Resources"; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Resources\XXX"; DestDir: "{app}\Resources"; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{userappdata}\XXX"; DestDir: "{userappdata}\XXX"; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{userappdata}\XXX"; DestDir: "{userappdata}\XXX"; MinVersion: 0.0,5.0; Flags: ignoreversion

[Registry]
Root: HKCU; Subkey: "Software\Microsoft\Windows\CurrentVersion\Run"; ValueName: "XXX"; ValueType: String; ValueData: "C:\Program Files\XXX"; MinVersion: 0.0,5.0; Flags: uninsdeletevalue uninsdeletekeyifempty

[Run]
Filename: "{app}\XXX"; Description: "{cm:LaunchProgram,XXX}"; Flags: nowait postinstall

[UninstallRun]
Filename: "{sys}\CMD.EXE"; Parameters: "/c TASKKILL /F /IM XXX"; Flags: runhidden

[UninstallDelete]
Type: filesandordirs ; Name: "{app}\XXX"
Type: filesandordirs ; Name: "{userappdata}\XXX"
Type: files ; Name: "{app}\XXX"


и так далее....



То , что выделено , почему-то теряется при компиляции скрипта.
То есть , если "вытянуть" скрипт из уже созданного инсталлятора ,
то эти выделенные места отсутствуют.

Может кто-нибудь знает в чём дело ?

serg aka lain 07-11-2010 00:19 1536550

Цитата:

Цитата STRAYKER
Как сделать чтобы ПЕРЕД или ВКОНЦЕ предлагало установку дополнительных елементов ???? »

воспользоваться процедурой CurStepChanged
Код:

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssInstall then
  // запуск дополнительных действий
end;


Pilotfcsm 07-11-2010 20:37 1537095

Подскажите пожалуйста, можно ли поменять местами существующие страницы, конкретно мне нужно чтобы выбор компонентов был до выбора куда ставить программу. То есть как нить поменять местами wpSelectComponents и wpSelectDir.

Буду очень благодарен, ибо написание новой страницы с выбором папки установки дается очень тяжело

Arsi000 07-11-2010 21:08 1537121

я так полагаю в inno не получится сделать нативный 64 битный установщик или есть всё же какие нибудь способы?

serg aka lain 07-11-2010 21:32 1537145

Цитата:

Цитата Pilotfcsm
Подскажите пожалуйста, можно ли поменять местами существующие страницы »

Стандартным способом, конечно, нельзя.
Но если очень надо, то можно. (з.ы. пример написан не мной)
читать дальше »
Код:

[Setup]
AppName=My program
AppVerName=My program 1.5
DefaultDirName={pf}\My program
;DisableDirPage=True

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

[Components]
Name: WB; Description: 'Мой компьютер' - Настройки; ExtraDiskSpaceRequired: 1048576

[code]
function OnShouldSkipPage(Sender: TWizardPage): Boolean;
begin
    if WizardForm.ComponentsList.Items.Count > 0 then WizardForm.Tag:= 1; // отображаются страницы выбора папки и компонентов
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
  Case CurPageID of
  wpSelectDir: if WizardForm.Tag = 1 then
    begin
        WizardForm.SelectDirPage.Notebook.ActivePage:= WizardForm.SelectComponentsPage;
        WizardForm.PageNameLabel.Caption:= SetupMessage(msgWizardSelectComponents)
        WizardForm.Hint:= WizardForm.PageDescriptionLabel.Caption; // запомнить SetupMessage(msgSelectDirDesc)
        WizardForm.PageDescriptionLabel.Caption:= SetupMessage(msgSelectComponentsDesc)
    end;
  wpSelectComponents: if WizardForm.Tag = 1 then
    begin
        WizardForm.SelectComponentsPage.Notebook.ActivePage:= WizardForm.SelectDirPage;
        WizardForm.DiskSpaceLabel.Caption:= WizardForm.ComponentsDiskSpaceLabel.Caption;
        WizardForm.PageNameLabel.Caption:= SetupMessage(msgWizardSelectDir)
        WizardForm.PageDescriptionLabel.Caption:= WizardForm.Hint // иначе вместо названия программы [name]
    end;
  end;
End;

Procedure InitializeWizard;
Begin
    PageFromID(wpSelectDir).OnShouldSkipPage:= @OnShouldSkipPage
End;




Цитата:

Цитата Arsi000
я так полагаю в inno не получится сделать нативный 64 битный установщик или есть всё же какие нибудь способы? »

В папке с примерами "C:\Program Files\Inno Setup 5\Examples\",
есть пример 64Bit.iss, возможно это он.

Pilotfcsm 07-11-2010 21:59 1537169

serg aka lain, спасибо большое!

Henry_Townsend 08-11-2010 13:58 1537586

Доброго времени суток. Я тут с немного дурацким вопросом - как лучше организовать упаковку файлов
precompresor+arc+inno setup? Я где-то на форуме уже встречал подобный вопрос, но вот найти никак не могу :(

STRAYKER 08-11-2010 14:27 1537622

Как сделать чтобы ПЕРЕД или ВКОНЦЕ предлагало установку дополнительных елементов ????

R.i.m.s.k.y. 08-11-2010 14:35 1537629

Цитата:

Цитата STRAYKER
Как сделать чтобы ПЕРЕД или ВКОНЦЕ предлагало установку дополнительных елементов ???? »

Читаем в хелпе про раздел Tasks, в конце - секция Run и флаг postinstall

Katyushka 08-11-2010 15:18 1537666

Здравствуйте!
У меня выбирается галочкой необходимые программы. Подскажите пожалуйста как сделать, чтобы если у меня setup.exe не выбрана, то в Run запускалась одна программа и если setup.exe выбрана, то запускалась бы эта setup?
Вот мой код:
Код:

[Components]
Name: main; Description: Описание1; Flags: checkablealone; Types: custom compact full
Name: Component1; Description: Описание2; Flags: checkablealone; Types: full
Name: Component2; Description: Описание3; Flags: checkablealone; Types: full

[Files]
Source: "C:\Users\Prog.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: main
Source: "C:\Users\Prog2.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: Component1
Source: "C:\Users\Setup.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: Component2;

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]
;Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#MyAppName}}"; Flags: nowait postinstall skipifsilent
Filename: "{app}\Setup.exe"; Description: "View the README file"; Flags: waituntilterminated

На данный момент, если setup.exe не выбрана, то выскакивает ошибка после установки, что файл не существует.

R.i.m.s.k.y. 08-11-2010 15:24 1537674

Цитата:

Цитата Katyushka
Подскажите пожалуйста как сделать, чтобы если у меня setup.exe не выбрана »

Components: Component1 or (not Component2);

STRAYKER 08-11-2010 15:29 1537682

Как сделать чтобі картинка в инсталяторе біла на весь инсталятор и только на первой странице ???

Arsi000 08-11-2010 15:33 1537686

как сделать чтобы инсталятор не спрашивал если папка уже существует а просто ставил туда куда положено.?

R.i.m.s.k.y. 08-11-2010 15:34 1537687

Цитата:

Цитата Arsi000
как сделать чтобы инсталятор не спрашивал если папка уже существует а просто ставил туда куда положено.? »

[Setup]
EnableDirDoesntExistWarning=false

Katyushka 08-11-2010 15:39 1537693

Цитата:

Цитата R.i.m.s.k.y.
Components: Component1 or (not Component2); »

Подскажите еще где именно эту строчку нужно прописать?

Arsi000 08-11-2010 15:44 1537699

нет это не сработало. сделал вот так DirExistsWarning=no

R.i.m.s.k.y. 08-11-2010 15:45 1537702

Цитата:

Цитата Katyushka
Подскажите еще где именно эту строчку нужно прописать? »

Красавица, в Вы в скриптике посмотрите своем что отчего пляшет, он же простой как моя жисть.
Писать в каждой секции где требуется отработка этого условия
Filename: "{app}\Setup.exe"; Description: "View the README file"; Flags: waituntilterminated; Components: Component2 or (not Component1);

Цитата:

Цитата Arsi000
нет это не сработало. сделал вот так DirExistsWarning=no »

Промахнулся чуток ;-)

Katyushka 08-11-2010 15:54 1537715

Цитата:

Цитата R.i.m.s.k.y.
Красавица, в Вы в скриптике посмотрите своем что отчего пляшет, он же простой как моя жисть.
Писать в каждой секции где требуется отработка этого условия
Filename: "{app}\Setup.exe"; Description: "View the README file"; Flags: waituntilterminated; Components: Component2 or (not Component1); »

Спасибо, красавчик, я уже догадалась, просто сообщения не удаляются

R.i.m.s.k.y. 08-11-2010 15:56 1537716

Цитата:

Цитата STRAYKER
R.i.m.s.k.y.,
Ну мне нада чтобы картнка была но весь екран но притом чтобы она же была только на первой странице инсталятор »

Ну не занимаюсь я оформлением! Мне это неинтересно, задача инсталлера все поставить корректно и удалить не прихватив чужого, а картинки - это от лукавого. ИМХО*

jameszero 08-11-2010 18:34 1537857

Лимит страниц.

Переезжаем - Скрипты Inno Setup. Помощь и советы


Время: 11:26.

Время: 11:26.
© OSzone.net 2001-