WMI, le dé-planter quand il se fige ...

Résolu
cs_nico1610 Messages postés 395 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 19 juin 2009 - 31 juil. 2007 à 14:22
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 1 août 2007 à 04:45
Salut a tous, voila mon problème :
J'utilise les WMI pour la configuration du protocole Réseau de mon ordinateur.
Pour cella j'ai une fonction
SetIp(Ip as String, MacAdress as String)

Qui se charge en fonction de l'adress mac de donner une adress IP  a la bonne carte réseau.
Mais une fois sur deux la fonction marche a merveille (changement de l'ip, et aucune fige)
Mais de temps en temps (lors de mes test c'est du 50/50) le changement d'ip ce fait puis l'aplication se fige !

Il faut savoir que pendant le changement d'adresse IP quand tout va bien, l'application se fige aussi (elle attent que le WMI est fini pour reprendre la main)
J'en ai donc déduis que de temps en temps, le WMI ne redonais pas la main a mon application d'où ma question suivante :

exsite t'il un moyen de créer un système de Timeout sur le WMI, histoire de lui laisser 30 secondes, puis si il a toujour pas re-donner la main que je lui force la chose.

Voila, je pense que mon problème est assez bien expliqué, la fonction SetIp fait ceci :
<hr size="2" width="100%" />Public Function SetIp(Ip as String, MacAdress as String)
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\.\root\cimv2")

Set colNetAdapters = objWMIService.ExecQuery _
    ("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE AND MACAddress = '" & MacAdress & "'")

strIPAddress = Array(IP)
 
For Each objNetAdapter In colNetAdapters
    errEnable = objNetAdapter.EnableStatic(strIPAddress, Array("255.255.0.0"))
    If errEnable = 0 Then
        ChangeIP = True
    Else
        ChangeIP = False
    End If
Next
End Function
<hr size="2" width="100%" />
Merci d'avance pour vos réponces.
Ergo5 (Alias Nico1610)

<hr size="2" width="100%" />http://niprod.net

7 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
1 août 2007 à 04:45
http://www.microsoft.com/technet/scriptcenter/guide/sas_cpm_fyna.mspx?mfr=true


http://technet.microsoft.com/fr-fr/library/ms141130.aspx



et plus ou moins de l'asynchrone (pour rester dans ton code et donc pourvoir "compter")
http://www.activexperts.com/activmonitor/windowsmanagement/wmi/samples/wmiasync/

++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
3
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
31 juil. 2007 à 14:45
salut,

je sais pas si ça va convenir à la situation, mais tu peux mettre un DoEvents au début de ta fonction

@++

<hr width="100%" size="2" />( Nouveau forum : Exclusivement Office & VBA/STRONG>
0
browser64 Messages postés 112 Date d'inscription dimanche 24 avril 2005 Statut Membre Dernière intervention 5 décembre 2010
31 juil. 2007 à 17:08
 salut a toi "mortalino"
 
je confirme DoEvents te premettra non seulement un gain de temps mais aussi d'eviter de bloquer le systeme "service wmi"
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
31 juil. 2007 à 17:49
salut,

WMI est SYNCHRONE

doevents n'y changera rien

à toi de charger WMI avant (une requête dont tu ne récupère pas le résultat) durant le splash par exemple, pour qu'il soit plus rapide ensuite.

sinon tes variables sont déclarée où (le sont-elles)? tu les détruis?
pas très bon de remplir une collection qui n'est pas vide. çà par contre çà peut être une raison de plantage.

un me.enabled=false puis true avant/après l'appel de la ..... fonction, çà peut être bon

un fonction qui ne renvoie rien?
un changeIP booléen non déclaré?

bon courage
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0

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

Posez votre question
cs_nico1610 Messages postés 395 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 19 juin 2009 1
31 juil. 2007 à 20:36
Si j'ai bien tout compris, le objWMIService je devrai en avoir qu'un pour tout mon projet ? En le déclarant en Public dans un module par exemple. (ou en Private dans ma From)
(J'y avait pas pensé, je suis con ! lol)
Et donc pour le décharger on est d'accord c'est :
Set objWMIService = Nothing

Sinon je ne vois pas comment ca va résoudre mon bug (enfin peut être), mais la question reste toujour : Comment faire pour mettre un timeout sur le WMI histoire de reprendre le controle de l'application et cas de problème ?

Bien sur vu que je créait a chaque fois des object WMI sans les détruires il y avait peu être une saturation ^^ .
Je vais suivre tes conseils des plus éclairé et je te tiens au courant, en tout cas tu as mis le doit sur une erreur de ma part qui pourait bien expliquer la chose !

<hr size="2" width="100%" />Merci

Ergo5 (Alias Nico1610)

<hr size="2" width="100%" />http://niprod.net
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
31 juil. 2007 à 21:19
en dim dans la fonction qui n'en est pas une

donc çà veut dire qu'il n'y a pas de "option explicit", faudrait y penser
++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
cs_nico1610 Messages postés 395 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 19 juin 2009 1
31 juil. 2007 à 21:51
Ok, mais ca me dit toujours pas comment faire si je veut un timeout.

Sinon tes conseils porte lors fruits, mais je suis toujours interéssé par un timeout
0
Rejoignez-nous