Войти

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 4]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 [26] 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105

tem000
28-12-2011, 00:23
Ребят подскажите в общем проблема в следующем, при первой установке программы происходит регистрация кодека и копирование файлов в системную папку и вроде как все проходит нормально. После удаления программы и потом повторной установке, инсталятор пишет (Installing XVID Codec...) ошибка, установка не выполнена. Я так понимаю при деинсталяции надо какието ключи прописывать как вообще это должно выглядеть???

[Run]
Filename: {sys}\rundll32; Parameters: setupapi.dll,InstallHinfSection DefaultInstall 132 {sys}\xvid.inf; StatusMsg: Installing XVID Codec...; Description: Install XVID;
Filename: {sys}\regsvr32.exe; Parameters: /s xvid.ax; StatusMsg: Register XVID...; Description: Register XVID;

Devils Night
28-12-2011, 01:00
Я так понимаю при деинсталяции надо какието ключи прописывать как вообще это должно выглядеть? »Ну, для регистрации лучше использовать флаг regserver, т.е
[Files]
Source: xvid.ax; DestDir: {sys}; Flags: regserverон же разрегистрирует файл при удалении.

R.i.m.s.k.y.
28-12-2011, 10:00
Можно через код, а можно через taskkill.exe »
вот так и палятся ператы :)
taskkill идет не во всех редакциях венды, так что его надо тащить с собой как минимум в {tmp}
или использовать этот код http://forum.oszone.net/post-1815172.html#post1815172

Serega, зобань Devil Mehanik, ч0 он тут камерцию разводит, нашел блин рынок, не он коммьюнити создавал, а смитану уже хочет снять

El Sanchez
28-12-2011, 11:24
Devil Mehanik, удалите свое сообщение о продаже, это запрещено правилами конференции (ОПК (http://forum.oszone.net/rules.html) п.3.4), иначе это сделает модератор с возможными ненужными для вас последствиями.

Serega, зобань Devil Mehanik, ч0 »
R.i.m.s.k.y., контрибуторы не банят, банят модераторы, к тому же читай ОПК (http://forum.oszone.net/rules.html) п.2.3.2

volk1234
28-12-2011, 11:26
R.i.m.s.k.y
Пожалуйста не коверкайте русский язык.

Товарищ Devil Mehanik отправлен на 2 недели подумать о правилах конференции. Не один раз предупреждал его.

Gugle
28-12-2011, 12:13
Доброго времени суток!

В PROCEDURE InitializeWizard; при выполнении некоторых условий мне необходимо перевести приложение на страницу wpFinished без отображения всех окон и без установки самого приложения. Это возможно?

R.i.m.s.k.y.
28-12-2011, 12:30
Пожалуйста не коверкайте русский язык. »
только в оффтопике :)

Gugle, думаю да, алгоритмически глобальной переменной присваиваем TRUE и через CurPageChanged отслеживаем
примерно так, но могут быть подводные камни:

[*C*ode]
var
skipall : boolean;
...
procedure CurPageChanged(CurPageID: Integer);
var ...
begin
....
If CurPageID=wpSelectComponents then begin
if skipall then begin
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
end;
end;
...
end;

procedure InitializeWizard();
var ...
begin
...
if твое условие then skipall := true
...
end;

Devils Night
28-12-2011, 15:15
Скопировал ваш код и у меня TIPAddressEdit есть на странице SelectTasksPage »Если добавить [Tasks], типа:
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked то да, а если без неё, то ничего не отображается (http://rghost.ru/35637081)

El Sanchez
28-12-2011, 17:32
Если добавить [Tasks], типа:
читать дальше »
то да, а если без неё, то ничего не отображается »
Devils Night, ну и правильно, родителем эдита ведь страница SelectTasksPage назначена, без секции [Tasks] ее не будет, значит не будет и контролов, ей принадлежащих.
Parent := WizardForm.SelectTasksPage; »

Serega
28-12-2011, 17:39
taskkill идет не во всех редакциях венды, так что его надо тащить с собой как минимум в {tmp} »
Я в курсе, что он есть не на всех системах, в конце концов можно сделать проверку, но я бы запускал через CreateProcess, а закрывал через TerminateProcess.
В PROCEDURE InitializeWizard; при выполнении некоторых условий мне необходимо перевести приложение на страницу wpFinished без отображения всех окон и без установки самого приложения. Это возможно? »


; здесь задал условие...
#define IsFinished True

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

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

[Code]
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
#if IsFinished
Confirm := False;
Cancel := True;
#endif
end;

procedure CurPageChanged(CurPageID: Integer);
begin
#if IsFinished
if CurPageID = wpWelcome then
with WizardForm do
begin
NextButton.Hide;
BackButton.Hide;
CancelButton.Left := ScaleX(310);
CancelButton.Caption := 'Готово';
FinishedHeadingLabel.Caption := 'Завершение мастера установки бла-бла';
FinishedLabel.Caption := 'Установка... бла-бла...' + #13#13#13 +
'Нажмите на кнопку "Готово"';
FinishedPage.Show;
end;
#endif
end;

Devils Night
28-12-2011, 18:54
ну и правильно, родителем эдита ведь страница SelectTasksPage назначена, без секции [Tasks] ее не будет, значит не будет и контролов, ей принадлежащих. »Ну а как это добро типа IPAddressEdit1: TIPAddressEdit; теперь впихивать, и чтоб без всяких Тасков?
А то хорошо говорить В расширенной версии есть редактор форм "WizardForm Designer", добавляете свои страницы и кидаете на форму нужные контролы. », звучит так просто, а на деле!
Тогда я вообще ни болта не рублю, что там вообще нужно.

Serega
28-12-2011, 20:53
звучит так просто, а на деле! »
На деле, ещё проще... Нажимаете вкладку WizardForm Designer, затем в меню Designer выбираете пункт Import a WizardPage, появляется новая страница. Затем нажимаете мышкой в панели компонент на IPAddressEdit и нажимаете мышкой на любое место новой страницы... ну и т.д. и т.п.

Devils Night
28-12-2011, 23:42
На деле, ещё проще... »Круто. Вот долго бы я гадал. Спасибо большое!

Ребят, а как вы привязываете кнопку к чему либо?
Ну вот скажем на примере этого:
[ISFormDesigner]
WizardForm=FF0A005457495A415244464F524D0030108602000054504630F10B5457697A617264466F726D0A57697A61726 4466F726D0C436C69656E744865696768740368010B436C69656E74576964746803F1010C4578706C696369744C656674020 00B4578706C69636974546F7002000D4578706C69636974576964746803F9010E4578706C696369744865696768740383010 D506978656C73506572496E636802600A54657874486569676874020D00F10C544E65774E6F7465626F6F6B0D4F757465724 E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167650B57656C636F6D65506167650D4578706C6963697457696 4746803F1010E4578706C696369744865696768740339010000F110544E65774E6F7465626F6F6B5061676509496E6E65725 06167650D4578706C69636974576964746803F1010E4578706C6963697448656967687403390100F10C544E65774E6F74656 26F6F6B0D496E6E65724E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167650B4C6963656E7365506167650D4 578706C69636974576964746803A1010E4578706C6963697448656967687403ED000000F110544E65774E6F7465626F6F6B5 06167650F53656C6563745461736B73506167650D4578706C69636974576964746803A1010E4578706C69636974486569676 87403ED00000E54495041646472657373456469740E4950416464726573734564697431044C656674020803546F7003D0000 55769647468039600064865696768740215085461624F72646572020200000A544E6577427574746F6E0A4E6577427574746 F6E31044C65667403B00003546F7003CC00055769647468024B0648656967687402190743617074696F6E060A4E657742757 4746F6E31085461624F72646572020300000000000000

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

procedure RedesignWizardForm;
begin
{ IPAddressEdit1 }
IPAddressEdit1 := TIPAddressEdit.Create(WizardForm);
with IPAddressEdit1 do
begin
Name := 'IPAddressEdit1';
Parent := WizardForm.SelectTasksPage;
Left := ScaleX(8);
Top := ScaleY(208);
Width := ScaleX(150);
Height := ScaleY(21);
end;

{ NewButton1 }
NewButton1 := TNewButton.Create(WizardForm);
with NewButton1 do
begin
Name := 'NewButton1';
Parent := WizardForm.SelectTasksPage;
Left := ScaleX(176);
Top := ScaleY(204);
Width := ScaleX(75);
Height := ScaleY(25);
end;

IPAddressEdit1.TabOrder := 2;
NewButton1.TabOrder := 3;

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

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

procedure InitializeWizard();
begin
RedesignWizardForm;
end;

Serega
29-12-2011, 00:01
Ребят, а как вы привязываете кнопку к чему либо? »
Тоже всё просто, т.е. после того как вы установили кнопку на новой странице, достаточно нажать на новой кнопке два раза, либо выбрать в инспекторе объектов (с правой стороны) вкладку Events, там будут все поддерживаемые процедуры для этой кнопки. Выбираете нужную и также нажимаете мышкой два раза на комбобоксе справа от названия необходимой процедуры. В результате в вашем скрипте появится нужная процедура, в которой вы будете обрабатывать выбранное действие.
В вкладке Properties, вы можете настроить свойства вашей кнопки.

R.i.m.s.k.y.
29-12-2011, 09:19
Помогите с кодом, пожалуйста.
При установке проги в папке назначения нужно удалить все кроме двух папок и трех файлов.
Как получить список папок и файлов? рекурсия во вложенные папки не нужна.

Заранее спасибо!

Gugle
29-12-2011, 09:32
Gugle, думаю да, алгоритмически глобальной переменной присваиваем TRUE и через CurPageChanged отслеживаем примерно так, но могут быть подводные камни: »
Не прокатило. У меня есть несколько страниц, на которых надо обязательно сделать выбор, для того что бы перейти к следующей странице, но даже если их убрать (или сделать там выбор поумолчанию), то установка все равно происходит. А установки хотелось бы избежать.

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

Откуда числа 513 и 514?
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0) »

R.i.m.s.k.y.
29-12-2011, 09:41
Возможно лучше использовать не переход на страницу финиш (ну т.к. это геморно ), по выполнению условия, а "искусственно" нажать на кнопку "Отмена"? »
помоему код Serega это и делает

числа 513 и 514 из шапочного примера "Нажать кнопку Далее"

Gugle
29-12-2011, 12:00
помоему код Serega это и делает »
Прошу прощения, а ссылку на код можно?

R.i.m.s.k.y.
29-12-2011, 12:07
Прошу прощения, а ссылку на код можно? »

да вот же на прошлой странице он тебе ответил (http://forum.oszone.net/post-1824253.html#post1824253)

Помогите с кодом, пожалуйста.
При установке проги в папке назначения нужно удалить все кроме двух папок и трех файлов.
Как получить список папок и файлов? рекурсия во вложенные папки не нужна. »

спасибо всем прочитавшим, вопрос снят

Gnom_aka_Lexander
29-12-2011, 18:41
Как получить список папок и файлов? »
спасибо всем прочитавшим, вопрос снят »
Для личных целей сделал, но думаю, что будет многим интересно :
получение всех файлов в папке, с полными путями:

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[*code]
var
fIleCount: TLabel;
ISCustomPage1: TWizardPage;
FileList: TNewListBox;

procedure GetAllFiles( Path: string; Lb: TNewListBox );
var
sRec: TFindRec;
isFound: boolean;
begin
isFound := FindFirst(Path +'\*.*',sRec);
while isFound do
begin
if (sRec.Name <> '.') and (sRec.Name <> '..') then
begin
if (sRec.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY then
GetAllFiles(Path + '\' + sRec.Name, Lb);
Lb.Items.Add(Path + '\' + sRec.Name);
fIleCount.Caption:= 'Количество файлов:'+ IntToStr(FileList.Items.Count);
end;
Application.ProcessMessages;
isFound := FindNext(sRec);
end;
FindClose(sRec);
end;

procedure FlistClick(Sender: TObject);
begin
GetAllFiles(ExpandConstant('{pf}\Inno Setup 5'), FileList );
end;

procedure InitializeWizard();
begin
{ Creates custom wizard page }
ISCustomPage1 := CreateCustomPage(wpWelcome, 'Список Файлов', 'Нажмите конпку Ок, чтобы получить список файлов');

{ FileList }
FileList := TNewListBox.Create(WizardForm);
with FileList do
begin
Parent := ISCustomPage1.Surface;
SetBounds(ScaleX(0),ScaleY(0),ISCustomPage1.SurfaceWidth,ISCustomPage1.SurfaceHeight - ScaleY(30));
ItemHeight := 13;
ItemIndex := -1;
end;

with TNewButton.Create(WizardForm) do
begin
Caption := 'Ок';
Parent := ISCustomPage1.Surface;
SetBounds(ScaleX(0),ISCustomPage1.SurfaceHeight - ScaleY(28),ScaleX(75),ScaleY(25));
OnClick:=@FlistClick;
end;
{ fIleCount }
fIleCount := TLabel.Create(WizardForm);
with fIleCount do
begin
Parent := ISCustomPage1.Surface;
Caption := 'Количество файлов:';
SetBounds(ScaleX(80),ISCustomPage1.SurfaceHeight - ScaleY(25),ScaleX(300),ScaleY(25));
end;
end;




© OSzone.net 2001-2012