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

Windows Forms Discussion :

[Service Windows]Un probléme de SUBST


Sujet :

Windows Forms

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 156
    Points : 173
    Points
    173
    Par défaut [Service Windows]Un probléme de SUBST
    Bonjour, je sais bien que ça ne concerne pas directement les Winform mais je ne pense pas qu'il y ait de forum consacré à mon problème spécifique.

    J'ai créer un subst(lecteur virtuel, commande subst) sur mon ordinateur.
    Mon programme a besoin de lire des informations en se basant sur le chemin virtuel du subst.

    Quand je le fait exécuté via le service j'ai l'exception suivante:
    System.IO.DirectoryNotFoundException: Impossible de trouver une partie du chemin d'accès 'S:\chemin'.
    Alors que quand j'exécute mon programme en double cliquant sur l'exe aucune erreur. Il lit bien les fichiers pointé par le subts.

    C'est très bizarre.
    J'ai donc écris un petit programme listant les lecteurs(code ci dessous).

    Et la le comportement se précise, a l'exécution en double cliquant sur l'exe le lecteur S:/ est dans la liste.
    Par contre quand le service run l'exe, hop il n'est plus dans la liste.

    Une dernière précision le service à les droits de l'utilisateur courant, je lui ait changé pour justement voir si ce n'était pas un problème de droit mais non apparemment ça vient pas de la.

    Quelqu'un a des idées d'où cela peut t'il venir?

    J'ai cherché mais la je plante.
    Code Csharp : 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
     
                try
                {
                    DriveInfo[] drives = DriveInfo.GetDrives();
                    string result = "";
                    for (int i = 0; i < drives.Length; i++)
                    {
                        result += drives[i].DriveType + " " + drives[i].Name + " " + drives[i].RootDirectory + "\n\r";
                        File.WriteAllText(@"C:/test.txt", result);
                    }
                }
                catch (Exception ex)
                {
     
                    File.WriteAllText(@"C:/test.txt", ex.Message);
                }

  2. #2
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Dans quel cadre fonctionne le service ? (il faut avoir ouvert une session Windows ou ce n'est pas nécessaire ? ...). Car le problème vient peut être de l'utilisation du SUBST. Un administrateur réseau serait mieux placé pour répondre à ce moment.

    Par contre a tu essayé avec un lecteur réseau (qui est un vrai lecteur contrairement au SUBST) ?
    Pas de questions techniques par MP

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 156
    Points : 173
    Points
    173
    Par défaut
    Bonjour oui j'ai pas essayé avec un lecteur réseau, eux aussi ont le même comportement.
    Je ne comprends pas puisque j'ai assigné comme utilisateur du service un utilisateur root qui a accès à les dossiers du subts.
    Le bug subvient avec et sans une session ouverte, néanmoins le programme est fait pour qu'il n'ait pas besoin d'avoir une session ouverte pour marcher.

    J'ai demandé plus d'infos aux admins réseaux de ma boites eux aussi ne comprennent pas.

    Le pire c'est que la, je vois pas comment faire autrement. Puisque que c'est les méthodes du framework qui ne voyent pas les ressources du subts.

    Je vais cherché a faire une rustine en détectant automatiquement vers quel chemin réel pointe le subts lors de l'installation.(Cas ou le programme vois le subts) et le stocker dans mon fichier de conf.

    Néanmoins ça m'embête de dupliquer deux fois ce chemin car les techniciens devront à chaque changement de chemin du subts rechanger le chemin stocker dans mon fichier de conf.

    Autre remarque j'ai testé d'utiliser lors de l'exécution du service la commande subts sans paramètre ce qui permet de lister les subts.
    C'est pareil, celle ci ne liste pas les subst.
    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
     
    Process p;
    ProcessStartInfo info;
    string s;
     
    //Informations sur le lancement du processus
    info = new ProcessStartInfo("subst");
    info.RedirectStandardOutput = true;
    info.UseShellExecute = false;
     
    //Démarrer le processus
    p = Process.Start(info);
     
    //Lire tout le contenu de la sortie standard
    s = p.StandardOutput.ReadToEnd();
    result = s + "\n\n-------------------------";

    Dernière précision la méthode employé par le service pour lancer les exécutable est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Process.Start(Path,cmd);
    où Path est le chemin physique de l'exe et cmd les commandes que l'on veut exécuter.

    Peut être dois je tout simplement utiliser une autre méthode pour ce cas bien précis? Je vais chercher dans la doc de la classe process.

    EDIT:
    Je viens de tester une méthode plus verbeuse pour lancer les exe via mon service, les exe ont le même comportement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Process p1 = new Process();
    p1.StartInfo.FileName = Path;
    p1.StartInfo.CreateNoWindow = true;
    p1.StartInfo.Arguments = cmd;  
    p1.Start();
    Je suis de plus en plus convaincu que c'est lié à une question de droits que le service n'a par rapport à un utilisateur.
    Car la commande subst elle même ne liste pas ses lecteurs virtuels quand elle est lancé par le service.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 156
    Points : 173
    Points
    173
    Par défaut
    Bonjour,

    Pour ceux que ça intéresse, d'après ce que j'ai compris le service démarre une nouvelle session qui lui est propre, donc il ne peut détecter le subst puisque celui ci n'est pas mappé.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème service windows,notifyicon et contextmenu
    Par Poulain dans le forum Windows Forms
    Réponses: 1
    Dernier message: 27/04/2007, 16h19
  2. Réponses: 9
    Dernier message: 25/04/2007, 15h08
  3. Problème service windows
    Par sylchar dans le forum VB.NET
    Réponses: 4
    Dernier message: 30/03/2007, 17h14
  4. Réponses: 1
    Dernier message: 01/06/2006, 21h22
  5. [C#][service windows] problème de débutant avec 1 timer
    Par Nycos62 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 14/10/2005, 11h22

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