Code de fin application et wmi

Résolu
cs_scrableur Messages postés 13 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 21 août 2006 - 18 août 2006 à 14:15
cs_scrableur Messages postés 13 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 21 août 2006 - 21 août 2006 à 10:49
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

cs_scrableur Messages postés 13 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 21 août 2006
21 août 2006 à 10:49
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
3
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
18 août 2006 à 15:54
Aucun besoin de WMI et sa lourdeur, API obtient idem.

GetLogicalDrives
GetDriveType
SetErrorMode
GetVolumeInformation

ciao...
BruNews, MVP VC++
0
cs_scrableur Messages postés 13 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 21 août 2006
18 août 2006 à 16:20
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
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
18 août 2006 à 16:31
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++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_scrableur Messages postés 13 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 21 août 2006
18 août 2006 à 16:35
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
0
Rejoignez-nous