Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 3]
Может мой урок в шапку закинуть? просто он реально помогает людям и не будет флуда насчёт "склейте скрипт".
Код:
[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.
Лександер, это не твой браузер, он есть с примерами к рестулз
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 после установки должен удалить ключ регистра.
leshcat, и в чём проблема?если я правильно понял то можно чтобы setup1 кидал setup2 в определённую папку, чтобы глупый юзер не удалил файл, а после запуска setup2 сетап 2 удалялся и удалял ключ реестра
Neutron, тогда надо делать деинсталлятор который удаляет 2 программы
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')
R.i.m.s.k.y.,
:) Точно.
Еще:
Как добавить коммент на чекбокс?
R.i.m.s.k.y.
05-07-2011, 16:19
Как добавить коммент на чекбокс »
смотря где, где тебе нужно?
R.i.m.s.k.y.,
можно снизу - он единственный
можно при наводке
R.i.m.s.k.y.
05-07-2011, 16:42
в смысле на какой странице чекбокс? скрин можешь положить
ты чекбокс делал через секцию кода или штатно? если через секцию кода я тебе не подскажу - не знаю, я инсталлеры делаю чтобы робили, секции код у меня немаленькие но оформление в нем я не делаю
R.i.m.s.k.y.,
можно снизу - он единственный
можно при наводке
R.i.m.s.k.y.
05-07-2011, 16:52
смысл копировать ответ сверху? я не понял ни с первого ни со второго раза
скрин давай
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.