IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Mappage Lecteur Réseau


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Octobre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2013
    Messages : 7
    Points : 18
    Points
    18
    Par défaut Mappage Lecteur Réseau
    Bonsoir à tous les développeurs ici-présents !

    Je fais appel à vos connaissances et votre aide concernant un petit soucis que je rencontre actuellement dans VB2010.
    À noter que je ne connais absolument pas le VB. Je "découvre" grâce à mon entreprise qui me demande de reprendre un projet développé en interne, afin de l'améliorer et de le rendre fonctionnel (voir plus bas, c'est expliqué).


    Je m'explique :
    je cherche à intégrer en code VB une solution qui permet de monter un lecteur réseau. Mais il y a une petite particularité : son nom, que je souhaite modifier.

    Actuellement, le plus 'facile' pour moi est de me servir de ce code VBScript :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    strDriveLetter = "Z:"
    strRemotePath = "\\Serveur\Dossier1\Dossier2\Dossier3\NomduPartageARallongeQuiNenFinitAbsolumentPasEtQuiEstTotallementIllisible"
    strNewName = "NomAbrégé"
     
    Set objNetwork = CreateObject("WScript.Network")
    objNetwork.MapNetworkDrive strDriveLetter, strRemotePath, true, "CompteUtilisateur", "MotDePasse"
    Set objShell = CreateObject("Shell.Application")
    objShell.NameSpace(strDriveLetter).Self.Name = strNewName
    Avec ces quelques lignes, je réussis parfaitement à :
    1. mapper le lecteur réseau
    2. lui donner le nom que je veux.

    Ainsi, grâce à ce VBScript, dans l'Explorateur de Fichiers, je ne vois plus ça :
    NomduPartageARallongeQuiNenFinitAbsolumentPasEtQuiEstTotallementIllisible sur \\Serveur\Dossier1\Dossier2\Dossier3\ ( Z: )
    mais ça :
    NomAbrégé ( Z: )
    ce qui est nettement plus clair, non ?


    Mais aujourd'hui, mon entreprise me demande de reprendre un projet VB afin de le mettre à jour. Ce projet porte sur le fait que l'on puisse lancer plusieurs applications de notre choix, par le biais de CheckBoxes, via un bouton 'final' nommé "Lancer". Ainsi, si on coche 2 des 10 cases présentes, puis que l'on clique sur "LANCER", les applications cochées se lancent alors d'elles-même. Mais il y a un petit problème : c'est que ces applications sont toutes sur le fameux lecteur Z:. Vous me suivez toujours ?

    Actuellement, dans ce projet VB, c'est la ligne suivante qui a été utilisée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Shell("net use Z:" & Chr(34) & "\\Serveur\Dossier1\Dossier2\Dossier3\NomduPartageARallongeQuiNenFinitAbsolumentPasEtQuiEstTotallementIllisible" & Chr(34) & " " & Chr(34) & "MotDePasse" & Chr(34) & " /user:CompteUtilisateur")
    Elle s'active dès le lancement de l'application VB et monte alors le lecteur Z:, mais avec le nom à rallonge, ce qui n'est pas très... esthétique.

    Moi ce que je voudrais, c'est donc pouvoir monter le lecteur, tout en lui donnant le nom que je veux. Je suppose que c'est possible à mettre en place, mais actuellement je sèche un peu. On fouillant sur le Net ainsi qu'ici, j'ai trouvé quelques codes somme-toute intéressants, mais que je n'arrive pas à faire fonctionner... Voici ce que j'ai aujourd'hui :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Private Function MapNetworkDrive() As Integer
     
            'MAPPAGE DU LECTEUR Z:
     
            'Déclaration des objets
            Dim objNetwork, objShell, objFSO As Object
            Dim ZDriveLetter, ZRemotePath, ZDriveNewName, ZUsr, ZPwd As Object
     
            'Déclaration des variables
            ZDriveLetter = "Z:"
            ZRemotePath = "\\Serveur\Dossier1\Dossier2\Dossier3\NomduPartageARallongeQuiNenFinitAbsolumentPasEtQuiEstTotallementIllisible"
            ZDriveNewName = "NomAbrégé "
            ZUsr = "CompteUtilisateur"
            ZPwd = "MotDePasse"
     
            'Instanciation des objets
            Try
                objNetwork = CreateObject("WScript.Network")
                objFSO = CreateObject("Scripting.FileSystemObject")
                'Vérification de la présence du lecteur réseau :
                If Not objFSO.DriveExists(ZDriveLetter) Then
                    'Si le lecteur n'existe pas, alors on le connecte :
                    objNetwork.MapNetworkDrive(ZDriveLetter, ZRemotePath, "false", ZUsr, ZPwd)
                    objShell = CreateObject("Shell.Application")
                    objShell.NameSpace(ZDriveLetter).Self.Name = ZDriveNewName
     
                    'Le lecteur existe, alors on le déconnecte pour le remapper
                Else
                    objNetwork.RemoveNetworkDrive(ZDriveLetter, True)
                    objNetwork.MapNetworkDrive(ZDriveLetter, ZRemotePath, "false", ZUsr, ZPwd)
                    objShell = CreateObject("Shell.Application")
                    objShell.NameSpace(ZDriveLetter).Self.Name = ZDriveNewName
                End If
            Catch err As System.Exception
                'Capture de l'erreur, le cas échéant
                MsgBox("Map->" + ZDriveLetter + ZRemotePath + " || " + err.ToString)
            End Try
        End Function
    Je suis sûr & certain que les développeurs que vous êtes vont grincer des dents en voyant mon code qui pourrait peut-être être épuré ou amélioré. Ce que je sais aujourd'hui, c'est que ça ne fonctionne pas. Le lecteur ne monte absolument pas, et je n'ai pas le message d'erreur non plus.

    J'en appelle donc à vous pour :
    1. m'aider dans la conception/amélioration de ces lignes de code
    2. me dire ce qui ne va pas, en m'expliquant pourquoi (de préférence)
    3. m'indiquer si l'usage des balises TRY / END TRY est pertinent, et voir si l'on peut les remplacer par d'autres, plus usuelles
    4. ne pas utiliser la balise 'Catch', utilisée dans les balises TRY, qui ne me servira absolument à rien
    5. m'aider à consolider la fin de mon code, car pour 'End Function' VB2010 m'affiche ce message d'avertissement :
    Avertissement 1 La fonction 'MapNetworkDrive' ne retourne pas une valeur pour tous les chemins de code. Une instruction 'Return' est-elle manquante*?
    D'habitude j'arrive à me dépatouiller en fouinant et testant à tour de bras. Et comme on dit, on apprend sur le tas. Alors j'apprends, comme je peux... mais comme il est de coutume pour les entreprises, c'est très souvent urgent ! ^^
    Alors je vous sollicite, en espérant obtenir une (ou même plusieurs !) réponses.

    En tout cas, je vous remercie de m'avoir lu jusqu'ici, en espérant avoir été suffisamment clair dans mes explications.

    Dans l'attente de vous lire !


    ++

    V77

  2. #2
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    Yep,

    J'ai un peu testé ton code. Perso je travaille avec un batch qui exécute des commandes Net use.

    1ère remarque, quand j'utilise l'option delete de net use mes déconnexions sont bien exécutées mais les partages apparaissent toujours dans l'explorateur. Pourquoi ? car ils sont sauvés à deux endroits dans la base de registre (je ne les connais plus de mémoire mais je peux te donner les clés demain du boulot)

    J'ai effectué un test de ton code dans 2 cas :

    1. J'essaie de reconnecter un partage étant déjà connecté. cf erreur.jpg. Cela signifie que ta fonction pour déconnecter le partage à fonctionné mais que la lettre est toujours reconnue comme partage même s'il est déconnecté (cf ce que je t'explique à ma première remarque. Je ne serais pas étonné que si on supprime cette lettre dans la base de registre cela fonctionne). Du coup évidemment impossible de reconnecter ton partage.

    2. J'essaie avec une lettre non utilisée : dans mon cas même s'il est déconnecté, mon lecteur apparait encore dans ma liste des partages, donc tu obtiens l'erreur2.jpg. Pourquoi, car il n'est pas permis de ce connecter à partir d'une même machine à une même ressource réseau plusieurs fois avec le même identifiant/mot de passe.

    3.
    ne pas utiliser la balise 'Catch', utilisée dans les balises TRY, qui ne me servira absolument à rien
    Je ne suis pas d'accord, un catch peut toujours servir en cas d'erreur et pour pouvoir exécuter certaines actions (comme dans ton cas afficher un message d'erreur). Personnellement j'utilise des blocs try catch presque partout dans mes codes.

    4.
    Avertissement 1 La fonction 'MapNetworkDrive' ne retourne pas une valeur pour tous les chemins de code. Une instruction 'Return' est-elle manquante*?
    Ta fonction est déclarée avec une variable de retour de type integer, mais tu n'as aucune valeur de retour.

    Donc tu devrais avoir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub MapNetworkDrive()
    ...
    End Sub
    Maintenant je suis presque sur qu'il n'existe pas un namespace dans le framework .Net permettant de faire ce que tu veux faire sans passer par des CreateObject. Je jetterais un coup d’œil demain car l'info m’intéresse pour un de mes développement futur.

    J'espère que ce début de réponse pourra un peu t'aider et que j'ai été clair dans mes explications
    Images attachées Images attachées   
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  3. #3
    Membre à l'essai
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Octobre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2013
    Messages : 7
    Points : 18
    Points
    18
    Par défaut
    Bonsoir InfoSam et merci pour ta 1e réponse...

    Je constate que pour toi ça semble fonctionner et que tu as même le fameux message d'erreur ! Alors que moi, je n'ai absolument rien...

    Selon tes explications, j'ai modifié ma balise 'Private Function' par 'Private Sub'. Visual Basic 2010 s'est même chargé de lui-même de corriger la balise de fermeture !
    Quant aux balises 'Try' et 'Catch', je comprends leur utilité, mais un peu moins ce que contient le message d'erreur de tes 2 PJ. Mais rassure-toi, je vais essayer de comprendre ce qu'ils veulent me dire en testant mon code.
    Par contre, j'ai regardé tes 2 PJ et l'erreur est identique aux 2. Ce sont bien 2 erreurs différentes et obtenues selon tes tests ?

    Concernant l'usage de scripts manuels, c'est en effet une solution. Mais il nous serait nettement plus simple de ne pas avoir à s'en soucier ; le programme VB s'en chargeant tout seul.


    Ah, par contre, j'ai omis une information qui, je pense, peut être très utile : le réseau d'entreprise sur lequel je travaille est composé de serveurs 2008 et de postes de travail en Windows 7 Entreprise. Le système tel qu'il a été conçu permet l'usage des Fichiers Hors Connexion... Et je me suis aperçu d'un truc plutôt gênant par moment, c'est que les Lecteurs Réseau qui sont connectés au PC sont mis dans un cache que l'on retrouve sous le doux nom de 'CSC-CACHE' lorsque le Lecteur est déconnecté. Mais il reste "persistant" dans le fait qu'il reste à l'écran, mais est affiché comme déconnecté. Cette situation provoque alors un bug dans la reconnexion dudit lecteur qui n'affiche alors plus tout le contenu réel que contient le partage, mais une bribe du cache qui est resté sur le PC Local. Et la seule solution que j'ai trouvée est de reconnecter le lecteur (même si le contenu est quasi incomplet), puis d'aller dans "Offline Files Folder" de Win7 et de supprimer le cache des fichiers hors connexion pour ce lecteur. Ensuite on déconnecte le lecteur puis la reconnexion fonctionne alors à nouveau. Ce symptôme est plutôt gênant mais ne se présente que rarement.

    Je ne sais pas si cette info peut t'aider... mais sait-on jamais.


    En tout cas, merci à toi de te pencher sur mon cas. Et pour info, tes explications me conviennent

    Bonne soirée (ou bonne nuit) et au plaisir !


    V77

  4. #4
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    Par contre, j'ai regardé tes 2 PJ et l'erreur est identique aux 2. Ce sont bien 2 erreurs différentes et obtenues selon tes tests
    Oups erreur de ma part lors de l'ajout des pièces jointes désolé. Les erreurs étaient de toute façon comme je te l'ai expliqué.

    Pour ton soucis de cache, je ne vois pas bien le fonctionnement (même si tu l'as très bien expliqué) mais le comportement est semblable à ce que je t'ai expliqué au niveau de la base de registre.

    Pour moi la meilleure solution pour éviter le problème serait de supprimer l'information pour le partage que tu essaies d'activer du cache (dans le cas que je t'ai expliqué de la base de registre) et je pense qu'après le fonctionnement serait comme tu le veux.

    Maintenant tu peux également jeter un œil à cette discussion
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  5. #5
    Membre à l'essai
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Octobre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2013
    Messages : 7
    Points : 18
    Points
    18
    Par défaut
    Salutations InfoSam

    J'ai regardé le topic qui tu as mis en lien, et est aussi regardé le lien qui est donné dans ce fameux topic...

    Et, c'est déjà ce que je fais. La commande NET USE me sert justement à déconnecter le lecteur. Elle a exactement le même effet que le 'Clic-Droit/Déconnecter' sur le lecteur réseau. Mais... et c'est justement là que parfois ça coince, à cause du système des Fichiers Hors Connexion, il arrive parfois que ce lecteur ne disparaisse pas et reste présent dans l'Explorateur de Fichiers, avec comme intitulé (sous le lecteur) 'CSC-CACHE'. Je fais donc les manipulations que j'ai données ci-dessus pour résoudre mon pb. Selon diverses recherches, il existe aussi une méthode pour purger ce cache hors ligne via la base de registre. MAIS : il faut être Admin du PC pour pouvoir faire cette modification de registre, et il faut redémarrer le PC pour que la clé soit lue et que le cache soit purgé. Ma solution est donc plus rapide... enfin, je pense.

    Sinon, je continue à tester mon code, mais ça ne donne tjs rien.

    Petite précision : je travaille de soir, donc si on est en "décalage" pour se répondre, c'est normal


    Cordialement

  6. #6
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    Donc tu as bien le problème identique à celui que j'ai soulevé avec mes mapping sauvés dans la base de registre.

    Il faudrait peut-être voir si tu ne peux pas forcer le mode administrateur pour ton programme et aller supprimer les mapping dans la base de registre (le fait que l'explorateur n'est pas rafraichis à mon avis ne bloquera pas ton programme).

    Petite précision : je travaille de soir, donc si on est en "décalage" pour se répondre, c'est normal
    Pas de soucis je passe assez souvent voir mon tableau de bord, que ce soit en journée que le soir (voir la nuit ;-) )
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  7. #7
    Membre à l'essai
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Octobre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2013
    Messages : 7
    Points : 18
    Points
    18
    Par défaut
    Salut salut !

    Passé un bon WE ? Moi pas trop mal

    Bon, sinon, j'avoue que je n'arrive pas à faire fonctionner ce code VB... je suis sûr que c'est un paramètre tout simple que je dois omettre pour que ça fonctionne correctement. Mais lequel ?

    J'ai tenté de supprimer le "csc-cache", mais sans succès. Pourtant, mon petit script VBS fonctionne au poil... et le code VBS n'est pourtant pas si différent de celui que j'utilise dans mon développement VB...

    Donc, si des idées émergent...

    Cordialement

  8. #8
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    Vais essayer de regarder cela
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  9. #9
    Membre à l'essai
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Octobre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2013
    Messages : 7
    Points : 18
    Points
    18
    Par défaut
    Salut Salut !

    Bon alors... me revoilou avec... heu... ben tjs rien.

    Comment dire... j'ai essayé de rendre ce code le plus simple possible, sans le bla-bla ni toutes les fioritures que l'on pouvait y trouver. Ainsi j'ai maintenant ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub MapNetworkDrive()
     
            'Déclaration des objets
            Dim objNetwork, objShell As Object
     
            'Connexion au Lecteur
            objNetwork = CreateObject("WScript.Network")
            objNetwork.MapNetworkDrive("Z:", "\\Serveur\Partage", "false", "Utilisateur", "MotDePasse")
            objShell = CreateObject("Shell.Application")
            objShell.NameSpace("Z:").Self.Name = "NomCourt"
     
        End Sub
    Hé ben même avec ça, ça ne fonctionne pas... grrrrr

    Manquerait pas une balise de type SET ou autre ? (comme dans le VBScript)


    Merci à toi en tout cas pour ton aide

    Au plaisir,

    V77

Discussions similaires

  1. Mappage Lecteur Réseau
    Par Miistik dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 25/10/2012, 12h11
  2. Problème mappage lecteur réseau
    Par Ble4Ch dans le forum Windows XP
    Réponses: 10
    Dernier message: 01/08/2012, 10h02
  3. mappage lecteur réseau
    Par Pigwi dans le forum Windows XP
    Réponses: 2
    Dernier message: 08/06/2012, 10h11
  4. Mappage lecteur réseau avec login et password
    Par _gor_acc dans le forum VBScript
    Réponses: 1
    Dernier message: 13/10/2010, 20h33
  5. mappage lecteur réseau + imprimante + copie fichier
    Par jawad-kun dans le forum Général Dotnet
    Réponses: 0
    Dernier message: 10/08/2009, 19h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo