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

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

Автор: NightW0lf
Дата сообщения: 02.02.2007 20:56
Sanyk36

Цитата:
Ктонить поможет по этому вопросу : http://forum.ru-board.com/topic.cgi?forum=5&topic=4801&start=1460#5 ?

[more=Вот пример]

Код:
; Интерфейс установки максимально приближенный к InstallShield(я так думаю)реализованный стандартными(почти)средствами Inno Setup.Для создания слйд - шоу используется библиотека IsXbb.
; Используется Splash - заставка.
; При запуске инсталлятора отсутствует "мозолящий" глаза синий фон и имя программы.
; Скачать IsXbb.dll можно с http: //www.istool.org или http://data.cod.ru/381517258. Размер - ~33 Кб.

[Setup]
LicenseFile=License.rtf
InfoBeforeFile=Readme_rus.rtf

; Язык всех диалогов в инсталляторе:
[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Files]
; RTF файлы
Source: "C:\License.rtf"; DestDir: {tmp}; Flags: dontcopy noencryption
Source: "C:\Readme_rus.rtf"; DestDir: {tmp}; Flags: dontcopy noencryption

; Библиотека для возможности проигрывания.mp3 музыки
Source: "C:\bass.dll"; DestDir: " {tmp} "; Flags: dontcopy noencryption nocompression

; .mp3 музыка
Source: "C:\Human1.mp3"; DestDir: " {tmp} "; Flags: dontcopy noencryption nocompression


; Рисунок используемый для отображения на странице подготовки(увидете - поймёте)
Source: "C:\Program Files\Inno Setup 5\WizModernSmallImage.bmp"; DestDir: {tmp}; Flags: dontcopy;
; Так же используется на странице подготовки как Splash - заставка
Source: "C:\Splash.bmp"; DestDir: {tmp}; Flags: dontcopy;
; В качестве фона используется изоброжение в формате.bmp.Уменьшить размер файла(почти без видимых потерь)монжо в Adobe Photoshop(Image = > Mode = > Idexed Color = > Palette: Local(_ANY_))
Source: "C:\Image.bmp"; DestDir: {tmp}; Flags: dontcopy;
; Библиотека для создания слайд - сшоу
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;
Source: "C:\5.jpg"; DestDir: {tmp}; Flags: dontcopy;
; Файлы проекта
; Source: "Work\ * . * "; DestDir: " {app} "; Flags: overwritereadonly ignoreversion recursesubdirs createallsubdirs;

[Code]
const
{"1,2,3,4" - в разных углах, "5" - по центру, "6" - растянуть изображения}
BACKGROUND = 6;
TIMER = 16;

BASS_ACTIVE_STOPPED = 0;
BASS_ACTIVE_PLAYING = 1;
BASS_ACTIVE_STALLED = 2;
BASS_ACTIVE_PAUSED = 3;
BASS_SAMPLE_LOOP = 4;

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';

function GetSystemMetrics(nIndex: Integer): Integer;
external 'GetSystemMetrics@user32.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): 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';

var
mp3Handle: HWND;
mp3Name: string;
Splash: TSetupForm;


function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('Human1.mp3');
mp3Name := ExpandConstant('{tmp}\Human1.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);
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);
end;
end;
end;


procedure PauseButtonOnClick(Sender: TObject);
begin
BASS_ChannelPause(mp3Handle);
end;


procedure StopButtonOnClick(Sender: TObject);
begin
BASS_Stop();
BASS_Free();
end;


procedure InitializeWizard();
var
BackgroundBitmapImage: TBitmapImage;
s: string;
Form: TSetupForm;
Width, Height: Integer;
ProgressBar: TNewProgressBar;
CancelButton: TButton;
StaticText: TNewStaticText;
BitmapImage: TBitmapImage;
BitmapImage1: TBitmapImage;
BitmapFileName: string;
License: string;
Readmerus: string;
i: Integer;
Name1: string;
PlayButton, PauseButton, StopButton: TButton;
Text: TNewStaticText;
Panel1: TPanel;
begin
WizardForm.Position := poScreenCenter;
MainForm.BORDERSTYLE := bsNone;
WizardForm.CancelButton.BringToFront;

{****************************************** [Для корректного отображения "License.rtf"] *********************************}
ExtractTemporaryFile('License.rtf');
LoadStringFromFile(ExpandConstant('{tmp}') + '\License.rtf', License)
WizardForm.LicenseMemo.RTFText := License;
{****************************************** [Для корректного отображения "License.rtf"] *********************************}


{****************************************** [Для корректного отображения "Readme_rus.rtf"] ******************************}
ExtractTemporaryFile('Readme_rus.rtf');
LoadStringFromFile(ExpandConstant('{tmp}') + '\Readme_rus.rtf', Readmerus)
WizardForm.InfoBeforeMemo.RTFText := Readmerus;
{****************************************** [Для корректного отображения "Readme_rus.rtf"] ******************************}

Splash := CreateCustomForm;
Splash.BorderStyle := bsNone;
BitmapImage1 := TBitmapImage.Create(Splash);
with BitmapImage1 do
begin
AutoSize := True;
Align := alClient;
Left := 0;
Top := 0;
Stretch := True;
Parent := Splash;
end;
ExtractTemporaryFile('Splash.bmp');
BitmapImage1.Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\Splash.bmp');
Splash.Width := BitmapImage1.Width;
Splash.Height := BitmapImage1.Height;
Splash.Center;
Splash.Show;
BitmapImage1.Refresh;
Form := CreateCustomForm();
try
with Form do
begin
ClientWidth := ScaleX(380);
ClientHeight := ScaleY(120);
BorderStyle := bsDialog;
Left := GetSystemMetrics(16) - ClientWidth - ScaleX(8);
Top := GetSystemMetrics(17) - ClientHeight - ScaleY(8);
end;
BitmapFileName := ExpandConstant('{tmp}\WizModernSmallImage.bmp');
ExtractTemporaryFile(ExtractFileName(BitmapFileName));
BitmapImage := TBitmapImage.Create(Form);
BitmapImage.Left := ScaleX(8);
BitmapImage.Top := ScaleY(8);
BitmapImage.AutoSize := True;
BitmapImage.Bitmap.LoadFromFile(BitmapFileName);
BitmapImage.Parent := Form;
StaticText := TNewStaticText.Create(Form);
StaticText.Top := BitmapImage.Top;
StaticText.Left := BitmapImage.Left + BitmapImage.Width + ScaleX(8)
{Надпись которая будет отображатся на странице поготовки}
StaticText.Caption := ''#10#13'"______" now preparing to install...';
StaticText.AutoSize := True;
StaticText.Parent := Form;
CancelButton := TButton.Create(Form);
CancelButton.Parent := Form;
CancelButton.Width := ScaleX(75);
CancelButton.Height := ScaleY(23);
CancelButton.Left := Form.ClientWidth - ScaleX(75 + 10);
CancelButton.Top := Form.ClientHeight - ScaleY(23 + 10);
CancelButton.Caption := 'Cancel';
CancelButton.ModalResult := mrCancel;
CancelButton.Cancel := True;
Form.Caption := 'Prepering...';
ProgressBar := TNewProgressBar.Create(Form);
with ProgressBar do
begin
Height := CancelButton.Height - ScaleY(8);
Width := Form.Width - ScaleX(128);
Top := CancelButton.Top;
Left := BitmapImage.Left;
Parent := Form;
Min := 0;
Max := 30;
Position := 0;
end;
Form.ActiveControl := CancelButton;
Form.Show();
for i := 0 to 30 do
begin
ProgressBar.Position := i;
Form.Repaint;
Sleep(400);
i := i + 2;
end;
finally
Form.Free();
Splash.Close;
Width := GetSystemMetrics(0);
Height := GetSystemMetrics(1);
MainForm.Width := width;
MainForm.Height := height;
Width := MainForm.ClientWidth;
Height := MainForm.ClientHeight;
ExtractTemporaryFile('Image.bmp');
s := ExpandConstant('{tmp}') + '\Image.bmp';
BackgroundBitmapImage := TBitmapImage.Create(MainForm);
BackgroundBitmapImage.Bitmap.LoadFromFile(s);
BackgroundBitmapImage.Left := 0;
BackgroundBitmapImage.Top := 0;
BackgroundBitmapImage.Width := width;
BackgroundBitmapImage.Height := height;
BackgroundBitmapImage.Parent := MainForm;
BackgroundBitmapImage.Stretch := True;
{Не забудте прописать здесь и ниже правильные имена и количество файлов для слайд-шоу!}
ExtractTemporaryFile('1.jpg');
ExtractTemporaryFile('2.jpg');
ExtractTemporaryFile('3.jpg');
ExtractTemporaryFile('4.jpg');
ExtractTemporaryFile('5.jpg');
MainForm.Visible := True;
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;

PlayButton := TButton.Create(WizardForm);
PlayButton.Left := 5;
PlayButton.Top := 335;
PlayButton.Width := 50;
PlayButton.Height := 20;
PlayButton.Caption := 'play';
PlayButton.OnClick := @PlayButtonOnClick;
PlayButton.Parent := WizardForm;
PlayButton.Cursor := crHand;

PauseButton := TButton.Create(WizardForm);
PauseButton.Left := 58;
PauseButton.Top := 335;
PauseButton.Width := 50;
PauseButton.Height := 20;
PauseButton.Caption := 'pause';
PauseButton.OnClick := @PauseButtonOnClick;
PauseButton.Parent := WizardForm;
PauseButton.Cursor := crHand;

StopButton := TButton.Create(WizardForm);
StopButton.Left := 111;
StopButton.Top := 335;
StopButton.Width := 50;
StopButton.Height := 20;
StopButton.Caption := 'stop';
StopButton.OnClick := @StopButtonOnClick;
StopButton.Parent := WizardForm;
StopButton.Cursor := crHand;

Text := TNewStaticText.Create(WizardForm);
Text.Caption := 'music';
Text.Parent := WizardForm;
Text.Font.Style := Text.Font.Style + [fsUnderline];
Text.Font.Color := clNavy;
Text.Top := 319;
Text.Left := 71;
Text.Color := clWhite;
end;
end;
end;
end;


procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall
then
begin
isxbb_AddImage(ExpandConstant('{tmp}') + '\1.jpg', BACKGROUND or TIMER);
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_AddImage(ExpandConstant('{tmp}') + '\5.jpg', BACKGROUND or TIMER);
isxbb_Init(StrToInt(ExpandConstant('{hwnd}')));
{Указывается время отображения на экране каждого изображения}
isxbb_StartTimer(8, BACKGROUND)
end
else
if CurStep = ssPostInstall
then
isxbb_KillTimer(BACKGROUND);
end;


procedure CurPageChanged(CurPageID: Integer);
var
Width, Height: Integer;
begin
if CurPageID = wpInstalling
then
begin
{Здесь размер окна установки уменьшается, с него убирается всё лишнее и оно смещается в нижний правый угол экрана (не зависит от разрешения)}
WizardForm.CancelButton.BringToFront;
WizardForm.MainPanel.Visible := False;
WizardForm.Bevel1.Visible := False;
{Размер получемого окна установки}
Width := ScaleX(395);
Height := ScaleY(150);
WizardForm.Left := GetSystemMetrics(16) - Width - ScaleX(5);
WizardForm.Top := GetSystemMetrics(17) - Height - ScaleY(-50);
WizardForm.Width := ScaleX(395);
WizardForm.Height := ScaleY(150);
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 DeinitializeSetup();
begin
BASS_Stop();
BASS_Free();
end;
Автор: Sero
Дата сообщения: 02.02.2007 21:37
Копируем InstallShield - вот вам один пример.
Автор: DroN_S
Дата сообщения: 03.02.2007 10:35
DenVl

Цитата:
Вот собственно и все.., что посоветуете или предложите?

посоветуем почитать справку
используй блок [Registry]
Автор: Chuvakstepan
Дата сообщения: 03.02.2007 15:48
Еслив чего - много примеров для реализации чего-угодно :
http://chuvakstepan.xost.ru/scripts2.html

Добавлено:
Русская справка - http://chuvakstepan.xost.ru/isetup.hlp

И вообще: Люди! Читайте справку, там все секции расписаны, читайте руководство - там расширенные возможности
Мой сайт - там раздел по Inno Setup http://chuvakstepan.xost.ru/scripts.html
Автор: NightW0lf
Дата сообщения: 03.02.2007 17:33
DenVl

Цитата:
Вот собственно и все.., что посоветуете или предложите?

Посмотри личку, я тебе скинул СВОЙ пример игрового дистрибутива (там много всего интересного реализовано + ко всем действиям комментарии)!

Если тебе нужен кей-логер для захвата всех ключей которые создает игра то тебе хорошо подойдет программа RegShot v1.7.2.5 (моя сборка) - ВНИМАНИЕ! я перезалил на новую версию инсталлятора (в той были замечены ошибки)!
Автор: patq
Дата сообщения: 04.02.2007 07:09
Помогите начинающему
Можно ли вывести собственную страницу текста в начале инсталляции, перед выводом лицензии
Параметр InfoBeforeFile выводит сообщение после вывода лицензии
Спасибо
Автор: KLERIK2222
Дата сообщения: 04.02.2007 07:13
Здравствуйте. прочем справку, но не нашел, что именно мне нужно. а нужно мне следующее: в секции [files] прописан файл. нужно, если у пользователя такой файл есть, переименовать его, например ХХХ01.ххх и поставить новый. вроде простая задача, но в справке такого нет.
Автор: Sero
Дата сообщения: 04.02.2007 12:30
KLERIK2222

Цитата:
Здравствуйте. прочем справку, но не нашел, что именно мне нужно. а нужно мне следующее: в секции [files] прописан файл. нужно, если у пользователя такой файл есть, переименовать его, например ХХХ01.ххх и поставить новый. вроде простая задача, но в справке такого нет.


[Files]
Source: "{app}\my_program.exe"; DestDir: "{app}"; DestName: "my_program.exe.bak"; Flags: external skipifsourcedoesntexist
;Старый файл который будет переименован
Source: "C:\my_program.exe"; DestDir: "{app}"; Flags: ignoreversion
;Новый файл


Добавлено:
NightW0lf
Пример игрового дистрибутива,пожалуйста помоги и мне с этим.
Автор: NightW0lf
Дата сообщения: 04.02.2007 15:45
Sero

Цитата:
Пример игрового дистрибутива,пожалуйста помоги и мне с этим.

Хорошо помогу!
Выкладываю публично - для всех желающих посмотреть на мой проект

Скрины моего проекта (~1 МБ).
Автор: Sero
Дата сообщения: 04.02.2007 19:56
NightW0lf
Спасибо огромное!
Автор: Sanyk36
Дата сообщения: 04.02.2007 20:59
NightW0lf

Цитата:
P.S.: Сорри, за столь позний ОТВЕТ - просто был ОЧЕНЬ занят

Спасибо большое!
Автор: KLERIK2222
Дата сообщения: 05.02.2007 00:30
Sero
что-то не так. после установки создается файл, но он не копия имеющегося, а новый с новым именем. проверь с любым текстовым документом. в оригинальный файл вношу изменения, запускаю инсталятор, и в дириктории с прогой получаются два одинаковых файла с разными именами.

Добавлено:
извиняюсь. всё правильно работает. оказывается там от очередности зависит. я то просто в конце дописал, что его переименовывать нужно. а надо было до того, как инсталер файл установит.
Автор: DocBeen
Дата сообщения: 05.02.2007 05:13
Коллеги - прошу прощения за вмешательство - у меня есть два вопроса Может проглядел - просматривая станицы форума...
есть проблемка: Желательно чтоб при работе инстолятора созданного в Инно был выбор установки ( к примеру - серверная часть программы, собственно сервер, и минимальная установка) и чтоб при всех этих пунктах можно было выбрать пакет устанавливаемых приложений....

и хотелось бы русифицировать Диалоги Инно....

За раннее спасибо - и прошу сильно не ругать меня...
Автор: CapsLosk
Дата сообщения: 05.02.2007 09:36
Подскажите кто нить! Есть это:

[Components]
Name: module1; Description: My program1; Types: full
Name: module2; Description: My program2; Types: full
[Files]
Source: C:\Program Files\My program1\; DestDir: {app}; Flags: ignoreversion; Components: module1
Source: C:\Program Files\My program2; DestDir: {app}; Flags: ignoreversion; Components: module2
[Types]
Name: full; Description: Все компоненты; Flags: iscustom

Но сдесь нюансик - если My program1-2 имеет большой размер, то при выборе My program2, во время инсталляции происходит ТУПНЯК, т.е сначало он шерстит My program1, пока доедет до My program2......
Можно как нить бороться с этим???
Автор: EagleSH
Дата сообщения: 05.02.2007 11:04

Цитата:
Но сдесь нюансик - если My program1-2 имеет большой размер, то при выборе My program2, во время инсталляции происходит ТУПНЯК, т.е сначало он шерстит My program1, пока доедет до My program2......
Можно как нить бороться с этим???

кстати да, тоже интересно, делал лет "наццать" назад проэктик, там тоже были большие размеры у меня, и если выбирал 2-й компонент, инно шурстил 1-й сначала, потом токо переходил ко 2-му.
Автор: NightW0lf
Дата сообщения: 05.02.2007 11:12
CapsLosk

Цитата:
Но сдесь нюансик - если My program1-2 имеет большой размер, то при выборе My program2, во время инсталляции происходит ТУПНЯК, т.е сначало он шерстит My program1, пока доедет до My program2......
Можно как нить бороться с этим???

Я так понял проблема из-за того, что ты неправильно указал копирование файлов из папки в секции [Files] "Source: C:\Program Files\My program1\;" а надо "Source: C:\Program Files\My program1\*;".
Попробуй мой [more=пример]

Код:
[Components]
Name: module1; Description: My program1; Types: full
Name: module2; Description: My program2; Types: full

[Files]
Source: C:\Program Files\My program1\*; DestDir: {app}; Flags: ignoreversion nocompression ; Components: module1
Source: C:\Program Files\My program2\*; DestDir: {app}; Flags: ignoreversion nocompression ; Components: module2

[Types]
Name: full; Description: Все компоненты; Flags: iscustom
Автор: EagleSH
Дата сообщения: 05.02.2007 12:42

Цитата:
И если можно, то уточни, какой именно большой размер.

ну у меня к примеру был дето по гигу, НО - тогда я делал скрипт по другому, т.е. все файлы в нем красовались, а ща стал *." так делать. Мож из-за этого?
Автор: CapsLosk
Дата сообщения: 06.02.2007 01:16
NightW0lf

Цитата:
Я так понял проблема из-за того, что ты неправильно указал копирование файлов из папки в секции [Files] "Source: C:\Program Files\My program1\;" а надо "Source: C:\Program Files\My program1\*;".
Попробуй мой пример

И если можно, то уточни, какой именно большой размер.

Все правильно надо C:\Program Files\My program1\*; - забыл *, НО ЭТО НИЧЕГО НЕ МЕНЯЕТ!!! Сначало шерстит My program1, и только потом My program2

А размер - My program1 - 700 мег, My program2 - 1,5 гиг

ПроМблема открыта!
Автор: NightW0lf
Дата сообщения: 06.02.2007 10:08
CapsLosk
А ты пробывал их (My program1 - 700 мег, My program2 - 1,5 гиг) в архив сжать (БЕЗ сжатия) и разбить инсталлятор на части по 600 мегабайт??

Добавлено:
CapsLosk
Вот попробуй еще один пример с компонентами (2 типа; 1 - 700mb, 2 - 1.5gb)
[more=Пример]

Код:
[Setup]
Uninstallable=yes
DiskSpanning=yes
DiskSliceSize=730000000


[Components]
Name: "first"; Description: "Установить Первое (700 МБ)";
Name: "second"; Description: "Установить Второе (1 ГБ)";
;Types: "custom"; - будет стоять галочка


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


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


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


[Icons]
Name: "{userdesktop}\other_name"; Filename: "{app}\other_name.exe"; Tasks: desktopicon; WorkingDir: "{app}"


[Files]
;Прямые каталоги с файлами
Source: "x:\xxx\*"; Components: first; DestDir: "{app}"; Flags: nocompression
Source: "x:\xxx\*"; Components: second; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs nocompression
Source: "x:\xxx\other_name.exe"; DestDir: "{app}"; Flags: ignoreversion nocompression


[Run]
Filename: "{app}\other_name.exe"; Description: "{cm:LaunchProgram,My Program}"; Flags: nowait postinstall skipifsilent
Автор: Sero
Дата сообщения: 06.02.2007 12:56
KLERIK2222

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


Понел как надо сделать? ничего сложного там нет.
Автор: KLERIK2222
Дата сообщения: 06.02.2007 13:56
Sero
да, спасибо.
тут вспомнил про еще один инсталятор. похожая ситуация, но там надо пойти дальше. как сделать копию файла уже знаю. а как сделать, если пользователь запустит деинсталятор, что бы прежний файл (т.е. копия) вернулся? по сути надо переименовать файл копии в прежнее имя.
Автор: nesesser
Дата сообщения: 06.02.2007 14:29
Ребята.

А ссылка на рускую справку не работает =(
Кто может поделиться? Вышлите плз на nesesser2001(at)yandex.ru
Автор: NightW0lf
Дата сообщения: 06.02.2007 15:13
nesesser

Цитата:
Кто может поделиться?

Забирай!
Автор: trueMD
Дата сообщения: 06.02.2007 20:04
где достать русский учебник по скриптам в инно?
Автор: CapsLosk
Дата сообщения: 07.02.2007 01:29
NightW0lf

Спасибо - попробую.
А вот такой вопрос: Вот скрипт:

//Возвращение к первоначальному фону при помощи (procedure DeinitializeSetup();)


#include "isxbb.iss"

[Setup]
AppName=Принц Персии - Пески времяни
AppVerName=игру
DefaultDirName=D:\Games\My Program
DefaultGroupName=My Program
AllowNoIcons=yes
OutputBaseFilename=Setup
SetupIconFile=PrinceOfPersia.ico
Compression=none
SolidCompression=true
DiskSpanning=true
DiskSliceSize=730000000
InternalCompressLevel=none
WindowVisible=true
BackColor=clBlack

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

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

[Files]
Source: Splash.exe; DestDir: {tmp}; Flags: dontcopy
Source: BMP\My_Image.bmp; DestDir: {tmp}; Flags: dontcopy
Source: GIF\2.gif; DestDir: {tmp}; Flags: dontcopy
Source: GIF\3.gif; DestDir: {tmp}; Flags: dontcopy
Source: GIF\4.gif; DestDir: {tmp}; Flags: dontcopy
Source: GIF\5.gif; Flags: dontcopy
Source: GIF\6.gif; DestDir: {tmp}; Flags: dontcopy
Source: GIF\7.gif; DestDir: {tmp}; Flags: dontcopy
Source: Audio\sound.wav; Flags: dontcopy
Source: InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
Source: BMP\pic1.BMP; DestDir: {tmp}; Flags: dontcopy
Source: BMP\pic2.BMP; DestDir: {tmp}; Flags: dontcopy
Source: BMP\pic3.BMP; DestDir: {tmp}; Flags: dontcopy
Source: {sys}\*.dll; DestDir: {tmp}; Flags: external ;для демонстпации

[Icons]
Name: {group}\{cm:UninstallProgram,My Program}; Filename: {uninstallexe}
Name: {userdesktop}\My Program; Filename: {app}\My Program.EXE; Tasks: desktopicon

[Run]
Filename: {app}\PrinceOfPersia.EXE; Description: {cm:LaunchProgram,Принц Персии - Пески времяни}; Flags: nowait postinstall skipifsilent
[Code]
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);

var
BackgroundBitmapImage: TBitmapImage;
TimerID: LongWord;


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 sndPlaySound(lpszSoundName: string; uFlags: cardinal):integer;
external 'sndPlaySoundA@winmm.dll stdcall';

function GetSystemMetrics(nIndex:Integer):Integer;
external 'GetSystemMetrics@user32.dll stdcall';

function WrapTimerProc(callback:TProc; paramcount:integer):longword;
external 'wrapcallback@files:innocallback.dll stdcall';


function InitializeSetup(): Boolean;
var
sLocation: String;
iShowCmd: Integer;
iErrorCode: Integer;
bRun: Boolean;
Form: TSetupForm;
ProgressBar: TNewProgressBar;

begin

Form := CreateCustomForm();
try
Form.ClientWidth := ScaleX(250); //длина формы
Form.ClientHeight := ScaleY(60); //высота формы
Form.Caption := 'Подготовка к установке';
Form.Center;

ProgressBar := TNewProgressBar.Create(Form);
ProgressBar.Left := ScaleX(11); //отступ индикатора установки в форме, от левого края формы
ProgressBar.Top := ScaleX(12); //отступ индикатора установки в форме, от верхнего края формы
ProgressBar.Width := Form.Width - (2 * ProgressBar.Left)-7; //выщитывается длина индикатора установки (если расстояние между индикатором
//и формой с обоих сторон не одинаково, то после скобки дописываем через (+) или (-) (взависимости от того куда мы хотим
//сдвинуть индикатор, влево (-) или право(+)) цифру). НАПРИМЕР: ProgressBar.Width := Form.Width - (2 * ProgressBar.Left)-7;
ProgressBar.Height := ScaleX(16); //высота индикатора установки
ProgressBar.Parent := Form;
ProgressBar.Min:= 0; //длина индикатора установки - от (0)
ProgressBar.Max:= 30; //до (30)
ProgressBar.Position := 0;
Form.Show();

ExtractTemporaryFile('splash.exe'); //Извлечение "временной" программы.
ProgressBar.Position:= ProgressBar.Position + 3;
ExtractTemporaryFile('pic1.bmp'); //Извлечение "временной" программы.
ProgressBar.Position:= ProgressBar.Position + 1;
ExtractTemporaryFile('pic2.bmp'); //Извлечение "временной" программы.
ProgressBar.Position:= ProgressBar.Position + 1;
ExtractTemporaryFile('pic3.bmp'); //Извлечение "временной" программы.
ProgressBar.Position:= ProgressBar.Position + 1;
ExtractTemporaryFile('My_Image.bmp');
ProgressBar.Position:= ProgressBar.Position + 3;
ExtractTemporaryFile('2.gif');
ProgressBar.Position:= ProgressBar.Position + 3;
ExtractTemporaryFile('3.gif');
ProgressBar.Position:= ProgressBar.Position + 3;
ExtractTemporaryFile('4.gif');
ProgressBar.Position:= ProgressBar.Position + 3;
ExtractTemporaryFile('5.gif');
ProgressBar.Position:= ProgressBar.Position + 3;
ExtractTemporaryFile('6.gif');
ProgressBar.Position:= ProgressBar.Position + 3;
ExtractTemporaryFile('7.gif');
ProgressBar.Position:= ProgressBar.Position + 3;
ExtractTemporaryFile(ExpandConstant('sound.wav')); //Извлекаем звуковой файл во временную папку
ProgressBar.Position:= ProgressBar.Position + 3;
finally
Form.Free();
end;
sLocation := ExpandConstant('{tmp}');
//bRun := Exec(sLocation + '\splash.exe', '', sLocation, SW_SHOW, ewWaitUntilTerminated, iErrorCode); //запуск "временной" программы.
Result := True;
end;



procedure InitializeWizard();
var

s:string;
width, height:Integer;
bitmap:TBitmap;
begin

WizardForm.CancelButton.BringToFront;
end;





procedure CurStepChanged(CurStep: TSetupStep);
var
res:Integer;
s, ResultStr:string;
begin
if CurStep=ssInstall
then
begin
sndPlaySound(ExpandConstant('{tmp}\sound.wav'), $0001); //Проигрываем файл. Здесь указаны параметры для повторного
//проигрывания. Если мы хотим проиграть файл единожды, удаляем параметр 'or $0008'

isxbb_AddImage(ExpandConstant('{tmp}')+'\1.gif',BOTTOM or TIMER);
    isxbb_AddImage(ExpandConstant('{tmp}')+'\2.gif',BOTTOM or TIMER);
    isxbb_AddImage(ExpandConstant('{tmp}')+'\3.gif',BOTTOM or TIMER);
    isxbb_AddImage(ExpandConstant('{tmp}')+'\4.gif',BOTTOM or TIMER);
    isxbb_AddImage(ExpandConstant('{tmp}')+'\5.gif',BOTTOM or TIMER);
    isxbb_AddImage(ExpandConstant('{tmp}')+'\6.gif',BOTTOM or TIMER);
    isxbb_AddImage(ExpandConstant('{tmp}')+'\7.gif',BOTTOM or TIMER);

    isxbb_AddImage(ExpandConstant('{tmp}')+'\1.gif',TOP or TIMER);
    isxbb_AddImage(ExpandConstant('{tmp}')+'\2.gif',TOP or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\3.gif',TOP or TIMER);
    isxbb_AddImage(ExpandConstant('{tmp}')+'\4.gif',TOP or TIMER);
    isxbb_AddImage(ExpandConstant('{tmp}')+'\5.gif',TOP or TIMER);
    isxbb_AddImage(ExpandConstant('{tmp}')+'\6.gif',TOP or TIMER);
    isxbb_AddImage(ExpandConstant('{tmp}')+'\7.gif',TOP or TIMER);

isxbb_Init(StrToInt(ExpandConstant('{hwnd}')));
isxbb_StartTimer(1,TOP)
end;
end;



function PercentProgress(): Integer;
begin
with WizardForm.ProgressGauge do
begin
Result:= (Position-Min)/((Max - Min)/100) ;
end;
end;


procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
var
percent: integer;
begin
percent:= PercentProgress;
with BackgroundBitmapImage do
begin
if ((percent > 0) and (percent < 30) and (Tag <> 1)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\pic1.bmp');
Visible := true;
Tag:= 1;
end else
if ((percent > 31) and (percent < 51) and (Tag <> 2)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\pic2.bmp');
Visible := true;
Tag:= 2;
end else
if ((percent > 52) and (percent < 70) and (Tag <> 3)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\pic3.bmp');
Visible := true;
Tag:= 3;
end;

if (percent >= 98) then //на скольки процентах будет возвращение в исзодное состояние при помощи (procedure DeinitializeSetup();)
//в конце скрипта
begin
Visible := False;
end;
end;
end;



procedure CurPageChanged(CurPageID: Integer);
var
pfunc: LongWord;
begin
if CurPageID=wpInstalling
then
begin
WizardForm.MainPanel.Visible:=False;
WizardForm.Bevel1.Visible:=False;
WizardForm.Width:=ScaleX(226); //Длина переносимого главного окна индикатора установки.
WizardForm.Height:=ScaleY(89); //Высота переносимого главного окна индикатора установки.

//Здесь смещение страницы установки (в верхний левый угол)
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(6); //Отступ от левого края, в главном окне индикатора установки, самого индикатора установки.
WizardForm.InnerNotebook.Top:=ScaleY(5); //Отступ от верхнего края, в главном окне индикатора установки, самого индикатора установки (Вместе с кнопкой //Отмена).
WizardForm.InnerNotebook.Width:=ScaleX(122); //Длина индикатора установки
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(14); //Отступ сверху в главном окне, индикатора установки, пояснений: путь распаковки файлов (верхняя строка).
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(29); //Отступ от верхнего края, в главном окне индикатора установки, самого индикатора установки.
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(134); //Отступ слева кнопки: Отмена.
WizardForm.CancelButton.Top:=ScaleY(33); //Отступ сверху кнопки: Отмена.

pfunc:= WrapTimerProc(@OnTimer, 4);
TimerID:= SetTimer(0, 0, 500, pfunc);

BackgroundBitmapImage := TBitmapImage.Create(MainForm);
with BackgroundBitmapImage do
begin
Left := 50;
Top := 100;
AutoSize := True;
Center := True;
Parent := MainForm;
Visible := False; // все подготовили, но скрыли.
Tag:= 0;
end;
end;
if CurPageID=wpFinished
then
begin
WizardForm.Width:=502; //Размер окна по горизонтали
WizardForm.Height:=392; //Размер окна по вертикали
WizardForm.Position:=poScreenCenter; //Возврат в исходное состояние

end;
end;

//Возрат к фоновому окну

procedure DeinitializeSetup();

begin
KillTimer(0, TimerID);
end;

.//////////////////////////////////////////////////////////////////////////////////////////////////////////

В этой части, как я понимаю,

BackgroundBitmapImage := TBitmapImage.Create(MainForm);
with BackgroundBitmapImage do
begin
Left := 50;
Top := 100;
AutoSize := True;
Center := True;
Parent := MainForm;
Visible := False; // все подготовили, но скрыли.
Tag:= 0;
end;
end;


Указываются параметры показа дополнительных картинок, но они показываются почемуто не по центру!!! Что не так???

Автор: Sampron
Дата сообщения: 07.02.2007 01:48
CapsLosk
Удали эти значения:
Left := 50;
Top := 100;
Автор: CapsLosk
Дата сообщения: 07.02.2007 02:11
Sampron

Цитата:
Удали эти значения:
Left := 50;
Top := 100;


НЕ ПОМОГАЕТ!!!
Автор: NightW0lf
Дата сообщения: 07.02.2007 10:17
CapsLosk

Цитата:
А вот такой вопрос:
Указываются параметры показа дополнительных картинок, но они показываются почемуто не по центру!!! Что не так???

Попробуй скачать мой игровой дистрибутив там реализованно ВСЕ тоже самое только нет такой ошибки и заместо GIF, BMP - JPEG, WAV - MP3 и слайд-шоу по таймеру.
Автор: Sero
Дата сообщения: 07.02.2007 13:02
Помогите пожалуйста! как проделать это в Inno Setup? если конечно возможно.

Добавлено:
И еще один вопрос:
Как поставить один Checkbox вместо двух RadioButton на странице wpLicense.
Автор: maxdddca123
Дата сообщения: 07.02.2007 21:41
Парни очень важный вопрос, помогайте пожалуйста. Вобщем смысл в том, что мне надо в текстовом файле найти 1 слово, если оно там присутствует, то ставить прогу, иначе нет. Как вытащить текст я знаю:
LoadStringFromFile('C:\Program Files\1Cv77\TaxDB2\RELEASE.TXT',s);
Т.О. весь текст, содержащийся в этом файле присваевается строковой переменной s. Но я не знаю как сделать поиск определённого слова в этом тексте. Подскажите пожалуйста как это сделать ???

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172

Предыдущая тема: ICONS


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