![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| Coder |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 13.12.2004 Репутация: 1 Всего: 11 |
Здравствуйте!
Решил рассчитывать ID на основе некоторой системной информации. Использую WMI, разбирался, как с ним работать вот по этой статье http://www.delphisources.ru/pages/faq/base/wmi_use.html Проблема в том, что обращение к WMI не всегда стабильно. Иногда программа висит, иногда вываливает AV. Но в 90% случаев все отрабатывается нормально. Вот весь код (проект на чистом WinAPI). ID считается в потоке, который запускается в самом начале выполнения программы. В чем может быть проблема?
Это сообщение отредактировал(а) Coder - 17.2.2011, 04:24 |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
мда... никакого контроля ошибок, или хотя бы на assigned возвращаемых интерфейсов...
Добавь хотя бы примитивное логирование, тогда и будет видно, на чем вылетает. -------------------- There are always someone smarter than you... |
|||
|
||||
| Coder |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 13.12.2004 Репутация: 1 Всего: 11 |
Да, этим я не занимался. Фактически повторил все за автором статьи. ну и обнаружил, что код не стабилен. Сюда запостил, в надежде, что кто-нибудь знает нюансы или подводные камни работы с WMI. Что же, сейчас сооружу лог. Посмотрим что там будет.... Добавлено через 6 минут и 12 секунд Вот нашел отличный официальный пример http://msdn.microsoft.com/en-us/library/aa...3(v=vs.85).aspx |
|||
|
||||
| cat512 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 1 Всего: 15 |
Не знаю, у меня никогда с wmi Access не вылетал, на некоторых запросах Wql, wmi тормозил серьёзно - это да, но Access-a никогда небыло.
Кстати где Couninitialize? |
|||
|
||||
| Coder |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 13.12.2004 Репутация: 1 Всего: 11 |
cat512,
Вы можете показать свои примеры? На нем всегда и однозначно AV! Даже в пустом консольном приложении (я сейчас там разбираюсь с WMI). Привожу код. Переписал по примеру с сайта MS. извиняюсь, что не прикрепил файл. прокси не позволяет ) Значит так, пока не расставил везде вывод лога в файл один раз поймал тот самый AV. Расставил, запускаю, но поймать уже не могу )) AV проявляется так. Запускаю программу она подвисает на какой-то функции и AV...
|
|||
|
||||
| cat512 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 1 Всего: 15 |
Да, как только найду выложу. Наводящий вопрос: А будет ли AV если этот код выполнить в основном потоке?
|
|||
|
||||
| Coder |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 13.12.2004 Репутация: 1 Всего: 11 |
||||
|
||||
| northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: нет Всего: 20 |
Стандартная судьба "копипастера". -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
| Coder |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 13.12.2004 Репутация: 1 Всего: 11 |
||||
|
||||
| cat512 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 1 Всего: 15 |
Вот часть кода из моих исходников, выполняется в основном потоке
Добавлено через 4 минуты и 27 секунд Когда то взял себе за правило- с COM всегда работать через описания интерфейсов (не используя vcl-враперы TOleServer) |
|||
|
||||
| Coder |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 13.12.2004 Репутация: 1 Всего: 11 |
cat512, спасибо протестирую Ваш вариант на стабильность. У вас же все нормально работало? Может и правда дело в моей среде.... на двух компьютерах стоит XP с одного диска.
|
|||
|
||||
| cat512 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 1 Всего: 15 |
Да, у меня wmi работал стабильно
|
|||
|
||||
| Coder |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 13.12.2004 Репутация: 1 Всего: 11 |
cat512,
Погонял программу с вашим кодом.... и я понял в чем проблема - периодически программа не может достучатся до некоторых классов WMI через WQL запрос. Возможно дело в флаге wbemFlagReturnImmediately, но как задать тайм аут на выполнение запроса не нашел. может система не успевает отвечать .... ? |
|||
|
||||
| cat512 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 1 Всего: 15 |
Каким образом это проявляется? Вылетает AV? Нет ответа длятельное время от сервиса? Можешь попробовать wbemFlagReturnWhenComplete (синхронный режим), но тогда будешь ожидать окончания запроса. Либо асинхронный (надо создовать объекты события) http://msdn.microsoft.com/en-us/library/aa...0(v=vs.85).aspx Это сообщение отредактировал(а) cat512 - 22.2.2011, 17:12 |
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |