Что нового

Ошибка при запросе WMI

Rjevsky

Новичок
Сообщения
102
Репутация
4
Помогите обработать ошибку, избежав краха программы, если WMI запрос возвращает ошибку
В нижеприведённом примере запрос $objItem.NumberOfCores на некоторых компьютерах вызывает ошибку.
==> The requested action with this object has failed.:
$aProcessorInfo[$i][2] = $objItem.NumberOfCores
$aProcessorInfo[$i][2] = $objItem.NumberOfCores^ ERROR
И, если это случается нужно элементу массива $aProcessorInfo[$i][2] присвоить какое-н значение (например пробел)

Код:
Func _ComputerGetProcessors(ByRef $aProcessorInfo)
	Local $colItems, $objWMIService, $objItem
	Dim $aProcessorInfo[1][4], $i = 1

	$objWMIService = ObjGet("winmgmts:\\" & $cI_Compname & "\root\CIMV2")
	$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Processor", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

	If IsObj($colItems) Then
		For $objItem In $colItems
			ReDim $aProcessorInfo[UBound($aProcessorInfo) + 1][5]
			$aProcessorInfo[$i][0]  = StringStripWS($objItem.Name, 1)
			$aProcessorInfo[$i][1] = $objItem.ExtClock
			$aProcessorInfo[$i][2] = $objItem.NumberOfCores
			$aProcessorInfo[$i][3] = $objItem.SocketDesignation
			$aProcessorInfo[$i][4] = $objItem.MaxClockSpeed
			$i += 1
		Next
		$aProcessorInfo[0][0] = UBound($aProcessorInfo) - 1
		If $aProcessorInfo[0][0] < 1 Then
			SetError(1, 1, 0)
		EndIf
	Else
		SetError(1, 2, 0)
	EndIf
EndFunc

Собственно вопрос: что делать? :smile:
 
Верх