Войти

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

Rikill
05-07-2011, 12:06
Может мой урок в шапку закинуть? просто он реально помогает людям и не будет флуда насчёт "склейте скрипт".

v00sh
05-07-2011, 12:11
Код:
[Run]
Filename: "{app}\pb\pbsetup.exe"; WorkingDir: "{app}\pb\"; Parameters: "/q --i-accept-the-pb-eula /ag cod4 --add-game-path='{app}' /u"; StatusMsg: "Обновление PunkBuster..."; Tasks: "pb";

При запуске файла pbsetup.exe с такими настройками выскакивает ошибка (игра устанавливалась в C:\Program Files\Activision\Call of Duty 4 - Modern Warfare):
http://s57.radikal.ru/i157/1107/19/17382e56ee5b.jpg

Каким образом нужно исправить код в секции "--add-game-path=", чтобы обновление происходило без ошибок (после = - путь до папки с игрой)?

Синтаксис:
http://s39.radikal.ru/i083/1107/79/c32a3f41e701.jpg

Gnom_aka_Lexander
05-07-2011, 12:45
Самый быстрый браузер :) тестим (http://rghost.ru/13522691) :)
Чтобы не было вопросов, по поводу касательства к этой теме - написан на Inno Setup.

Rikill
05-07-2011, 13:17
Лександер, это не твой браузер, он есть с примерами к рестулз

leshcat
05-07-2011, 13:39
R.i.m.s.k.y.,

Ситуация такая:

Есть первый инсталл - setup1.exe. В нем есть чекбокс, что если он отмечен, то будет добавлено:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce\setup2.exe

ПРИЧЕМ, setup2.exe должен быть рядом с setup1.exe

Setup1 после установки перезагружает систему, система запускает сетап2.

Setup2 после установки должен удалить ключ регистра.

Rikill
05-07-2011, 13:44
leshcat, и в чём проблема?если я правильно понял то можно чтобы setup1 кидал setup2 в определённую папку, чтобы глупый юзер не удалил файл, а после запуска setup2 сетап 2 удалялся и удалял ключ реестра

Rikill
05-07-2011, 14:14
Neutron, тогда надо делать деинсталлятор который удаляет 2 программы

leshcat
05-07-2011, 14:29
Rikill,

Поясню.

Setup1.exe и setup2.exe - инсталляторы и выполняют разные задачи.

В Setup1.exe перед установкой есть галочка. Если она отмечена , то Setup1.exe в реестр RunOnce записывает местонахождение Setup2.exe (я хочу чтобы он был рядом с Setup1.exe). Когда Setup1.exe отрабатывает - он перезагружает систему.

А потом автоматом запускается Setup2.exe при загрузке системы.

Проблема в том, как получить путь до setup2.exe, ведь юзер их может скопать куда угодно. Из идей только та, что нужно, чтобы сетап1 сам нашел себя, а потом передал инфу в реестр, но я не знаю как это реализовать.

Gnom_aka_Lexander
05-07-2011, 14:31
Не получается на одну кнопку повесить! »
Неправильным путем пошел просто :)

procedure UninstallButtonClick(Sender: TObject);
begin
if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{F367827A-CC84-4C46-98FD-4C484F136272}_is1','UninstallString', UninsPath) then
begin
UninsPath:=RemoveQuotes(UninsPath)
Exec(UninsPath,'','',SW_SHOWNORMAL,ewNoWait,ResultCode)
end
if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{D9C84A33-61AA-4B8B-B44B-B04A0923592E}_is1','UninstallString', UninsPath1) then
begin
UninsPath1:=RemoveQuotes(UninsPath1)
Exec(UninsPath1,'','',SW_SHOWNORMAL,ewNoWait,ResultCode)
end
AutoRun.Close;
PostMessage(WizardForm.CancelButton.Handle, BM_CLICK, 0, 0);
end; Не забудь объявить UninsPath1 и по аналогии условие для создания кнопки удаления.
Чуть переделал, получился минибраузер для настройки роутера - актуально для владельцев роутеров - на запуске определяется наличие роутера и его ип(Спасибо Шегорату), и если он есть - сразу выводится веб-фейс настройки. Скачать (http://rghost.ru/13550511).

R.i.m.s.k.y.
05-07-2011, 15:36
Проблема в том, как получить путь до setup2.exe »
системная переменная {src}
путь до Setup1.exe= ExpandConstant('{src}\Setup1.exe')

leshcat
05-07-2011, 16:17
R.i.m.s.k.y.,
:) Точно.

Еще:

Как добавить коммент на чекбокс?

R.i.m.s.k.y.
05-07-2011, 16:19
Как добавить коммент на чекбокс »
смотря где, где тебе нужно?

leshcat
05-07-2011, 16:35
R.i.m.s.k.y.,

можно снизу - он единственный
можно при наводке

R.i.m.s.k.y.
05-07-2011, 16:42
в смысле на какой странице чекбокс? скрин можешь положить
ты чекбокс делал через секцию кода или штатно? если через секцию кода я тебе не подскажу - не знаю, я инсталлеры делаю чтобы робили, секции код у меня немаленькие но оформление в нем я не делаю

leshcat
05-07-2011, 16:45
R.i.m.s.k.y.,

можно снизу - он единственный
можно при наводке

R.i.m.s.k.y.
05-07-2011, 16:52
смысл копировать ответ сверху? я не понял ни с первого ни со второго раза
скрин давай

Rikill
05-07-2011, 16:53
R.i.m.s.k.y., можешь показать инсталлятор свой? просто интересно что там реализовано и почему большой код

R.i.m.s.k.y.
05-07-2011, 16:58
R.i.m.s.k.y., можешь показать инсталлятор свой »
это Rimpack на моем сайте, не могу - тайна сия велика есть ;)
довольно здоровая секция реестра - ставится хаали, ффд и тп
но секция код весит более 600 кбайт, определяется железо (видуха/проц), делается бэкап реестра, всякие проверки на компоненты, к примеру если не стоит ависинт но ты выбрал свп - ависинт тоже выберется, и тп. Много всякого за 2 года накопилось, и половину мне подсказали на этом форуме :)
весь скрипт римпака - на 950 кбайт, к нему идет отдельный модуль "Настройки римпака", общие части вынесены в него и он вызывается параметром комстроки, суммарно за мегабайт текста-кода :)
кодерим мелочь - всего 200кбайт

оформления в моих дистрах нету

в принципе я отвечаю на вопросы которые я знаю, а все что знаю реализовано в моих дистрах
на сайте даалеко не все, много дистров сделано по работе по мере надобности, но это за темой этого разговора

я же делал дистр для Smooth Video Project, опять же порезав римпак :) http://www.svp-team.com

El Sanchez
05-07-2011, 17:02
Каким образом нужно исправить код в секции "--add-game-path=", чтобы обновление происходило без ошибок (после = - путь до папки с игрой)? »
v00sh,

Parameters: "/q --i-accept-the-pb-eula /ag cod4 --add-game-path=""{app}"" /u"

Gnom_aka_Lexander
05-07-2011, 17:46
[ Code]
................
var
AutoRun: TSetupForm;
.........................................
AppPath,UninsPath: string; »
Сюда-же UninsPath1 : AppPath,UninsPath,UninsPath1: string;
Весь код:
; Скрипт создан через Мастер Inno Setup Script.
; ИСПОЛЬЗУЙТЕ ДОКУМЕНТАЦИЮ ДЛЯ ПОДРОБНОСТЕЙ ИСПОЛЬЗОВАНИЯ INNO SETUP!

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Code]
const
BM_CLICK = $00F5;

var
AutoRun: TSetupForm;
img1: TBitmapImage;
PlayButton, InstallButton, SupportButton, ReadmeButton, WebButton, ExitButton, UninstallButton: TButton;
AppPath,UninsPath,UninsPath1: string;
ResultCode: Integer;
procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID=wpWelcome then
SendMessage(WizardForm.NextButton.Handle, BM_CLICK, 0, 0);
end;

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

procedure PlayButtonClick(Sender: TObject);
var
exe: string;
begin
exe:='shift.exe';
if RegQueryStringValue(HKLM, 'SOFTWARE\Electronic Arts\Game','Install Dir', AppPath) then
begin
Exec(AddBackslash(AppPath) + Exe, '', ExtractFilePath(AddBackslash(AppPath) + Exe), SW_SHOWNORMAL,ewNoWait,ResultCode)
AutoRun.Close;
PostMessage(WizardForm.CancelButton.Handle, BM_CLICK, 0, 0);
end
end;

procedure InstallButtonClick(Sender: TObject);
var
CurPageID: Integer;
begin
Exec(ExpandConstant('{src}\Setup.exe'),'','',SW_SHOW,ewNoWait,ResultCode)
AutoRun.Close;
PostMessage(WizardForm.CancelButton.Handle, BM_CLICK, 0, 0);
end;

procedure SupportButtonClick(Sender: TObject);
begin
shellexec('open', ExpandConstant('{src}\Game.exe'), '', '',SW_SHOWNORMAL, ewnowait, ResultCode)
end;

procedure ReadmeButtonClick(Sender: TObject);
begin
ShellExec('open', ExpandConstant('{src}\readme.txt'),'','', SW_SHOW, ewNoWait, ResultCode)
end;

procedure WebButtonClick(Sender: TObject);
begin
shellexec('open', 'http://localhost', '', '',SW_SHOWNORMAL, ewnowait, ResultCode)
end;

procedure ExitButtonClick(Sender: TObject);
var
CurPageID: Integer;
begin
AutoRun.Close;
PostMessage(WizardForm.CancelButton.Handle, BM_CLICK, 0, 0);
end;

//============================================ Код, собственно вставил сюда ===============================================
procedure UninstallButtonClick(Sender: TObject);
begin
if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{F367827A-CC84-4C46-98FD-4C484F136272}_is1','UninstallString', UninsPath) then
begin
UninsPath:=RemoveQuotes(UninsPath)
Exec(UninsPath,'','',SW_SHOWNORMAL,ewNoWait,ResultCode)
end
if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{D9C84A33-61AA-4B8B-B44B-B04A0923592E}_is1','UninstallString', UninsPath1) then
begin
UninsPath1:=RemoveQuotes(UninsPath1)
Exec(UninsPath1,'','',SW_SHOWNORMAL,ewNoWait,ResultCode)
end
AutoRun.Close;
PostMessage(WizardForm.CancelButton.Handle, BM_CLICK, 0, 0);
end;
//============================================ Код, собственно вставил сюда ===============================================
//end;

// Почти в самом низу скрипта, в конце добавил

procedure CreateAutoRun;
begin
//AutoRun
AutoRun := CreateCustomForm;
with AutoRun do begin
Left := 498;
Top := 75;
// Width := 495;
// Height := 340;
Width := 640;
Height := 480;
BorderIcons := [];
BorderStyle:=bsToolWindow //(bsNone, bsSingle, bsSizeable, bsDialog, bsToolWindow, bsSizeToolWin)
Color := clBtnFace;
Font.Color := clWindowText;
Font.Height := -11;
Font.Name := 'MS Sans Serif';
Font.Style := [];
Position := poScreenCenter;
Caption:='AutoRunName'
end;
//img1
img1 := TBitmapImage.Create(AutoRun);
ExtractTemporaryFile('1.bmp');
with img1 do begin
Parent := AutoRun;
Left := 0;
Stretch:= true;
Top := 0;
Width := Autorun.Width;
Height := Autorun.Height;
Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
end;
//PlayButton
PlayButton:= TButton.Create(AutoRun);
with PlayButton do begin
Parent := AutoRun;
Left := 470;
Top := 280;
Width := 150;
Height := 22;
Caption:= 'Play';
Cursor:= crHand;
// ModalResult:= mrOk;
OnClick := @PlayButtonClick;
if not RegQueryStringValue(HKLM, 'SOFTWARE\Game','Install Dir', AppPath) then
begin
PlayButton.Enabled := False;
end
end;
//InstallButton
InstallButton:= TButton.Create(AutoRun);
with InstallButton do begin
Parent:= AutoRun;
Left := 470;
Top := 250;
Width := 150;
Height := 22;
Caption:= 'Install';
Cursor:= crHand;
OnClick := @InstallButtonClick;
end;
//SupportButton
SupportButton:= TButton.Create(AutoRun);
with SupportButton do begin
Parent:= AutoRun;
Left := 470;
Top := 310;
Width := 150;
Height := 22;
Caption:= 'Support';
Cursor:= crHand;
OnClick := @SupportButtonClick;
end;
//ReadmeButton
ReadmeButton:= TButton.Create(AutoRun);
with ReadmeButton do begin
Parent:= AutoRun;
Left := 470;
Top := 340;
Width := 150;
Height := 22;
Caption:= 'Readme';
Cursor:= crHand;
OnClick := @ReadmeButtonClick;
end;
//WebButton
WebButton:= TButton.Create(AutoRun);
with WebButton do begin
Parent:= AutoRun;
Left := 470;
Top := 370;
Width := 150;
Height := 22;
Caption:= 'Web';
Cursor:= crHand;
OnClick := @WebButtonClick;
end;
//ExitButton
ExitButton:= TButton.Create(AutoRun);
with ExitButton do begin
Parent:= AutoRun;
Left := 470;
Top := 430;
Width := 150;
Height := 22;
Caption:= 'Exit';
Cursor:= crHand;
OnClick := @ExitButtonClick;
// ModalResult:= mrCancel;
end;
//UninstallButton
UninstallButton:= TButton.Create(AutoRun);
with UninstallButton do begin
Parent:= AutoRun;
Left := 470;
Top := 400;
Width := 150;
Height := 22;
Caption:= 'Uninstall';
Cursor:= crHand;
OnClick := @UninstallButtonClick;
end;

//===================================================Здесь в конце======================================================
if not (RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{F367827A-CC84-4C46-98FD-4C484F136272}_is1','UninstallString', UninsPath) or
RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{D9C84A33-61AA-4B8B-B44B-B04A0923592E}_is1','UninstallString', UninsPath1)) then begin
InstallButton.Enabled:=true;
UninstallButton.Enabled:=false;
end else begin
InstallButton.Enabled:=false;
UninstallButton.Enabled:=true;
end;
//===================================================Здесь в конце======================================================


AutoRun.ShowModal;
end;

procedure InitializeWizard;
begin
CreateAutoRun;
end;




© OSzone.net 2001-2012