Erreur Shell [Résolu]

Messages postés
34
Date d'inscription
mardi 18 décembre 2007
Dernière intervention
12 mai 2009
- - Dernière réponse : LucyUnDemi
Messages postés
34
Date d'inscription
mardi 18 décembre 2007
Dernière intervention
12 mai 2009
- 6 févr. 2008 à 17:17
(Re) Bonjour a tous !

Voila mon problème :
quand j'execute un commande Shell sous VB6 pour créer un lecteur reseau tout va bien meme si le lecteur existe ; alors qu'evidement dans le console cette meme commande me donne une erreur !
Je voudrais donc pouvoir recuperer les erreur du Shell.

Voici comment je fais deja (ce qui marche pas) :
Public Sub MonterDisk()
Dim j As Integer'pour le compteur
Err.Clear 'on vide le fichier d'erreur
j = 90 'correspondra a Z (65 a A)
'on essai de monter le lecteur reseau avec la lettre Z
Shell "NET USE " & Chr(j) & ": [file://\\Poste-serveur\i \\Poste-serveur\i] /PERSISTENT:NO", vbHide
If Err.Number <> 0 And j > 65 Then  'si ca marche pas
j = j - 1 'on passe a la lettre precedente
Shell "NET USE " & Chr(j) & ": [file://\\Poste-serveur\i \\Poste-serveur\i] /PERSISTENT:NO", vbHide
End If
lettre = Chr(j) 'on enregistre la lettre dans la variable (string) eponime
End Sub

Le Err.Number retourne un numero d'erreur dans l'execution du programme, pas dans l'execution d'une commande Shell.
Shell retourne un double si tout va bien et zero si ca s'est mal passe ; hors la commande s'execute mais ne fonctionne pas !
Je voudrais donc un fonction du genre : Err.Shell, a la place de Err.Number

Merci encore pour votre aide Et a bientot
PS : J'ai trouve des topics relatif a ce meme probleme mais ils etaient assez ancient et sans réel solutions pour la plus part, donc je relance !
_____________________________________
La vie est trop courte pour la passer a haïre.
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
34
Date d'inscription
mardi 18 décembre 2007
Dernière intervention
12 mai 2009
3
Merci
Ca y est j'ai trouvé une solution pour que le lecteur que je monte ai pas la meme lettre qu'un deja existant.
Voici donc :
Dans un Module je met ça en entête :
Private Declare Function GetLogicalDrives Lib "kernel32.dll" () As Long

Toujours dans un module je rajoute ca :
Function IsDrive(d As String) 'Pour savoir si un lecteur Existe d'apres une lettre
Dim res As Long, drv As Long
' A=0x00000001, B=0x00000002, C=0x00000004, ... d UCase(d): drv Asc(Left(d, 1)) - 65
 drv = 2 ^ drv
 res = GetLogicalDrives If (res And drv) <> 0 Then IsDrive True Else IsDrive False
 End Function

J'ajoute ensuite ça là ou c'est nécéssaire :
Dim strLettre As String
'pour parcoure l'alphabet de Z a A
For i = 90 To 65 Step -1
    strLettre = Chr(i)
    'puis on test chaque lettre pour savoir si un lecteur y correspond
    IfNot IsDrive(strLettre) Then
        'si il existe pas !
        Debug.Print "Pas de lecteur " & strLettre
        GoTo Connect
    Else
        'si il existe
        Debug.Print strLettre & " Existe"
    End If
Next i
Connect:
'on connecte le lecteur reseau d'apres la lettre non attribuee
Shell "NET USE " & strLettre & ": [file://\\Poste-serveur\i \\Poste-serveur\i] /PERSISTENT:NO", vbHide
lettre = strLettre 'on stoque la lettre pour qu'elle soit utilise par toutes les methodes qui en ont besoin

Voila tout ! J'éspére que ça en aidera d'autre.
Merci a tous a une prochaine
_____________________________________
La vie est trop courte pour la passer a haïre.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de LucyUnDemi
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
Commenter la réponse de Renfield
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
"Shell retourne un double si tout va bien et zero si ca s'est mal passe "

Shell te renvoie le PID (identifiant de processus)
et rend la main avant que ce dernier ne soit terminé. Shelle ne peut donc en aucun cas renvoyer le code d'erreur...

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Commenter la réponse de Renfield
Messages postés
34
Date d'inscription
mardi 18 décembre 2007
Dernière intervention
12 mai 2009
0
Merci
Bon j'ai ecris un message pour qu'il ne s'affiche pas ...
Je disais donc :

Tout d'abord merci pour la reponse

Seulement quand j'utilise la fonction 'ExecCmd' avec 'NET USE.exe' ça fonctionne mais rien ne se passe !
Je met donc ' ExecCmd "NET USE.exe Z: [file://\\Poste-serveur\i \\Poste-serveur\i] /PERSISTENT:NO" ' ça me génére une erreur.
Alors je voudrais que l'on m'explique comment utiliser 'ExecCmd' avec 'NET USE' pour qu'il me renvoie une erreur comme dans la console, et que je puisse utiliser cette erreur pour que je puisse essayer de monter un lecteur reseau avec une autre lettre.

Merci et a bientot.
Je vous tien au courant si y a du nouveau d'ici là.
__________________________________________
La vie est trop courte pour la passer a haïre.
Commenter la réponse de LucyUnDemi
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
je dirais (pas testé)

ExecCmd "NET", "USE.exe Z: [file://poste-serveur/i \\Poste-serveur\i] /PERSISTENT:NO"

l'exe c'est NET
le reste ne sont que ses parametres

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Commenter la réponse de Renfield
Messages postés
920
Date d'inscription
vendredi 3 août 2007
Dernière intervention
27 octobre 2008
0
Merci
Renfield < "l'exe c'est NET le reste ne sont que ses parametres" Alors pourquoi mettre le ".EXE" derrière le USE ? Un p'tit coup de fatigue Rendfield ? Ca ne te ressemble pas ?

ExecCmd "NET.exe", "USE Z: \\Poste-serveur\i /PERSISTENT:NO"

Et moi je dirais surtout qu'il vaudrait mieux utiliser les API plutot que de lancer un NET USE pour établir une connexion à un partage réseau.
Commenter la réponse de Kristof_Koder
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
Windows s'y retrouve, sans le .exe.

a part cela, oui, les APIs seraient surement plus indiquées... ou le lancement de .BAT, si tu veux pouvoir garder un peu de controle une fois l'appli compilée

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Commenter la réponse de Renfield

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.