2010-06-24 11 views
1

J'ai un code simple:Pourquoi je n'arrive pas à faire fonctionner Win32_UninterruptiblePowerSupply?

ManagementObjectSearcher searcher = 
    new ManagementObjectSearcher("select * from Win32_UninterruptiblePowerSupply"); 

ManagementObjectCollection items = searcher.Get(); 

foreach (ManagementObject item in items) 
{ 
    // Some code here... 
} 

L'objet "objets" est semi-nulle. C'est en fait un objet, mais un appel à .Count ou à n'importe quoi d'autre déclenche une exception.

Je dispose d'un onduleur compatible USB standard, Windows 7, et j'utilise Visual Studio 2010 sur une machine 64 bits. J'ai ajouté un manifeste et requireAdministrator aussi.

D'autres classes WMI fonctionnent, mais celle-ci ne fonctionne pas. Je n'ai plus d'idées - aidez-moi!

+0

Est-ce que la classe de base CIM_UninterruptiblePowerSupply fonctionne mieux? – xcud

+0

@xcud - bien, .Count est maintenant 0. Donc, j'obtiens une meilleure réponse en retour, mais cela ne ramène toujours pas l'information sur l'onduleur. D'autres idées? Merci! –

+0

Combien d'instances s'affichent dans wbemtest.exe? –

Répondre

2

bien de la documentation MSDN pour Win32_UninterruptiblePowerSupply il affirme que:

À partir de Windows Vista, cette classe est obsolète et non disponible parce que le service UPS n'est plus disponible. Ce service a fonctionné avec périphériques UPS connectés en série, et non USB .

+0

Ahh - Je n'ai pas attrapé ça, merci! Des idées sur la façon dont je saisis des informations USB UPS? –

+0

Vous pouvez jeter un oeil aux classes Win32_Battery et Win32_PortableBattery. – Garett

+0

Ouais - ceux sont tous les deux vides. Je n'ai jamais compris comment faire ça. Merci quand même ... –

1

essayer un CIM_UninterruptiblePowerSupply:

'Disponibilité UPS (WMI)

Private Function UPSavailability() As String 

    Dim s As String = "" 
    UPSavailability = s 

    Try 
     Dim searcher As New ManagementObjectSearcher("root\CIMV2", "SELECT * FROM CIM_UninterruptiblePowerSupply") 

     For Each queryObj As ManagementObject In searcher.Get() 
      s = queryObj("Availability") 
     Next 

     Return s 

    Catch err As ManagementException 
     MessageBox.Show("An error occurred while querying for WMI data: " & err.Message) 
    End Try 
End Function