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

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

Автор: Yoldosh
Дата сообщения: 20.04.2009 07:39
SotM
Excuse me this anymore be repeated
Автор: Artem1143
Дата сообщения: 20.04.2009 08:01

Цитата:
SotM
Artem1143
Ну можно например по таймеру повесить функцию, и в ней blit'ать картинку "прогресс бара" на саму форму.


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


Автор: Igrikxxx
Дата сообщения: 20.04.2009 08:22
Хочу добавить реазмер файлов чтобы отображалось где выбераеш путь установки, ну скоко места осталось на жестком и скоко нужно для установки, помогите реализовать ето, нада для exe файла поэтому немогу понять где нада вставить код! Вот скрипт куда нужно вставить:

[more=В это]#define WizardImage "Wheelman.bmp"

[Setup]
AppName=Вин Дизель Wheelman
AppVerName=Вин Дизель Wheelman 1.0
DefaultDirName={pf}\Вин Дизель Wheelman
ShowLanguageDialog=no
WizardImageFile={#WizardImage}
OutputBaseFilename=Install

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

[Messages]
BeveledLabel=Релиз by IgrikxXx



[Run]
Filename: {src}\setup.exe; WorkingDir: {src}; Parameters: "-x -y -d""{app}"""; StatusMsg: Идет установка игры....; Flags: waituntilterminated
Filename: {src}\Support\DirectX\dxsetup.exe



[Code]
var

WelcomeLabel1,WelcomeLabel2,PageNameLabel,PageDescriptionLabel,SelectDirLabel,SelectDirBrowseLabel,
DiskSpaceLabel,StatusLabel,BeveledLabel: TLabel;

Procedure HideAll();
begin
WizardForm.Bevel.Hide
WizardForm.Bevel1.Hide
WizardForm.MainPanel.Hide
WizardForm.BeveledLabel.Hide
WizardForm.OuterNotebook.Hide
WizardForm.InnerNotebook.Hide

WelcomeLabel1.Hide
WelcomeLabel2.Hide
SelectDirLabel.Hide
SelectDirBrowseLabel.Hide
WizardForm.DirEdit.Hide
WizardForm.DirBrowseButton.Hide
DiskSpaceLabel.Hide
StatusLabel.Hide
WizardForm.ProgressGauge.Hide

end;

Procedure InitializeSkin();
begin

WizardForm.ClientWidth:=497
WizardForm.ClientHeight:=361
WizardForm.BorderStyle := bsDialog;
WizardForm.Font.Color:=$ffffff
WizardForm.Center

WizardForm.WizardBitmapImage.Left:=0
WizardForm.WizardBitmapImage.Top:=0
WizardForm.WizardBitmapImage.AutoSize:=True
WizardForm.WizardBitmapImage.Enabled:=False
WizardForm.WizardBitmapImage.Parent:=WizardForm

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 := clwhite;
// WelcomeLabel1.Font.Style := [fsBold];
// WelcomeLabel1.Font.Name:='MS Sans Serif';
WelcomeLabel1.Font.Size := 14;
WelcomeLabel1.Transparent := True;
WelcomeLabel1.Parent := WizardForm;

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 := clwhite;
WelcomeLabel2.Font.Size := 8;
WelcomeLabel2.Transparent := True;
WelcomeLabel2.Parent := WizardForm;

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 := clwhite;
PageNameLabel.Font.Style := [fsBold];
PageNameLabel.Transparent := True;
PageNameLabel.Parent := WizardForm;

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 := clwhite;
PageDescriptionLabel.Transparent := True;
PageDescriptionLabel.Parent := WizardForm;

BeveledLabel:=TLabel.Create(WizardForm)
BeveledLabel.Left:=30
BeveledLabel.Top:=340
BeveledLabel.Font.Color:=clwhite
BeveledLabel.Font.Style := [fsBold]
BeveledLabel.Transparent:=True
BeveledLabel.Parent:=WizardForm

WizardForm.BeveledLabel.Left:=80

// wpSelectDir
SelectDirLabel:=TLabel.Create(WizardForm)
SelectDirLabel.Left:=150
SelectDirLabel.Top:=80
SelectDirLabel.Width:=320
SelectDirLabel.Height:=28
SelectDirLabel.AutoSize:=False
SelectDirLabel.WordWrap:=True
SelectDirLabel.Font.Color := clwhite
SelectDirLabel.Font.Name:='Tahoma'
SelectDirLabel.Font.Size:=8
SelectDirLabel.Font.Style := [fsBold]
SelectDirLabel.Transparent:=True
SelectDirLabel.Parent:=WizardForm

SelectDirBrowseLabel:=TLabel.Create(WizardForm)
SelectDirBrowseLabel.Left:=150
SelectDirBrowseLabel.Top:=120
SelectDirBrowseLabel.Width:=320
SelectDirBrowseLabel.Height:=28
SelectDirBrowseLabel.AutoSize:=False
SelectDirBrowseLabel.WordWrap:=True
SelectDirBrowseLabel.Font.Color := clwhite
SelectDirBrowseLabel.Transparent:=True
SelectDirBrowseLabel.Parent:=WizardForm

WizardForm.DirEdit.Left:=150
WizardForm.DirEdit.Top:=205
WizardForm.DirEdit.Width:=240
WizardForm.DirEdit.Height:=24
WizardForm.DirEdit.Color:=$000000
WizardForm.DirEdit.Font.Color:=$ffffff
WizardForm.DirEdit.Parent:= WizardForm

WizardForm.DirBrowseButton.Left:=400
WizardForm.DirBrowseButton.Top:=202
WizardForm.DirBrowseButton.Width:=73
WizardForm.DirBrowseButton.Height:=27
WizardForm.DirBrowseButton.Parent:= WizardForm

DiskSpaceLabel:=TLabel.Create(WizardForm)
DiskSpaceLabel.Left:=150
DiskSpaceLabel.Top:=250
DiskSpaceLabel.Width:=320
DiskSpaceLabel.Height:=28
DiskSpaceLabel.AutoSize:=False
DiskSpaceLabel.WordWrap:=True
DiskSpaceLabel.Font.Color := clwhite
DiskSpaceLabel.Transparent:=True

DiskSpaceLabel.Parent:=WizardForm

// wpInstalling
StatusLabel:=TLabel.Create(WizardForm)
StatusLabel.Left:=205
StatusLabel.Top:=90
StatusLabel.Font.Color := clWindow
StatusLabel.Transparent:=True
StatusLabel.Caption:=WizardForm.Caption +'...'
//StatusLabel.Caption:=WizardForm.StatusLabel.Caption
StatusLabel.Parent:=WizardForm

WizardForm.ProgressGauge.Left:=50
WizardForm.ProgressGauge.Top:=200
WizardForm.ProgressGauge.Width:=400
WizardForm.ProgressGauge.Height:=20
WizardForm.ProgressGauge.Parent:= WizardForm
end;


Procedure ShowPageComponents(CurPageID: Integer);
begin
BeveledLabel.Caption:=WizardForm.BeveledLabel.Caption
WelcomeLabel1.Caption:=WizardForm.WelcomeLabel1.Caption
WelcomeLabel2.Caption:=WizardForm.WelcomeLabel2.Caption
PageNameLabel.Caption:=WizardForm.PageNameLabel.Caption
PageDescriptionLabel.Caption:=WizardForm.PageDescriptionLabel.Caption
SelectDirLabel.Caption:=WizardForm.SelectDirLabel.Caption
SelectDirBrowseLabel.Caption:=WizardForm.SelectDirBrowseLabel.Caption
DiskSpaceLabel.Caption:=WizardForm.DiskSpaceLabel.Caption
StatusLabel.Caption:=WizardForm.StatusLabel.Caption

Case CurPageID of

wpWelcome:
begin
WelcomeLabel1.Show
WelcomeLabel2.Show

end

wpSelectDir:
begin
SelectDirLabel.Show
SelectDirBrowseLabel.Show
WizardForm.DirEdit.Show
WizardForm.DirBrowseButton.Show
DiskSpaceLabel.Show
end

wpInstalling:
begin
StatusLabel.Show
WizardForm.ProgressGauge.Show

end
end;
end;

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

Procedure InitializeWizard();
begin
InitializeSkin
end;



[Registry]


[Icons]
Name: {group}\Вин Дизель Wheelman; Filename: {app}\Binaries\Wheelman.exe; WorkingDir: {app}; Parameters: -language=RUS
Name: {group}\Удалить Вин Дизель Wheelman; Filename: {uninstallexe}; WorkingDir: {app}
Name: {userdesktop}\Вин Дизель Wheelman; Filename: {app}\Binaries\Wheelman.exe; WorkingDir: {app}; Parameters: -language=RUS


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

Пробывал совмещать с другово скрипта но неполучалось вот он сам:

[more=Это][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) + ' 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;[/more]
Автор: Artem1143
Дата сообщения: 20.04.2009 08:48
Igrikxxx Дарова а так не пробывал в конце указать размер у меня так работает


Цитата:

[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) + ' 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;

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

procedure InitializeWizard();
begin
ExtractTemporaryFile('1.bmp');
ExtractTemporaryFile('3.bmp');

NeedSize:= 4000;

Автор: chelobey
Дата сообщения: 20.04.2009 10:43
люди... только у меня ощущение, что последние страниц десять - сплошной флуд?...
Автор: dumaushii
Дата сообщения: 20.04.2009 11:33
У меня есть такой вопрос (Может уже был такой?)
Как поменять имя у деинсталлятора?
Автор: Vselennaya
Дата сообщения: 20.04.2009 13:14
Подскажите пожалуйста, как сделать, чтобы при установке инстяллятор использовал язык Windows. Тоесть, если русская винда, то на русском устанавливается, если английская, то на английском?
Просто написать в [setup] LanguageDetectionMethod=uilanguage? или как?
Автор: spider91
Дата сообщения: 20.04.2009 13:50
DeKaNszn


картинка внизу не появляется. все остается по умолчанию. что делать?
Автор: chelobey
Дата сообщения: 20.04.2009 13:55
в скрипте, где идет подмена шапки и сокрытие рамок окна инсталятора с созданием кнопок close и minimize window, используется SendMessage(WizardForm.Handle,$0112,61472,0) для последней. отсюда вопрос:
какое значение или идентификатор будет для back, next, dirselect, finish?
как можно узнать эти значения?
Автор: skeptik_vdm
Дата сообщения: 20.04.2009 14:32
Vselennaya
При значении uilanguage будет использоваться язык Виндоус
При значение locale язык определяется из Панель управления-Язык и рег.стандарты
При значение none будет использоваться язык из секции Languages
Автор: Hater_Decay
Дата сообщения: 20.04.2009 15:11
Подскажите пожалуйста выход из ситуации:
Я хочу в секции [Code] с помощью процедуры procedure CurUninstallStepChanged после деинсталляции дважды запустить командную строку с параметрами, но так, чтоб это всё выполнялось по очереди, как в bat-файле.
Вот я пишу
ShellExec('', ExpandConstant('{cmd}'), <сокпировать папку 1>, ExpandConstant('{app}'), SW_HIDE, ewWaitUntilTerminated , ErrorCode)
ShellExec('', ExpandConstant('{cmd}'), <удалить папку 1>, ExpandConstant('{app}'), SW_HIDE, ewWaitUntilIdle, ErrorCode)
Но в таком раскладе папка 1 удаляется прежде чем успевает скопироваться. Как быть?
Автор: nOobCrafter
Дата сообщения: 20.04.2009 15:22
День добрый, вопрос как лучше организовать проверку на наличие файла?.. ситуация такова, если есть файл то его не трогаем, если нету то записываем тот что идет в инсталяшке?..на какой стадии это лучше делать?
Или как то так:

Код: [Files]
Source: C:\Converter\*; DestDir: {app}\Converter; Flags: ignoreversion recursesubdirs createallsubdirs; Components: a; Check: checking()
.........
[_Code]
function checking():boolean;
begin
If not updating
Then Result:=true
Else
Case ExtractFileName(CurrentFileName) of 'DBSYS.IB': Result:=true // тут правда надо бы как то наоброт сделать
else Result:=false;
end;
end;
Автор: DeKaNszn
Дата сообщения: 20.04.2009 15:41
spider91

у меня работает

Hater_Decay

запиши в bat-файл и его запускай
Автор: Hater_Decay
Дата сообщения: 20.04.2009 15:49
DeKaNszn
Так и делал всегда, а теперь вот захотелось всё через скрипт организовать, без внешних файлов
Автор: SotM
Дата сообщения: 20.04.2009 16:51
Может кто знает, как через системные (стандартные) функции можно рисовать Bitmap на самой форме?
Я знаю как рисовать Bitmap на другом Bitmap'е через BitBlt, StretchBlt и AlphaBlend. А вот как по-другому я что-то не смог найти.
Автор: chelobey
Дата сообщения: 20.04.2009 17:55
по поводу идентификации кнопок разобрался...
Автор: Vselennaya
Дата сообщения: 20.04.2009 18:14
skeptik_vdm
Спасибо
Автор: spider91
Дата сообщения: 20.04.2009 18:43
как в CurPageChanged называется страница после установки? там где кнопка завершить
Автор: kombat 77
Дата сообщения: 20.04.2009 19:00
spider91

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

wpFinished
Автор: spider91
Дата сообщения: 20.04.2009 19:01
kombat 77


спасибо
Автор: Hater_Decay
Дата сообщения: 20.04.2009 19:07

Цитата:
Вот я пишу
ShellExec('', ExpandConstant('{cmd}'), <сокпировать папку 1>, ExpandConstant('{app}'), SW_HIDE, ewWaitUntilTerminated , ErrorCode)
ShellExec('', ExpandConstant('{cmd}'), <удалить папку 1>, ExpandConstant('{app}'), SW_HIDE, ewWaitUntilIdle, ErrorCode)
Но в таком раскладе папка 1 удаляется прежде чем успевает скопироваться. Как быть?

Я бестолочь. Простите за дезу, по недосмотру только первая команда заганялась в if проверки этапа установки, поэтому оно и удаляло прежде чем копировало. Вот что значит давно ничего не программировал если всё написать правильно, то всё работает в нужной последовательности. У меня так всегда - пока не пожалуюсь, никогда не найду решения. Потом стыдно за себя, а что делать...
Автор: spider91
Дата сообщения: 21.04.2009 00:12
как сделать возможной отмену во время распаковки архивов, ато кнопка замораживаеся и сколько не жми никаких действий? кто знает помогите плиз
Автор: Lana4ka
Дата сообщения: 21.04.2009 05:12
[more]

Цитата:
есть последовательность выполнения файлов:

Код:

Exec(ExpandConstant('{app}\bin\00.bat'), '', '', SW_SHOW, ewWaitUntilTerminated, Res);
Exec(ExpandConstant('{app}\bin\01.bat'), '', '', SW_SHOW, ewWaitUntilTerminated, Res);

Exec(ExpandConstant('{app}\bin\02.bat'), '', '', SW_SHOW, ewWaitUntilTerminated, Res);
Exec(ExpandConstant('{app}\bin\03.bat'), '', '', SW_SHOW, ewWaitUntilTerminated, Res);

Exec(ExpandConstant('{app}\bin\DirectorService.exe'), '-install', '', SW_SHOW, ewWaitUntilTerminated, Res);
Exec(ExpandConstant('{app}\bin\04.bat'), '', '', SW_SHOW, ewWaitUntilTerminated, Res);     


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

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

Кто что может посоветовать??? Есть идея поставить паузу после выполнения второй строчки...но вот как это сделать?...

[/more]

Вариант с выдержкой времени не устроил (ибо на разных машинах время на запуск сервиса тратится разное). Возвраюсь к варианту проверки состояния сервиса. Кто может подсказать, как это сделать?

и второй вопрос: в приведенном коде все навешано на кнопку Завершить. Но, так как выполнение кода занимает много времени, будет лучше, если эти команды будут выполняться на этапе копирования файлов (по нажатию кнопки Установить), НО ПОСЛЕ ТОГО, как все файлы скопированы в нужную директорию. Итак, вопрос, как код повесить на кнопку Установить, но чтобы он выполнялся после отработки копирования файлов, указанных в секции Files?


[more]
procedure CurStepChanged(CurStep: TSetupStep);
begin
s:= ExpandConstant('{app}');
p:= ExpandConstant('{app}\Data');
StringChange(s, '\', '/'); // производим замену всех встречающихся '\' на '/'
StringChange(p, '\', '/'); // производим замену всех встречающихся '\' на '/'
DirectorNumber:=Page.Values[0];
If CurStep = ssDone then
begin
SetIniString('mysqld', 'basedir', AddQuotes(s), ExpandConstant('{app}\my.ini'));
SetIniString('mysqld', 'datadir', AddQuotes(p), ExpandConstant('{app}\my.ini'));
SetIniString('mysqld', 'server-id', DirectorNumber, ExpandConstant('{app}\my.ini'));
SetIniString('mysqld', 'auto_increment_offset', DirectorNumber, ExpandConstant('{app}\my.ini'));
SaveStringToFile(ExpandConstant('{app}\bin\00.bat'), '"'+ExpandConstant('{app}')+'\bin\mysqld-nt" --install DirectorServer --defaults-file="'+ExpandConstant('{app}')+'\my.ini"', True);
SaveStringToFile(ExpandConstant('{app}\bin\01.bat'), 'sc start DirectorServer', True);
SaveStringToFile(ExpandConstant('{app}\bin\04.bat'), 'sc start Director', True);
Exec(ExpandConstant('{app}\bin\00.bat'), '', '', SW_HIDE, ewWaitUntilTerminated, Res);
Exec(ExpandConstant('{app}\bin\01.bat'), '', '', SW_HIDE, ewWaitUntilTerminated, Res);

Exec(ExpandConstant('{app}\bin\02.bat'), '', '', SW_HIDE, ewWaitUntilTerminated, Res);
Exec(ExpandConstant('{app}\bin\03.bat'), '', '', SW_HIDE, ewWaitUntilTerminated, Res);
Exec(ExpandConstant('{app}\bin\DirectorService.exe'), '-install -silent', '', SW_HIDE, ewWaitUntilTerminated, Res);
Exec(ExpandConstant('{app}\bin\04.bat'), '', '', SW_HIDE, ewWaitUntilTerminated, Res);

DeleteFile(ExpandConstant('{app}\bin\00.bat'));
DeleteFile(ExpandConstant('{app}\bin\01.bat'));
DeleteFile(ExpandConstant('{app}\bin\02.bat'));
DeleteFile(ExpandConstant('{app}\bin\03.bat'));
DeleteFile(ExpandConstant('{app}\bin\04.bat'));
end;
end;
[/more]

Автор: DeKaNszn
Дата сообщения: 21.04.2009 06:11
Lana4ka

выноси в отдельную процедуру и запускай через AfterInstall

и поправь сообщение
в шапке же написано:


Цитата:
Примечание для всех участников

Объёмные скрипты или части кода заключайте в тег more, чтобы ваш вопрос в сообщении не затерялся среди множества строк прилагаемого скрипта.

Автор: Lana4ka
Дата сообщения: 21.04.2009 06:27
DeKaNszn

Ааааа, вон как этот загадочный тег называется... поняль, исправлюсь ))) простите за оффтоп)

Добавлено:
DeKaNszn

Спасибо за помощь!!!

Со вторым вопросом расправилась, остался первый: как проверить состояние сервиса и выполнить действия только в том случае, если сервис запущен?
Не хватает опыта, увы))) Знаю, что надо сделать, а вот с реализацией - проблемы)))
Автор: Serega0675
Дата сообщения: 21.04.2009 07:24
Lana4ka
Для проверки процесса, попробуйте использовать ISTask.dll (она есть в Inno Setup Scripting, ссылка в шапке темы). В скрипте запишите [more=так]
Код:
[Files]
Source: ISTask.dll; Flags: dontcopy

[Code]
function RunTaskA(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload setuponly';

//************Ваш код*******************//

procedure CurStepChanged(CurStep: TSetupStep);
begin
s:= ExpandConstant('{app}');
p:= ExpandConstant('{app}\Data');
StringChange(s, '\', '/'); // производим замену всех встречающихся '\' на '/'
StringChange(p, '\', '/'); // производим замену всех встречающихся '\' на '/'
DirectorNumber:=Page.Values[0];
If CurStep = ssDone then
begin
SetIniString('mysqld', 'basedir', AddQuotes(s), ExpandConstant('{app}\my.ini'));
SetIniString('mysqld', 'datadir', AddQuotes(p), ExpandConstant('{app}\my.ini'));
SetIniString('mysqld', 'server-id', DirectorNumber, ExpandConstant('{app}\my.ini'));
SetIniString('mysqld', 'auto_increment_offset', DirectorNumber, ExpandConstant('{app}\my.ini'));
SaveStringToFile(ExpandConstant('{app}\bin\00.bat'), '"' + ExpandConstant('{app}') +
'\bin\mysqld-nt" --install DirectorServer --defaults-file="' + ExpandConstant('{app}') + '\my.ini"', True);
SaveStringToFile(ExpandConstant('{app}\bin\01.bat'), 'sc start DirectorServer', True);
SaveStringToFile(ExpandConstant('{app}\bin\04.bat'), 'sc start Director', True);

Exec(ExpandConstant('{app}\bin\00.bat'), '', '', SW_HIDE, ewWaitUntilTerminated, Res);
Exec(ExpandConstant('{app}\bin\01.bat'), '', '', SW_HIDE, ewWaitUntilTerminated, Res);

{ проверяем, запущен ли процесс... если нет, то ждём 0,5 сек., затем проверяем снова. Это проверка
будет идти до тех пор пока не запуститься процесс. Один минус, если процесс не запуститься по каким-то
причинам, установка зависнит... }
if RunTaskA('Имя процесса.exe', False) = False then
repeat
Sleep(500);
until RunTaskA('Имя процесса.exe', False) = True;

Exec(ExpandConstant('{app}\bin\02.bat'), '', '', SW_HIDE, ewWaitUntilTerminated, Res);
Exec(ExpandConstant('{app}\bin\03.bat'), '', '', SW_HIDE, ewWaitUntilTerminated, Res);
Exec(ExpandConstant('{app}\bin\DirectorService.exe'), '-install -silent', '', SW_HIDE, ewWaitUntilTerminated, Res);
Exec(ExpandConstant('{app}\bin\04.bat'), '', '', SW_HIDE, ewWaitUntilTerminated, Res);

DeleteFile(ExpandConstant('{app}\bin\00.bat'));
DeleteFile(ExpandConstant('{app}\bin\01.bat'));
DeleteFile(ExpandConstant('{app}\bin\02.bat'));
DeleteFile(ExpandConstant('{app}\bin\03.bat'));
DeleteFile(ExpandConstant('{app}\bin\04.bat'));
end;
end;
Автор: Lana4ka
Дата сообщения: 21.04.2009 08:14
Serega0675

Благодарю Без Вашей помощи я бы еще доооолго пищала и рыла интернет))))
По поводу зависания - подумаю, может, цикл получится по-другому организовать)))
Автор: tahirg
Дата сообщения: 21.04.2009 08:20
братья
подскажите
1 -как вставить доп.кнопку при выборе компонентов для установки?
кнопка при нажатии должна отображать полный список в формате txt описания устанавливаемых компонентов и называться "описание компонентов" или типа того
и она должна располагаться в левом нижнем углу
2 -как сделать второе окно выбора компонентов?
т.е по смыслу точно такое же как первое,но в первом файлы для работы с этим,а второе окно для выбора с работы с тем
3- как сделать в выборе компонентов раскрывающийся список со знаком +
4 - как сделать запрет на установку файла1 , если выбран файл2, но разрешить установку вместе с файлом3?
Автор: SotM
Дата сообщения: 21.04.2009 08:33
tahirg
О_о. Вопросы такие будто бы ты сначала не смотрел никаких примеров из шапки, и вообще ничего из шапки не скачивал. Там есть ответы, и плюс подобное уже обсуждалось много раз.
Автор: Serega0675
Дата сообщения: 21.04.2009 08:45
Lana4ka
чего-то сразу не сообразил... чтобы не зависнуть в цикле, надо записать [more=так]
Код: procedure CurStepChanged(CurStep: TSetupStep);
var
n: Integer;
begin
s:= ExpandConstant('{app}');
p:= ExpandConstant('{app}\Data');
StringChange(s, '\', '/'); // производим замену всех встречающихся '\' на '/'
StringChange(p, '\', '/'); // производим замену всех встречающихся '\' на '/'
DirectorNumber:=Page.Values[0];
If CurStep = ssDone then
begin
SetIniString('mysqld', 'basedir', AddQuotes(s), ExpandConstant('{app}\my.ini'));
SetIniString('mysqld', 'datadir', AddQuotes(p), ExpandConstant('{app}\my.ini'));
SetIniString('mysqld', 'server-id', DirectorNumber, ExpandConstant('{app}\my.ini'));
SetIniString('mysqld', 'auto_increment_offset', DirectorNumber, ExpandConstant('{app}\my.ini'));
SaveStringToFile(ExpandConstant('{app}\bin\00.bat'), '"' + ExpandConstant('{app}') +
'\bin\mysqld-nt" --install DirectorServer --defaults-file="' + ExpandConstant('{app}') + '\my.ini"', True);
SaveStringToFile(ExpandConstant('{app}\bin\01.bat'), 'sc start DirectorServer', True);
SaveStringToFile(ExpandConstant('{app}\bin\04.bat'), 'sc start Director', True);

Exec(ExpandConstant('{app}\bin\00.bat'), '', '', SW_HIDE, ewWaitUntilTerminated, Res);
Exec(ExpandConstant('{app}\bin\01.bat'), '', '', SW_HIDE, ewWaitUntilTerminated, Res);

{ проверяем, запущен ли процесс... если нет, то ждём 0,5 сек., затем проверяем снова. Это проверка
будет производится максимально 10 раз или меньше, если запустится процесс... }
if RunTaskA('Имя процесса.exe', False) = False then
repeat
n:= n + 1;
Sleep(500);
until (RunTaskA('Имя процесса.exe', False) = True) or (n = 10);

Exec(ExpandConstant('{app}\bin\02.bat'), '', '', SW_HIDE, ewWaitUntilTerminated, Res);
Exec(ExpandConstant('{app}\bin\03.bat'), '', '', SW_HIDE, ewWaitUntilTerminated, Res);
Exec(ExpandConstant('{app}\bin\DirectorService.exe'), '-install -silent', '', SW_HIDE, ewWaitUntilTerminated, Res);
Exec(ExpandConstant('{app}\bin\04.bat'), '', '', SW_HIDE, ewWaitUntilTerminated, Res);

DeleteFile(ExpandConstant('{app}\bin\00.bat'));
DeleteFile(ExpandConstant('{app}\bin\01.bat'));
DeleteFile(ExpandConstant('{app}\bin\02.bat'));
DeleteFile(ExpandConstant('{app}\bin\03.bat'));
DeleteFile(ExpandConstant('{app}\bin\04.bat'));
end;
end;

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

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


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