Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
ВнизВылетает окно "Система выполнила недопустимую операцию..." Найти похожие ветки
← →
И. Павел © (2010-02-09 09:57) [0]Здравствуйте.
Написал 2 программки на Delphi 2005: одна содержит только кнопку и обработчик, пишущий в Caption; на форму второй поместил ADOConnection и ADOQuery. На компьютере одного пользователя первая программа запустилась, а вторая привела к ошибке: "Программа выполнила недопустимую операцию и будет закрыта...написать письмо в Майкрософт."
Подскажите, пожалуйста - что это может быть?
ADOConnection никак не настраивал, т.е. там пустая ConnectionString.
PS: пользователь является системным администратором и, видимо, устанавливал кучу всяких примочек, меняющих Windows. Так что может он просто удалил какие-нибудь компоненты системы?
← →
Sergey13 © (2010-02-09 10:02) [1]> [0] И. Павел © (09.02.10 09:57)
Говорят, что среднестатистический вопрос в игре "Что? Где? Когда?" звучит примерно так: "А для чего служит эта хреновина в нашей губернии?".
ИМХО, твой вопрос здорово это напоминает.
← →
brother © (2010-02-09 10:05) [2]что программы вообще должны делать?
где код?
← →
Германн © (2010-02-09 10:05) [3]
> Написал 2 программки на Delphi 2005
Этого мало для статистического анализа. Вот двести (ну пусть не двести, так хотя бы двадцать) напишешь, тогда можно будет что-то сказать.
← →
12 © (2010-02-09 10:09) [4]там есть тех.подробности, что там писано?
← →
И. Павел © (2010-02-09 10:10) [5]
> Германн ©
У пользователя не запускалась программа. Я написал несколько - выяснил, что проблема возникает, если добавить ADOConnection. У других пользователей этих проблем нет.
> brother ©
Код настоящей программы большой - программа работает с SQL SERVER. Код маленьких, наверное, приводить не нужно, там его и нет, кроме кода от vcl
← →
И. Павел © (2010-02-09 10:23) [6]
> там есть тех.подробности, что там писано?
Вот описание ошибки:
<?xml version="1.0" encoding="UTF-16"?>
<DATABASE>
<EXE NAME="Project1.exe" FILTER="GRABMI_FILTER_PRIVACY">
<MATCHING_FILE NAME="Project1.exe" SIZE="630272" CHECKSUM="0xBF2CE770" MODULE_TYPE="WIN32" PE_CHECKSUM="0x0" LINKER_VERSION="0x0" LINK_DATE="06/19/1992 22:22:17" UPTO_LINK_DATE="06/19/1992 22:22:17" />
</EXE>
<EXE NAME="kernel32.dll" FILTER="GRABMI_FILTER_THISFILEONLY">
<MATCHING_FILE NAME="kernel32.dll" SIZE="995840" CHECKSUM="0xC3003E57" BIN_FILE_VERSION="5.1.2600.5781" BIN_PRODUCT_VERSION="5.1.2600.5781" PRODUCT_VERSION="5.1.2600.5781" FILE_DESCRIPTION="Библиотека клиента Windows NT BASE API" COMPANY_NAME="Корпорация Майкрософт" PRODUCT_NAME="Операционная система Microsoft® Windows®" FILE_VERSION="5.1.2600.5781 (xpsp_sp3_gdr.090321-1317)" ORIGINAL_FILENAME="kernel32" INTERNAL_NAME="kernel32" LEGAL_COPYRIGHT="© Корпорация Майкрософт. Все права защищены." VERFILEDATEHI="0x0" VERFILEDATELO="0x0" VERFILEOS="0x40004" VERFILETYPE="0x2" MODULE_TYPE="WIN32" PE_CHECKSUM="0xF731E" LINKER_VERSION="0x50001" UPTO_BIN_FILE_VERSION="5.1.2600.5781" UPTO_BIN_PRODUCT_VERSION="5.1.2600.5781" LINK_DATE="03/21/2009 14:09:06" UPTO_LINK_DATE="03/21/2009 14:09:06" VER_LANGUAGE="Русский [0x419]" />
</EXE>
<EXE NAME="kernel32.dll" FILTER="GRABMI_FILTER_THISFILEONLY">
<MATCHING_FILE NAME="kernel32.dll" SIZE="995840" CHECKSUM="0xC3003E57" BIN_FILE_VERSION="5.1.2600.5781" BIN_PRODUCT_VERSION="5.1.2600.5781" PRODUCT_VERSION="5.1.2600.5781" FILE_DESCRIPTION="Библиотека клиента Windows NT BASE API" COMPANY_NAME="Корпорация Майкрософт" PRODUCT_NAME="Операционная система Microsoft® Windows®" FILE_VERSION="5.1.2600.5781 (xpsp_sp3_gdr.090321-1317)" ORIGINAL_FILENAME="kernel32" INTERNAL_NAME="kernel32" LEGAL_COPYRIGHT="© Корпорация Майкрософт. Все права защищены." VERFILEDATEHI="0x0" VERFILEDATELO="0x0" VERFILEOS="0x40004" VERFILETYPE="0x2" MODULE_TYPE="WIN32" PE_CHECKSUM="0xF731E" LINKER_VERSION="0x50001" UPTO_BIN_FILE_VERSION="5.1.2600.5781" UPTO_BIN_PRODUCT_VERSION="5.1.2600.5781" LINK_DATE="03/21/2009 14:09:06" UPTO_LINK_DATE="03/21/2009 14:09:06" VER_LANGUAGE="Русский [0x419]" />
</EXE>
</DATABASE>
← →
И. Павел © (2010-02-09 10:24) [7]Настоящая программа использует провайдер: SQLOLEDB.1
← →
Германн © (2010-02-09 10:31) [8]
> ADOConnection никак не настраивал, т.е. там пустая ConnectionString.
>
>
> И. Павел © (09.02.10 10:10) [5]
>
>
> > Германн ©
>
> У пользователя не запускалась программа. Я написал несколько
> - выяснил, что проблема возникает, если добавить ADOConnection.
> У других пользователей этих проблем нет.
>
Я, конечно не спец. Но что делает ТADOConnection, если "там пустая ConnectionString"?
← →
И. Павел © (2010-02-09 10:43) [9]
> Я, конечно не спец. Но что делает ТADOConnection, если "там
> пустая ConnectionString"?
Она и не должна там ничего делать - это просто тестовый пример, поэтому я ни к чему не подключился. Просто поставил ADOConnection на форму. В рабочей программе ADOConnection заполнен, но ошибка тоже вылезает.
← →
12 © (2010-02-09 10:47) [10]можно попробовать скачать Jcl и написать что-то вроде
procedure LogException(ExceptObj: TObject;
ExceptAddr: Pointer; IsOS: Boolean);
var
mmLog: TStringList;
TmpS: String;
ModInfo: TJclLocationInfo;
I: Integer;
ExceptionHandled: Boolean;
HandlerLocation: Pointer;
ExceptFrame: TJclExceptFrame;
begin
if ExceptObj.ClassName = "ELicenceError" then Exit;
mmLog := TStringList.Create;
try
//mmLog.Add("ExceptIntercept exception data: " + DateTimeToStr(Now));
TmpS := " Exception " + ExceptObj.ClassName;
if ExceptObj is Exception then
TmpS := TmpS + ": " + Exception(ExceptObj).Message;
if IsOS then
TmpS := TmpS + " (OS Exception)";
mmLog.Add(TmpS);
ModInfo := GetLocationInfo(ExceptAddr);
mmLog.Add(Format(
" Exception occured at $%p (Module "%s", Procedure "%s", Unit "%s", Line %d)",
[ModInfo.Address,
ModInfo.UnitName,
ModInfo.ProcedureName,
ModInfo.SourceName,
ModInfo.LineNumber]));
MessageBox(0, PChar(mmLog.Text), "Exception", MB_OK or MB_ICONWARNING);
finally
mmLog.Free;
end;
end;
begin
JclStackTrackingOptions := [stExceptFrame, stStack, stRawMode, stAllModules, stStaticModuleList];
JclStartExceptionTracking;
JclAddExceptNotifier(LogException);
{в настройках надо включить максимум для Linker MapFile}
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
← →
И. Павел © (2010-02-09 10:49) [11]
> 12 ©
Спасибо, сейчас попробую.
← →
12 © (2010-02-09 11:21) [12]тут понятнее
http://rsdn.ru/article/Delphi/DelphiJCL.xml?print
← →
И. Павел © (2010-02-09 14:49) [13]
> тут понятнее
> http://rsdn.ru/article/Delphi/DelphiJCL.xml?print
Спасибо.
Я, наконец, то поставил JEDI. Он выдал ошибку в модуле ComObj в функции OleError{ Raise EOleSysError exception from an error code }
procedure OleError(ErrorCode: HResult);
begin
raise EOleSysError.Create("", ErrorCode, 0);
end;
Но почему появилась ошибка, связанная с OLE? Ведь провайдер еще неизвестен?
Вот стек вызовов:
[0046AB0D]{Project1.exe} JclDebug.TJclStackInfoList.Create + $9D
[00457678]{Project1.exe} ComObj.OleError + $14
[0046AA1B]{Project1.exe} JclDebug.JclCreateStackList + $17
[00497AF2]{Project1.exe} Project1.LogException (Line 48, "C:\DEBUGGER_JEDI\Project1.dpr" + 21) + $6
[00457678]{Project1.exe} ComObj.OleError + $14
[00403BC4]{Project1.exe} System.@TryFinallyExit + $10
[00402496]{Project1.exe} System.SysFreeMem + $10A
[00404D4A]{Project1.exe} System.@FinalizeArray + $4A
[00404CD4]{Project1.exe} System.@FinalizeRecord + $20
[0046B45F]{Project1.exe} JclDebug.TJclExceptFrame.AnalyseExceptFrame + $1A7
[0040363B]{Project1.exe} System.@AfterConstruction + $7
[0046B29D]{Project1.exe} JclDebug.TJclExceptFrame.Create + $3D
[0042B7E9]{Project1.exe} Contnrs.TObjectList.Notify + $21
[0040346A]{Project1.exe} System.@IsClass + $E
[0041CFC8]{Project1.exe} Classes.TThreadList.UnlockList + $4
[0046A65E]{Project1.exe} JclDebug.TJclGlobalStackList.FindObject + $9A
[00457678]{Project1.exe} ComObj.OleError + $14
[0041C99A]{Project1.exe} Classes.TList.Add + $2A
[0041CFC8]{Project1.exe} Classes.TThreadList.UnlockList + $4
[0046A5B0]{Project1.exe} JclDebug.TJclGlobalStackList.AddObject + $74
[00457678]{Project1.exe} ComObj.OleError + $14
[00465A03]{Project1.exe} JclHookExcept.TNotifierItem.DoNotify + $13
[00465B08]{Project1.exe} JclHookExcept.DoExceptNotify + $CC
[00457678]{Project1.exe} ComObj.OleError + $14
[00465BA3]{Project1.exe} JclHookExcept.HookedRaiseException + $3F
[00457678]{Project1.exe} ComObj.OleError + $14
[00457690]{Project1.exe} ComObj.OleCheck + $10
[0048AB6D]{Project1.exe} ADODB.CreateADOObject + $49
[0048B3F6]{Project1.exe} ADODB.TADOConnection.Create + $3A
[004209CD]{Project1.exe} Classes.CreateComponent + $AD
[00420BFC]{Project1.exe} Classes.TReader.ReadComponent + $88
[00422004]{Project1.exe} Classes.TReader.ReadValue + $8
[00420EA9]{Project1.exe} Classes.TReader.ReadDataInner + $89
[00420DE8]{Project1.exe} Classes.TReader.ReadData + $38
[0042318D]{Project1.exe} Classes.TComponent.ReadState + $1
[0043520D]{Project1.exe} Controls.TControl.ReadState + $2D
[004384DD]{Project1.exe} Controls.TWinControl.ReadState + $25
[0044DF5D]{Project1.exe} Forms.TCustomForm.ReadState + $59
[00421BE9]{Project1.exe} Classes.TReader.ReadRootComponent + $1D5
[0041F38E]{Project1.exe} Classes.TStream.ReadComponent + $32
[0041C6D3]{Project1.exe} Classes.InternalReadComponentRes + $57
[0041C85D]{Project1.exe} Classes.InitComponent + $79
[7C911023]{ntdll.dll } Unknown function at wcsncpy + $AA4
[7C9101D6]{ntdll.dll } RtlAllocateHeap + $112
[7E37DEEC]{user32.dll } SystemParametersInfoA + $3A
[7C9101D6]{ntdll.dll } RtlAllocateHeap + $112
[7C9114D1]{ntdll.dll } Unknown function at RtlDeleteCriticalSection + $157
[7C91150F]{ntdll.dll } Unknown function at RtlDeleteCriticalSection + $195
[7C9114E5]{ntdll.dll } Unknown function at RtlDeleteCriticalSection + $16B
[7E37DEEC]{user32.dll } SystemParametersInfoA + $3A
[7E37DF01]{user32.dll } SystemParametersInfoA + $4F
[00403BC4]{Project1.exe} System.@TryFinallyExit + $10
[00402346]{Project1.exe} System.SysGetMem + $14A
[0040327B]{Project1.exe} System.TObject.NewInstance + $13
[004035E3]{Project1.exe} System.@ClassCreate + $7
[0040363B]{Project1.exe} System.@AfterConstruction + $7
[004032B0]{Project1.exe} System.TObject.Create + $10
[0041C8EE]{Project1.exe} Classes.InitInheritedComponent + $62
[0044D8F5]{Project1.exe} Forms.TCustomForm.Create + $A1
[774EF34E]{ole32.dll } Unknown function at CoInitializeEx + $3D3
[774EF4CE]{ole32.dll } Unknown function at CoInitializeEx + $553
[774ED6C6]{ole32.dll } Unknown function at IsValidInterface + $28D
[774ED7E9]{ole32.dll } Unknown function at IsValidInterface + $3B0
[774ED220]{ole32.dll } Unknown function at CoTaskMemAlloc + $1C0
[774ED1E9]{ole32.dll } Unknown function at CoTaskMemAlloc + $189
[774EF5EC]{ole32.dll } Unknown function at CoInitializeEx + $671
[77502D78]{ole32.dll } Unknown function at CoGetTreatAsClass + $1897
[00403BC4]{Project1.exe} System.@TryFinallyExit + $10
[00402346]{Project1.exe} System.SysGetMem + $14A
[0045504D]{Project1.exe} Forms.TApplication.CreateForm + $31
[00498067]{Project1.exe} Project1.Project1 (Line 73, "C:\DEBUGGER_JEDI\Project1.dpr" + 7) + $13
[7C90DCB8]{ntdll.dll } ZwSetInformationThread + $A
[7C817074]{kernel32.dll} Unknown function at RegisterWaitForInputIdle + $46
Насколько я понимаю, ошибки пошли после Project1.LogException. Но что это значит? Пожалуйста, подскажите.
← →
И. Павел © (2010-02-09 14:52) [14]
> [0046AB0D]{Project1.exe} JclDebug.TJclStackInfoList.Create
> + $9D
> [00457678]{Project1.exe} ComObj.OleError + $14
Получается, что сам JclDebug.TJclStackInfoList.Create привел к ошибке?
← →
12 © (2010-02-09 15:00) [15]ИМХО,
CoInitialize - тут скорее всего что-то
попробуйте тут почитать
http://www.interface.ru/fset.asp?Url=/borland/decom_3.htm
← →
Ega23 © (2010-02-09 15:02) [16]А ADO-то хоть на машине установлено? А версия?
← →
12 © (2010-02-09 15:41) [17]так чего то показывает ?
program Project1;
uses
Dialogs,
SysUtils,
Forms,
Unit1 in "Unit1.pas" {Form1},
comobj;
{$R *.res}
begin
showmessage (inttostr(CoInitializeEX(nil,2) ));
-- showmessage (inttostr(CoInitializeEX(nil,0) ));
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
← →
И. Павел © (2010-02-09 15:56) [18]
>Ega23 ©
Вроде бы был установлен, но на всякий случай заставил поставить MDAC 2.7 - все равно та же ошибка...
> 12 ©
Сейчас попробую, если админ еще не ушел. А что делает CoInitializeEX?
← →
И. Павел © (2010-02-09 16:03) [19]
> 12 ©
И у меня и у пользователя выводит "0"
← →
И. Павел © (2010-02-09 16:04) [20]Администратор сказал, что установил в Windows все офоциальные обновления для всего. Выходит это вредно :)
← →
12 © (2010-02-09 16:10) [21]ну а после CoInit(и так и так), с той же ошибкой вылетат?
чего делает? инициализирует :)
Может как не так как инициализировалось
Если, например, в рантайме создавать ado в консольных - надо вручную вызывать
← →
И. Павел © (2010-02-09 16:13) [22]
> ну а после CoInit(и так и так), с той же ошибкой вылетат?
Да. После инициализации та же ошибка.
← →
Игорь Шевченко © (2010-02-11 13:27) [23]ошибка здесь
ADODB.CreateADOObject
для тестирования существует такая полезная вещь, как отладчик.
сообщение об ошибке, которую предлагается отправить в MS тоже желательно приводить.
> Но почему появилась ошибка, связанная с OLE?
потому что ADO
← →
И. Павел © (2010-02-11 13:44) [24]
> для тестирования существует такая полезная вещь, как отладчик.
У пользователя не установлен Delphi.
> сообщение об ошибке, которую предлагается отправить в MS
> тоже желательно приводить.
Написано как всегда: программа выполнила недопустимую операцию и будет закрыта. Есть еще дамп. А самого текста ошибки я не нашел.
← →
Игорь Шевченко © (2010-02-11 14:01) [25]
> Написал 2 программки на Delphi 2005: одна содержит только
> кнопку и обработчик, пишущий в Caption; на форму второй
> поместил ADOConnection и ADOQuery. На компьютере одного
> пользователя первая программа запустилась, а вторая привела
> к ошибке: "Программа выполнила недопустимую операцию и будет
> закрыта...написать письмо в Майкрософт."
> У пользователя не установлен Delphi.
Как прикажешь тебя понимать ?
> Написано как всегда: программа выполнила недопустимую операцию
> и будет закрыта. Есть еще дамп. А самого текста ошибки я
> не нашел
В окне с предложением отправки есть ссылка: Просмотр сведений или как-то так. Там есть фактическое описание "недопустимой операции" и где именно она стряслась.
← →
И. Павел © (2010-02-11 14:39) [26]Извиняюсь, но он уже переустановил Windows и ошибка пропала :)
← →
Дмитрий Белькевич (2010-02-11 17:14) [27]
> Извиняюсь, но он уже переустановил Windows и ошибка пропала
> :)
Ошибка не пропала.
← →
Дмитрий Белькевич (2010-02-11 17:19) [28]По хорошему, если это даже ошибка установки ADO, то нужно её отследить и показать юзеру вместо "Система выполнила недопустимую операцию".
← →
И. Павел © (2010-02-11 19:40) [29]
> По хорошему, если это даже ошибка установки ADO, то нужно
> её отследить
А заедающие клавиши на клавиатуре мне тоже отслеживать?
По хорошему нужно, чтобы компьютер системного администратора был не миной замедленного действия, а аккуратным рабочим местом. Раньше я был не в курсе, но мне уже сказали, что это не первый случай проблем с программами на этом компьютере.
Сейчас мои программы, использующие ADOConnection, стоят где-то у 100-150 пользователей - эта системная ошибка - единственная.
Начальство сказало мне заниматься этой ошибкой недолго, в перерыве между задачами. А я провозился целый вчерашний день. Утром я уже написал отчет, порекомендовав переустановить Windows (начисто). ИМХО это самый простой и гарантированно решающий проблему путь. Если лень переустанавливать OC - попросите, чтобы начальство выделило мне задачу на поиск того, что вы удалили/заменили в системе. Но я сомневаюсь, что они разрешат мне этим заниматься.
← →
Дмитрий Белькевич (2010-02-11 23:46) [30]
> А заедающие клавиши на клавиатуре мне тоже отслеживать?
Это задача операционки. Могла бы.
> Начальство сказало мне заниматься этой ошибкой недолго,
> в перерыве между задачами.
Отсутствие начальства - определённо большой плюс при разработке.
> А я провозился целый вчерашний день.
Объективно работы на час. Стёк процедур снимается элементарно. Инструментов знаю, как минимум, три. EOleSysError можно отловить и написать что-то вразумительное. Что бы не доводить до исключения
можно попробовать проверить OLE сервер:
function CheckClass(ClassID: TGUID): Boolean;
var
Res: HResult;
begin
Result := CoCreateInstance(ClassID, nil, CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER, IUnknown, Res) = S_OK;
end;
> Если лень переустанавливать OC
Откуда юзеру знать, что проблема именно в операциоке, а не в твоём софте?
> Администратор сказал, что установил в Windows все офоциальные
> обновления для всего. Выходит это вредно :)
Выходит ты - ламер :)
← →
Дмитрий Белькевич (2010-02-12 00:15) [31]Типичная черта ламера - виноваты все, кроме самого себя - начальство, юзеры, админы, винда, апдейты, Гейтс, Белькевич.
← →
Германн © (2010-02-12 01:08) [32]
> Дмитрий Белькевич (12.02.10 00:15) [31]
Почетно встать в один ряд? :)
← →
Дмитрий Белькевич (2010-02-12 01:22) [33]>Почетно встать в один ряд? :)
Дык :)
← →
KilkennyCat © (2010-02-12 01:31) [34]Насколько я помню из своего маленького и печального опыта работы с олеадо, то там надо очень внимательно относиться к mdac и прочему... Я не писал софт, использующих это, но устанавливал. И бывало так, что одной нужно одной версии, а другой хоть убейся, но более старой. И приплыли - две софтины вместе не живут.
← →
Германн © (2010-02-12 01:51) [35]
> И бывало так, что одной нужно одной версии, а другой хоть
> убейся, но более старой. И приплыли - две софтины вместе
> не живут.
С ADO мало знаком. Но такие случаи встречал в других областях.
← →
Дмитрий Белькевич (2010-02-12 02:19) [36]
> И приплыли - две софтины вместе не живут.
У нас две версии софта вместе не живут из-за того, что с одной из библиотек работаем через OLE (StarBurn - грубо - бурнер оптических дисков). У библиотек разные лицензионные ключи, но одинаковые GUID"ы интерфейсов. В разные версии нашей программы вшиты разные лицензионные ключи (в зависимости от того, с какой дллкой распространяется версия). Проблема происходит так. В системе регистрируется одна из библиотек (дллка). Другая программа пытается открыть зарегистрированный сервер-библиотеку из каталога программы другой версии и, естественно, ничего хорошего из этого не выходит - лицензия не подходит. Даже не знаю, что тут больше виновато - OLE или реализация.
← →
Дмитрий Белькевич (2010-02-12 02:20) [37]>Даже не знаю, что тут больше виновато - OLE или реализация.
Ну и что бы не уподобляться топикстартеру - или свои руки. Возможно, как-то можно обойти. Пока не придумал.
← →
И. Павел © (2010-02-12 09:27) [38]
> Это задача операционки.
Хорошо что сообщение - первое из длинной череды полуночных излияний. Сразу настраиваешься на соответствующее восприятие остальных высказываний.
А вдруг даже расширенных специальных возможностей окажется мало? Как пользователь поймет, что виновата операционка/аппаратура - это тоже нужно обрабатывать в программе. Писать функции:
HaveKroshka()
HaveBigKroshka()
ThereIsntEnter()
StartAfterEatingMode()
Иначе вас могут обвинить в лузерстве :).
> и написать что-то вразумительное.
Зачем нужно не доводить до исключения? Если ошибка связана с комплектацией OC - должно быть выведено системное сообщение с возможностью отправки дампа и прочей информации в Microsoft.
Кроме EOleSysError в vcl много исключений - дерзайте.
PS:Вы вообще имеете какое-то отношение к нашему предприятию? Если нет - откуда уверенность, что ошибка не исчезает после переустановки?
← →
Дмитрий Белькевич (2010-02-12 12:38) [39]Одно из моих правил: не спорь с дураком. Люди со стороны могут не заметить разницы. От дальнейших комментариев воздержусь. Всё уже сказано.
← →
И. Павел © (2010-02-12 13:00) [40]
> Одно из моих правил: не спорь с дураком
Ну а человек, говорящий гадости за глаза/виртуально (чтобы услышали люди "со стороны") - трус. Переход на личности в споре, который вы же и начали - не признак ума.
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Память: 0.58 MB
Время: 0.069 c