[R] Rendre une erreur silencieuse.

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
lokidor
Niveau 3
Niveau 3
Messages : 36
Enregistré le : mar. 08 févr. 2011 10:57
Localisation : Sophia Antipolis
Status : Hors ligne

[R] Rendre une erreur silencieuse.

#1

Message par lokidor »

Bonjour à tous,

J'ai un petit problème dans ma plantation ... ha non c'est pas ici? j'me suis trompé? OK, je sors :arrow:

Trêve de pitreries!

J'ai un petit prog qui permet de créer un ou des utilisateurs sur une machine distante.
Au début, je teste si le compte en question n'existe pas déjà.

Le soucis, c'est que j'ai une erreur COM non bloquante qui sort au moment du test pour me dire que l'utilisateur n'existe pas... comme je le désire justement. (youhouuuu trop bien...)
Sauf que quand j'aurais 200 traitements à faire passer, j'ai pas envie de m'amuser à cliquer sur OK à chaque fois .

J'ai tenté de mettre en place de quoi gérer l'erreur mais il me sort une autre erreur COM disant : "Can't install a new Errorhandler when one is still active". Alors moi je veux bien, mais je ne sais pas ou se trouve le premier...

Si quelqu'un à une idée pour faire passer l'erreur en silencieuse, je suis preneur ;)

Code : Tout sélectionner

Func MyErrFunc()
    ; when COM/Obj error  then only set flag and do nothing
    SetError(1)
EndFunc


Func CreateAccount($strUserName,$strFullName,$strPassword,$strGroup,$Computer,$description_PRU)

    $objErr = ObjEvent("AutoIt.Error","MyErrFunc")
    
    $objUser = ObjGet("WinNT://" & $Computer & "/" & $strUserName);on vérifie si l'objet existe ou non et c'est cette ligne qui renvoie l'erreur indésirable

 
Modifié en dernier par lokidor le mer. 16 févr. 2011 13:06, modifié 2 fois.
Loki,

Le monde avance grâce aux paresseux!
Avatar du membre
sksbir
Niveau 7
Niveau 7
Messages : 384
Enregistré le : lun. 26 oct. 2009 17:57
Localisation : Lyon
Status : Hors ligne

Re: [..] Rendre une erreur silencieuse.

#2

Message par sksbir »

Bonjour

Je dirais comme ça que ta déclaration $objErr = ObjEvent("AutoIt.Error","MyErrFunc") doit se faire dans le corps principal de ton script afin d'être appelé une seule fois. Ton erreur doit survenir au 2eme appel de ta fonction "createaccount"

Par ailleurs, pense à remettre $objUser ="" à la fin de ta fonction, ou alors met également la déclaration de $objUser dans le corps principal afin d'optimiser l'invocation de l'objet .
lokidor
Niveau 3
Niveau 3
Messages : 36
Enregistré le : mar. 08 févr. 2011 10:57
Localisation : Sophia Antipolis
Status : Hors ligne

Re: [..] Rendre une erreur silencieuse.

#3

Message par lokidor »

sksbir a écrit : Je dirais comme ça que ta déclaration $objErr = ObjEvent("AutoIt.Error","MyErrFunc") doit se faire dans le corps principal de ton script afin d'être appelé une seule fois. Ton erreur doit survenir au 2eme appel de ta fonction "createaccount"

Je ne pense pas que cela vienne de là car je fait mes tests avec un seul enregistrement pour le moment. Je suis cependant quand même allé tester, et le problème persiste. Il me dit toujours que j'ai deux errorhandlers et que ça ne lui plait vraiment pas.

D'après vous, un ErrorHandler possède forcément le mot clef $objerror? Si non, y a t'il un moyen d'identifier une telle fonction? Le script n'est pas à moi, mais à mon prédécesseur qui n'est plus là pour répondre à mes questions :/

Sinon, d'autres idées?
Loki,

Le monde avance grâce aux paresseux!
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Rendre une erreur silencieuse.

#4

Message par GaRydelaMer »

Bonjour

c'est assez difficile de te répondre car dans le script que tu nous donnes il en manque beaucoup. Il n'y aurait pas une gestion d'erreur dans un fichier inclus ?

Pour répondre à ta question: ConsoleWrite(ObjEvent("AutoIt.Error")) va t'indiquer qu'elle est la fonction de gestion d'erreur en cours si elle est présente. Une fois son nom afficher, il te restera plus qu'à la trouver dans le script.


Edit:

De plus c'est une technique que j'emploie pour utiliser une gestion d'erreurs alternative dans certaine fonction:
1/ J'ai une gestion centraliser des erreurs: F1
2/ Une fonction qui ne doit pas être bloquante, je change de gestion d'erreur:
Local $oldFonctionErreur = ObjEvent("AutoIt.Error")
$oMyError = ObjEvent("AutoIt.Error", "MyNewErrFunc")

3/ à la fin du traitement je peux ainsi restaurer la fonction
$oMyError = ObjEvent("AutoIt.Error", $oldFonctionErreur )
lokidor
Niveau 3
Niveau 3
Messages : 36
Enregistré le : mar. 08 févr. 2011 10:57
Localisation : Sophia Antipolis
Status : Hors ligne

Re: [..] Rendre une erreur silencieuse.

#5

Message par lokidor »

C'est pile poil ce que je recherche, je n'ai pas le temps ce soir, mais demain j'essayerais.

Merci beaucoup et bonne soirée à tous
Loki,

Le monde avance grâce aux paresseux!
lokidor
Niveau 3
Niveau 3
Messages : 36
Enregistré le : mar. 08 févr. 2011 10:57
Localisation : Sophia Antipolis
Status : Hors ligne

Re: [..] Rendre une erreur silencieuse.

#6

Message par lokidor »

Après un petit essai, j'ai l'erreur suivante :
Screen001.jpg
Screen001.jpg (39.1 Kio) Vu 1749 fois
Une idée pour contourner ce problème?

Voila mon script actuel, j'ai peut-être écrit une abération... :/

Code : Tout sélectionner

Local $oldFonctionErreur = ObjEvent("AutoIt.Error")
$oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
Switch $nMsg

    Case $GUI_EVENT_CLOSE
        Exit

    Case $GO
        .
        .
        .
        ; les erreurs à traiter sont dans les deux Case.
    Case $Liste
        .
        .
        .
        
EndSwitch
$oMyError = ObjEvent("AutoIt.Error", $oldFonctionErreur )
Loki,

Le monde avance grâce aux paresseux!
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Rendre une erreur silencieuse.

#7

Message par Tlem »

Peut être que la fonction IsObj serait utile pour tester avant. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
lokidor
Niveau 3
Niveau 3
Messages : 36
Enregistré le : mar. 08 févr. 2011 10:57
Localisation : Sophia Antipolis
Status : Hors ligne

Re: [..] Rendre une erreur silencieuse.

#8

Message par lokidor »

Salut Tlem.

Merci pour ta réponse, mais je ne suis pas sur de comprendre.

En fait l'erreur est faite dans un fichier appartenant à AutoIT et qui gère les fonctions d'Active Directory.
Dois-je aller modifier ce fichier?

Désolé si je parais un peu lourd, mais là je ne comprends vraiment pas le pourquoi du comment de cette erreur, enfin, le pourquoi je le comprends comprends, mais pas le comment.
Loki,

Le monde avance grâce aux paresseux!
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Rendre une erreur silencieuse.

#9

Message par Tlem »

lokidor a écrit :l'erreur est faite dans un fichier appartenant à AutoIT
Dans mon installation standard de AutoIt, je n'ai pas ce fichier adfunctions.au3, donc ce fichier est un UDF que vous avez surement récupéré sur le forum Anglais.
Il se peut qu'une erreur se soit glissé dans ce code, ou tout simplement, la fonction que vous utilisez attend un objet en argument et vous ne le lui donnez pas. :roll:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
lokidor
Niveau 3
Niveau 3
Messages : 36
Enregistré le : mar. 08 févr. 2011 10:57
Localisation : Sophia Antipolis
Status : Hors ligne

Re: [..] Rendre une erreur silencieuse.

#10

Message par lokidor »

Mhh je comprends.

Donc en gros il faut que j'aille voir dans les adfunctions et que je fasse passer le système d'erreur en objet...
Ou que je passe en Hexa comme eux. Je vais me documenter.

Pour les UDF, j'ignorais jusqu'à leur existence. En fait je récupère un projet commencé par mon prédécesseur qui, comme son nom l'indique, n'est plus là. Or je touche pour la première fois de ma vie à de l'autoIT. Bref, je m'en sort pas trop mal car c'est un langage assez intuitif je trouve, mais il me reste bien des facettes assez subtiles à découvrir :)

Et pour être honnête, je suis ravie de les découvrir en votre compagnie à tous.

Merci encore, je vais voir ce que je peux faire pour mon problème, mais sinon la réponse de GaRydelaMer est vraiment très adaptée à ce que je cherchais.
► Afficher le texte
Loki,

Le monde avance grâce aux paresseux!
airday
Niveau 1
Niveau 1
Messages : 8
Enregistré le : mar. 08 févr. 2011 11:53
Status : Hors ligne

Re: [R] Rendre une erreur silencieuse.

#11

Message par airday »

j'ai eu un soucis similaire avec la gestion d'erreur dans le browser. Le script ne peux prendre la main sur le message d'erreur de sécurité (mauvais user/password ou simplement un avertissement que le nouvel URL n'est pas en session sécurisée), il semble bloqué dans l'attente d'une réaction sur ce dernier.
Un script externe me liste bien la fenêtre (d'erreur) et peu interagir mais pas le script à l'origine du message.
J'ai ajouter un systeme de flag (fichier temporaire pour faire simple) et lancer un script externe avant mon action qui intervient si le message apparait.
le systeme de flag me permet de passer des messages entre les 2 processus et de couper le second une fois l'etape de ce message d'erreur passée (il n'y a pas toujours une erreur).

cela fonctionne parfaitement dans mon cas.
Répondre