Code de fin application et wmi

Résolu
Signaler
Messages postés
13
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
21 août 2006
-
Messages postés
13
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
21 août 2006
-
Bonjour


je souhaite verifier ou non la presence d'un CD dans le lecteur cdrom et renvoyer 0 ou 1 en fonction


sur une machine XP cela fonctionne bien pa contre sur une machine W2000 j'obtiens une erreur memoire .....


si je commente  set colitems .... => pas de message d 'erreur
si je commente exitprocess ... => pas de message d'erreur


exitprocess marche tres bien dans d'autre script sauf quand j'utilise du WMI existe t'il une commande a lancer pour lui dire de fermer la requete WMI ou une autre facon de quitter une application VB en fournissant un code de retour different de 0


 
voici le code




Private Declare Sub ExitProcess Lib "kernel32" (ByVal uExitCode As Long)
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)


Sub Main()
   
    Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_CDROMDrive", "WQL", 48)


    For Each objItem In colItems
        If objItem.MediaLoaded Then ExitProcess 1
    Next
   
    Set objWMIService = Nothing
    Set colItems = Nothing
   
   ExitProcess 0


End Sub




d'avance merci


ScraBleuR

5 réponses

Messages postés
13
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
21 août 2006

Eureka j'ai trouvé

ca a pris du temps mais la solution est apparu la : http://support.microsoft.com/kb/288216/en-us
(a lire en version anglaise en francais c'est incomprehensible :))


il faut utiliser CoUninitialize avant de faire le exitprocess pour decharger les objets com

merci a vous
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Aucun besoin de WMI et sa lourdeur, API obtient idem.

GetLogicalDrives
GetDriveType
SetErrorMode
GetVolumeInformation

ciao...
BruNews, MVP VC++
Messages postés
13
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
21 août 2006

Merci mais non car ca marcherai dans ce cas la mais j'ai d'autre applis qui utilise le wmi faire un dump de la config reseau, savoir l'etat de la batterie, ..., pour l ip j'ai pas trouve d autre solution
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
OK
Par contre rends ton code cohérent, si rien trouvé tu fermes les objets WMI et pas dans l'autre cas.
Fermons à tout coup:

Sub Main()
  dim R as Long
  Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
  Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_CDROMDrive", "WQL", 48)
  For Each objItem In colItems
    If objItem.MediaLoaded Then
      R = 1
      Exit For
    End If
  Next
  Set objWMIService = Nothing
  Set colItems = Nothing
  ExitProcess R
End Sub

Gaffe à la syntaxe, je ne VBise plus depuis des lustres.

ciao...
BruNews, MVP VC++
Messages postés
13
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
21 août 2006

Malheuresement ca ne marche pas non plus :(

j'ai essaye d'arreter le service wmi avant le exit ca change rien ca me donne l impression que la requete est toujours ouverte et que le =nothing sert a rien