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

MFC Discussion :

Vista l'UAC et la virtualisation [FAQ]


Sujet :

MFC

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Points : 155
    Points
    155
    Par défaut Vista l'UAC et la virtualisation
    Bonjour,
    Je distribue une application depuis quelques années maintenant. Depuis que Vista est sorti j'ai pas mal de problèmes de mise à jour.
    Mon produit est en fait composé de deux applications distinctes, l'application elle_même qui tourne avec des droits utilisateur standard et l'appli mise à jour qui tourne elle avec les droits administrateur. Lorsqu'une mise à jour à lieu, l'application de mise à jour va copier un fichier DB dans le répertoire ProgramFile\MonAppli\Data. Cette copie se passe parfaitement. Par contre lorsque je relance mon appli surprise elle utilise toujours l'ancienne DB!
    En fait Vista à copié l'ancienne DB dans un repertoire VirtualStore et lorsque mon appli démarre la DB utilisée vient de ce répertoire.
    Si je démarre l'appli en mode Administrateur, alors la pas de prob. la DB utilisée est bien la DB stockée dans le répertoire Data. Je suis un peu bloqué. Comment éviter ce VirtualStore? comment aller effacer ce qui s'y trouve?(en fait comment en trouver le chemin)?
    Merci de votre aide

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    les joies de l'UAC ...
    alors si ton programme est exécuté en mode utilisateur dans un emplacement protégé comme C:\Program Files\<application>\
    l'accès est virtualité à l'emplacement:
    C:\Users\<ton_compte>\AppData\Local\VirtualStore\Program Files\<application>
    Faisant croire à l'application qu'elle écrit à l'emplacement d'origine.
    par compte si tu as élevé les droits de l'application en mode administrateur tu écriras dans l'emplacement d'origine.
    note que tu peux inclure dans le manifest la demande d'élévation des droits pour l'application:
    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
     
    xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
      <assemblyIdentity name="monapplication" 
                        version="1.0.0.0" 
                        processorArchitecture="X86" 
                       type="win32"/>
      <description>Mon Application</description> 
      <!-- Identify the app's security requirements. -->
      <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
        <security>
          <requestedPrivileges>
            <requestedExecutionLevel level="requireAdministrator" />
          </requestedPrivileges>
        </security>
      </trustInfo>
    </assembly>
    a intégrer suivant la technique décrite ici:http://cpp.developpez.com/faq/vc/?pa...#VC2005XpStyle
    une solution laisser faire la virtualisation et permettre la mise à jour dans le répertoire virtualisé...

    suite à ce post réponse pour la faq: http://www.developpez.net/forums/sho...22#post3007822

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Points : 155
    Points
    155
    Par défaut
    Mon problème est que mon appli doit rester en mode utilisateur.
    La mise à jour de la DB avec l'appli qui elle possède des droits d'administrateurs se passe bien. Le problème est que comme la Db à été copiée dans virtual store au préalable par Vista, l'appli principale qui fonctionne en mode utilisateur n'utilise jamais la nouvelle DB. Existe-t'il un moyen de retrouver le chemin du répertoire VirtualStore? Ce qui permettrait à mon appli de mise à jour d'aller faire du nettoyage, en attendant de bouger tout les accès critiques vers des endroits plus 'ouvert'.


    Autre question qu'est ce qui est virtualisé? Uniquement les accès en écriture non? J'accède à ma DB uniquement en lecture et elle à été virtualisée
    Mais il est vrai que dans le m^me répertoire j'écrit un autre fichier (une DB utilisateur) qui elle aussi est virtualisée.

    Merci

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    pour récupérer le chemin tu as la variable d'environnement :
    LOCALAPPDATA qui donne la racine C:\Users\ton_compte\AppData\Local\
    pour ta base vérifie les droits sur le fichier .

  5. #5
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    quelques questions par curiosité:
    l'installation de l'application a donc bien été virtualisée , c''est a dire installée dans virtualstore ?
    si c'est le cas pourquoi ne pas avoir forcée l'install dans le répertoire non virtualisé ?

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Points : 155
    Points
    155
    Par défaut
    Non lors de l'install tout se fait dans ProgramFile, a la fin de l'installation virtualstore n'existe pas. A la fin de l'execution du prg il y écriture d'une base user dans le folder data ou se trouve également la base principale. Si je vérifie à ce moment Vista à créé le répertoire VirtualStore dans lequel se trouve mon user.db et ma base principale. Je ne comprend pas pourquoi il virtualise ma base principale. L'ouveture de celle-ci se fait via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	CFile inpf(_DATABASE_BIN_FILE, CFile::modeRead|CFile::typeBinary);
    Donc pour moi en lecture seule,il n'y aucune raison de la virtualiser! or Vista le fait

    Par contre user.db la base utilisateur est effectivement créée par le programme dans ProgramFiles\...\data et donc la j'ai bien un souci.

  7. #7
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    a partir du moment ou c'est virtualisé vista n'a cure de savoir si le fichier est en mode lecture seule ou non.
    au sujet d'une api pour la lecture du répertoire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    TCHAR path[MAX_PATH];
    SHGetSpecialFolderPath(NULL,path,CSIDL_PROGRAM_FILES ,false);
    essaye aussi CSIDL_APPDATA

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Points : 155
    Points
    155
    Par défaut
    Merci farscape
    Je me plie aux desiderata de Microsoft. Je travaille avec les répertoires users. De plus pour contourner le problème des DB qui aurait été virtualisées j'ai changé le nom de celle-ci(nouveau fichier lors de la mise à jour) et vérifié que mon prg n'y accède jamais en ecriture.

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

Discussions similaires

  1. [D7] Vista et UAC
    Par Melodie dans le forum Langage
    Réponses: 3
    Dernier message: 16/01/2008, 18h03
  2. Vista , admin , UAC , et autres joyeusetés
    Par boulbi dans le forum EDI
    Réponses: 18
    Dernier message: 29/10/2007, 17h17
  3. utilisation de l'UAC avec Vista
    Par TiLapin dans le forum Delphi
    Réponses: 3
    Dernier message: 09/05/2007, 13h40
  4. [debutant]vista et virtualisation !
    Par ChristopheOce dans le forum Windows Vista
    Réponses: 2
    Dernier message: 03/05/2007, 13h04
  5. [VB]Base de registre, UAC et Windows Vista
    Par cd090580 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 12/04/2007, 19h38

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