Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 4]
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" ставить только на первую строку? Потом, при удалении, точно удалится вся информация по игре из реестра?
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 ?
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ом хорошо править массово флаги, ну и для простеньки скриптов, как только лезешь в секцию кода сразу приходится переключаться на расширенный компилятор
очень умно давать цынк на ресур требующий регистрацию »
Извиняюсь, дал ссылку на свой профиль в Р.Г. Каталист, не подумав, что для просмотра нужна регистрация. безо всяких "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?
Кстати, о коде, можно ли привязать к какому либо отдельному куску кода компонент например 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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.