PDA

Показать полную графическую версию : Скрипты 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

Johny777
03-05-2012, 12:54
BlackInferno,
Настоятельно советую прочитать русскую справку http://sendfile.su/570136 (все секции!)

BlackInferno
03-05-2012, 13:07
Настоятельно советую прочитать русскую справку http://sendfile.su/570136 (все секции!) »
Так я и прочитал. Вот и говорю, что сеция [Tasks] не держит теги Types.

Вообщем все получилось, но
И вот еще вопрос:
Как сделать так, чтобы на странице "Дополнительных задач" была написана дополнительная строчка: "Установка дополнительного ПО:", а потом уже шли мои компоненты? Точно так же как "Дополнительные значки:" и два флажка - у меня чуть ниже "Дополнительное ПО:" и два флажка.
А то как-то не очень красиво получается:
http://i37.fastpic.ru/thumb/2012/0503/8e/12463d2461edb4db950010d82c88cd8e.jpeg (http://fastpic.ru/view/37/2012/0503/12463d2461edb4db950010d82c88cd8e.png.html)

R.i.m.s.k.y.
03-05-2012, 13:12
BlackInferno, да, таск на этот флаг должен ругнуться
давай свой код

Devils Night, nik1967, цимес в секции [Setup], это основная секция установщика для создания инсталлера, так что Components к ней применить нельзя

BlackInferno
03-05-2012, 13:14
Вот в дополнение к моему предыдущему посту.
Хочу что бы было вот так:
http://i35.fastpic.ru/thumb/2012/0503/f9/96fe1b499bdfbf2b64c4989ed419c8f9.jpeg (http://fastpic.ru/view/35/2012/0503/96fe1b499bdfbf2b64c4989ed419c8f9.png.html)
Как это прописать?

nik1967
03-05-2012, 13:16
Devils Night, nik1967, цимес в секции [Setup], это основная секция установщика для создания инсталлера, так что Components к ней применить нельзя »
А при чём тут я? Я и так это знаю уже очень давно.

Johny777
03-05-2012, 13:16
BlackInferno,
Справка --- Секция скриптов --- секция [Tasks] --- GroupDescription
Так я и прочитал. »
:(
А при чём тут я? »
Ты просто оказался не в том месте не в то время. Вот и загребли! :)

Devils Night
03-05-2012, 13:38
Как это прописать? »

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
UninstallDisplayIcon={app}\MyProg.exe
OutputDir=.


[Tasks]
Name: a; Description: Компонент 1; GroupDescription: Описание группы
Name: b; Description: Компонент 2; GroupDescription: Описание группы


Name: c; Description: Компонент 1; GroupDescription: Описание группы 2
Name: d; Description: Компонент 2; GroupDescription: Описание группы 2

P.S Я жеж не зря за него заикнулся, а теперь 100 вопросов получайте!

nik1967, Johny777, Спасибо! По коду всё сложно, короче ладу не дам, хотел компонент прикрутить к #define, т.е
#define code; Components: a

#ifdef code
#endif, в общем по видимому никак проще нельзя :(.

BlackInferno
03-05-2012, 13:39
nik1967, вылазит галочка перед ПО:
http://i33.fastpic.ru/thumb/2012/0503/db/c4fa09c216bc4c7b933b6a1dec3f03db.jpeg (http://fastpic.ru/view/33/2012/0503/c4fa09c216bc4c7b933b6a1dec3f03db.png.html)
Как ее убрать?
Вот скрипт:

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked; OnlyBelowVersion: 0,6.1
Name: Redist; Description: Дополнительное программное обеспечение:
Name: Component1; Description: DirectX; Flags: checkablealone
Name: Component2; Description: GameSpy Arcade; Flags: checkablealone

[hr]
[Setup]
ShowTasksTreeLines=true »
А что это дает? Разницы не заметил.

R.i.m.s.k.y.
03-05-2012, 13:41
BlackInferno,
у тебя же перед носом ответ в двух строчках выше
[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked; OnlyBelowVersion: 0,6.1
Name: Component1; Description: DirectX; Flags: checkablealone; GroupDescription: Дополнительное программное обеспечение
Name: Component2; Description: GameSpy Arcade; Flags: checkablealone; GroupDescription: Дополнительное программное обеспечение

BlackInferno
03-05-2012, 13:50
Попробую так:

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked; OnlyBelowVersion: 0,6.1
Name: Component1; Description: DirectX; GroupDescription: Дополнительное программное обеспечение:; Flags: checkablealone
Name: Component2; Description: GameSpy Arcade; GroupDescription: Дополнительное программное обеспечение:; Flags: checkablealone

Devils Night
03-05-2012, 13:54
А что это дает? Разницы не заметил. »ShowTasksTreeLines - Это Показать линии дерева задач.

R.i.m.s.k.y.
03-05-2012, 13:56
ShowTasksTreeLines=true »
А что это дает? Разницы не заметил. »
тонкие линии на странице задач
видна при наличии дочерних и родительстких компонентов, у тебя их нет и линии тоже нет

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

BlackInferno
03-05-2012, 14:05
Все, супер, наконец-то все отлично!
Всем спасибо за помощь!

Johny777
03-05-2012, 18:36
Вопрос
у меня на странице 6 чекбоксов
как блокировать кнопку "далее" если ни один не отмечен?
WizardForm.SelectDirPage.OnChange разве есть?

R.i.m.s.k.y.
03-05-2012, 18:41
Johny777, через NextButtonClick не пройдет?

function NextButtonClick(CurPageID:integer): Boolean;
begin
Result:= True;
if (CurPageID = твоя тсраница) then begin
if (проверка чекбоксов) then Result := False;
end
else Result := True;
end; //if (CurPageID = твоя тсраница)
end;

или делаешь чекалку кликов свой страницы и добавляешь в ней
WizardForm.NextButton.Enabled:= False else WizardForm.NextButton.Enabled:= True;
вот к примеру у меня на списке компонентов:

procedure ComponentOnClick(Sender: TObject);
begin
if CheckComponents = '' then WizardForm.NextButton.Enabled:= False else WizardForm.NextButton.Enabled:= True;
WizardForm.ComponentsList.Repaint;
end;

procedure InitializeWizard();
...
WizardForm.ComponentsList.OnClick := @ComponentOnClick;

Johny777
03-05-2012, 20:14
R.i.m.s.k.y.,
сделал так

procedure Enable(Sender: TObject);
begin
WizardForm.NextButton.Enabled := hl2_A_CheckBox.Checked or ep1_A_CheckBox.Checked or ep2_A_CheckBox.Checked or portal_A_CheckBox.Checked or hl2_SAVE_CheckBox.Checked or ep1_SAVE_CheckBox.Checked or ep2_SAVE_CheckBox.Checked or portal_SAVE_CheckBox.Checked;
end;

а каждому из 6 чекбоксов приписал OnClick :=@Enable;
Тк например ep2_SAVE_CheckBox.Checked всё равно что True, как и все остальные

кнопка далее упорно не хотела блокироваться в InitializeWizard, зато так работает:

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then
begin
WizardForm.NextButton.Enabled := false;
end;
end;
хотя все страницы выключены(какие были - "приветствия" и "готовности"). То бишь это (wpSelectDir) первая страница.

R.i.m.s.k.y.
03-05-2012, 20:16
Johny777, у тебя самолепные чекбоксы? я про них не знай, звиняй

Johny777
04-05-2012, 04:05
Подскажите пожалуйста
после копирования идёт сжатие в самоизвлекающийся 7Zip.exe

#define MyAppName "Backup"
#define Save_Folder "saved"


[Setup]
SourceDir=.
OutputDir=Source Engine 15\uninstall
AppName={#MyAppName}
AppVerName={#MyAppName}
AppVersion={#MyAppName}
DefaultDirName=C:\{#Save_Folder}
OutputBaseFilename={#MyAppName}
Uninstallable=false
ShowLanguageDialog=auto
LanguageDetectionMethod=uilanguage
DisableWelcomePage=yes
DisableReadyPage=yes


[Files]
Source: {src}\..\common\half-life 2\bin\stats.bin; DestDir: {app}\common\half-life 2\bin; Flags: external ignoreversion recursesubdirs createallsubdirs;
Source: {src}\..\common\half-life 2 episode one\bin\stats.bin; DestDir: {app}\common\half-life 2 episode one\bin; Flags: external ignoreversion recursesubdirs createallsubdirs;
Source: {src}\..\common\half-life 2 episode two\bin\stats.bin; DestDir: {app}\common\half-life 2 episode two\bin; Flags: external ignoreversion recursesubdirs createallsubdirs;
Source: {src}\..\common\portal\bin\stats.bin; DestDir: {app}\common\portal\bin; Flags: external ignoreversion recursesubdirs createallsubdirs;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Source: {src}\..\common\half-life 2\hl2\SAVE\*; DestDir: {app}\common\half-life 2\hl2\SAVE; Flags: external ignoreversion recursesubdirs createallsubdirs;
Source: {src}\..\common\half-life 2 episode one\episodic\SAVE\*; DestDir: {app}\common\half-life 2 episode one\episodic\SAVE; Flags: external ignoreversion recursesubdirs createallsubdirs;
Source: {src}\..\common\half-life 2 episode two\ep2\SAVE\*; DestDir: {app}\common\half-life 2 episode two\ep2\SAVE; Flags: external ignoreversion recursesubdirs createallsubdirs;
Source: {src}\..\common\portal\portal\SAVE\*; DestDir: {app}\common\portal\portal\SAVE; Flags: external ignoreversion recursesubdirs createallsubdirs;


Source: 7za.exe; DestDir: {tmp}; Flags: dontcopy;
Source: 7z.sfx; DestDir: {tmp}; Flags: dontcopy;


[ Code]
procedure InitializeWizard;
begin
with WizardForm do
begin
MainPanel.Visible := false;
Bevel1.Visible := false;
Bevel.Visible := false;
InnerNotebook.Width := WizardForm.Width;
InnerNotebook.Height := WizardForm.Height;
OuterNotebook.Width := WizardForm.Width;
OuterNotebook.Height := WizardForm.Height;
CancelButton.BringToFront;
NextButton.BringToFront;
BackButton.BringToFront;
SelectDirBitmapImage.Visible := False;
DiskSpaceLabel.Visible := False;
SelectDirBrowseLabel.Visible := False;
Caption := '';
SelectDirLabel.Visible := false;
DirEdit.Top := ScaleY(220);
DirBrowseButton.Top := WizardForm.DirEdit.Top;
end;
ExtractTemporaryFile('7za.exe');
ExtractTemporaryFile('7z.sfx');
end;


function CreateBatFile(): boolean;
var
StrArr: TArrayOfString;
begin
Result := false;

SetArrayLength(StrArr, 3);

StrArr[0]:='7za a -sfx7z.sfx C:\saved.exe -mx9 C:\saved';
StrArr[1]:='@echo off';
StrArr[2]:='pause';

if SaveStringsToFile(ExpandConstant('{tmp}\compressor.bat'), StrArr, False) then Result:=true;;
end;


procedure CurStepChanged(CurStep: TSetupStep);
var
ResultCode: Integer;

begin
if CurStep = ssPostInstall then
begin
// создаем BAT файл
if not CreateBatFile() then MsgBox('BAT файл не записан', mbInformation, mb_OK)
// запускаем BAT файл
if not Exec(ExpandConstant('{tmp}\compressor.bat'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then MsgBox('Проблема с запуском BAT файла', mbInformation, mb_OK)
end;
end;


procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm := False;
end;


столкнулся с проблемой добавления текста из WizardForm.DirEdit (констант)
Т.е. батник должен паковать файлы из папки {app} в архив saved.exe
Это всё (код сверху, вложенный архив снизу) работает, но стоит мне начать добавлять '7za a -sfx7z.sfx'+ExpandConstant('{app}')+ '-mx9 C:\saved', то результат - ошибка параметров при запуске батника! :)
http://sendfile.su/585755 - архив со всем необходим
В общем дальше не знаю!
Есть у кого мысли?

Возможность паковать в sfx архив нужна в бэкапе для того чтобы в основном инсталле (посредством чекбокса например) восстановить все сохранения и достижения! :)

R.i.m.s.k.y.
04-05-2012, 08:06
Johny777, не качая архив вижу что в '7za a -sfx7z.sfx' нет концевых пробелов, т.е. у тебя получается в батнике 7za a -sfx7z.sfxС:\Program Files\Proga
Но даже если добавишь пробелы '_7za a -sfx7z.sfx_' все равно будет ошибка - батник длинные пути с пробелами не понимает, если есть русские буквы в пути батник должен быть CP866, а инно пишет CP1251. Так что с русскими буквами даже не пытайся, переводи все в секцию кода
В общем вотттаг ' 7za a -sfx7z.sfx '+AddQuotes(ExpandConstant('{app}')) сделай, будет ошибка - покажешь ошибку
И в конце батника добавь pause чтобы видеть что он пишет

Кстати никогда не понимал батников в инно, нем же есть секция кода!

Johny777
04-05-2012, 12:37
отказался от батника!
вот
перенёс
так работает :)

procedure CurStepChanged(CurStep: TSetupStep);
var
Res: Integer;

begin
if CurStep = ssPostInstall then
begin
ExtractTemporaryFile('7za.exe');
ExtractTemporaryFile('7z.sfx');
Exec(ExpandConstant('{tmp}\7za.exe'), 'a -sfx7z.sfx -mx9 C:\saved.exe C:\saved', ExpandConstant('{tmp}'), SW_SHOW, ewWaitUntilTerminated, Res);
end;
end;

так нет :(

procedure CurStepChanged(CurStep: TSetupStep);
var
Res: Integer;
s1, s2, s3, s4, s5: string;

begin
if CurStep = ssPostInstall then
begin
s1 := 'a -sfx7z.sfx -mx9';
s2 := ExpandConstant('{userdesktop}\saved.exe');
s3 := ExpandConstant('{app}');


ExtractTemporaryFile('7za.exe');
ExtractTemporaryFile('7z.sfx');
Exec(ExpandConstant('{tmp}\7za.exe'), 's1 + s2 + s3', ExpandConstant('{tmp}'), SW_SHOW, ewWaitUntilTerminated, Res);
end;
end;

может с пробелами накосячил?




© OSzone.net 2001-2012