Précédent   Forum des professionnels en informatique > Systèmes > Windows > Windows Serveur
Windows Serveur Forum d'entraide professionel pour Windows Serveur : NT, 2000, 2003 , Longhorn...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/10/2011, 13h01   #1
Membre à l'essai
 
Inscription : octobre 2009
Messages : 63
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 63
Points : 22
Points : 22
Par défaut Net use bloquant

Bonjour,

J'ai un programme lancé en tant que service qui me permet de monter des lecteurs réseaux avec la commande "net use".

Il peut y avoir 3 types de lecteur réseau :
-> lecteur réseau public
-> lecteur réseau avec login/mot de passe qui correspond au login/mot de passe de ma session en cours
-> lecteur réseau avec login/mot de passe qui ne correspond pas au login/mot de passe de ma session en cours

Ce troisième type de lecteur réseau me pose problème car le net use devient bloquant. En effet, un net.exe est lancé et tant qu'on ne le tue pas dans la liste des processus, mon programme lancé en service bloque.

Voici un exemple simplifier de mon programme :
Code :
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct _partages partages;
struct _partages {
   int lecteur;
   const char *partage;
};



int connecteLecteur(int lecteur, const char * partage){

    char commande[256];
    int resfonc;

    sprintf(commande,"net use %c: /d",lecteur);
    printf("Valeur de la commande net use = %s\n", commande);

    resfonc = system(commande);
    printf("Return de la commande net use : %d\n", resfonc);

    // init commande
    sprintf(commande,"net use %c: %s",lecteur,partage);
    printf("Valeur de la commande net use = %s\n", commande);

    // on connecte
    resfonc = system(commande);
    printf("Return de la commande net use : %d\n", resfonc);

    return 0;
}

int main()
{
    int choix, i = 0;

    partages list_partages[] = {
        { 88, "\\\\192.168.2.147\\Partage" },
        { 89, "\\\\192.168.2.162\\MonPartage" },
        { 90, "\\\\192.168.2.162\\MonPartagePrive" },
        {  0, NULL }
    };

    while(1){

        printf("\n\n--------------------------------------\n");
        printf("Tapez votre choix :\n");
        printf("\t1 -- Lancer les commandes net use\n");
        printf("\t2 -- Arreter le programme\n");
        printf("Votre choix : ");
        scanf("%d", &choix);
        printf("\n----------------------------------------\n\n");

        if(choix == 1){
            for( i = 0; list_partages[i].lecteur; i++ )
                connecteLecteur(list_partages[i].lecteur, list_partages[i].partage);
        }
        else
            return 0;
    }
}
Les commandes net use lancées seront donc :
-> net use x: \\192.168.2.147\Partage
-> net use y: \\192.168.2.162\MonPartage
-> net use z: \\192.168.2.162\MonPartagePrive

Le lecteur x est monté sans problème (partage public).
Le lecteur y est monté sans problème (login/mot de passe correspond au login/mot de passe de ma session en cours).
Le lecteur z n'est pas monté et est bloquant (login/mot de passe ne correspond pas au login/mot de passe de ma session en cours).

Le lecteur z est bloquant car durant l'exécution de la commande en tant que service, net use demande le login/mot de passe afin de pouvoir connecter z.

Savez vous comment éviter cet état bloquant ?

Merci par avance pour vos réponses,

Sango.
Sango64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2011, 15h42   #2
Membre à l'essai
 
Inscription : octobre 2009
Messages : 63
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 63
Points : 22
Points : 22
J'ai résolu mon soucis.

Merci à ceux qui se sont penchés sur le problème
Sango64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 08h58   #3
Membre à l'essai
 
Inscription : octobre 2009
Messages : 63
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 63
Points : 22
Points : 22
Bonjour,

J'ai une nouvelle question sur la commande net use. Sur mon Windows serveur 2003, je lance une invite de commande. Dans cette invite de commande je tape la commande "net use" qui m'informe de l'état des lecteurs réseaux.

Pour un d'entre eux, il m'indique qu'il est "Non disponible".

Savez vous où Windows va chercher cette information ou comment il arrive à l'obtenir ?
Peut on la récupérer ?

Merci.
Sango64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 09h02   #4
Membre émérite
 
Avatar de gretch
 
Homme
Administrateur systèmes et réseaux
Inscription : avril 2006
Messages : 970
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Administrateur systèmes et réseaux

Informations forums :
Inscription : avril 2006
Messages : 970
Points : 968
Points : 968
Citation:
Savez vous où Windows va chercher cette information ou comment il arrive à l'obtenir ?
il test la connexion au moment de l'execution de la commande (sauf erreur ma part...)
Citation:
Peut on la récupérer ?
oui avec un net use ^^
__________________
un ptit jeu sympa
gretch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 10h14   #5
Membre à l'essai
 
Inscription : octobre 2009
Messages : 63
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 63
Points : 22
Points : 22
Bonjour gretch,

En fait j'ai posé ces questions car j'ai le soucis du "net.exe bloquant" avec les lecteurs réseaux qui sont indisponibles avec mon ancien programme ci dessus.

La commande net use est lancée avec un programme en mode service.

J'ai aussi testé une approche différente en utilisant des fonctions msdn :
Code :
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
DWORD drives;
int drive = 65;
int index = 0;
unsigned long bitTemp;
int res;
char pathTemp[4];
memset(pathTemp, 0, sizeof(pathTemp));
drives = GetLogicalDrives();
if(drives == 0)
    printf("Erreur lors de la récupération des lecteurs: %s", GetLastError());
else
{
    printf("Masque des lecteurs en decimal: %d", drives);
    bitTemp = drives;
    while(bitTemp){
        if(bitTemp & 1){
            sprintf(pathTemp,"%c:\\",drive);
            res = GetDriveType(pathTemp);
            printf("Lecteur = %c, chemin = %s, type = %d", drive, pathTemp, res);
            // res = 1 => inconnu
            // res = 3 => disque dur
            // res = 4 => lecteur réseau
            // res = 5 => cdrom
            if(res == 4)
                connecteLecteurReseau(drive);

            index ++;
            if(index > 26)
                break;
        }
        drive ++;
        bitTemp >>= 1;
    }
}
Lorsque ce mini programme est lancé classiquement via invite de commande, la fonction "GetLogicalDrives" me renvoie tous les lecteurs connectés et la fonction "GetDriveType" me renvoie leur type, c'est à dire :
c => disque dur, res = 3
e => lecteur cd/dvd, res = 5
x => lecteur réseau, res = 4
y => lecteur réseau, res = 4

Deux lecteurs réseaux ne sont pas remontés :
z => login/mot de passe ne correspond pas au login/mot de passe de ma session en cours, pas possible de se connecter sans connaître le mot de passe
w => lecteur marqué comme "non connecté"

Par contre quand mon programme est lancé en tant que service, seulement "c" et "e" sont remontés, les lecteurs x et y ne sont pas reconnus et je ne sais pas pourquoi ...

Si vous avez des idées, je suis preneur :p
Sango64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 11h07   #6
Membre émérite
 
Avatar de gretch
 
Homme
Administrateur systèmes et réseaux
Inscription : avril 2006
Messages : 970
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Administrateur systèmes et réseaux

Informations forums :
Inscription : avril 2006
Messages : 970
Points : 968
Points : 968
Citation:
z => login/mot de passe ne correspond pas au login/mot de passe de ma session en cours, pas possible de se connecter sans connaître le mot de passe
Clairement un problème de droits, l'objectif est'il de te permettre de te connecter avec TON id/pswd ou avec une identité emprunté ?
Citation:
w => lecteur marqué comme "non connecté"
la cible est elle joignable ? et par l'ip ?

post scriptum : en gros, ton script fait un net use si je comprend bien (hooo j'ai du mal aujourd'hui...)^^
essaie ça :
Code :
wmic netuse get name, status, resourcetype
__________________
un ptit jeu sympa
gretch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 11h25   #7
Membre émérite
 
Avatar de gretch
 
Homme
Administrateur systèmes et réseaux
Inscription : avril 2006
Messages : 970
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Administrateur systèmes et réseaux

Informations forums :
Inscription : avril 2006
Messages : 970
Points : 968
Points : 968
après relecture j'ai l'impression d'avoir mal cerné ton problème :/


Citation:
Deux lecteurs réseaux ne sont pas remontés :
z => login/mot de passe ne correspond pas au login/mot de passe de ma session en cours, pas possible de se connecter sans connaître le mot de passe
w => lecteur marqué comme "non connecté"
à ce niveau là, qu'essai tu de faire :
  1. te connecter ? ou
  2. remonter les infos des lecteurs deja connectés ?
dans le cas 1
net use
dans le cas 2
essai wmic

sinon c'est que j'ai encore tout compris d travers ^^
__________________
un ptit jeu sympa
gretch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 15h03   #8
Membre à l'essai
 
Inscription : octobre 2009
Messages : 63
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 63
Points : 22
Points : 22
En fait, j'ai déjà les lecteurs réseaux visibles dans l'explorateur Windows.

Je peux accéder via l'explorateur aux données des lecteurs réseaux suivants :
-> x
-> y

Je ne peux pas accéder via l'explorateur aux données des lecteurs réseaux suivants :
-> w => la machine ne ping pas
-> z => je ne connais pas le login/mot de passe pour m'y connecter
Ces deux derniers lecteurs sont marqués comme "Non disponible" quand je lance un 'net use' dans l'invite de commande et donc en mode classique, pas en mode service.

Mon programme lancé en mode service me sert à remonter tous les lecteurs disponibles via une interface qui va lister le contenu des lecteurs.
Le "net use" sur les lecteurs w et z sont bloquants. On est obligé de tuer à la main le processus "net.exe" afin que l'exécution de mon programme continue. Je n'ai pas trouvé de "time out" pour le net use.

Ne pas me connecter à ces deux lecteurs ne me dérange pas et (je pense) n'est pas possible. Ce que je veux éviter c'est l'effet bloquant.

Je vais essayer de voir du côté de wmic, je te remercie et te tiens au courant des avancées

PS : connaîtrais-tu des fonctions en 'c' qui permettraient d'exécuter la commande net use ou wmic et de retourner les résultats obtenues dans une variable ?
Sango64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 15h13   #9
Membre à l'essai
 
Inscription : octobre 2009
Messages : 63
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 63
Points : 22
Points : 22
J'ai peut être trouvé ce lien :
http://stackoverflow.com/questions/1...-c-application
Sango64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 16h09   #10
Membre émérite
 
Avatar de gretch
 
Homme
Administrateur systèmes et réseaux
Inscription : avril 2006
Messages : 970
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Administrateur systèmes et réseaux

Informations forums :
Inscription : avril 2006
Messages : 970
Points : 968
Points : 968
Citation:
-> w => la machine ne ping pas
-> z => je ne connais pas le login/mot de passe pour m'y connecter
donc 2 problèmes bien distinct.

déjà, sont t'ils nécessaire ? (on pourrait peut etre les faire sauter ^^ )
bon ensuite, pour w le problème est plus bas niveau,
effectue un diagnostique réseau pour cette machine.

pour z c'est différent, tu te fait jeter ! réattribue toi les droits (Sécurité & Partage)sur cette ressources(rassure moi c'est bien toi l'admin de ta boite ^^ )

pour ton problème de langage c je n'y connais rien
mais pour ça google fera tres bien l'affaire ^^
__________________
un ptit jeu sympa
gretch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 09h00   #11
Membre à l'essai
 
Inscription : octobre 2009
Messages : 63
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 63
Points : 22
Points : 22
Citation:
rassure moi c'est bien toi l'admin de ta boite
Bais non je suis juste un développeur Toutes les configurations que je t'ai énoncées sont possibles chez les clients que nous avons.
Nous pouvons dire qu'il n'est pas possible de lister les éléments de ce type de lecteur réseau mais cela ne doit pas être bloquant ^^

Pour le problème de w, je pense pouvoir m'en sortir en testant le retour de la fonction system() à laquelle je demande de faire un ping.

Mais pour le z, je n'ai pas accès au mot de passe (ce qui est normal d'un point de vue de sécurité). Je ne peux pas me ré-attribuer les droits sur ce lecteur réseau.
Je vais chercher plus d'information sur mon meilleur amis google
Sango64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 15h25   #12
Membre à l'essai
 
Inscription : octobre 2009
Messages : 63
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 63
Points : 22
Points : 22
Bonjour,

J'ai résolu mon problème avec des threads, des tests plus poussés vont être effectués.

Je remercie gretch pour sa colaboration
Sango64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 17h08   #13
Membre émérite
 
Avatar de gretch
 
Homme
Administrateur systèmes et réseaux
Inscription : avril 2006
Messages : 970
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Administrateur systèmes et réseaux

Informations forums :
Inscription : avril 2006
Messages : 970
Points : 968
Points : 968
thx ^^
__________________
un ptit jeu sympa
gretch est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h43.


 
 
 
 
Partenaires

Hébergement Web