![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вылетает окно "Система выполнила недопустимую операцию..." [D2005, XP]
И. Павел © (2010-02-09 09:57:00)Здравствуйте.
Написал 2 программки на Delphi 2005: одна содержит только кнопку и обработчик, пишущий в Caption; на форму второй поместил ADOConnection и ADOQuery. На компьютере одного пользователя первая программа запустилась, а вторая привела к ошибке: "Программа выполнила недопустимую операцию и будет закрыта...написать письмо в Майкрософт."
Подскажите, пожалуйста - что это может быть?
ADOConnection никак не настраивал, т.е. там пустая ConnectionString.
PS: пользователь является системным администратором и, видимо, устанавливал кучу всяких примочек, меняющих Windows. Так что может он просто удалил какие-нибудь компоненты системы?
И. Павел (2010-02-12 13:00:00) [1]
> Одно из моих правил: не спорь с дураком
Ну а человек, говорящий гадости за глаза/виртуально (чтобы услышали люди "со стороны") - трус. Переход на личности в споре, который вы же и начали - не признак ума.
Дмитрий Белькевич (2010-02-12 12:38:00) [2]Одно из моих правил: не спорь с дураком. Люди со стороны могут не заметить разницы. От дальнейших комментариев воздержусь. Всё уже сказано.
И. Павел (2010-02-12 09:27:00) [3]
> Это задача операционки.
Хорошо что сообщение - первое из длинной череды полуночных излияний. Сразу настраиваешься на соответствующее восприятие остальных высказываний.
А вдруг даже расширенных специальных возможностей окажется мало? Как пользователь поймет, что виновата операционка/аппаратура - это тоже нужно обрабатывать в программе. Писать функции:
HaveKroshka()
HaveBigKroshka()
ThereIsntEnter()
StartAfterEatingMode()
Иначе вас могут обвинить в лузерстве :).
> и написать что-то вразумительное.
Зачем нужно не доводить до исключения? Если ошибка связана с комплектацией OC - должно быть выведено системное сообщение с возможностью отправки дампа и прочей информации в Microsoft.
Кроме EOleSysError в vcl много исключений - дерзайте.
PS:Вы вообще имеете какое-то отношение к нашему предприятию? Если нет - откуда уверенность, что ошибка не исчезает после переустановки?
Дмитрий Белькевич (2010-02-12 02:20:00) [4]>Даже не знаю, что тут больше виновато - OLE или реализация.
Ну и что бы не уподобляться топикстартеру - или свои руки. Возможно, как-то можно обойти. Пока не придумал.
Дмитрий Белькевич (2010-02-12 02:19:00) [5]
> И приплыли - две софтины вместе не живут.
У нас две версии софта вместе не живут из-за того, что с одной из библиотек работаем через OLE (StarBurn - грубо - бурнер оптических дисков). У библиотек разные лицензионные ключи, но одинаковые GUID'ы интерфейсов. В разные версии нашей программы вшиты разные лицензионные ключи (в зависимости от того, с какой дллкой распространяется версия). Проблема происходит так. В системе регистрируется одна из библиотек (дллка). Другая программа пытается открыть зарегистрированный сервер-библиотеку из каталога программы другой версии и, естественно, ничего хорошего из этого не выходит - лицензия не подходит. Даже не знаю, что тут больше виновато - OLE или реализация.
Германн (2010-02-12 01:51:00) [6]
> И бывало так, что одной нужно одной версии, а другой хоть
> убейся, но более старой. И приплыли - две софтины вместе
> не живут.
С ADO мало знаком. Но такие случаи встречал в других областях.
KilkennyCat (2010-02-12 01:31:00) [7]Насколько я помню из своего маленького и печального опыта работы с олеадо, то там надо очень внимательно относиться к mdac и прочему... Я не писал софт, использующих это, но устанавливал. И бывало так, что одной нужно одной версии, а другой хоть убейся, но более старой. И приплыли - две софтины вместе не живут.
Дмитрий Белькевич (2010-02-12 01:22:00) [8]>Почетно встать в один ряд? :)
Дык :)
Германн (2010-02-12 01:08:00) [9]
> Дмитрий Белькевич (12.02.10 00:15) [31]
Почетно встать в один ряд? :)
Дмитрий Белькевич (2010-02-12 00:15:00) [10]Типичная черта ламера - виноваты все, кроме самого себя - начальство, юзеры, админы, винда, апдейты, Гейтс, Белькевич.
Дмитрий Белькевич (2010-02-11 23:46:00) [11]
> А заедающие клавиши на клавиатуре мне тоже отслеживать?
Это задача операционки. Могла бы.
> Начальство сказало мне заниматься этой ошибкой недолго,
> в перерыве между задачами.
Отсутствие начальства - определённо большой плюс при разработке.
> А я провозился целый вчерашний день.
Объективно работы на час. Стёк процедур снимается элементарно. Инструментов знаю, как минимум, три. 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-11 19:40:00) [12]
> По хорошему, если это даже ошибка установки ADO, то нужно
> её отследить
А заедающие клавиши на клавиатуре мне тоже отслеживать?
По хорошему нужно, чтобы компьютер системного администратора был не миной замедленного действия, а аккуратным рабочим местом. Раньше я был не в курсе, но мне уже сказали, что это не первый случай проблем с программами на этом компьютере.
Сейчас мои программы, использующие ADOConnection, стоят где-то у 100-150 пользователей - эта системная ошибка - единственная.
Начальство сказало мне заниматься этой ошибкой недолго, в перерыве между задачами. А я провозился целый вчерашний день. Утром я уже написал отчет, порекомендовав переустановить Windows (начисто). ИМХО это самый простой и гарантированно решающий проблему путь. Если лень переустанавливать OC - попросите, чтобы начальство выделило мне задачу на поиск того, что вы удалили/заменили в системе. Но я сомневаюсь, что они разрешат мне этим заниматься.
Дмитрий Белькевич (2010-02-11 17:19:00) [13]По хорошему, если это даже ошибка установки ADO, то нужно её отследить и показать юзеру вместо 'Система выполнила недопустимую операцию'.
Дмитрий Белькевич (2010-02-11 17:14:00) [14]
> Извиняюсь, но он уже переустановил Windows и ошибка пропала
> :)
Ошибка не пропала.
И. Павел (2010-02-11 14:39:00) [15]Извиняюсь, но он уже переустановил Windows и ошибка пропала :)
Игорь Шевченко (2010-02-11 14:01:00) [16]
> Написал 2 программки на Delphi 2005: одна содержит только
> кнопку и обработчик, пишущий в Caption; на форму второй
> поместил ADOConnection и ADOQuery. На компьютере одного
> пользователя первая программа запустилась, а вторая привела
> к ошибке: "Программа выполнила недопустимую операцию и будет
> закрыта...написать письмо в Майкрософт."
> У пользователя не установлен Delphi.
Как прикажешь тебя понимать ?
> Написано как всегда: программа выполнила недопустимую операцию
> и будет закрыта. Есть еще дамп. А самого текста ошибки я
> не нашел
В окне с предложением отправки есть ссылка: Просмотр сведений или как-то так. Там есть фактическое описание "недопустимой операции" и где именно она стряслась.
И. Павел (2010-02-11 13:44:00) [17]
> для тестирования существует такая полезная вещь, как отладчик.
У пользователя не установлен Delphi.
> сообщение об ошибке, которую предлагается отправить в MS
> тоже желательно приводить.
Написано как всегда: программа выполнила недопустимую операцию и будет закрыта. Есть еще дамп. А самого текста ошибки я не нашел.
Игорь Шевченко (2010-02-11 13:27:00) [18]ошибка здесь
ADODB.CreateADOObject
для тестирования существует такая полезная вещь, как отладчик.
сообщение об ошибке, которую предлагается отправить в MS тоже желательно приводить.
> Но почему появилась ошибка, связанная с OLE?
потому что ADO
И. Павел (2010-02-09 16:13:00) [19]
> ну а после CoInit(и так и так), с той же ошибкой вылетат?
Да. После инициализации та же ошибка.
12 (2010-02-09 16:10:00) [20]ну а после CoInit(и так и так), с той же ошибкой вылетат?
чего делает? инициализирует :)
Может как не так как инициализировалось
Если, например, в рантайме создавать ado в консольных - надо вручную вызывать