PDA

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


Страниц : 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 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 [184] 185 186 187 188

Devils Night
24-10-2011, 03:42
А то DeleteIniEntry('Component1','outname',ExpandConstant('{app}\config.ini'));
удаляет первый "outname" в ини
[Component1]
outname=plugin1.dll
outname=plugin2.dll
outname=plugin3.dll
outname=plugin4.dll».Что-то он при установки её удаляет, а нужно чтобы при деинсталяции.
Может я чего в скрипте на чудил?

[ code]
var Flag: boolean;

function InitializeSetup: Boolean;
begin
Flag:= True;
Result:=true;
if not FileExists(ExpandConstant('{pf}')+'\My Program\MyProg.exe')
then
begin
MsgBox('MyProg не найден, сначала установите MyProg.', mbInformation, MB_OK);
Flag:= False;
Result:=false;
end;
end;

procedure DeinitializeSetup();
begin
if Flag then
if WizardForm.CurPageID = WpFinished then
begin
SetIniString('Component1','outname', 'plugin1.dll',ExpandConstant('{app}\config.ini'))
DeleteIniEntry('Component1','outname',ExpandConstant('{app}\config.ini'));
end;
end;

nik1967
24-10-2011, 08:51
Может я чего в скрипте на чудил? »
Есть немного :) .
[Setup]
AppId={{9CC9A926-EC33-48FC-81D9-2EEAB3BF79B7}
AppName=My Program
AppVersion=1.5
AppVerName=My Program 1.5
AppPublisher=My Company, Inc.
AppPublisherURL=http://www.example.com/
AppSupportURL=http://www.example.com/
AppUpdatesURL=http://www.example.com/
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
AllowNoIcons=yes
OutputDir=.
OutputBaseFilename=setup0
Compression=lzma
SolidCompression=yes

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

[Files]
Source: "C:\Program Files\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

[Icons]
Name: "{group}\{cm:UninstallProgram,My Program}"; Filename: "{uninstallexe}"

[ Code]
var Flag: boolean;

function InitializeSetup: Boolean;
begin
Flag:= True;
Result:=true;
if not FileExists(ExpandConstant('{pf}')+'\My Program\MyProg.exe')
then
begin
MsgBox('MyProg не найден, сначала установите MyProg.', mbInformation, MB_OK);
Flag:= False;
Result:=false;
end;
end;

procedure DeinitializeSetup();
begin
if Flag then
if WizardForm.CurPageID = WpFinished then
begin
SetIniString('Component1','outname', 'plugin1.dll',ExpandConstant('{app}\config.ini'));
end;
end;

procedure InitializeUninstallProgressForm();
begin
DeleteIniEntry('Component1','outname',ExpandConstant('{app}\config.ini'));
end;
Только это не решает поставленной задачи, так как удаляет первую строчку в файле ини, состоящем из нескольких значений key=outname.

Sotonisto
24-10-2011, 12:29
Всем привет! Это сново я :)
Вопрос по поводу этого (http://rghost.ru/26906051) скрипта NFSU2. Мне в нем все нравится, но все же необходимо довавить к нему 2 кнопки - свернуть и закрыть (как на скрине). Как это реализовать (при BorderStyle:=bsNone)?
http://img856.imageshack.us/img856/4320/zzzshy.jpg

valyok666
24-10-2011, 13:05
Sotonisto, уже писал же что это через botva2 реализовано

Devils Night
24-10-2011, 13:07
Есть немного . »Благодарю :yahoo: ! Работает как часы.

Вот только хотелось бы уточнить один факт.
В коде для ini указываю путь к другим дополнениям таким образом
SetIniString('Component1','UtilsFolder', '{app}\Skins\',ExpandConstant('{app}\config.ini')) , если прописываю путь как {app}\Utils\, то он и в ini прописывается так же {app}\Utils\, а хотелось чтобы прописалось так же, куда собственно оно и установилось.
Это вообще возможно сделать, или вообще никак?

Gugle
24-10-2011, 13:59
SetIniString('Component1','UtilsFolder', '{app}\Skins\',ExpandConstant('{app}\config.ini')) »

SetIniString('Component1','UtilsFolder', ExpandConstant('{app}\Skins\'), ExpandConstant('{app}\config.ini'))

Raf-9600
24-10-2011, 14:35
Ктонить может подсказать скриптик, в котором бы в файл {app}\Components.ini записывалась разрядность ОСи?

valyok666
24-10-2011, 14:36
Devils Night,
определенное значение из INI-файла

[Setup]
AppName={code:GetAppName}
AppVerName=My Program 1.5
AppPublisher=My Company, Inc.
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup

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

[code]
var
IniValue, IniFile: String;
//Для получения значения в другую секцию
Function GetAppName(IniFile: String): String;
begin
IniFile:='G:\Name.ini'
IniValue:= GetIniString('ModuleName', 'AppName', '', IniFile);
Result:=IniValue
end;
//Просто получение значения
Procedure InitializeWizard();
begin
IniFile:='G:\Name.ini'
IniValue:= GetIniString('ModuleName'{Название секции}, 'AppName'{Подключ}, '', IniFile{Ini файл});
WizardForm.WelcomeLabel2.Caption:= IniValue;
end;

Edison007
24-10-2011, 14:47
Sotonisto, я кидал пример (http://rghost.ru/26396871) , там, как раз содаются такие кнопки...

FolDer98
24-10-2011, 18:52
Доброго Времени суток)Недавно задался вопросом создать форму)форма получилась но как создать DirEdit не стандартной полоской а картинкой???используются ботва

Edison007
24-10-2011, 19:06
FolDer98, http://rghost.ru/26962561 вот тебе пример

FolDer98
24-10-2011, 19:08
Edison007, разрешите узнать есть ли какая нибудь документация FAQ так сказать по Botva2???

Edison007
24-10-2011, 19:23
FolDer98, ну если только сам модуль, там всё четко расписано, ну и есть куча примеров, по которым легко понять, что к чему

Tixo
24-10-2011, 19:26
народ а как работают компоненты?
сам механизм действия
как что надо сделать чтобы извлеклась именно русская(английская) озвучка

No4noylis
24-10-2011, 19:36
Tixo, ну если пакуешь стандартным inno, то в секции [Files] файлы этой самой озвучки добавляй отдельно, и в конце соответствующих файлов пиши Components: имя компонента
Если arc'ом пакуешь, то распаковку с выбором компонентов можно реализовать с помощью ISDone, там в справке все подробно описано :)

Пример 2 : распаковка архивов, учитывая выбранные компоненты.

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: text; Description: Язык субтитров; Types: full; Flags: fixed
Name: text\rus; Description: Русский; Flags: exclusive;
Name: text\eng; Description: Английский; Flags: exclusive;
Name: voice; Description: Язык озвучки; Types: full; Flags: fixed
Name: voice\rus; Description: Русский; Flags: exclusive;
Name: voice\eng; Description: Английский; Flags: exclusive;

....

Comps1:=0; Comps2:=0; Comps3:=0;
TmpValue:=1;
if IsComponentSelected('text\rus') then Comps1:=Comps1+TmpValue; //компонент 1
TmpValue:=TmpValue*2;
if IsComponentSelected('text\eng') then Comps1:=Comps1+TmpValue; //компонент 2
TmpValue:=TmpValue*2;
if IsComponentSelected('voice\rus') then Comps1:=Comps1+TmpValue; //компонент 3
TmpValue:=TmpValue*2;
if IsComponentSelected('voice\eng') then Comps1:=Comps1+TmpValue; //компонент 4

....

ISDoneError:=true;
if ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, Comps1,Comps2,Comps3, MainForm.Handle, {#NeedMem}, @ProgressCallback) then begin
repeat
if not FileSearchInit(false) then break;
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\BasicData.arc'), ExpandConstant('{app}\'), '', false, '', '', '', notPCFonFLY) then break;
if not ISArcExtract ( 1, 0, ExpandConstant('{src}\rustext.arc'), ExpandConstant('{app}'), '', false, '', '', '', notPCFonFLY) then break;
if not ISArcExtract ( 2, 0, ExpandConstant('{src}\engtext.arc'), ExpandConstant('{app}'), '', false, '', '', '', notPCFonFLY) then break;
if not ISArcExtract ( 3, 0, ExpandConstant('{src}\rusvoice.arc'), ExpandConstant('{app}'), '', false, '', '', '', notPCFonFLY) then break;
if not ISArcExtract ( 4, 0, ExpandConstant('{src}\engvoice.arc'), ExpandConstant('{app}'), '', false, '', '', '', notPCFonFLY) then break;
ISDoneError:=false;
until true;
ISDoneStop;
end;

в данном примере имеется 4 действующих компонента. Перед инициализацией бибилиотеки состояния чекбоксов компонентов загружаются в переменную Comps1.
Сначала при любом выборе компонентов распаковывается архив BasicData.arc, у которого нет к ним привязки (первый параметр равен 0);
далее уже в зависимости от выбранных пользователем чекбоксов будет распаковываться:
rustext.arc, если был выбран компонент 'text\rus';
engtext.arc, если был выбран компонент 'text\eng';
rusvoice.arc, если был выбран компонент 'voice\rus';
engvoice.arc, если был выбран компонент 'voice\eng';
Вне зависимости от выбора пользователя, прогрессбар автоматически подстраивается под выбранные компоненты, чтобы отображение было без равков и граничным состоянием было 100%. Это достигается тем, что после тестового прохода вся информация о времени выполнения каждого компонента сохраняется в файл records.inf и перед началом реальной установки уже известно какие компоненты не были выбраны и, соответственно, их время будет интерполироваться на все остальные операции, которые точно будут выполнены в процессе установки.

Tixo
24-10-2011, 19:44
No4noylis,
пакую арком, как там выбрать или ненадо?

Rikill
24-10-2011, 20:44
Tixo, значит рановато пока это осваивать.

Tixo
24-10-2011, 20:48
Rikill, надо же когда то учиться)

onlainserver
24-10-2011, 20:58
привет всем у меня простой вопрос как сделать чтобы при распаковке архива создавался ярлык на рабочий стол?

вот например когда игру устанавливаешь ярлык ехе файла автоматом на рабочем столе вот как такое сделать спасибо жду ответов)

Gnom_aka_Lexander
24-10-2011, 21:00
кто работал с gdiplus.dll расскажите пожалуйста что это такое и с чем его едят »
Это одна из бета-версий ботва2. Юршат, вроде, объяснял уже както. поэтому, оптимальнее использовать именно окончательный вариант.




© OSzone.net 2001-2012