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

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

Автор: skeptik_vdm
Дата сообщения: 17.04.2009 10:51
Нужно добавить вот это до архивов ExtractTemporaryFile('arc.exe');!!!
И еще у меня по началу возникали такие же ошибки и я не знал что делать но вскоре я решил проблему таким образом в начале просто компилю а потом захожу в папку куда скомпилировался экзешник и запускал его оттуда!!
Автор: Qarma
Дата сообщения: 17.04.2009 10:54
А, там просто надо минимум 3 архива))
Автор: skeptik_vdm
Дата сообщения: 17.04.2009 10:56
В моем скрипте стоит такое условие если Arc.exe есть а архива нет то установка отменяется или на оборот!!!
Автор: Qarma
Дата сообщения: 17.04.2009 11:01
Всё робит, спасибо

Добавлено:
Только вот архивы не распаковывает (

Добавлено:
Щас настроил...работает

Добавлено:
Добавил лого и растянутые картинки)
[more=Скрипт]#define MainExe "{app}\Prince of Persia.exe"
#define GDFBinary "{app}\Prince of Persia.exe"

[Setup]
AppName=Lost Planet Colonies
AppVerName=Lost Planet Colonies
DefaultDirName={pf}\Lost Planet Colonies
OutputDir=Output
Compression=lzma/ultra64
DisableReadyPage=true
InternalCompressLevel=ultra64
SolidCompression=true
ArchitecturesInstallIn64BitMode=x64
ArchitecturesAllowed=x64 x86
RestartIfNeededByRun=false
UsePreviousAppDir=false
DirExistsWarning=no
DisableProgramGroupPage=true
DefaultGroupName=Lost Planet Colonies
UsePreviousGroup=false
UsePreviousSetupType=false
UsePreviousTasks=false
WizardImageFile=D:\test\lp.bmp
WizardSmallImageFile=D:\test\lp_small.bmp
UninstallFilesDir={app}\Uninstall


[Files]
Source:"d:\test\logo.bmp";DestDir:{tmp};Flags: dontcopy nocompression
Source: C:\Program Files\Inno Setup 5\arc.exe; DestDir: {tmp}; Flags: dontcopy
Source: compiler: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\Ubisoft\Prince of Persia; Flags: uninsdeletekey
Root: HKLM; Subkey: SOFTWARE\Ubisoft\Prince of Persia; ValueName: Executable; ValueType: String; ValueData: {app}\PrinceOfPersia_Launcher.exe; Flags: uninsdeletekey
Root: HKLM; Subkey: SOFTWARE\Ubisoft\Prince of Persia; ValueName: InstallDir; ValueType: String; ValueData: {app}\; Flags: uninsdeletekey
Root: HKLM; Subkey: SOFTWARE\Ubisoft\Prince of Persia; ValueName: Language; ValueType: string; ValueData: Russian; Flags: uninsdeletekey
Root: HKLM; Subkey: SOFTWARE\Ubisoft\Prince of Persia\GameUpdate; ValueName: execPath; ValueType: String; ValueData: {app}\Prince of Persia.exe; Flags: uninsdeletekey
Root: HKLM; Subkey: SOFTWARE\Ubisoft\Prince of Persia\GameUpdate; ValueName: info; ValueType: String; ValueData: 08a0f1c01d540ee143f7ee48a91898fa; Flags: uninsdeletekey
Root: HKLM; Subkey: SOFTWARE\Ubisoft\Prince of Persia\GameUpdate; ValueName: installdir;ValueType: String; ValueData: {app}\; Flags: uninsdeletekey
Root: HKLM; Subkey: SOFTWARE\Ubisoft\Prince of Persia\GameUpdate; ValueName: language; ValueType: String; ValueData: us; Flags: uninsdeletekey


[Icons]
Name: {group}\Prince of Persia; Filename: {app}\Launcher\Launcher.exe; WorkingDir: {app}\Launcher\
Name: {group}\Руководство; Filename: {app}\Support\Manual\PrinceOfPersia.pdf
Name: {group}\ReadMe; Filename: {app}\Support\ReadMe\ReadMe.txt
Name: {group}\Удалить игру; Filename: {uninstallexe}
Name: {commondesktop}\Prince of Persia; Filename: {app}\Launcher\Launcher.exe; WorkingDir: {app}\Launcher\; 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
LogoImage:TBitmapImage;
LogoLabel: TLabel;
LogoPanel: TPanel;
NeedSize:Integer;
FreeMB, TotalMB: Cardinal;
NeedSpaceLabel,FreeSpaceLabel: TLabel;
DesktopIcon, DirectX: TCheckBox;
GUID: TGUID;
ProgressBar1: TNewProgressBar;
Label1: Tlabel;
WLabel1, WLabel2: TLabel;
FLabel1, FLabel2: TLabel;
PageNameLabel, PageDescriptionLabel: TLabel;
procedure LogoLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://www.free-torrents.org/forum', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode)
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';
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 := 6610; //Здесь указывается место для приложения
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);
LogoPanel := TPanel.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;
with LogoPanel do
begin
Parent := WizardForm;
Left := ScaleX(8);
Top := ScaleY(327);
Width := ScaleX(120);
Height := ScaleY(28);
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;
ExtractTemporaryFile('logo.bmp');
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:=@LogoLabelOnClick;
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
with WizardForm do
begin
WelcomeLabel1.Hide;
WelcomeLabel2.Hide;
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
DiskSpaceLabel.Hide;
FinishedHeadingLabel.Hide;
FinishedLabel.Hide;

WizardSmallBitmapImage.Left := ScaleX(0);
WizardSmallBitmapImage.Top := ScaleY(0);
WizardSmallBitmapImage.Width := WizardForm.MainPanel.Width;
WizardSmallBitmapImage.Height := WizardForm.MainPanel.Height;

PageDescriptionLabel.Width:=300;
PageNameLabel.Width:=300;
WizardBitmapImage.Width := WizardForm.Width;
WizardBitmapImage.Height := WizardForm.Height;
WizardBitmapImage2.Width := WizardForm.Width;
WizardBitmapImage2.Height := WizardForm.Height;
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:= clblack;
// 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); // во втором варианте ScaleY(77);
AutoSize := False;
WordWrap := True;
Font.Color:= clblack;
// ShowAccelChar := False;
Caption := 'Программа установлена на Ваш компьютер.' #13#13
'Нажмите «Завершить», чтобы выйти из программы установки.';
Transparent := True;
Parent := WizardForm.FinishedPage
end;

WLabel1 := TLabel.Create(WizardForm);
with WLabel1 do
begin
Left := ScaleX(176);
Top := ScaleY(16);
Width := ScaleX(301);
Height := ScaleY(54); // во втором варианте ScaleY(100);
AutoSize := False;
WordWrap := True;
Font.Size := 12;
Font.Style := [fsBold];
Font.Color:= clblack;
// 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:= clblack;
// ShowAccelChar := False;
Caption := WizardForm.WelcomeLabel2.Caption;
Transparent := True;
Parent := WizardForm.WelcomePage;
end;
//////////
NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(198);
Width := ScaleX(209);
Height := ScaleY(13);
Caption := 'Требуется место на диске: 7,57 GB' ;
end;
////////////
PageNameLabel := TLabel.Create(WizardForm);
with PageNameLabel do
begin
Left := ScaleX(45);
Top := ScaleY(10);
Width := ScaleX(300);
Height := ScaleY(14);
AutoSize := False;
WordWrap := True;
Font.Color := clwhite;
Font.Style := [fsBold];
Transparent := True;
Parent := WizardForm.MainPanel;
end;

PageDescriptionLabel := TLabel.Create(WizardForm);
with PageDescriptionLabel do
begin
Left := ScaleX(45);
Top := ScaleY(25);
Width := ScaleX(475);
Height := ScaleY(30);
AutoSize := False;
WordWrap := True;
Font.Color := clwhite;
Transparent := True;
Parent := WizardForm.MainPanel;
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;
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
begin
WizardForm.StatusLabel.Caption:='Распаковка файлов...';
ExtractTemporaryFile('arc.exe'); //Извлечение из 1-го архива
Exec(ExpandConstant('{tmp}\Arc.exe'), 'x '+AddQuotes(ExpandConstant('{src}\Lost Planet Colonies1.arc'))+' -y -dp'+AddQuotes(ExpandConstant('{app}')), '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
ProgressBar1.Position := ProgressBar1.Position+1

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


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


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\Prince of Persia_is1', 'UninstallString', UnStr) then
begin
If UnStr <> '' then
begin
Mesages := MsgBox('Lost Planet Colonies уже установлена в Вашей системе.'+#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\блаблабла', 'UnInstConfirm', ResultStr)
if DirExists(ExpandConstant('{userdocs}')+'\Lost Planet Colonies') then
if MsgBox('Удалить сохраненные игры и настройки?',mbconfirmation, mb_YesNo) = IDYES then
begin
if not DelTree(ExpandConstant('{userdocs}')+'\Lost Planet Colonies', 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;
[/more]

ЛОГО+КАРТИНКИ
Автор: ChVL
Дата сообщения: 17.04.2009 12:24
Пишется деинсталлятор. Надо, чтобы в конце была удалена вся директория {src} вместе с деинсталлятором. Делаю так:

Код: [Codе]
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
DelTree(ExpandConstant('{src}'), True, True, True);
DeleteFile(ExpandConstant('{src}')+'\uins.exe');
end;
end;
Автор: Qarma
Дата сообщения: 17.04.2009 12:28
skeptik_vdm

Ещё вопрос...как сделать чтобы прогрессбар распаковки архивов двигался когда распаковывается один архив или просто надо несколько маленьких?
Автор: spider91
Дата сообщения: 17.04.2009 12:47
skeptik_vdm


ето 7-zip sfx и FreeArc sfx архивы. поетому arc.exe не нужен


Qarma


делай пару архивов поменьше

Добавлено:
2all

как мне сделать ссылку - подробнее - для скрипта как у всех?
Автор: AleSasha
Дата сообщения: 17.04.2009 12:52
Такой вопрос:

Можно ли все обьемные элементы (Чекбоксы, Кнопки, Строка Пароля, Скроллбар) сделать плоскими?
Если да, то как?

Спасибо!
Автор: spider91
Дата сообщения: 17.04.2009 12:56
Qarma


я б на твоем месте перед распаковкой первого архива передвинул бы немного бар. так юзеру понятно что распаковка началась
Автор: Qarma
Дата сообщения: 17.04.2009 12:58

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

Я об этом же подумал) Как такое сделать?
Ещё бы надо максимальное кол-во архивов увеличить, а то там всего 3...
Может просто поменять здесь: Max :=3;))
Автор: omals
Дата сообщения: 17.04.2009 13:05
ChVL
может так подойдет
if CurStep = ssPostInstall then
begin
tmpStr := ExpandConstant('{src}\uins.exe');
if FileExists(tmpStr) then
if not DeleteFile(tmpStr) then RestartReplace(tmpStr, '');
end;
end;
Автор: spider91
Дата сообщения: 17.04.2009 13:09
Qarma


поменяй MAX:=7;

перед распаковкой сделай +1 а после каждого архива +2
Автор: Yoldosh
Дата сообщения: 17.04.2009 13:13
как ета можна реализовать прогресс бар не меняетсья каким би небила оформление
вот ссылка на саму установку http://data.cod.ru/7762
Автор: spider91
Дата сообщения: 17.04.2009 13:21
skeptik_vdm


какие строки в твоем репаке отвечают за расположение баров? как их передвинуть чуть выше?

Добавлено:
уже разобрался
Автор: Qarma
Дата сообщения: 17.04.2009 13:34
spider91


Цитата:
перед распаковкой сделай +1

Это где прописать?
Автор: spider91
Дата сообщения: 17.04.2009 13:43
в MAX пишеш 7 а дальше так:




Код: ProgressBar1.Position := ProgressBar1.Position+1
ExtractTemporaryFile('arc.exe'); //Извлечение Arc.exe в Temp
begin
WizardForm.StatusLabel.Caption:='Распаковка файлов...';
ExtractTemporaryFile('arc.exe'); //Извлечение из 1-го архива
Exec(ExpandConstant('{tmp}\Arc.exe'), 'x '+AddQuotes(ExpandConstant('{src}\Lost Planet Colonies1.arc'))+' -y -dp'+AddQuotes(ExpandConstant('{app}')), '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
ProgressBar1.Position := ProgressBar1.Position+2
Автор: Qarma
Дата сообщения: 17.04.2009 14:04

Цитата:
как заменить страницы инсталятора картинкой?

как в репаках от EagleSH

На прошлых страницах кто то спрашивал
Автор: spider91
Дата сообщения: 17.04.2009 14:15
Qarma

щас посмотрю. а как делать отдельные страницы для скриптов как у тебя ? писать все здесь слишком много
Автор: Qarma
Дата сообщения: 17.04.2009 14:29

Цитата:
а как делать отдельные страницы для скриптов как у тебя ?

Не понял вопроса)
Автор: noiseless
Дата сообщения: 17.04.2009 14:32
spider91
Юзать тэги [ more ] и [ /more ]
Автор: spider91
Дата сообщения: 17.04.2009 14:33
Qarma


как мне выложить скрипт чтоб он был не здесь в теме а как у всех по ссылке ?
Автор: SotM
Дата сообщения: 17.04.2009 14:46
spider91
Тебе noiseless уже ответил. Ты разве в шапке темы не видишь информацию о том, что нужно использовать тэги [no][more][/more][/no]?

AleSasha
Чтобы кто-то смог ответить на твой вопрос, тебе нужно либо нормально объяснить что ты имеешь в виду, либо уже для наглядности приложить соответствующие скриншоты.
Автор: spider91
Дата сообщения: 17.04.2009 14:49
SotM

да есть такое. чет сразу не заметил

Добавлено:
вот мой доработаный скрипт [more][Setup]
AppName=Крестный отец™ II by spider91
AppVerName=Крестный отец™ II
AppPublisher=EA Games
DefaultDirName={pf}\EA Games\GodFather II
DefaultGroupName=Крестный отец™ II
AllowNoIcons=yes
OutputBaseFilename=setup
Compression=lzma/ultra64
SolidCompression=yes
DiskSpanning=yes
DiskSliceSize=1566000000
WizardSmallImageFile=C:\Users\Dmitri\Desktop\1.bmp
WizardImageFile=C:\Users\Dmitri\Desktop\2.bmp
SetupIconFile=C:\Users\Dmitri\Desktop\GF2.ico
ExtraDiskSpaceRequired=5716027607
UninstallFilesDir={app}\Uninstall

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

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}";
Name: "dx"; Description: "Обновить DirectX"; GroupDescription: "Дополнительное программное обеспечение:";
Name: "vc"; Description: "Установить Microsoft Visual C++ 2005 SP1 Redist"; GroupDescription: "Дополнительное программное обеспечение:";

[LangOptions]
WelcomeFontName=Tahoma
WelcomeFontSize=11


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

[Registry]
Root: HKLM; Subkey: "SOFTWARE\EA Games\The Godfather 2 The Game"; ValueName: "DisplayName"; ValueType: String; ValueData: "Крестный отец™ II"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\EA Games\The Godfather II"; ValueName: "CD Drive"; ValueType: String; ValueData: "{src}"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\EA Games\The Godfather II"; ValueName: "DisplayName"; ValueType: String; ValueData: "Крестный отец™ II"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\EA Games\The Godfather II"; ValueName: "ProductName"; ValueType: String; ValueData: "Крестный отец™ II"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\EA Games\The Godfather II"; ValueName: "Install Dir"; ValueType: String; ValueData: "{app}"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\EA Games\The Godfather II"; ValueName: "Installed From"; ValueType: String; ValueData: "{src}"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\EA Games\The Godfather II"; ValueName: "Locale"; ValueType: String; ValueData: "ru"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\EA Games\The Godfather II"; ValueName: "Language"; ValueType: String; ValueData: "Russian"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\EA Games\The Godfather II"; ValueName: "Patch URL"; ValueType: String; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\EA Games\The Godfather II"; ValueName: "Product GUID"; ValueType: String; ValueData: "{{A1416622-0DDE-45B5-B06C-DFC3ED94C53B}"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\EA Games\The Godfather II"; ValueName: "Suppression Exe"; ValueType: String; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\EA Games\The Godfather II"; ValueName: "Registration"; ValueType: String; ValueData: "Software\Electronic Arts\EA Games\The Godfather 2 The Game\ergc"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\EA Games\The Godfather II\1.0"; ValueName: "DisplayName"; ValueType: String; ValueData: "The Godfather II"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\EA Games\The Godfather II\1.0"; ValueName: "Language"; ValueType: Dword; ValueData: "$10"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\EA Games\The Godfather II\1.0"; ValueName: "LanguageName"; ValueType: String; ValueData: "Russian"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Electronic Arts\EA Core\Installed Games\godfather2_na"; ValueName: "lang"; ValueType: String; ValueData: "ru"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Electronic Arts\EA Games\The Godfather 2 The Game\ergc"; ValueType: String; ValueData: "AS7XF4RAK67ULK62XRLD"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Wow6432Node\EA Games\The Godfather 2 The Game"; ValueName: "DisplayName"; ValueType: String; ValueData: "Крестный отец™ II"; Check: "Is64BitInstallMode"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Wow6432Node\EA Games\The Godfather II"; ValueName: "CD Drive"; ValueType: String; ValueData: "{src}"; Check: "Is64BitInstallMode"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Wow6432Node\EA Games\The Godfather II"; ValueName: "DisplayName"; ValueType: String; ValueData: "Крестный отец™ II"; Check: "Is64BitInstallMode"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Wow6432Node\EA Games\The Godfather II"; ValueName: "ProductName"; ValueType: String; ValueData: "Крестный отец™ II"; Check: "Is64BitInstallMode"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Wow6432Node\EA Games\The Godfather II"; ValueName: "Install Dir"; ValueType: String; ValueData: "{app}"; Check: "Is64BitInstallMode"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Wow6432Node\EA Games\The Godfather II"; ValueName: "Installed From"; ValueType: String; ValueData: "{src}"; Check: "Is64BitInstallMode"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Wow6432Node\EA Games\The Godfather II"; ValueName: "Locale"; ValueType: String; ValueData: "ru"; Check: "Is64BitInstallMode"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Wow6432Node\EA Games\The Godfather II"; ValueName: "Language"; ValueType: String; ValueData: "Russian"; Check: "Is64BitInstallMode"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Wow6432Node\EA Games\The Godfather II"; ValueName: "Patch URL"; ValueType: String; Check: "Is64BitInstallMode"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Wow6432Node\EA Games\The Godfather II"; ValueName: "Product GUID"; ValueType: String; ValueData: "{{A1416622-0DDE-45B5-B06C-DFC3ED94C53B}"; Check: "Is64BitInstallMode"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Wow6432Node\EA Games\The Godfather II"; ValueName: "Suppression Exe"; ValueType: String; Check: "Is64BitInstallMode"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Wow6432Node\EA Games\The Godfather II"; ValueName: "Registration"; ValueType: String; ValueData: "Software\Electronic Arts\EA Games\The Godfather 2 The Game\ergc"; Check: "Is64BitInstallMode"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Wow6432Node\EA Games\The Godfather II\1.0"; ValueName: "DisplayName"; ValueType: String; ValueData: "The Godfather II"; Check: "Is64BitInstallMode"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Wow6432Node\EA Games\The Godfather II\1.0"; ValueName: "Language"; ValueType: Dword; ValueData: "$10"; Check: "Is64BitInstallMode"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Wow6432Node\EA Games\The Godfather II\1.0"; ValueName: "LanguageName"; ValueType: String; ValueData: "Russian"; Check: "Is64BitInstallMode"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Wow6432Node\Electronic Arts\EA Core\Installed Games\godfather2_na"; ValueName: "lang"; ValueType: String; ValueData: "ru"; Check: "Is64BitInstallMode"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Wow6432Node\Electronic Arts\EA Games\The Godfather 2 The Game\ergc"; ValueType: String; ValueData: "AS7XF4RAK67ULK62XRLD"; Check: "Is64BitInstallMode"; Flags: uninsdeletekey

[Files]
Source: "C:\Users\Dmitri\Desktop\Scripts\Output\setup\{app}\movies\*"; DestDir: "{app}\movies\"; Flags: ignoreversion nocompression recursesubdirs createallsubdirs overwritereadonly



[Code]
var
ProgressBar1: TNewProgressBar;


procedure InitializeWizard();
begin
WizardForm.StatusLabel.Caption:='Распаковка файлов...';
WizardForm.FileNameLabel.Visible:=False;
WizardForm.ProgressGauge.Top:=ScaleY(65);
WizardForm.ProgressGauge.Width:=280;
WizardForm.ProgressGauge.Left:=120;
WizardForm.StatusLabel.Top:=ScaleY(28);
WizardForm.WelcomeLabel2.Top:=ScaleY(90);
ProgressBar1 := TNewProgressBar.Create(wizardform);
with ProgressBar1 do
begin
Parent := wizardform.installingpage;
Top := 65;
Width := 110;
Height := wizardform.progressgauge.height;
Max :=9;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
res:Integer;
s,s1:string;
begin
If CurStep=ssInstall
then
begin
WizardForm.StatusLabel.Caption:='Распаковка файлов...';
ProgressBar1.Position := ProgressBar1.Position+1
s:=ExpandConstant('{src}')+'\data1.bin';
s1:=ExpandConstant('{app}');
Exec(s, '-y -o"'+ s1 + '"', '', SW_HIDE, ewWaitUntilTerminated, res);
WizardForm.StatusLabel.Caption:='Распаковка файлов...';
ProgressBar1.Position := ProgressBar1.Position+1
s:=ExpandConstant('{src}')+'\data2.bin';
s1:=ExpandConstant('{app}');
Exec(s, '-x -y -d"'+ s1 + '"', '', SW_HIDE, ewWaitUntilTerminated, res);
WizardForm.StatusLabel.Caption:='Распаковка файлов...';
ProgressBar1.Position := ProgressBar1.Position+2
s:=ExpandConstant('{src}')+'\data3.bin';
s1:=ExpandConstant('{app}');
Exec(s, '-y -o"'+ s1 + '"', '', SW_HIDE, ewWaitUntilTerminated, res);
WizardForm.StatusLabel.Caption:='Распаковка файлов...';
ProgressBar1.Position := ProgressBar1.Position+2
s:=ExpandConstant('{src}')+'\data4.bin';
s1:=ExpandConstant('{app}');
Exec(s, '-y -o"'+ s1 + '"', '', SW_HIDE, ewWaitUntilTerminated, res);
WizardForm.StatusLabel.Caption:='Распаковка файлов...';
ProgressBar1.Position := ProgressBar1.Position+2
s:=ExpandConstant('{src}')+'\data5.bin';
s1:=ExpandConstant('{app}');
Exec(s, '-y -o"'+ s1 + '"', '', SW_HIDE, ewWaitUntilTerminated, res);
WizardForm.StatusLabel.Caption:='Распаковка файлов...';
ProgressBar1.Position := ProgressBar1.Position+1
end
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpInstalling
then
begin
WizardForm.CancelButton.Enabled := False;
end
else
WizardForm.BackButton.Enabled := True;
end;









[Icons]
Name: "{group}\Играть Крестный отец™ II"; Filename: "{app}\godfather2.exe";
Name: "{group}\ReadMe"; Filename: "{app}\Support\readme.ru.txt";
Name: "{group}\Удалить Крестный отец™ II"; Filename: "{uninstallexe}";
Name: "{userdesktop}\Крестный отец™ II"; Filename: "{app}\godfather2.exe"; Tasks: desktopicon


[Run]
Filename: {app}\godfather2.exe; WorkingDir: {app}; Description: "Начать игру"; Flags: postinstall
Filename: "{src}\Redist\DirectX\DXSETUP.exe"; Parameters: "/silent"; StatusMsg: "Обновление DirectX..."; Tasks: "dx"; Flags: waituntilterminated
Filename: "{src}\Redist\vcredist_x86.exe"; Parameters: "/q"; StatusMsg: "Установка Microsoft Visual C++ 2005 SP1 Redist..."; Tasks: "vc"; Flags: runhidden waituntilterminated

[/more]


только картинку в инсалятор не получается вставить. помогите плиз кто может
Автор: Qarma
Дата сообщения: 17.04.2009 15:24

Цитата:
только картинку в инсалятор не получается вставить. помогите плиз кто может

Что за картинка? Где распологается?
Автор: spider91
Дата сообщения: 17.04.2009 15:34
хочу вставить картинку в страницы инсталятора а не получается
Автор: Qarma
Дата сообщения: 17.04.2009 15:36
В моём скрипте не реализовано....попробовать надо
Автор: spider91
Дата сообщения: 17.04.2009 15:40
на других страницах был скрипт но там все киво получалось и текст весь исчезал
Автор: BondDaniil00
Дата сообщения: 17.04.2009 15:43
Serega0675

Большое СПАСИБО помагло!!!
Автор: spider91
Дата сообщения: 17.04.2009 16:20
возможно ли текст выделеный красным перебосить чуть ниже, на ледующую строку, ато там его не видно ?



Автор: doombuster
Дата сообщения: 17.04.2009 17:16
spider91

Цитата:
хочу вставить картинку в страницы инсталятора а не получается


Можно всю страницу заскинить: http://ifolder.ru/11661982

Положение надписей можно изменять, а также их цвет и шрифт

Это пример для двух первых страниц, дальше рисуй сам)
Я делал себе инсталлер, там вообще всё поотключал. Только остались: приветствие, выбор директории(на ней же чекбоксы для ярлыков и доп. по) и инсталляция с прогресс баром.

[more=Так]
[Setup]
SourceDir=.
OutputDir=Setup
AppName=pictures
AppVerName=pictures
AppVersion=pictures
DefaultDirName={pf}\pictures
DefaultGroupName=pictures
AllowNoIcons=yes
OutputBaseFilename=setup
WindowVisible=no
WindowShowCaption=no
WindowResizable=no
Compression=zip
SlicesPerDisk=1

[Icons]
Name: "{group}\{cm:UninstallProgram,pictures}"; Filename: "{uninstallexe}"

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

[Files]
Source: "C:\anyfiles\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Source: BackImage.jpg; DestDir: {tmp}; Flags: dontcopy
Source: isjpgtobmp.dll; DestDir: {tmp}; Flags: dontcopy
Source: 1.jpg; DestDir: {tmp}; Flags: dontcopy
Source: 2.jpg; DestDir: {tmp}; Flags: dontcopy
Source: 3.jpg; DestDir: {tmp}; Flags: dontcopy
Source: 4.jpg; DestDir: {tmp}; Flags: dontcopy
Source: 5.jpg; DestDir: {tmp}; Flags: dontcopy
Source: 6.jpg; DestDir: {tmp}; Flags: dontcopy
Source: 7.jpg; DestDir: {tmp}; Flags: dontcopy
Source: 8.jpg; DestDir: {tmp}; Flags: dontcopy
Source: 9.jpg; DestDir: {tmp}; Flags: dontcopy
Source: 10.jpg; DestDir: {tmp}; Flags: dontcopy
Source: 11.jpg; DestDir: {tmp}; Flags: dontcopy
Source: 12.jpg; DestDir: {tmp}; Flags: dontcopy
Source: 13.jpg; DestDir: {tmp}; Flags: dontcopy
Source: 14.jpg; DestDir: {tmp}; Flags: dontcopy

[Code]
var
BackImage: TBitmapImage;
path,Pics: string;

function GetSystemMetrics(nIndex:Integer):Integer; external 'GetSystemMetrics@user32.dll stdcall';
procedure convertjpgtobmp(p: String); external 'convertjpgtobmp@files:isjpgtobmp.dll stdcall';

procedure nextimage(ID: integer);
begin
if ID=wpWelcome then BackImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\1.bmp ');
if ID=wpLicense then BackImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\2.bmp ');
if ID=wpPassword then BackImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\3.bmp ');
if ID=wpInfoBefore then BackImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\4.bmp ');
if ID=wpUserInfo then BackImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\5.bmp ');
if ID=wpSelectDir then BackImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\6.bmp ');
if ID=wpSelectComponents then BackImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\7.bmp ');
if ID=wpSelectProgramGroup then BackImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\8.bmp ');
if ID=wpSelectTasks then BackImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\9.bmp ');
if ID=wpReady then BackImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\10.bmp ');
if ID=wpPreparing then BackImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\11.bmp ');
if ID=wpInstalling then BackImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\12.bmp ');
if ID=wpInfoAfter then BackImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\13.bmp ');
if ID=wpFinished then BackImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\14.bmp ');
end;

procedure InitializeWizard();
begin
WizardForm.Position:=poScreenCenter
WizardForm.CancelButton.BringToFront;
MainForm.BORDERSTYLE:=bsNone
MainForm.Left:=0
MainForm.Top:=0
MainForm.Width:=GetSystemMetrics(0)
MainForm.Height:=GetSystemMetrics(1)
ExtractTemporaryFile('BackImage.jpg')
pics:=ExpandConstant('{tmp}')+'\BackImage.jpg ';
convertjpgtobmp(pics);
BackImage:=TBitmapImage.Create(MainForm)
BackImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\BackImage.bmp ')
BackImage.Align:=alClient
BackImage.Parent:=MainForm
BackImage.Stretch:=True
MainForm.Visible:=True
path:=ExpandConstant('{tmp}');
ExtractTemporaryFile('1.jpg')
ExtractTemporaryFile('2.jpg')
ExtractTemporaryFile('3.jpg')
ExtractTemporaryFile('4.jpg')
ExtractTemporaryFile('5.jpg')
ExtractTemporaryFile('6.jpg')
ExtractTemporaryFile('7.jpg')
ExtractTemporaryFile('8.jpg')
ExtractTemporaryFile('9.jpg')
ExtractTemporaryFile('10.jpg')
ExtractTemporaryFile('11.jpg')
ExtractTemporaryFile('12.jpg')
ExtractTemporaryFile('13.jpg')
ExtractTemporaryFile('14.jpg')
pics:=path+'\1.jpg';
convertjpgtobmp(pics);
pics:=path+'\2.jpg';
convertjpgtobmp(pics);
pics:=path+'\3.jpg';
convertjpgtobmp(pics);
pics:=path+'\4.jpg';
convertjpgtobmp(pics);
pics:=path+'\5.jpg';
convertjpgtobmp(pics);
pics:=path+'\6.jpg';
convertjpgtobmp(pics);
pics:=path+'\7.jpg';
convertjpgtobmp(pics);
pics:=path+'\8.jpg';
convertjpgtobmp(pics);
pics:=path+'\9.jpg';
convertjpgtobmp(pics);
pics:=path+'\10.jpg';
convertjpgtobmp(pics);
pics:=path+'\11.jpg';
convertjpgtobmp(pics);
pics:=path+'\12.jpg';
convertjpgtobmp(pics);
pics:=path+'\13.jpg';
convertjpgtobmp(pics);
pics:=path+'\14.jpg';
convertjpgtobmp(pics);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
nextimage(CurPageID);
If CurPageID=wpInstalling then
begin
WizardForm.MainPanel.Visible:=False;
WizardForm.Bevel1.Visible:=False;
WizardForm.Width:=ScaleX(395);
WizardForm.Height:=ScaleY(142);
WizardForm.Left:=ScaleX(MainForm.Width-WizardForm.Width-25);
WizardForm.Top:=ScaleY(MainForm.Height-WizardForm.Height-25);
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.Visible:=False;
WizardForm.Width:=502;
WizardForm.Height:=392;
WizardForm.Left:=(MainForm.Width-WizardForm.Width) div 2;
WizardForm.Top:=(MainForm.Height-WizardForm.Height) div 2;
WizardForm.Visible:=True;
BackImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\BackImage.bmp')
end
end; [/more] вообще можно каждую страницу заскинить разными картинками

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

Предыдущая тема: в очередной раз босудим антивиры?


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