Войти

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

BlackInferno
03-05-2012, 11:41
Можно на одну корневую ветку, т.е к первой строчке прилепить флаг uninsdeletekey »
Ага, значит выглядеть должно так:

[Registry]
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003; ValueType: string; ValueName: ; ValueData: ; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003; ValueType: string; ValueName: Servername; ValueData: PC
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003; ValueType: string; ValueName: Version; ValueData: 10.8
..........
..........
..........

Про осторожность выше ты угадал причину - чтобы не смахнуть вендовые ветки »
А если я выдирал из реестра только игровую папку, т.е. взял папку из HKEY_LOCAL_MACHINE -> SOFTWARE -> World Championship Snooker 2003 могут ли как-то туда попасть случайно виндовые ветки реестра?

R.i.m.s.k.y.
03-05-2012, 11:42
nik1967, некоторые уникумы удаляют лишнее лежащее в {src}, так что внутри инсталлера дирекс не помешает

BlackInferno, выдитрать правильно надо через регшот:
1. запустить регшот и сделать первый снимок
2. запустить оригинальный дистр игры и ничего параллельно не делать
3. сделать второй снимок
4. поудалять лишнее и импортировать в скрипт

Но если ты точно знаешь ключ реестра можно и так

HKLM\SOFTWARE\Codemasters это не вендовый ключ

Да, должно выглядеть так

BlackInferno
03-05-2012, 11:50
Ясно.
А "Flags: uninsdeletekey" ставить только на первую строку? Потом, при удалении, точно удалится вся информация по игре из реестра?

nik1967
03-05-2012, 11:51
R.i.m.s.k.y., ну да, ну да, если доп.софт весит более 100 мб., то утяжелять инсталлятор как то не кошерно. Но это, как говориться, моё ИМХО (да и не только моё).

Johny777
03-05-2012, 11:56
R.i.m.s.k.y.,
на тему "во время установки" пример South

[Setup]
AppName=MyProg
AppVerName=MyProg
DefaultDirName={pf}\MyProg
DefaultGroupName=MyProg

[Files]
Source: 1.dll; DestDir: {app}; AfterInstall: Patch()
Source: 2.dll; DestDir: {app}; AfterInstall: Patch()

[Code_]
procedure Patch;
var
ResultCode: Integer;
begin
case ExtractFileName(ExpandConstant(CurrentFileName)) of
'1.dll': begin
if Exec(ExpandConstant('{win}\notepad.exe'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then
MsgBox('Hello.', mbInformation, MB_OK);
if ResultCode=0 then WizardForm.CancelButton.OnClick(nil);
end;
'2.dll': if Exec(ExpandConstant('{win}\notepad.exe'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then
MsgBox('Hello 2.', mbInformation, MB_OK);
end;
end;

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


может кому пригодится :)

некоторые уникумы удаляют лишнее лежащее в {src} »
Забей! "Против лома нет приёма!"

R.i.m.s.k.y.
03-05-2012, 12:00
BlackInferno, точно-точно удалится, это же корневой ключ (сколько раз я уже написал это слово :) )
ну если хочешь чтобы наверняка все удалилось сделай Format d: :)

BlackInferno
03-05-2012, 12:05
R.i.m.s.k.y., ну вот, пожалуй это все... большое спасибо за помошь!

R.i.m.s.k.y.
03-05-2012, 12:07
BlackInferno, большое пожалуйста за вопросы!
Ты кричи если что :)

Johny777, а что это на тему "во время установки" пример South ?

nik1967
03-05-2012, 12:13
BlackInferno, советую присмотреться к моему посту (http://forum.oszone.net/post-1909701.html#post1909701). По правилам хорошего тона дополнительный софт обычно располагают отдельно от инсталлятора (в репаках). Поверь моему опыту :) .

R.i.m.s.k.y.
03-05-2012, 12:15
nik1967, очень умно давать цынк на ресур требующий регистрацию
Там написано что репаки надо делать с регшотом и без наворотов чтобы поставилось безо всяких "out of bounds?

Devils Night
03-05-2012, 12:24
Flags: uninsdeletekey »Это значение называется: Удалить ключ при деинсталляции! В общем юзай ISTool, там всё вроде понятно, да и ты не только реестр и компоненты можешь, добавлять, редактировать, удалять, но и многое другое. Сам часто пользуюсь ISTool в подобных ситуациях, потому всего не упомнишь.

Ещё например в Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003; ValueType: string; Flags: uninsdeletekeyможешь добавить Components: a, он позволит заносить ветку в реестр только в том случае если компонент выбран, т.е получится Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003; ValueType: string; Flags: uninsdeletekey; Components: a

И ещё, обычно дополнительный софт располагают не на странице выбора компонентов, а на странице дополнительных задач. »Всё верно, так и делают.

R.i.m.s.k.y.
03-05-2012, 12:29
Devils Night BlackInferno, ISToolом хорошо править массово флаги, ну и для простеньки скриптов, как только лезешь в секцию кода сразу приходится переключаться на расширенный компилятор

nik1967
03-05-2012, 12:30
очень умно давать цынк на ресур требующий регистрацию »
Извиняюсь, дал ссылку на свой профиль в Р.Г. Каталист, не подумав, что для просмотра нужна регистрация. безо всяких "out of bounds? »
Это легко решаемо с помощью флага Flags: skipifdoesntexist.
А впрочем, я никому ничего не навязываю. Пусть будет, так, как будет. Пардон за :off:

BlackInferno
03-05-2012, 12:35
И ещё, обычно дополнительный софт располагают не на странице выбора компонентов, а на странице дополнительных задач. »
А как указать это? Я так понимаю, что все что в [Components] нужно вырезать и вставить в [Tasks], а в секциях [Files] и [Run] оставить все без изменений?

Johny777
03-05-2012, 12:39
R.i.m.s.k.y.,
Да там пацан спрашивал как во время установки музыку проиграть, потом закрыть инсталл. Я к тому что можно без ассемблера во время установки без всяких таймеров и считываний позиций прогресбара выполнять определённые действия. А способ при извлечении такого-то файла и действий после этого даёт доступ к определённым возможностям.

R.i.m.s.k.y.
03-05-2012, 12:40
BlackInferno, в секция [Files] и [Run] тоже Components поменять на Tasks

Devils Night
03-05-2012, 12:42
ISToolом хорошо править массово флаги, ну и для простеньки скриптов»Ну для новичка тоже, самое оно, так отредактировать по мелочи.

как только лезешь в секцию кода сразу приходится переключаться на расширенный компилятор »Я и не спорю.

Кстати, о коде, можно ли привязать к какому либо отдельному куску кода компонент например Components: a?

И ещё, возможно ли в секции [Setup], привязать к некоторым строкам Components: a, а точнее вот это:
[Setup]
Uninstallable=false
CreateUninstallRegKey=false
UpdateUninstallLogAppName=false?

nik1967
03-05-2012, 12:48
Кстати, о коде, можно ли привязать к какому либо отдельному куску кода компонент например Components: a? »
Pascal Scripting: IsComponentSelected
Прототип:
function IsComponentSelected(const Components: String): Boolean;

Описание:
Возвращает True, если заданный компонент выделен. Несколько компонентов могут быть указаны в том же порядке с помощью параметра секции Components.

Например:
begin
if IsComponentSelected('helpfiles') then
// the 'helpfiles' component is selected
end;

Johny777
03-05-2012, 12:49
привязать к какому либо отдельному куску кода компонент »

пример (при переходе на страницу wpReady цвет WizardForm становится чёрным)



[Setup]
AppName=My Program
AppVersion=1.5
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program


[Components]
Name: a; Description: a
Name: b; Description: b

[ code]
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpReady then
begin
if IsComponentSelected('a') then
WizardForm.Color:=clBlack;
end;
end;


.

BlackInferno
03-05-2012, 12:50
в секция [Files] и [Run] тоже Components поменять на Tasks »
Ага спасибо, и вроде как Types: full тоже убрать надо, вроде как секция [Tasks] не читает этот тег.




© OSzone.net 2001-2012