Erreur Shell

Résolu
LucyUnDemi Messages postés 34 Date d'inscription mardi 18 décembre 2007 Statut Membre Dernière intervention 12 mai 2009 - 5 févr. 2008 à 12:08
LucyUnDemi Messages postés 34 Date d'inscription mardi 18 décembre 2007 Statut Membre 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.

7 réponses

LucyUnDemi Messages postés 34 Date d'inscription mardi 18 décembre 2007 Statut Membre Dernière intervention 12 mai 2009
6 févr. 2008 à 17:17
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.
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
5 févr. 2008 à 13:44
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
5 févr. 2008 à 14:32
"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
0
LucyUnDemi Messages postés 34 Date d'inscription mardi 18 décembre 2007 Statut Membre Dernière intervention 12 mai 2009
5 févr. 2008 à 14:38
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.
0

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

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
5 févr. 2008 à 14:43
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
0
Kristof_Koder Messages postés 918 Date d'inscription vendredi 3 août 2007 Statut Membre Dernière intervention 27 octobre 2008 10
5 févr. 2008 à 15:35
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.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
5 févr. 2008 à 15:38
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
0
Rejoignez-nous