|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 4] |
|
Скрипты Inno Setup. Помощь и советы [часть 4]
|
Ветеран Сообщения: 1273 |
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме Inno Setup. Прочие вопросы. Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах: Inno Setup [все вопросы] часть 1 Inno Setup [все вопросы] часть 2 Скрипты Inno Setup. Помощь и советы [часть 3] Продолжение обсуждения Скрипты Inno Setup. Помощь и советы [часть 5] |
|
Отправлено: 18:01, 29-08-2011 |
Ветеран Сообщения: 1640
|
Профиль | Отправить PM | Цитировать Подскажите, пожалуйста, как в инно задействовать механизм хранения версий библиотек и отката при деинсталляции
Конкретно надо следить за версиями avisynth.dll Заранее благодарю! |
------- Отправлено: 08:20, 24-01-2012 | #671 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 649
|
Профиль | Отправить PM | Цитировать хотелось бы реализовать следующее
устанавливаются например 3 компонента из установщика half life 2 half life 2 episode one half life 2 episode two уникальные файлы для каждой игры каждый в свою папку общие файлы для всех файлов в общую - корневую например pf/Orange Box/half life 2/run_hl2.exe pf/Orange Box/half life 2 ep1/run_hl2_ep1.exe pf/Orange Box/source 2007 binaries 2.gcf pf/Orange Box/source models.gcf итд логика такая - Autorun с функцией поиска через реестр узнаёт куда установилась игра (думаю нужно в основном установщике в секции [Setup] задействовать параметр AppId ![]() - потом, в директории игры ищет например app/half life 2/run_hl2.exe, и если он есть то появлялась кнопка запустить игру .Eсли его нет то кнопка неактивна или её нет желательно что бы этот Autorun был бы не частью основного установщика и не было проблемы, что игру удалили вручную, а он предлагает запустить вместо того чтобы установить в коде для описания компонентов видел функцию поиска файла может подобная функция и нужна function IsComponent3:boolean; var sz:Integer; s:string; begin Result:=True; begin If (FileSearch('manual.txt', ExpandConstant('{src}\main'))='') then Result:=False end; end; есть уже почти готовый на одну игру но адаптировать его мне не позволяет незнание паскаля [Setup] SourceDir=. OutputDir=Setup AppName=preInstaller AppVerName=preInstaller AppVersion=preInstaller CreateAppDir=false OutputBaseFilename=preInstaller DiskSpanning=false DisableDirPage=true DisableFinishedPage=true DisableProgramGroupPage=true DisableReadyPage=true Uninstallable=false [Messages] SetupAppTitle=AutoRUN [Languages] Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl" [Files] Source: ISSkin.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: steam.cjstyles; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: 1.bmp; Flags: dontcopy (Code) procedure LoadSkin(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@files:isskin.dll stdcall'; procedure UnloadSkin(); external 'UnloadSkin@files:isskin.dll stdcall'; function ShowWindow(hWnd: Integer; uType: Integer): Integer; external 'ShowWindow@user32.dll stdcall'; function InitializeSetup:boolean; begin ExtractTemporaryFile('steam.cjstyles'); LoadSkin(ExpandConstant('{tmp}')+'\steam.cjstyles', ''); Result:=True; end; procedure DeinitializeSetup; begin ShowWindow(WizardForm.Handle,0); UnloadSkin(); end; //////////////////////////////////////////////////////////////////////// const BM_CLICK = $00F5; var AutoRun: TSetupForm; img1: TBitmapImage; PlayButton, InstallButton, SupportButton, ReadmeButton, WebButton, ExitButton, UninstallButton: TButton; AppPath,UninsPath: 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\Microsoft\Windows\CurrentVersion\Uninstall\se15_is1','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\Game','UninstallString', UninsPath) then begin UninsPath:=RemoveQuotes(UninsPath) Exec(UninsPath,'','',SW_SHOWNORMAL,ewNoWait,ResultCode) 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; 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:='AutoRUN' 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 := 300; Top := 110; Width := 150; Height := 22; Caption:= 'Íà÷àòü èãðó'; 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 := 300; Top := 110; Width := 150; Height := 22; Caption:= 'Óñòàíîâèòü èãðó'; Cursor:= crHand; OnClick := @InstallButtonClick; end; //SupportButton SupportButton:= TButton.Create(AutoRun); with SupportButton do begin Parent:= AutoRun; Left := 300; Top := 140; Width := 150; Height := 22; Caption:= 'Èíôî'; Cursor:= crHand; OnClick := @SupportButtonClick; end; //ReadmeButton ReadmeButton:= TButton.Create(AutoRun); with ReadmeButton do begin Parent:= AutoRun; Left := 300; Top := 170; Width := 150; Height := 22; Caption:= 'Readme'; Cursor:= crHand; OnClick := @ReadmeButtonClick; end; //WebButton WebButton:= TButton.Create(AutoRun); with WebButton do begin Parent:= AutoRun; Left := 300; Top := 200; Width := 150; Height := 22; Caption:= 'Âåá-ñàéò'; Cursor:= crHand; OnClick := @WebButtonClick; end; //ExitButton ExitButton:= TButton.Create(AutoRun); with ExitButton do begin Parent:= AutoRun; Left := 300; Top := 260; Width := 150; Height := 22; Caption:= 'Âûõîä'; Cursor:= crHand; OnClick := @ExitButtonClick; // ModalResult:= mrCancel; end; //UninstallButton UninstallButton:= TButton.Create(AutoRun); with UninstallButton do begin Parent:= AutoRun; Left := 300; Top := 230; Width := 150; Height := 22; Caption:= 'Óäàëèòü èãðó'; Cursor:= crHand; OnClick := @UninstallButtonClick; end; if not RegQueryStringValue(HKLM, 'SOFTWARE\Game','UninstallString', UninsPath) then begin InstallButton.Enabled:=true; InstallButton.Visible:=true; UninstallButton.Enabled:=false; UninstallButton.Visible:=false; end; if RegQueryStringValue(HKLM, 'SOFTWARE\Game','UninstallString', UninsPath) then begin InstallButton.Enabled:=false; InstallButton.Visible:=false; UninstallButton.Enabled:=true; UninstallButton.Visible:=true; end; AutoRun.ShowModal; end; procedure InitializeWizard; begin WizardForm.BeveledLabel.Enabled:=True; CreateAutoRun; end; заранее спасибо за помощь! |
Последний раз редактировалось Johny777, 25-01-2012 в 14:36. Причина: добавлен код Отправлено: 19:33, 24-01-2012 | #672 |
Ветеран Сообщения: 1273
|
Профиль | Отправить PM | Цитировать Цитата sancheolz:
[Files] Source: test.txt; DestDir: {app}; Check: IsLastWriteTimeAttributeChanged('20110127') [code] type FILETIME = record dwLowDateTime, dwHighDateTime: DWORD; end; WIN32_FILE_ATTRIBUTE_DATA = record dwFileAttributes: DWORD; ftCreationTime, ftLastAccessTime, ftLastWriteTime: FILETIME; nFileSizeHigh, nFileSizeLow: DWORD; end; SYSTEMTIME = record wYear, wMonth, wDayOfWeek, wDay, wHour, wMinute, wSecond, wMilliseconds: WORD; end; function GetFileAttributesEx(lpFileName: String; fInfoLevelId: DWORD; var lpFileInformation: WIN32_FILE_ATTRIBUTE_DATA): BOOL; external 'GetFileAttributesExA@kernel32.dll stdcall'; function FileTimeToSystemTime(const lpFileTime: FILETIME; var lpSystemTime: SYSTEMTIME): BOOL; external 'FileTimeToSystemTime@kernel32.dll stdcall'; function IsLastWriteTimeAttributeChanged(Param: String): Boolean; //Param have YYYYMMDD format var lpFileInformation: WIN32_FILE_ATTRIBUTE_DATA; lpSystemTime: SYSTEMTIME; begin if FileExists(ExpandConstant(CurrentFileName)) then begin GetFileAttributesEx(ExpandConstant(CurrentFileName), $0, lpFileInformation); FileTimeToSystemTime(lpFileInformation.ftLastWriteTime, lpSystemTime); Result := Format('%.4d%.2d%.2d', [lpSystemTime.wYear, lpSystemTime.wMonth, lpSystemTime.wDay]) > Param; end else Result := True; end; |
|
Отправлено: 19:34, 24-01-2012 | #673 |
Новый участник Сообщения: 2
|
Профиль | Отправить PM | Цитировать Всем доброе утро у кого есть такой инсталлятор http://imageshack.us/photo/my-images...11ecfcb9b.jpg/ если есть дайте пожалуйста!
|
Отправлено: 05:46, 25-01-2012 | #674 |
Старожил Сообщения: 241
|
Профиль | Отправить PM | Цитировать spaiders, Его сделать самому не трудно)
|
------- Отправлено: 07:31, 25-01-2012 | #675 |
Новый участник Сообщения: 2
|
Профиль | Отправить PM | Цитировать Цитата valyok666:
|
|
Отправлено: 07:57, 25-01-2012 | #676 |
Старожил Сообщения: 241
|
Профиль | Отправить PM | Цитировать spaiders, так тебе здесь чисто даром никто писать скрипт не будет....здесь помогают и объясняют
|
------- Отправлено: 11:23, 25-01-2012 | #677 |
Ветеран Сообщения: 1640
|
Профиль | Отправить PM | Цитировать Цитата valyok666:
![]() |
|
------- Отправлено: 11:31, 25-01-2012 | #678 |
Ветеран Сообщения: 1088
|
Профиль | Отправить PM | Цитировать spaiders, если хочешь такой перепакованные инсталляторские скрипты, как на скрине, пиши в PM, скину.
upd 21:00: Добавлю, что каждый пользователь выкладывает скрины по перепакованных инсталляторов известных RePack групп; то этот супер RePack содержит много скриптов, содержаний и изменений. |
Последний раз редактировалось alert30, 25-01-2012 в 19:00. Причина: Добавление, для тех, кто хочет сделать это, то это, как на скрине... Отправлено: 18:54, 25-01-2012 | #679 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать El Sanchez, Спасибо огромное! Как же я сам не догадался вызов winAPI сделать, а то еще программистом себя называю. Дату файла из пакета я собираюсь узнать так: в качестве DestDir будет указана %TEMP%, уже от туда с использованием того же вызова winAPI будет извлечена дата, а затем из темпа файл отправится либо в {app} либо в /dev/null)) в соответствии с его актуальностью. Остается уповать на сохранность атрибута даты при всех распаковках\запаковках. Он ведь сохраняется?
|
Отправлено: 19:57, 25-01-2012 | #680 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Test | ferget | Тест-форум | 0 | 24-08-2011 01:25 | |
test | ! ! Aaa ! ! | Тест-форум | 0 | 23-04-2011 11:29 | |
test | Santa aka Snt | Тест-форум | 0 | 16-04-2011 22:35 | |
test | xolod. | Программное обеспечение Linux и FreeBSD | 0 | 19-04-2009 21:03 | |
Test memory | KEugeNik | Хочу все знать | 11 | 23-11-2003 23:11 |
|