Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Erreur Shell [ Windows / Shell ] (LucyUnDemi)

mardi 5 février 2008 à 12:08:27 | Erreur Shell

LucyUnDemi

(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) & ": \\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) & ": \\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.

mardi 5 février 2008 à 13:44:37 | Re : Erreur Shell
mardi 5 février 2008 à 14:32:08 | Re : Erreur Shell

Renfield

Administrateur CodeS-SourceS

"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

mardi 5 février 2008 à 14:38:25 | Re : Erreur Shell

LucyUnDemi

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: \\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.

mardi 5 février 2008 à 14:43:01 | Re : Erreur Shell

Renfield

Administrateur CodeS-SourceS

je dirais (pas testé)

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

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

Renfield
Admin CodeS-SourceS- MVP Visual Basic

mardi 5 février 2008 à 15:35:05 | Re : Erreur Shell

Kristof_Koder

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.

mardi 5 février 2008 à 15:38:12 | Re : Erreur Shell

Renfield

Administrateur CodeS-SourceS
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

mercredi 6 février 2008 à 17:17:01 | Re : Erreur Shell

LucyUnDemi

Réponse acceptée !
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 & ": \\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.



Cette discussion est classé dans : erreur, shell, commande, lecteur, err


Répondre à ce message

Sujets en rapport avec ce message

aide shell [ par kayia ] La commande shell permet d'executer une application (.exe) .Le probléme est de ne pas savoir l'instant presisou la commande à fini le traitement.exp:l La commande SHELL [ par NetGuye.CH ] Salut,la commande SHELL permet d'exécuter un programme, mais le problème c'est qu'il le lance depuis le chemin de l'applic VB. Je cherche le moyen de chercher une commande shell [ par awa33 ] salut!s.v.p je cherche une commande de shellqui me permis d'appler apartir de m'application un fichier HTMLmerci beaucoup .j'attend votre reponse avec Execution d'une commande shell [ par nox ] Comment puis je faire pour executer une commande de type shell comme ceci:c:\xsl\prog\msxml.bat h:\toto.xml h:\toto.xsl h:\newtoto.xmlen realite c un Récupérer le résultat d'une commande DOS [ par JFF ] Comment récuperer le résultat d'une commande DOS. Avec la commande Shell, je ne récupère rien (ex: shell("dir c:>liste.txt")).Merci d'avance.JFF. Gestion des blancs dans le pathname de la commande shell [ par Raf ] Need Help A l'aide de la fonction shell, je cherche à ouvrir un fichier dont le pathname comporte des espaces ("d:\Program Files\Microsoft Visual Stu Null ??? [ par joul ] Bonjour,Comment savoir si un objet est null ou pas. J'ai essayé avec VarType ou IsNull mais ca ne me convient pas.Ex : Dim dbBase as DataBaseon erro aide sur une gestion d'erreurs ???? [ par m.bazier ] J'ai posé plusieurs fois la question sur le forum, mais je n'ai eu aucune réponse. Pourtant le problème parait simple, pour un non initié ?????Voila,


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,172 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.