PDA

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


Страниц : 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 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

Shkutu
19-08-2013, 18:19
Здравствуйте!
Подскажите плиз, как можно реализовать вывод кастомной формочки в зависимости от выбранного типа установки. Пробовала функцию WizardSelectedComponents, но она как-то странно работает - выдает или все компоненты или вообще пустой список вне зависимости от того, установка каких компонентов выбрана.

saurn
19-08-2013, 21:06
Shkutu, чем стандартные Types и Components не устраивают:
[Types]
Name: "full"; Description: "Full installation"
Name: "compact"; Description: "Compact installation"
Name: "custom"; Description: "Custom installation"; Flags: iscustom

[Components]
Name: "main"; Description: "Main Files"; Types: full compact custom; Flags: fixed
Name: "help"; Description: "Help Files"; Types: full
Name: "help\english"; Description: "English"; Types: full
Name: "help\dutch"; Description: "Dutch"; Types: full
Или я не верно понял суть вопроса?

R.i.m.s.k.y.
20-08-2013, 08:11
подскажите можно ли добавить скролл с стандартному WizardForm.ComponentsList? нигде не могу найти информацию как вернуть его обратно после изменения стандартного размера. »
тоже с таким столкнулся, пришлось увеличивать окно установщика

Shkutu
20-08-2013, 12:12
saurn, смысл в том, что в зависимости от выбранного типа установки/набора компонентов нужно или выводить дополнительную страницу или не выводить. Я не совсем поняла, как это можно сделать с помощью стандартных Types и Components.

R.i.m.s.k.y.
20-08-2013, 16:40
saurn, смысл в том, что в зависимости от выбранного типа установки/набора компонентов нужно или выводить дополнительную страницу или не выводить. Я не совсем поняла, как это можно сделать с помощью стандартных Types и Components. »
я бы tasks приплел
[Tasks]
Components: main; Name: desktopicon\user; Description: "For the current user only"; GroupDescription: "Additional icons:"; Components: main; Flags: exclusive unchecked
Components: help\dutch; Name: quicklaunchicon; Description: "Create a &Quick Launch icon"; GroupDescription: "Additional icons:"; Components: main; Flags: unchecked
Components: help\english; Name: associate; Description: "&Associate files"; GroupDescription: "Other tasks:"; Flags: unchecked


[Components]
Name: "main"; Description: "Main Files"; Types: full compact custom; Flags: fixed
Name: "help"; Description: "Help Files"; Types: full
Name: "help\english"; Description: "English"; Types: full
Name: "help\dutch"; Description: "Dutch"; Types: full
если три компонента в Tasks не будут выбраны то страница будет пропущена

saurn
20-08-2013, 17:11
Я не совсем поняла, как это можно сделать с помощью стандартных Types и Components. »
Например, так:
[Components]
Name: MyComps; Description: Files; Types: full;

[Code]
var
My_Page: TWizardPage;

procedure InitializeWizard();
begin
My_Page := CreateCustomPage(wpSelectComponents, 'Caption', 'Description');
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
case PageFromID(PageID) of
My_Page: Result := not IsComponentSelected('MyComps');
end;
end;
Здесь через код создается кастомная страница. В функции ShouldSkipPage описано условие, при котором эта страница будет пропущена, или показана, если условие не выполнено. В данном случае условие это - если не отмечен компонент MyComps

Shkutu
20-08-2013, 17:45
я бы tasks приплел »
Извините, новичок с inno, не совсем понимаю, как это будет работать. Если можно, подробнее? Или где про "подробнее" почитать?
На всякий случай обрисую ситуацию более детально. В моем скрипте в зависимости от типа установки может запускаться установка дополнительного стороннего ПО. Выбор типа установки и, соответственно, компонентов, реализован с помощью Types и Components. Так вот в случае, если выбран тип с установкой дополнительного ПО, то нужно показать от этого ПО информацию о лицензии. И не показывать, если это ПО не устанавливается.
Пыталась использовать WizardSelectedComponents, чтобы отследить выбранные компоненты, но она как-то странно работает - вне зависимости от выбранного типа установки выдает или полный набор компонентов или вообще пустой список.
Ну вот как-то так:)

rezvorck
20-08-2013, 18:12
Здравствуйте!
Не получается обработать параметр командной строки ни через ParamStr ни через GetCmdTail... В чем ошибка?!

procedure InitializeWizard();
begin
if ParamStr(1)='/message' then MsgBox('bla bla bla', mbInformation, mb_Ok);
end;

cmd -> setup.exe /message

saurn
20-08-2013, 18:30
rezvorck,
function ParamCmd(): Boolean;
begin
Result := Pos(' -mycmdparam', GetCmdTail) <> 0;
end;

procedure InitializeWizard();
begin
if ParamCmd() then MsgBox('bla bla bla', mbInformation, mb_Ok);
end;

Nightwishh
20-08-2013, 19:30
:yahoo: А можно как- нибудь защитить графику в папке темп, без Ботвы?

Shkutu
21-08-2013, 14:38
saurn, огромное спасибо, помогло! :)

Shkutu
22-08-2013, 13:02
Приветствую!
Еще вопрос образовался. А можно ли как-то у стандартной формы "Ready to Install" как-то изменить значение выводимой папки установки? Или для этого придется переопределить форму целиком, ну т е заменить стандартную на свою?

saurn
22-08-2013, 13:25
как-то изменить значение выводимой папки установки? »
Поконкретней, что подразумевается под "изменить значение"?
P.S.
Немножко для справки: Ready to Install в данном случае не форма, а страница. Инсталятор в Inno строится таким образом, что имеет всего одну форму, на котрой в зависимости от ID страниц показываются или скрываются те или иные элементы. Управлять этими элементами можно в секции Code, через встроенные или самописные процедуры и функции. Но форма у мастера установки, как таковая, одна.

Shkutu
22-08-2013, 14:01
saurn, спасиб за справку.
подразумевается под "изменить значение"? »
При установке когда пользователь выбирает папку для установки приложения - это не сама папка приложения, а некий родительский каталог, в котором потом создаются другие папки в зависимости от выбранных настроек и тд и приложение устанавливается уже в них. На стандартной странице Ready to Install выводится информация о установке, в частности сообщение "ReadyMemoDir=Папка установки:", а далее, собственно, папка установки. Но туда попадает только выбранный пользователем родительский каталог, а хотелось бы выводить путь именно до папки приложения.
Надеюсь, объяснила понятно:)

saurn
22-08-2013, 14:20
Shkutu, как-то так:

function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;
var
S: String;
begin
if IsComponentSelected('имя нужного компонента') then
S := S + 'Целевой каталог:' + NewLine + AddBackslash(Wizarddirvalue()) + 'имя нужной папки';

S := S + NewLine + NewLine + MemoTypeInfo + NewLine + NewLine + MemoComponentsInfo + NewLine + NewLine + MemoGroupInfo;
Result := S;
end;

Shkutu
22-08-2013, 17:02
saurn, благодарю. UpdateReadyMemo - то, что нужно :)

Shkutu
27-08-2013, 13:40
Всем доброго времени суток!
Возник вопрос, может кто в сталкивался или просто знает, как. Когда при установке программа помещается в "Программы и компоненты" панели управления, то обычно (как я понимаю) отображаемое там имя берется из AppName. Можно ли поменять это отображаемое там имя на какое-то, заранее неизвестное? Ну т е формировать это имя в зависимости от каких-то введенных пользователем данных. Использование Scripted Constants не помогло - судя по всему AppName инициализируется до того, как пользователь что-либо ввел.

nik1967
27-08-2013, 15:18
Shkutu, [Setup]: UninstallDisplayName
Описание:
Определяет название программы на странице Установка и удаление программ Панели управления. Значение может содержать константы. Если директива не указана или пустая, инсталлятор использует значение директивы AppVerName секции [Setup].

Из-за ограничений Windows 9x/Me, значение не может превышать 63 символа.

Например:
UninstallDisplayName=My Program

saurn
27-08-2013, 18:31
Shkutu, так пойдет?
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DisableProgramGroupPage=yes
UninstallDisplayIcon={app}\MyProg.exe
UninstallDisplayName={code:DisplayName}
OutputDir=.


[Code]
var
InputPage: TInputQueryWizardPage;

function DisplayName(Name: String): String;
begin
Result := InputPage.Values[0];
end;

procedure InitializeWizard;
begin
InputPage := CreateInputQueryPage(wpSelectDir, 'Caption', 'Description', 'SubCaption');

InputPage.Add('Name:', False);
InputPage.Values[0] := 'DefaultName';
end;


то обычно (как я понимаю) отображаемое там имя берется из AppName »
Из UninstallDisplayName

Shkutu
27-08-2013, 19:00
saurn, nik1967, спасибо!
А нету (вдруг) ссылки на русскоязычную справку? А то продираюсь через англоязычную, видимо не слишком эффективно. А на кучу моих вопросов ответы можно найти, судя по всему, просто внимательнее читая документацию)




© OSzone.net 2001-2012