Précédent   Forum des professionnels en informatique > Général Développement > Programmation système > Windows
Windows Forum d'entraide sur la programmation Windows. Tutoriel API Windows
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 17/01/2012, 16h33   #1
Membre habitué
 
Inscription : juin 2002
Messages : 256
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 256
Points : 108
Points : 108
Par défaut Dossier AppData inaccessible ?

Bonjour,

J'ai qques soucis liés aux répertoires de stockages de données utilisateur que je n'arrive pas à résoudre.

Je développe sous XP ou Seven connecté en admin et sans UAC, ensuite je teste mes softs sur des comptes user (limités au max, avec UAC). Et là je n'arrive pas à identifier un dossier "universel" pour stocker des fichiers tels que les paramètres, une base de données, etc.

Prenons l'exemple d'un fichier paramètres (xml) : je ne veux pas un fichier/utilisateur mais un fichier commun à tous. Donc de même pour le dossier, il doit être accessible à tous. Si j'en crois le MSDN il me faut ainsi utiliser CSIDL_COMMON_APPDATA, or connecté en simple user je ne peux accéder au dossier concerné (dans ce cas sous XP : C:\Documents and Settings\All Users\Application Data\{mon appli}) ni à partir de mon logiciel (tentative d'écriture d'un simple fichier texte), ni même à partir de l'explorateur Windows (accès refusé).

J'envisage cette solution (Delphi) (cf tout en bas) mais si je pouvais éviter le bidouillage je préfèrerais.

Alors je viens vers vous pour savoir :
> quel(s) dossier(s) utilisez-vous pour stocker des paramètres ?
> et une base de données ? (le tout en local)

Par ailleurs j'ai découvert qu'il existe soit disant une virtualisation :
Citation:
Lorsque cette application écrit dans un emplacement système (par exemple, le dossier %programfiles%), Windows Vista redirige les opérations d'écriture et de lecture vers un emplacement utilisateur spécifique du dossier du profil utilisateur (%localappdata%\VirtualStore).
Je ne sais pas si c'est spécifique à Vista mais sous 7 je n'ai rien (enfin le dossier existe mais rien en rapport avec mes applis).

Merci pour votre aide
paradise est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 16h58   #2
Membre habitué
 
Inscription : juin 2002
Messages : 256
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 256
Points : 108
Points : 108
Bon entre temps j'ai trouvé ceci (bien caché !!) :
Citation:
If an application requires normal Users to have write access to an application specific subdirectory of CSIDL_COMMON_APPDATA, then the application must explicitly modify the security on that sub-directory during application setup. The modified security must be documented in the Vendor Questionnaire.
C'est à dire que durant le setup on autorise son appli à accéder à un sous-dossier de CSIDL_COMMON_APPDATA, et que ce droit sera enregistré ?
Un peu usine à gaz... et je ne demande même pas ce qu'est ce "Vendor Questionnaire"

Enfin si qqun sait déjà faire ça avec InnoSetup je suis preneur.
paradise est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 15h28   #3
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
Question bête : Si il n'y a pas de modif propre au user, pourquoi ne pas profite de ton dossier d'installe genre :


> quel(s) dossier(s) utilisez-vous pour stocker des paramètres ?
> et une base de données ? (le tout en local)

propre à l'utilisateur : C:\Documents and Settings\User1\Application Data\mon appli

commun à tous les utilisateurs : perso j'opterais simplement pour :
c:\program files\mon appli\config\
c:\program files\mon appli\bdd\

pour info le All Users n'est accecible en ecriture que pour les admins
c'est trop impactant pour confier cela aux users.
__________________
un ptit jeu sympa
gretch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 11h09   #4
Membre habitué
 
Inscription : juin 2002
Messages : 256
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 256
Points : 108
Points : 108
Merci de ta réponse.
Si justement il y a des modifs user : le fichier de paramètres en particulier (lu mais surtout écrit). De même la connexion à la BD (Firebird) en lecture seule est impossible (I/O errors).

De plus Program Files est absolument à éviter, c'est écrit aux 4 coins du MSDN

Bon je procède comme décrit précedemment, avec Inno Setup je rajoute pour chaque ligne (= fichier) concernée de la section [Files] :
Code :
Permissions: everyone-modify;
J'utilise le dossier CSIDL_COMMON_APPDATA qui correspond à :

Code :
1
2
3
XP : C:\Documents and Settings\All Users\Application Data\...

Vista & Seven : C:\ProgramData\...
paradise est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2012, 19h40   #5
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 21 481
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France

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

Informations forums :
Inscription : septembre 2005
Messages : 21 481
Points : 28 760
Points : 28 760
Envoyer un message via MSN à Médinoc
Attention, il faut bien mettre ça dans un sous-dossier de CSIDL_COMMON_APPDATA, sinon tu donnes les droits sur tout le dossier à tous, et ce n'est pas le but de la manœuvre.
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone.
-- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Médinoc 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 21h41.


 
 
 
 
Partenaires

Hébergement Web