Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 5]
R.i.m.s.k.y.
06-09-2012, 18:13
Snoopak96, извини, протупил
Ivan_009
06-09-2012, 19:43
Snoopak96, Вот глянь пожалуйста....
Snoopak96
06-09-2012, 19:59
Ivan_009, что этот, что тот что прислал в лс у меня всё нормально появляется пб в postinstall, версия инно у меня 5.5.1ee1 (a)
R.i.m.s.k.y., опять проблема теперь если один ключ в реестре есть а остальных нет то инсталл выдаёт "На компьютере не найдено установленых игр" а нужно чтоб выдавал это сообщение тогда когда вообще нет ключей в реестре.
Присутствует в реестре Game_1 инсталл работает но скрыты Game_2 и Game_3
Присутствует в реестре Game_1 инсталл работает
Присутствует в реестре Game_2 инсталл работает но скрыт Game_3
Присутствует в реестре Game_1 инсталл работает
Присутствует в реестре Game_2 инсталл работает
Присутствует в реестре Game_3 инсталл работаетне важно в каком порядке.
Отсутствует в реестре Game_1, Game_2 и Game_3 инсталл не запускается и выдаёт сообщение
Ну скрыть компоненты не получится »не понял. а тада это что
[Setup]
AppName=Extende
AppVersion=1.0
AppVerName=Extende 1.0
DefaultDirName={pf}\Games
DefaultGroupName=Extende
AllowNoIcons=yes
OutputDir=.
OutputBaseFilename=ExtSetup
Compression=lzma
SolidCompression=yes
[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl
[Components]
Name: game_1; Description: Game_1; Flags: dontinheritcheck; Types: full; Check: CheckRegGame1
Name: game_2; Description: Game_2; Flags: dontinheritcheck; Types: full; Check: CheckRegGame2
Name: game_3; Description: Game_3; Flags: dontinheritcheck; Types: full; Check: CheckRegGame3
[Files]
Source: Game_1\*; DestDir: {app}\Game_1; Flags: ignoreversion recursesubdirs createallsubdirs; Components: game_1
Source: Game_2\*; DestDir: {app}\Game_2; Flags: ignoreversion recursesubdirs createallsubdirs; Components: game_2
Source: Game_3\*; DestDir: {app}\Game_3; Flags: ignoreversion recursesubdirs createallsubdirs; Components: game_3
[Icons]
Name: {group}\{cm:UninstallProgram,Extende}; Filename: {uninstallexe}
[#code]
Function CheckRegGame1: Boolean;
begin
if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game1_is1') then
Result:= True;
end;
Function CheckRegGame2: Boolean;
begin
if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game2_is1') then
Result:= True;
end;
Function CheckRegGame3: Boolean;
begin
if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game3_is1') then
Result:= True;
end;
ведь работает же, только осталось пара нюансов.
можно сделать так как вариант: »интересный вариант, но не то.
Johny777, тоже не то.
Snoopak96
06-09-2012, 21:21
SatHan,
т.е. тоже не то?:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[Components]
Name: game_1; Description: Game_1; Flags: dontinheritcheck; Types: full; Check: CheckRegGame(1);
Name: game_2; Description: Game_2; Flags: dontinheritcheck; Types: full; Check: CheckRegGame(2);
Name: game_3; Description: Game_3; Flags: dontinheritcheck; Types: full; Check: CheckRegGame(3);
[ Code]
Function CheckRegGame(nParam: Integer): Boolean;
begin
case nParam of
1: Result:= RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game1_is1');
2: Result:= RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game2_is1');
3: Result:= RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game3_is1');
else
Result := RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game1_is1') and
RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game2_is1') and
RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game3_is1')
end;
end;А по моему это тоже самое, что предлагает R.i.m.s.k.y., только упрощенно + автор Johny777 сделал не большую описку, что простительно.
Snoopak96
06-09-2012, 21:56
SatHan, вот в общем допилил код:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[Components]
Name: game_1; Description: Game_1; Flags: dontinheritcheck; Types: full; Check: CheckRegGame(1);
Name: game_2; Description: Game_2; Flags: dontinheritcheck; Types: full; Check: CheckRegGame(2);
Name: game_3; Description: Game_3; Flags: dontinheritcheck; Types: full; Check: CheckRegGame(3);
[_Code]
Function CheckRegGame(nParam: Integer): Boolean;
begin
case nParam of
1: Result:= RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game1_is1');
2: Result:= RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game2_is1');
3: Result:= RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game3_is1');
else
Result := RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game1_is1') and
RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game2_is1') and
RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game3_is1')
end;
end;
function InitializeSetup:boolean;
begin
if CheckRegGame(1) or CheckRegGame(2) or CheckRegGame(3) then Result:=True else
if MsgBox('На вашем компьютера не найдено ни одной игры.', mbConfirmation, MB_OK) = IDOK then Result:=False;
end;
т.е. тоже не то?: »в том смысле
1. брался за один код а у Johny777 совсем другой (не понятный мне)
2. была та же проблема то есть " если один ключ в реестре есть а остальных нет то инсталл выдаёт "На компьютере не найдено установленых игр" а нужно чтоб выдавал это сообщение тогда когда вообще нет ключей в реестре."
теперь все как нада.
R.i.m.s.k.y., Johny777, Snoopak96, Спасибо вам что выручили.
Ещё кое что. Как заставить NewStaticText1 который в TBevel-е вместо {pf}\Application отображать C:\Program Files\Application?
[Setup]
AppName=Application
AppVersion=1.0
DefaultDirName={pf}\Application
DefaultGroupName=Application
AllowNoIcons=yes
OutputDir=.
[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl
[#Code]
var
ISCustomPage1: TWizardPage;
Bevel2: TBevel;
NewStaticText1: TNewStaticText;
NewStaticText2: TNewStaticText;
procedure RedesignWizardForm;
begin
ISCustomPage1 := CreateCustomPage(wpWelcome, 'ISCustomPage1_Caption', 'ISCustomPage1_Description');
with ISCustomPage1.Surface do
begin
Name := 'ISCustomPage1';
end;
Bevel2 := TBevel.Create(WizardForm);
with Bevel2 do
begin
Name := 'Bevel2';
Parent := ISCustomPage1.Surface;
Left := ScaleX(32);
Top := ScaleY(32);
Width := ScaleX(346);
Height := ScaleY(186);
end;
NewStaticText1 := TNewStaticText.Create(WizardForm);
with NewStaticText1 do
begin
Name := 'NewStaticText1';
Parent := ISCustomPage1.Surface;
Caption := 'Папака установки:';
Left := ScaleX(56);
Top := ScaleY(56);
Width := ScaleX(98);
Height := ScaleY(14);
end;
NewStaticText2 := TNewStaticText.Create(WizardForm);
with NewStaticText2 do
begin
Name := 'NewStaticText2';
Parent := ISCustomPage1.Surface;
Caption := '{pf}\Application';
Left := ScaleX(160);
Top := ScaleY(56);
Width := ScaleX(77);
Height := ScaleY(14);
end;
NewStaticText1.TabOrder := 0;
NewStaticText2.TabOrder := 1;
end;
procedure InitializeWizard();
begin
RedesignWizardForm;
end;
Mailchik
06-09-2012, 23:23
SatHan,
Caption := ExpandConstant('{pf}\Application');
Johny777
07-09-2012, 02:31
Snoopak96,
позволю себе заметить, что функция CheckRegGame рассчитана на отправку из себя булев значений компонентам и функции InitializeSetup
те если мы отправляем ей целое число 1 или 2 или 3 то она возвращает значение соответствующее существованию определённого ключа
если (else) значение не равно 1, 2, 3 то встроенная переменная Result возвращает значение соответствующее существованию всех 3-х ключей
те CheckRegGame(1) or CheckRegGame(2) or CheckRegGame(3) это всё нормуль, но нет смысла гонять функцию 3 раза
достаточно отправить ей например CheckRegGame(777) :)
SatHan,
замени у себя в коде
function InitializeSetup:boolean;
begin
if CheckRegGame(любое целое число кроме чисел 1, 2, 3) then Result:=True else
if MsgBox('На вашем компьютера не найдено ни одной игры.', mbConfirmation, MB_OK) = IDOK then Result:=False;
end;
или, если хочешь оставь как было но удали лишний код:
else
Result := RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game1_is1') and
RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game2_is1') and
RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game3_is1')
MogilShik2007
07-09-2012, 04:55
Привет, появилось пару вопросов:
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep=usUninstall then
begin
if DirExists(ExpandConstant('{pf}\PCGAME\Игра\Saves')) then
begin
if MsgBox('Удалить сохранения игры?',mbconfirmation, mb_yesno) = IDYES then
begin
DelTree(ExpandConstant('{pf}\PCGAME\Игра\Saves'), True, True, True);
MsgBox('Сохранения игры успешно удалены.', mbinformation, mb_ok);
end;
end;
end;
end;
[UninstallDelete]
Type: dirifempty; Name: "{pf}\PCGAME"
Type: dirifempty; Name: "{pf}\PCGAME\Игра"
Type: files; Name: "{pf}\PCGAME\Игра\log.txt"
Type: files; Name: "{pf}\PCGAME\Игра\multiplayer_log.txt"
Type: files; Name: "{pf}\PCGAME\Игра\stronghold.cfg"
1. Как сделать, чтобы выделенное красным тоже удалялось?
2. Если изменить папку назначения то вся эта фигня бессмысленна, как можно это решить?)))
R.i.m.s.k.y.
07-09-2012, 07:25
MogilShik2007, помоему у тебя кнопка ) западает
2. {app}\PCGAME
1. procedure RD(Dir:string);
begin
Exec('cmd.exe', ' /c rd /S /Q ' + '"'+Dir+'"',ExpandConstant('{sys}'), SW_Hide,ewWaitUntilTerminated,res);
end;
procedure RF(file:string);
begin
Exec('cmd.exe', ' /c del /F /Q ' + '"'+file+'"',ExpandConstant('{sys}'), SW_Hide,ewWaitUntilTerminated,res);
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep=usDone then begin
RD(ExpandConstant('{app}'))
end;
end;
MogilShik2007
07-09-2012, 10:16
Не, неканает {app}, пропускает запрос на удаление сохранений...
Gnom_aka_Lexander
07-09-2012, 10:27
MogilShik2007, смотри. Папка {app}(папка, в которую была установлена программа) это то, что удаляется вообще по всякому. соответственно - проверяем - нету, запрос пропускается - чего не понятно?
MogilShik2007
07-09-2012, 10:52
Разобрался)))
MogilShik2007
07-09-2012, 13:08
Такой вопрос, на странице приветствия когда пишется мол будет установлена такая-то программа или игра, реально как-то название этой проги или игры своим цветом сделать?
Gnom_aka_Lexander
07-09-2012, 13:12
MogilShik2007, Можно (http://krinkels.org/showthread.php?p=13011#post13011).
MogilShik2007
07-09-2012, 13:48
Елки, посмотрел этот ReDrawText, там сам черт ногу сломит(((
MogilShik2007
07-09-2012, 16:26
Усе, победил таки с помощью ReDrawText, оказалась отличная штука)))
Подскажите какие цвета в формате color=$FF0000 поддерживает IS, а то не все хавает.
Ммм, ну и хотелось бы скрипт для полного счастья, чтобы использовать скин при деинсталляции, такой же как и при установке, а то пробовал:
[Setup]
AppName=My prog
AppVerName=My prog
DefaultDirName={pf}\My prog
[Files]
Source: ISSkin.dll; DestDir: {app}; Flags: ignoreversion
Source: Tiger.cjstyles; DestDir: {app}; Flags: ignoreversion
[Code]
procedure LoadSkin(lpszPath: string; lpszIniFileName: string );
external 'LoadSkin@files:isskin.dll stdcall delayload setuponly';
procedure LoadSkinUninst(lpszPath: string; lpszIniFileName: string );
external 'LoadSkin@{tmp}\isskin.dll stdcall delayload uninstallonly';
procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall delayload setuponly';
procedure UnloadSkinUninst();
external 'UnloadSkin@{tmp}\isskin.dll stdcall delayload uninstallonly';
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';
function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('Tiger.cjstyles');
LoadSkin(ExpandConstant('{tmp}\Tiger.cjstyles'), '');
Result := True;
end;
function InitializeUninstall(): Boolean;
begin
FileCopy(ExpandConstant('{app}\isskin.dll'), ExpandConstant('{tmp}\isskin.dll'), True);
FileCopy(ExpandConstant('{app}\Tiger.cjstyles'), ExpandConstant('{tmp}\Tiger.cjstyles'), True);
LoadSkinUninst(ExpandConstant('{tmp}\Tiger.cjstyles'), '');
Result := True;
end;
procedure DeinitializeUninstall();
begin
UnloadSkinUninst();
end;
Устанавливаться то со скином устанавливается, а удаляться не хочет выдает ошибку(((
Yury_Prizrak
07-09-2012, 17:10
Всем привет. Такой вопрос - как сделать чекбокс на последней странице с надписью "Запустить сервис?" и, если он нажат выполнить функцию
//StartService.
procedure StartService();
var
ResultCode: Integer;
ResultString: String;
begin
//Проверка инстал или апдейт
if not Installed then
begin
ResultString := ExpandConstant('start "' + IdentificationServiceEdit.Text + '"');
end
else
begin
ResultString := ExpandConstant('start "' + IdentificationService + '"');
end;
Exec('net', ResultString, '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
end;
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.