|
Программа зависает при выполнении WMI-запроса на получения состояния службы
|
|||
---|---|---|---|
#18+
Доброго времени суток. Столкнулся с такой проблемой - когда я пытаюсь получить информацию о состоянии службы на ПК через WMI-запрос (код ниже) программа зависает и перестаёт подавать какие-либо признаки жизни. Программа сделана как модуль в xls-файле (Excel 2007). При зависании Excel начинает выдавать сообщения "Microsoft Office ожидает завершения OLE-операции", но при этом ничего не происходит. К зависанию приводит выполнение строки : Код: vbnet 1.
т.е. зависает именно в сам момент получения информации о состоянии службы на ПК С помощью этой процедуры проверял службы на ~6000 компьютерах - но на 5-6 ПК программа зависает и я не могу понять в чём дело. Если я подключаюсь к этим ПК через консоль управления компьютером - никаких проблем не возникает, консоль открывается, работает, показывает службы - всё как надо. А получение этой же информации через WMI-запрос приводит к зависонам. Есть мысли с чем это может быть связано? Код процедуры получения информации о состоянии службы : Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2013, 12:56 |
|
Программа зависает при выполнении WMI-запроса на получения состояния службы
|
|||
---|---|---|---|
#18+
права доступа? а если запрос на другую службу сделать, так же зависает? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2013, 13:00 |
|
Программа зависает при выполнении WMI-запроса на получения состояния службы
|
|||
---|---|---|---|
#18+
Konst_Oneправа доступа? Проблема точно не в доступе : 1) Если бы проблема заключалась в правах доступа - выполнение WMI-запроса возвращала бы ошибку "permission denied", но это происходило бы почти мгновенно. Знаю это просто потому, что имеется ряд компьютеров к которым у меня действительно нет доступа и при попытке узнать состояние служб на этих ПК вижу "permission denied" :) 2) Я подключался ко всем "зависающим" компьютерам через консоль управления (compmgmt.msc), заходил в раздел "Службы", открывал службы (т.е. получал информацию в т.ч. об их состоянии и типе запуска), запускал/останавливал службы - ошибок (и зависаний) не возникало. То есть проблема 100% не в правах доступа :-( Konst_Oneа если запрос на другую службу сделать, так же зависает? Пробовал. Зависает при попытке узнать состояние любой службы. Даже если вводишь название несуществующей службы - при выполнении wmi-запроса программа зависает. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2013, 13:10 |
|
Программа зависает при выполнении WMI-запроса на получения состояния службы
|
|||
---|---|---|---|
#18+
Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
посмотрите тут как делают ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2013, 13:41 |
|
Программа зависает при выполнении WMI-запроса на получения состояния службы
|
|||
---|---|---|---|
#18+
Konst_One , Вы имеете ввиду подключаться сразу к объекту служб на удалённом ПК с указанием уровня имперсонации и региональных настройк подключения? Подключаться непосредственно к объекту службы попробовал сейчас (с помощью рекомендованного майкрософтом способа) : Код: vbnet 1.
Не помогает. Программа по-прежнему зависает при подключении к нескольким из 6 тысяч ПК =/ Явное указание уровня имперсонации и региональных настроек не помогает (что понятно - по умолчанию используются те же настройки). ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2013, 15:14 |
|
Программа зависает при выполнении WMI-запроса на получения состояния службы
|
|||
---|---|---|---|
#18+
furiousangel256 Программа по-прежнему зависает при подключении к нескольким из 6 тысяч ПК =/Ну так проблема не в программе, а в этих компах. WMI имеет в своей базе древнюю и капризную к настройкам технологию DCOM, так что значение "несколько из 6000" (меньше одного процента) это, я бы сказал, выдающийся показатель. Обычно счет идет на процентов 10. Ковырять нужно настройки клиентов, но лучше просто переустановить им систему. Возможно это является причиной проблем. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2013, 15:47 |
|
Программа зависает при выполнении WMI-запроса на получения состояния службы
|
|||
---|---|---|---|
#18+
Antonariy , а может быть Вы как местный гуру сможете подсказать какой-нибудь противоракетный манёвр, который помог бы избежать возникновения проблемы связанной с зависанием программы при подключении к удалённому ПК ? :-) К примеру : на получение информации о состоянии 6-8 служб на одном ПК через WMI уходит в среднем 1-2 секунды. Если проверка одной службы затягивается секунд на 20 можно смело утверждать, что ничем хорошим проверка не закончится. Вопрос в том - как прервать этот зависший процесс? Средствами VB такое вообще возможно? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2013, 16:01 |
|
Программа зависает при выполнении WMI-запроса на получения состояния службы
|
|||
---|---|---|---|
#18+
Возможно. Нужно написать многопоточное приложение, проверять каждый комп в отдельном потоке. Это заметно уменьшит общее время исполнения. Как правильно писать многопоточные приложения: 10555629 . Тут этот пример немного описан. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2013, 16:28 |
|
|
start [/forum/topic.php?fid=60&fpage=61&tid=2157103]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
74ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 181ms |
0 / 0 |