Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > WMI не работает в сервисе


Автор: RinOSpro 18.3.2009, 12:37
Здравствуйте! Столкнулся с проблемой! Есть VCL сервис, в нем используется WMI, для получения информации о железе. Работало в 99,9% но на некотых компьютерах не работает. Вот случилось так что и на моем (Windows 2000) перестало работать.

Вот кусок кода:
Код

...
function WMIGetInfo(const Comp, NameSpace, User, Pass, Arg: WideString; var Instances: integer)
...
wmiServices := wmiLocator.ConnectServer (Comp, Namespace, User, Pass,'', '', 0, nil) ;
if Pos ('SELECT', Arg) = 1 then
  wmiObjectSet := wmiServices.ExecQuery (Arg, 'WQL', wbemFlagReturnImmediately, nil)
else
  wmiObjectSet := wmiServices.InstancesOf(Arg, wbemFlagReturnImmediately or wbemQueryFlagShallow, nil);
Instances := wmiObjectSet.Count;
if Instances = 0 then
  Exit;
Enum := (wmiObjectSet._NewEnum) as IEnumVariant;
...


В последней строке возникает исключительная ситуация Interface not Supported.

Что делать незнаю... Что вбивать в гугл тоже не понятно... Если кто то сталкивался с подобной проблемой подскажите плиз.

Автор: Sanchezzz 18.3.2009, 12:46
эх... http://www.delphikingdom.com/asp/viewitem.asp?catalogid=698

Автор: RinOSpro 18.3.2009, 12:50
Sanchezzz сделано как там! Даже лучше чем там!

Проблема в особенностях работы, WMI в сервисе. Но вот в каких... 

Автор: Sanchezzz 18.3.2009, 13:05
я так думаю тут особености 2000 если в других системах работает

Автор: RinOSpro 18.3.2009, 13:31
Sanchezzz получал письма что проблема возникала и на XP, и на 2003 так что дело не в ОС. Но повторюсь это очень редкая ошибка...

Автор: RinOSpro 8.4.2009, 15:01
Не решил еще (( может еще есть какие идеи?

Автор: Rrader 9.4.2009, 09:18
RinOSpro, в аттаче мой пример, там другой подход. Проверьте работоспособность

Автор: RinOSpro 10.4.2009, 10:40
Не выполняется условие вот в этой строке:
Код

      if Succeeded(Locator.ConnectServer('root\CIMV2', '', '', '',
        WBEM_FLAG_CONNECT_USE_MAX_WAIT, '', nil, Services)) then


Locator.ConnectServer возвращает -2147217400

А в коде где ни будь разве не надо задавать к какому компьютеру мы поключаемся? или по умолчанию считается локальный комп?

Автор: Rrader 11.4.2009, 17:13
Цитата(RinOSpro @  10.4.2009,  16:40 Найти цитируемый пост)
Locator.ConnectServer возвращает -2147217400

Цитата

WBEM_E_INVALID_PARAMETER - An invalid parameter was specified. 

Интересно проверить, что именно неверно. Можно написать еще вариант на VBScript smile  

Цитата(RinOSpro @  10.4.2009,  16:40 Найти цитируемый пост)
А в коде где ни будь разве не надо задавать к какому компьютеру мы поключаемся? или по умолчанию считается локальный комп?

Как раз в этой строчке и указывается. Здесь запись упрощенная, сервер на локальном компе. Подробности в MSDN.
http://msdn.microsoft.com/en-us/library/aa391769(VS.85).aspx

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)