|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » [архив] Inno Setup .:[все вопросы]:. |
|
[архив] Inno Setup .:[все вопросы]:.
|
Новый участник Сообщения: 6 |
Профиль | Отправить PM | Цитировать
Лимит страниц.
Тема закрыта. продолжаем тут: Inno Setup. Обсуждение установщика Скрипты Inno Setup. Помощь и советы Полезные ресурсы: Официальный сайт| Inno Setup 5.2.3 RU Русская справка |Зеракало 1| Зеракало 2 ISTool 5.30 |Русификатор Русификатор ISTool |Зеркало 1|Зеркало 2 Inno Setup Script Generator |Зеркало 1 Unpaker 2.1 от 21.04.2009 - распаковывает инсталляторы, созданные с помощью Inno Setup, начиная с версии 2.0.18 по 5.2.4. InnoUnpaker 2.6b3 [от valeron87]- можнет просмотривать содержание CompiledCode.bin Unpaker 0.23 - расширенная китайская версия 2008-08-08 ( модификация) Unpacker 0.24 | Зеркало 1 | Зеркало 2 - Inno Setup Unpacker (innounp plus) - расширенная версия распаковщика инсталляторов Inno Setup начиная с версии 2.0.8 по 5.3.0 Beta. Поддерживаются версии Unicode. Русифицирована. Последний релиз: 0.24 [23.05.2009] QuickStart Pack - Inno Setup + Preprocessor (последняя версия ispack-5.2.4-dev) "Всё в одном" от unikum111 Полезные мелочи для Inno Setup: - Converter v.0.1.2 - конвертор REG- файлов в формат скриптов Inno от Serega_ -новая версия - Как убрать страницу приветствия (wpWelcome) в мастере установки приложения: - Примеры скриптов на паскале - Inno Setup Addon 0.07 For Total Commander |
|
Отправлено: 21:42, 17-03-2005 |
Новый участник Сообщения: 41
|
Профиль | Отправить PM | Цитировать подскажите как в окне приветствия сдвинуть границу между логотипом и текстом - тоесть чтоб картинки было больше
следующий вопрос по сложнее -) - как в окне где показывается процес установки - чуть выше бегунка прогресса инсталляции поместить видео-ролик - тоесть при инсталляции чтобы играло видео да, и появилось уже какое то решение убрать окно о программе не конфликтующее с форматированием rtf файлов ? |
Отправлено: 16:34, 02-06-2009 | #841 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 842
|
Профиль | Отправить PM | Цитировать Какой синтакс у этого вызова в реестре?
Вот это например понятно \??\source file !\??\target file Переименование нам не нужно, хотя это следует даже из названия, но тем не менее этим ключём можно и удалять! http://www.pcreview.co.uk/forums/thread-1715654.php Но я так и не понял всётаки логику, сколько и где надо нулей - Цитата:
{olddata} - это предыдущая запись; {break} - это "00" нули; записи соответственно прибавляются друг за другом. "PendingFileRenameOperations"; ValueData: "{olddata}{break}{break}\??\{sys}\mmc.ko" "PendingFileRenameOperations"; ValueData: "{olddata}{break}\??\{sys}\mmcbase.ko" "PendingFileRenameOperations"; ValueData: "{olddata}{break}\??\{sys}\mmcndmgr.ko" "PendingFileRenameOperations"; ValueData: "{olddata}{break}\??\{sys}\hnetwiz.ko" "PendingFileRenameOperations"; ValueData: "{olddata}{break}\??\{sys}\taskmgr.ko{break}{break}" Да и в конце зачем, одного чтоль мало? Причём похоже что реестр сам прибавляет ещё один байт нулей "00" Но моя запись работает, а проблемма в том что если запустить друг за другом два инсталлера с подобным кодом, то записи одного из них будут проигнорированны... А мне какраз нужно много инсталлеров! Кароче сколько там нулей вообще непонятно. Пока что получается из моих наблюдений такое {старая_запись} 00 00 \??\Файл1_для_удаления {старая_запись} 00 \??\Файл2_для_удаления {старая_запись} 00 \??\Файл3_для_удаления 00 00 Но два раза записать из инсталлеров вызовет проблемму! Один работает нормально... ?? |
|
------- Отправлено: 23:54, 02-06-2009 | #842 |
Ветеран Сообщения: 1133
|
Профиль | Отправить PM | Цитировать semiono, пережде всего, нужно было написать, что вы делаете инсталляторы на Inno Setup и спрашивать в соответствующей теме.
Цитата semiono:
Цитата semiono:
Все эти команды действительны для REG_MULTI_SZ. Цитата semiono:
Цитата semiono:
P.S. И мне не совсем понятна, суть вашего вопроса... |
||||
------- Последний раз редактировалось Serega, 03-06-2009 в 00:54. Отправлено: 00:37, 03-06-2009 | #843 |
Новый участник Сообщения: 2
|
Профиль | Отправить PM | Цитировать Привет всем, уважаемые программисты! Помогите мне (чайнику) разобраться с моим скриптом.
Задача простая. Мой сетап должен ставить в каталог с программой дополнительные файлы (что он успешно и делает), но при этом необходимо сделать до инсталяции резервную копию одного из заменяемых файлов (вот тут то и проблема, не хочет работать). При деинсталяции резервный файл надо вернуть на место (до этого еще не дошел). Файл предполагается копировать в папку "backup" , которая должна создаться в том же каталоге куда инсталятся файлы. Вот код скрипта полностью: ; Script generated by the Inno Setup Script Wizard. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! [Setup] AppName=Death a Board (beta5) AppVerName=Дополнение к Left 4 Dead DefaultDirName=C:\Program Files\Steam\SteamApps\Common\left4dead DefaultGroupName=Death a Board (beta5) DisableProgramGroupPage=yes OutputDir=E:\Загрузки\Output OutputBaseFilename=setup SetupIconFile=E:\Left4Dead\left4dead\Left 4 Dead Demo.ico Compression=lzma SolidCompression=yes [Languages] Name: "english"; MessagesFile: "compiler:Default.isl" Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl" [Files] Source: "E:\Загрузки\Output\left4dead\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs ; NOTE: Don't use "Flags: ignoreversion" on any shared system files [code] procedure CurStepChanged(CurStep: TSetupStep); var s1, s2: string; begin s1:=ExpandConstant('{app}')+'\resource\UI\L4D360UI\LoadingPosters.res'; s2:=ExpandConstant('{app}')+'\Backup\left4dead\resource\UI\L4D360UI'; If FileExists(s1) then begin CreateDir(s2); FileCopy(s1, s2+'\LoadingPosters.res', True); end; end; |
Отправлено: 02:11, 03-06-2009 | #844 |
Пользователь Сообщения: 66
|
Профиль | Отправить PM | Цитировать dinazav, попробуйте так:
|
Отправлено: 02:49, 03-06-2009 | #845 |
Ветеран Сообщения: 842
|
Профиль | Отправить PM | Цитировать Я боюсь что этот вопрос выходит за пределы InnoSetup, причём я обычно не использую
restartreplace флаги, так как мне не нужны диалоги в инсталлере. Поэтому пытаюсь удалять файлы "ручным способом", кстати это даже интересно. Цитата Serega_:
Цитата Serega_:
это майкрософт придумано - \??\C:\windows... Хотя я думаю вы в курсе, просто можно было подумать что это я что-то там зашифровал Хотя я не пробовал напрямую писать без '\??\' может и не будет валидным? Цитата Serega_:
Хотя я думаю что есть альтернатива? Суть вопроса какраз в том, как правильно удалять используя PendingFileRenameOperations, но меня не один файлик интересует, а сразу много! Причём с возможностью добавлять строки из разных подряд запускаемых инсталяторов. То что вы говорите что брейк вначале не нужен - это верно и я это тоже знаю, но почему-то на практике работает только именно как у меня было. Просто если второй инсталятор запишет позади свой код то он уже не будет выполняться. А вот многократный запуск одного и того же инсталятора хотя он и начинает дублировать записи но тем не менее файлы будут удалены всё как положенно. Наверное два инсталлера суммируют какой-то сдвиг по нулям {break} и происходит косяк! --- То что я записываю в виде: ValueData: "{olddata}{break}{break}\??\{sys}\mmc.ko" ValueData: "{olddata}{break}\??\{sys}\mmcbase.ko" это не принципиально, просто так удобнее код контролировать, хотя можно и в строчку всё оформить: ValueData: "{olddata}{break}{break}\??\{sys}\mmc.ko{break}\??\{sys}\mmcbase.ko итакдалее" |
|||
------- Отправлено: 06:14, 03-06-2009 | #846 |
Старожил Сообщения: 170
|
Профиль | Отправить PM | Цитировать Подскажите пожалуйста, как сделать так, чтоб инсталлятор не могли распаковать, как это сделано у Boss911 в его трансформ-паке?
|
Отправлено: 12:50, 03-06-2009 | #847 |
Ветеран Сообщения: 1133
|
Профиль | Отправить PM | Цитировать Цитата semiono:
Цитата semiono:
Цитата из Справки:
Цитата semiono:
Цитата semiono:
Вообще, все инсталляторы делают люди и нельзя сказать с уверенностью, что если вы увидели такую запись у себя в реестре, после установки, какой-нибудь переупакованной игры, что именно эта запись верная... Потому, что перед установкой игры, если цель переупаковать инсталлятор, обычно делают снимок реестра и вместе с нужными ключами реестра для этой игры, пихают весь свой хлам из системы, что вообще не относится к данному инсталлятору. В итоге, получается бардак с реестром. ИМХО. Цитата semiono:
Одним словом, вопросов встречных много... P.S. Вот вам пример скрипта, устанавливайте, сколько угодно раз и всегда будет дописываться ещё одна строка... И извините, за мою неточность: {break} - это шесть нолей... |
||||||
------- Последний раз редактировалось Serega, 03-06-2009 в 21:08. Отправлено: 18:24, 03-06-2009 | #848 |
Ветеран Сообщения: 1133
|
Профиль | Отправить PM | Цитировать -Marshall-, используйте шифрование инсталлятора...
|
------- Отправлено: 19:09, 03-06-2009 | #849 |
Ветеран Сообщения: 842
|
Профиль | Отправить PM | Цитировать Цитата Serega_:
Цитата Serega_:
HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices Вообще в разделе SYSTEM\Services я встречал какие угодно записи, например %SystemRoot%\System32 и тут же \SystemRoot\System32 и всё это записи майкрософт по большому счёту, всмысле если даже \??\ это не правильная запись от \??\\ я тоже с этим согласен. Цитата Serega_:
Конечно же открытые и не доступные для удаления файлы! К примеру, я заменил Icons ресурсы в taskmgr.exe, или если пофантазировать русифицыровал его, хотя это навряд ли. Впрочем, я ошибаюсь taskmgr легко итак заменить, а вот какие-то DLL ну скажем даже shell32.dll, то это без перезагрузки не получиться. Сначала я переименовываю файл в shell32.old, потом удаляю. Цитата Serega_:
Цитата Serega_:
Я так и не проверял ещё, но раньше вроде заглядывал и между записями путей вроде бы 00 00 было!?... Где-то это продокументированно в Inno хелпе чтоли? Пример установки PowerISO: [Setup] AppName=PowerISO AppVerName=PowerISO 4.4.0.0 AllowUNCPath=yes DefaultDirName={code:GetPath} DirExistsWarning=no DisableDirPage=yes DisableFinishedPage=no DisableProgramGroupPage=yes DisableReadyMemo=yes DisableReadyPage=no ArchitecturesInstallIn64BitMode=x64 Compression=lzma SolidCompression=yes OutputDir=..\..\SVCPACK OutputBaseFilename=PowerISO TouchDate=2001-01-01 TouchTime=00:00 MinVersion=4.1,4.0 VersionInfoCompany=Semiono VersionInfoCopyright=2001-2005 GmbH VersionInfoDescription=PowerISO VersionInfoTextVersion=4.4.0.0 VersionInfoVersion=4.4.0.0 Uninstallable=no UsePreviousAppDir=no SetupIconFile=.\Patch\PowerISO.ico WizardImageFile=.\Patch\PowerISO.bmp [Messages] BeveledLabel= AMD64 + [Сode] var Dir: String; function GetPath(Param: String): String; var S: TArrayOfString; F: String; begin F := Dir + 'PowerISO'; if not FileExists(F) then Result := ExpandConstant('{pf}\PowerISO') else begin LoadStringsFromFile(F, S); Result := S[0]; end; end; function InitializeSetup(): Boolean; begin Dir := ExpandConstant('{sd}\'); Result := True; end; procedure InitializeWizard(); begin try DeleteFile(ExpandConstant('{sys}\drivers\scdemu.o')) RenameFile(ExpandConstant('{sys}\drivers\scdemu.sys'),ExpandConstant('{sys}\drivers\scdemu.o')) except Beep; Exit; end; try DeleteFile(ExpandConstant('{code:GetPath}\pwrisosh.o')) RenameFile(ExpandConstant('{code:GetPath}\pwrisosh.dll'),ExpandConstant('{code:GetPath}\pwrisosh.o')) except Beep; Exit; end; try DeleteFile(ExpandConstant('{code:GetPath}\pwrisovm.o')) RenameFile(ExpandConstant('{code:GetPath}\pwrisovm.exe'),ExpandConstant('{code:GetPath}\pwrisovm.o')) except Beep; Exit; end; end; procedure DeinitializeSetup(); var S: TArrayOfString; F: String; begin F := ExpandConstant('{sys}\PowerISO.cmd'); SetArrayLength(S, 1); S[0] := ExpandConstant('@start {code:GetPath}\PowerISO.exe "%1" %*'); SaveStringsToFile(F, S, False); end; [Dirs] Name: "{code:GetPath}"; Attribs: readonly; Flags: uninsneveruninstall; Permissions: admins-full [Icons] Name: "{userprograms}\PowerISO"; Filename: "{code:GetPath}\PowerISO.exe"; WorkingDir: "{code:GetPath}"; IconIndex: 0; Comment: "PowerISO" Name: "{sendto}\PowerISO"; Filename: "{code:GetPath}\PowerISO.exe"; WorkingDir: "{code:GetPath}"; IconIndex: 0; Comment: "PowerISO" [Registry] ; Run Root: HKLM; Subkey: "Software\Microsoft\Windows\CurrentVersion\App Paths\PowerISO.exe"; ValueType: string; ValueName: ""; ValueData: "{code:GetPath}\PowerISO.exe"; Flags: noerror; Permissions: admins-full Root: HKLM; Subkey: "Software\Microsoft\Windows\CurrentVersion\App Paths\PowerISO.exe"; ValueType: string; ValueName: "Path"; ValueData: "{code:GetPath}"; Flags: noerror; Permissions: admins-full ; Labels Root: HKLM; Subkey: "Software\Classes\CLSID\{{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\PowerISO"; ValueType: string; ValueName: ""; ValueData: "&PowerISO"; Flags: noerror; Permissions: admins-full Root: HKLM; Subkey: "Software\Classes\CLSID\{{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\PowerISO\command"; ValueType: string; ValueName: ""; ValueData: "{code:GetPath}\PowerISO.exe"; Flags: noerror; Permissions: admins-full ; Delete Root: HKCU; Subkey: "Software\PowerISO"; Flags: deletekey noerror; Permissions: admins-full ; PowerISO Root: HKCU; Subkey: "Software\PowerISO"; ValueType: binary; ValueName: "USER"; ValueData: "xx xx xx ... b3 88"; Flags: noerror; Permissions: admins-full Root: HKCU; Subkey: "Software\PowerISO"; ValueType: binary; ValueName: "MainWindow"; ValueData: "90 00 00 00 86 00 00 00 60 03 00 00 50 02 00 00 00 00 00 00"; Flags: noerror; Permissions: admins-full Root: HKCU; Subkey: "Software\PowerISO"; ValueType: dword; ValueName: "Language"; ValueData: "$00000409"; Flags: noerror; Permissions: admins-full Root: HKCU; Subkey: "Software\PowerISO"; ValueType: dword; ValueName: "ShellIntegration"; ValueData: "$00000001"; Flags: noerror; Permissions: admins-full Root: HKCU; Subkey: "Software\PowerISO"; ValueType: dword; ValueName: "Status"; ValueData: "$00000005"; Flags: noerror; Permissions: admins-full Root: HKCU; Subkey: "Software\PowerISO"; ValueType: string; ValueName: "Install_Dir"; ValueData: "{code:GetPath}"; Flags: noerror; Permissions: admins-full Root: HKCU; Subkey: "Software\PowerISO\SCDEmu"; ValueType: dword; ValueName: "DiskCount"; ValueData: "$00000000"; Flags: noerror; Permissions: admins-full Root: HKCU; Subkey: "Software\PowerISO\SCDEmu"; ValueType: dword; ValueName: "FLAGS"; ValueData: "$00000000"; Flags: noerror; Permissions: admins-full ; PowerISO File Root: HKLM; Subkey: "Software\Classes\.daa"; ValueType: string; ValueName: ""; ValueData: "PowerISO"; Flags: noerror; Permissions: admins-full Root: HKLM; Subkey: "Software\Classes\.iso"; ValueType: string; ValueName: ""; ValueData: "PowerISO"; Flags: noerror; Permissions: admins-full Root: HKLM; Subkey: "Software\Classes\.uif"; ValueType: string; ValueName: ""; ValueData: "PowerISO"; Flags: noerror; Permissions: admins-full Root: HKLM; Subkey: "Software\Classes\PowerISO"; ValueType: string; ValueName: ""; ValueData: "PowerISO File"; Flags: noerror; Permissions: admins-full Root: HKLM; Subkey: "Software\Classes\PowerISO\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{code:GetPath}\PowerISO.exe,0"; Flags: noerror; Permissions: admins-full Root: HKLM; Subkey: "Software\Classes\PowerISO\shell\open\command"; ValueType: string; ValueName: ""; ValueData: "{code:GetPath}\PowerISO.exe ""%1"""; Flags: noerror; Permissions: admins-full ; Delete Root: HKLM32; Subkey: "Software\PowerISO"; Flags: deletekey noerror; Permissions: admins-full ; ContextMenuHandlers Root: HKLM; Subkey: "Software\Classes\*\shellex\ContextMenuHandlers\PowerISO"; ValueType: string; ValueName: ""; ValueData: "{{967B2D40-8B7D-4127-9049-61EA0C2C6DCE}"; Flags: noerror; Permissions: admins-full Root: HKLM; Subkey: "Software\Classes\Folder\shellex\ContextMenuHandlers\PowerISO"; ValueType: string; ValueName: ""; ValueData: "{{967B2D40-8B7D-4127-9049-61EA0C2C6DCE}"; Flags: noerror; Permissions: admins-full Root: HKLM; Subkey: "Software\Classes\Directory\shellex\ContextMenuHandlers\PowerISO"; ValueType: string; ValueName: ""; ValueData: "{{967B2D40-8B7D-4127-9049-61EA0C2C6DCE}"; Flags: noerror; Permissions: admins-full ; Approved Root: HKLM; Subkey: "Software\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved"; ValueType: string; ValueName: "{{967B2D40-8B7D-4127-9049-61EA0C2C6DCE}"; ValueData: "PowerISO"; Flags: noerror; Permissions: admins-full ; Services Root: HKLM; Subkey: "System\ControlSet001\Services\SCDEmu"; ValueType: dword; ValueName: "ErrorControl"; ValueData: "$00000001"; Flags: noerror; Permissions: admins-full Root: HKLM; Subkey: "System\ControlSet001\Services\SCDEmu"; ValueType: dword; ValueName: "MaxDiskCount"; ValueData: "$00000008"; Flags: noerror; Permissions: admins-full Root: HKLM; Subkey: "System\ControlSet001\Services\SCDEmu"; ValueType: dword; ValueName: "Start"; ValueData: "$00000001"; Flags: noerror; Permissions: admins-full Root: HKLM; Subkey: "System\ControlSet001\Services\SCDEmu"; ValueType: dword; ValueName: "Type"; ValueData: "$00000001"; Flags: noerror; Permissions: admins-full ; PendingFileRenameOperations Root: HKLM; Subkey: "System\ControlSet001\Control\Session Manager"; ValueType: multisz; ValueName: "PendingFileRenameOperations"; ValueData: "{olddata}{break}{break}\??\{sys}\drivers\scdemu.o"; Flags: noerror; Permissions: admins-full Root: HKLM; Subkey: "System\ControlSet001\Control\Session Manager"; ValueType: multisz; ValueName: "PendingFileRenameOperations"; ValueData: "{olddata}{break}\??\{code:GetPath}\pwrisosh.o"; Flags: noerror; Permissions: admins-full Root: HKLM; Subkey: "System\ControlSet001\Control\Session Manager"; ValueType: multisz; ValueName: "PendingFileRenameOperations"; ValueData: "{olddata}{break}\??\{code:GetPath}\pwrisovm.o{break}{break}"; Flags: noerror; Permissions: admins-full [Files] Source: "T:\Process\Lang\*"; DestDir: "{code:GetPath}\Lang"; Flags: ignoreversion overwritereadonly touch; Permissions: admins-full Source: "T:\Process\Skins\*"; DestDir: "{code:GetPath}\Skins"; Flags: ignoreversion overwritereadonly touch; Permissions: admins-full Source: "T:\Process\desktop.ini"; DestDir: "{code:GetPath}"; Flags: ignoreversion overwritereadonly touch; Permissions: admins-full Source: "T:\Process\piso.exe"; DestDir: "{code:GetPath}"; Flags: ignoreversion overwritereadonly touch; Permissions: admins-full Source: "T:\Process\PowerISO.chm"; DestDir: "{code:GetPath}"; Flags: ignoreversion overwritereadonly touch; Permissions: admins-full Source: "T:\Process\PowerISO.exe"; DestDir: "{code:GetPath}"; Flags: ignoreversion overwritereadonly touch; Permissions: admins-full Source: "T:\Process\pwrisosh32.dll"; DestDir: "{code:GetPath}"; DestName: "pwrisosh.dll"; Flags: noregerror onlyifdoesntexist regserver touch; Check: not IsWin64; Permissions: admins-full Source: "T:\Process\pwrisosh64.dll"; DestDir: "{code:GetPath}"; DestName: "pwrisosh.dll"; Flags: noregerror onlyifdoesntexist regserver touch; Check: IsWin64; Permissions: admins-full Source: "T:\Process\pwrisovm.exe"; DestDir: "{code:GetPath}"; Flags: onlyifdoesntexist touch; Permissions: admins-full Source: "T:\Process\setup64.exe"; DestDir: "{code:GetPath}"; Flags: onlyifdoesntexist touch; Check: IsWin64; Permissions: admins-full Source: "T:\System\drivers\scdemu32.sys"; DestDir: "{sys}\drivers"; DestName: "scdemu.sys"; Flags: onlyifdoesntexist touch; Check: not IsWin64; Permissions: admins-full Source: "T:\System\drivers\scdemu64.sys"; DestDir: "{sys}\drivers"; DestName: "scdemu.sys"; Flags: onlyifdoesntexist touch; Check: IsWin64; Permissions: admins-full |
|||||
------- Последний раз редактировалось semiono, 03-06-2009 в 22:50. Отправлено: 22:36, 03-06-2009 | #850 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Inno Setup. Прочие вопросы | El Sanchez | Автоматическая установка приложений | 653 | 09-01-2023 20:13 | |
Утилиты - [addon] Inno Setup | CrOsP | Наборы обновлений для Windows XP/2003/Windows 7 | 33 | 11-05-2011 16:03 | |
Inno Setup 5.3.6 | OSZone Software | Новости программного обеспечения | 0 | 15-11-2009 17:30 | |
[Архив] Твики реестра .: [все вопросы] :. | Vadikan | Автоматическая установка Windows 2000/XP/2003 | 1431 | 26-01-2008 08:51 | |
Inno Setup | tradeukraine | Вебмастеру | 3 | 13-06-2006 20:39 |
|