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

Dotnet Discussion :

Création de sous-répertoire impossible dans "Program Files"


Sujet :

Dotnet

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2005
    Messages : 482
    Points : 625
    Points
    625
    Par défaut Création de sous-répertoire impossible dans "Program Files"
    Salut,
    dans mon application servant à installer/mettre à jour des programmes internes je crée, lors d'une maj/install, des sous-répertoires dans "Program Files".

    Mon programme ne me balance aucune erreur et ne crée pas le sous-répertoire !

    Voici le bout de code :
    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
     internal static void RecurseCopie(DirectoryInfo repertoireOrigine, DirectoryInfo repertoireDestination, System.Windows.Forms.ProgressBar avancement, System.Windows.Forms.Label rapportOrigine, System.Windows.Forms.Label rapportDestination, ref string erreurs)
            {
                try
                {
                    if (erreurs == null)
                        erreurs = string.Empty;
     
                    if (!repertoireDestination.Exists)
                    {                   
                        try
                        {                        
                            Directory.CreateDirectory(repertoireDestination.FullName);
                        }
                        catch (Exception ex)
                        {
                            StreamWriter truc = new StreamWriter(@"c:\erreur.txt", true);
                            truc.WriteLine(ex.Message);
                            truc.WriteLine(ex.StackTrace);
                            truc.Flush();
                            truc.Close();
                            MessageBox.Show(ex.Message + Environment.NewLine + ex.StackTrace);                       
                        }
                    }
    ..........
    j'ai essayé avec "repertoireDestination.create()", marche po non plus...
    pas de messageBox, pas de fichier créé (qu'il soit dans c: ou ailleurs..)
    Quand j’exécute mon appli en mode administrateur, là ça marche !

    Ce problème n'apparait que sous "Windows 7", sous XP ça marche très bien.

    Ce qui m’embête le plus c'est que mon poste de dev, sous W7 ne me pose pas ce problème au débug ni en execution normale et que je dois tester à taton sur un poste d'utilisateur (qui d'ailleurs à les droits admin sur son poste...)

    Nous déployons ce programme par strat dans l'entreprise et le lançons au démarrage du système. Je ne sais pas si par stratégie on peut le lancer en mode admin, de préférence sans embêter l'utilisateur avec le message de confirmation.

    Si quelqu'un à une solution je lui serais reconnaissant pour l'éternité !
    Cordialement,
    Duncan Macleod !

    PS:
    le plus bizarre c'est que cela ne concerne que les répertoires et non les fichiers car si je crée le premier sous-répertoire, il copie les fichiers, mais arrivé au premier sous-sous-répertoire rebelote...
    "Essayer est le premier pas vers l'Echec !" (Homer Simpson)

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2007
    Messages
    256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 256
    Points : 290
    Points
    290
    Par défaut
    Bonjour à vous,

    C'est probablement car vous avez le contrôle de compte utilisateur (UAC) activé. Cette fonctionnalité existe que depuis Windows Vista et est activée par défaut.

    Celle-ci fait en sorte que même si vous êtes connecté en tant que administrateur, vous devez autoriser le logiciel à créer un répertoire dans les dossier sensible (du style Program Files, System32, etc).

    Pour régler le problème, vous devez lancer votre application en tant qu'administrateur en faisant click droit dessus, exécuter en tant que administrateur.

    Vous pouvez également forcer à ce que l'application démarre en tant qu'administrateur en ajoutant un manifest dans votre application

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Themacleod1980 Voir le message
    Mon programme ne me balance aucune erreur et ne crée pas le sous-répertoire !
    Normal ; voilà ce qu'il se passe :

    - tu essaies de créer un répertoire dans un répertoire où tu n'as pas le droit d'écrire (car cela nécessite les privilèges d'administrateur)
    - ça déclenche une exception, qui est interceptée par le catch
    - tu essaies d'écrire l'erreur dans un fichier à un emplacement où tu n'as pas non plus le droit d'écrire
    - ça déclenche donc une nouvelle exception, le MessageBox.Show n'est donc pas atteint

    Si l'application doit vraiment écrire dans Program Files, il faut lui ajouter un manifeste pour déclarer qu'elle doit s'exécuter en tant qu'administrateur

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2005
    Messages : 482
    Points : 625
    Points
    625
    Par défaut
    Salut, et merci pour vos réponses.

    Avant de tester avec la génération de fichier je ne faisais qu'un MessageBox et il ne s'affichait pas non plus.

    Désactiver l'UAC (si c'est possible) ne me conviendrait pas (faire ça sur un portable de Commercial reviendrait au même que faire un joli feu de joie avec nos serveurs)
    Je vais donc me pencher du coté du manifest
    "Essayer est le premier pas vers l'Echec !" (Homer Simpson)

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2005
    Messages : 482
    Points : 625
    Points
    625
    Par défaut
    Yop,
    super ça fonctionne nickel et tant pis pour le message qu'ils auront au démarrage... (ben oui, yen a qui risquent d'avoir peur et cliquer "non" s'ils voient un message ORANGE)

    Donc, pour ceux qui voudraient faire de même, la procédure c'est :
    - au niveau du PROJET : Ajouter/Nouvel élément.../Fichier manifeste d'application => cela vous crée un fichier "app.manifest"
    - ouvrir ce fichier et remplacer la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
    et le tour est joué

    Merci encore à gta126 (qui est en avance de 121 versions) et tomlev pour vos réponses rapides (et utiles)
    "Essayer est le premier pas vers l'Echec !" (Homer Simpson)

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

Discussions similaires

  1. Création de sous-répertoire
    Par alex7812 dans le forum Langage
    Réponses: 2
    Dernier message: 17/05/2010, 11h52
  2. Réponses: 2
    Dernier message: 01/11/2007, 11h07
  3. Création de sous répertoire impossible
    Par KHELOUIATI dans le forum Windows XP
    Réponses: 1
    Dernier message: 19/03/2007, 08h11
  4. [MS-DOS] Supprimer tout les sous répertoires contenu dans un
    Par Furius dans le forum Scripts/Batch
    Réponses: 7
    Dernier message: 30/11/2005, 12h24

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