PDA

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


Страниц : 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

Johny777
27-06-2012, 11:29
Yury_Prizrak,
вот такой пример есть:


[Setup]
AppName=Quake Live
AppVerName="Quake Live"
AppPublisher=Mio Dark Project
CreateAppDir=no

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

[Types]
Name: "full"; Description: "Все компоненты";
Name: "custom"; Description: "Выбрать компоненты"; Flags: iscustom

[Components]
Name: "main"; Description: "Cтандартные файлы Quake Live"; Types: full custom; Flags: fixed
Name: "main2"; Description: "Премиум файлы Quake Live"; Types: full custom;
Name: "plug"; Description: "Плагин Quake Live"; Types: full custom;
Name: "browser"; Description: "Портативный Firefox под Quake Live"; Types: full custom;
Name: "manual"; Description: "Руководство и Награды"; Types: full custom;
Name: "anti"; Description: "Античит PunkBuster"; Types: full custom;

[CustomMessages]
HeaderLabelPage=Выберите тип вашего аккаунта
MyRadioCaption_1=Standart
MyRadioCaption_2=Premium / Pro
PageTextHeader=На этой странице Вы можете выбрать тип вашего аккаунта, который вы используете в игре.
MyText_1=Будут установлены файлы которые доступны для игроков без подписки.
MyText_2=Будут установлены файлы которые доступны для игроков с Premium/Pro подпиской.


[code]
var
MyNewPage: TWizardPage;
MyRadioBtn:ArraY[0..1]of TNewRadioButton;

procedure GetInstType;
begin
WizardForm.ComponentsList.ItemEnabled[1]:= MyRadioBtn[1].Checked or not MyRadioBtn[0].Checked;
WizardForm.ComponentsList.Checked[1]:=MyRadioBtn[1].Checked or not MyRadioBtn[0].Checked;
WizardForm.ComponentsList.Checked[4]:=MyRadioBtn[1].Checked or not MyRadioBtn[0].Checked;
end;

procedure GetInstTypePage;
var
i:integer;
begin
MyNewPage := CreateCustomPage(wpWelcome,
ExpandConstant('{cm:HeaderLabelPage}'), '');

with TNewStaticText.Create(WizardForm) do
begin
Width := WizardForm.InnerNotebook.Width;
Height := ScaleY(26);
WordWrap := True;
Caption := ExpandConstant('{cm:PageTextHeader}');
Parent := MyNewPage.Surface;
end;

for i:=0 to 1 do
begin
MyRadioBtn[i] := TNewRadioButton.Create(WizardForm);
with MyRadioBtn[i] do
begin
Parent := MyNewPage.Surface;
Top := ScaleY(50+i*70);
Width := ScaleX(150);
case i of
0: begin
Caption := ExpandConstant('{cm:MyRadioCaption_1}');
Checked := True;
end;
1:Caption := ExpandConstant('{cm:MyRadioCaption_2}');
end;
end;

with TNewStaticText.Create(WizardForm) do
begin
Parent := MyNewPage.Surface;
SetBounds(ScaleX(16),ScaleY(68+i*70),WizardForm.InnerNotebook.Width - ScaleX(60),ScaleY(26));
WordWrap := True;
case i of
0:Caption := ExpandConstant('{cm:MyText_1}');
1:Caption := ExpandConstant('{cm:MyText_2}');
end;
end;
end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID <= wpSelectDir)
and (PageID = wpReady)
and (MyRadioBtn[1].Checked)
then Result := True;
end;

procedure InitializeWizard();
begin
GetInstTypePage;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpSelectComponents then GetInstType;
end;


или на основе предыдущего, но попроще и как ты хотел


#define MyAppName "test"

[Setup]
AppName={#MyAppName}
AppVerName={#MyAppName}
DefaultDirName={pf}\{#MyAppName}
UsePreviousAppDir=false


[Components]
Name: a; Description: 1;
Name: b; Description: 2;
Name: c; Description: 3;
Name: d; Description: 4;
Name: e; Description: 5;


[Code]
var
Page: TInputOptionWizardPage;

procedure InitializeWizard();
begin
Page:= CreateInputOptionPage(wpSelectDir, 'тип установки', '', '', false, false);
Page.Add('полная версия');
WizardForm.TypesCombo.Hide;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpSelectComponents then
begin
WizardForm.ComponentsList.ItemEnabled[1]:= Page.Values[0];
WizardForm.ComponentsList.ItemEnabled[4]:= Page.Values[0];
end;
end;




detiedyatosla,
никак
родные лейблы не поддерживают прозрачность
пересоздавай и используй прозрачность
http://forum.oszone.net/post-1937887-305.html

Yury_Prizrak
27-06-2012, 13:24
Всем привет! Вопрос следующий(искал, чесно, чет не нашел - если было - плиз, дайте линку на ответ) - мне в инсталяции надо сделать чекбокс "полная версия" - его я сделал, а как "объяснить" инсталу, что если он не нажат - некоторые файлы устанавливать не надо? Т.е. есть например 5 файлов - 1 2 3 4 5, если чекбокс нажат - устанавливаем все, если нет - устанавливаем 1, 3, 4 а 2 и 5 нет. Заранее спасибо »
Все, с этим разобрался, извините. Возник другой вопрос - мне надо проверять была ли предустановлена эта программа(а точнее есть ли конфиг файл этой программы) и если нет - завершать установку. Думал сделать через function InitializeSetup() но есть одно но - ExpandConstant('{app}\Configuration\Config.xml') - в этот момент {app} еще не определен. Может что подскажете? Заранее спасибо :)

Johny777, я сделал все еще проще:
[Files]
Source: {#AppSrcPathAdmin}\1; DestDir: {app}; Flags: ignoreversion
Source: {#AppSrcPathAdmin}\2; DestDir: {app}; Flags: ignoreversion; Check: ServiceCheck
Source: {#AppSrcPathAdmin}\3; DestDir: {app}; Flags: ignoreversion
Source: {#AppSrcPathAdmin}\4; DestDir: {app}; Flags: ignoreversion
Source: {#AppSrcPathAdmin}\5; DestDir: {app}; Flags: ignoreversion; Check: ServiceCheck

[Code]
//Функция проверки чекбокса сервиса
function ServiceCheck: Boolean;
begin
Result := ServiceCheckBox.Checked;
end;

Johny777
27-06-2012, 13:43
Yury_Prizrak,


#define MyAppName "test"

[Setup]
AppID=The_Best_AppID_Ever_Made
AppName={#MyAppName}
AppVerName={#MyAppName}
DefaultDirName={reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1,InstallLocation|{pf}\{#MyAppName}}

[Files]
Source: "config.xml"; DestDir: {app}\Configuration;

[Dirs]
Name: "{app}\Configuration"

[Code]
function InitializeSetup:boolean;
var
AppPath: string;

begin
Result := True;
AppPath := RemoveQuotes(ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSe tting("AppID")}_is1,InstallLocation|}'));
if FileExists(AppPath + '\Configuration\config.xml') then
begin
case MsgBox('Программа установлена и Файл config.xml там лежит. Продолжить?', mbError, MB_YESNO) of

IDYES: Result := True;

IDNO: Result := False;

end;
end;
end;

Yury_Prizrak
27-06-2012, 14:07
Johny777, а нельзя без прописи в реестр? Т.е. у меня
DefaultDirName={pf}\test\test - и он все равно как то выковыривает значение папки при новой инсталляции...

rasim933
27-06-2012, 16:24
Вроде не потеме: делаю репак игры. Обязательно доставать ключи реестра от игры? Нельзя добавить свои ключи?

R.i.m.s.k.y.
27-06-2012, 19:26
Парни, большая просьба.
Путь установки: "C:\Program Files\Games\Selena6000
В реестре это выглядит так:
[HKEY_LOCAL_MACHINE\SOFTWARE\BaseGame\FileSystem]
"DataPath"="C:\Program Files\Games\Selena6000"
После установки программы нужно заменить "\Selena6000" на "\SELENA~1/>;"
То есть поменять название конечной папки, прога иначе не работает. Выручайте! »
Только нюанс, насколько я знаю ДОСовские проги надо сокращать всё: c:\progra~1\Games\Selena~1
Выручаю:


Root: HKLM; SubKey: SOFTWARE\BaseGame\FileSystem; ValueType: string; ValueName: DataPath; ValueData: {code:GetShortName|{app}\Selena6000}; Flags: uninsdeletekeyifempty uninsdeletevalue deletevalue noerror




Вроде не потеме: »
да, не по теме
Обязательно доставать ключи реестра от игры? »
да, обязательно
Нельзя добавить свои ключи? »
можно, добавляй

Johny777
27-06-2012, 23:57
Yury_Prizrak,
извини, но я не совсем врубаю чего тебе хочется
и он все равно как то выковыривает значение папки при новой инсталляции... »
так и будет
ставь хоть куда
а нельзя без прописи в реестр? »
можно конечно
вот так:
CreateUninstallRegKey=no
или так
Uninstallable=no
во втором случае деинсталятор не будет создаваться

в примере который я тебе дал при первой установке создаётся ключ реестра (ну и файл копируется соответственно)
по нему при повторном запуске находит путь инсталл
это выражается в эдите пути на странице выбора директории установки, те там будет путь туда, куда ты в прошлый раз установил (это можно и убрать, но смысл?. Тогда ставишь по новому в другую папку, а ищет в предыдущей в выдаёт сообщение)
и этот же путь считывается в процедуре инициализации, по этому пути ищет файл и выдаёт месседж бокс, если файл найден
ты хотел
проверять была ли предустановлена эта программа »
эта проверка естьа точнее есть ли конфиг файл этой программы »
через ключ реестра сначала находим программу и там ищем файл. Реализовано
и если нет - завершать установку »
если файла нет и завершать, то это бред. Как же тогда его ставить?

Короче без ключа никак. Он всего один

или скажи поподробнее (на основе примера) как тебе нужно :). Скорее всего я тебя недопонял
там видно будет!

bond07
28-06-2012, 05:03
R.i.m.s.k.y. »
Спасибо, получилось:
ValueData: {code:GetShortName|{app}}/>

Raf-9600
28-06-2012, 16:25
Можно ли сделать так, чтобы если выбран компонент Game\Pottable то в меню Пуск вообще не создавались ни ярлыки ни папки?

Johny777
28-06-2012, 16:38
Raf-9600,


[Setup]
AppName=DisksInfo
VersionInfoVersion=5.0
AppVerName=DisksInfo
DefaultDirName={pf}\My program
DefaultGroupName=The_Most_Beautiful_Group_Name_Ever
EnableDirDoesntExistWarning=false

[Components]
Name: a; Description: portable;

[Icons]
Name: {group}\new\Notepad; Filename: notepad.exe; Check: not IsComponentSelected('a')

R.i.m.s.k.y.
28-06-2012, 19:16
Raf-9600
Johny777,
будь проще

[Setup]
AppName=DisksInfo
VersionInfoVersion=5.0
AppVerName=DisksInfo
DefaultDirName={pf}\My program
DefaultGroupName=The_Most_Beautiful_Group_Name_Ever
EnableDirDoesntExistWarning=false

[Components]
Name: abc; Description: portable;

[Icons]
Components: not abc; Name: {group}\new\Notepad; Filename: notepad.exe;

Raf-9600
28-06-2012, 21:57
А можно сделать чтобы если выбран компонент "abc", то инсталлятор начинал использовать эти параметры?
DisableProgramGroupPage=yes
AlwaysShowGroupOnReadyPage=no

R.i.m.s.k.y.
28-06-2012, 22:08
Raf-9600, точно так же как в примерах выше

Raf-9600
29-06-2012, 00:27
R.i.m.s.k.y., не получается =(
[Setup]
DisableProgramGroupPage=yes; Components=abc

Johny777
29-06-2012, 01:19
Raf-9600,
страница пропускается так:
function ShouldSkipPage(PageID: Integer): Boolean;
begin
if PageID = wpSelectProgramGroup then Result := IsComponentSelected('a');
end;
а вот как удалить строки из ReadyMemo без понятия

R.i.m.s.k.y.
29-06-2012, 08:41
Raf-9600,

[Setup]
DisableProgramGroupPage={code:IsComponentSelected('abc')}
//или
DisableProgramGroupPage={code:IsComponentSelected|'abc'}
//нет инно под рукой чтобы проверить
только нюанс: такой вызов должен быть после страницы компонентов, иначе инсталлер выдаст ошибку при выполнении
Порядок выполнения можно прочитать в справке по словам Installation order

Gnom_aka_Lexander
29-06-2012, 09:10
только нюанс: такой вызов должен быть после страницы компонентов »
Не обязательно. При запуске инсталла компоненты уже созданы. Вот с задачами - да, есть такая беда - они создаются только на странице задач и обращение к ним должно быть строге после страницы задач. Но в любом случае:
DisableProgramGroupPage=yes - обрабатывается по нажатию на кнопку далее перед страницей выбора папки, тоесть на странице компонентов.
AlwaysShowGroupOnReadyPage=no обрабатывается по нажатию на кнопку далее перед страницей готовности, поскольку текст PeadiMemo строится в момент перехода на страницу готовности.
Ну и нужно учитывать, что не все параметры в секции [Setup] позволяют управлять ими снаружи, многие являются настроечными на уровне компиляции и требуют однозначного ответа. тут уже только пробовать.

R.i.m.s.k.y.
29-06-2012, 09:48
Ну и нужно учитывать, что не все параметры в секции [Setup] позволяют управлять ими снаружи »
Это ясно-понятно.
К примеру с параметрами сжатия так не прокатит, а вот перезагрузкой снаружи в конце установки управлять вполне возможно

Raf-9600
29-06-2012, 10:24
[Setup] DisableProgramGroupPage={code:IsComponentSelected('abc')}
//или
DisableProgramGroupPage={code:IsComponentSelected|'abc'} »
Не компилируеться =\

Ivan_009
29-06-2012, 11:22
Как обьеденить 2 прогресс бара ssInstall и ssPostInstall в IsDone :search: заранее спасибо за помощь...




© OSzone.net 2001-2012