[Plateformes] Où enregistrer les préférences d'une application sous Windows ?

Le côté programmation du développement d'un jeu vidéo.

Où enregistrer les préférences d'une application sous Windows ?

Messagepar Keph » 31 Mai 2008, 22:11

Bonjour à tous.

Je développe toujours mon petit jeu (OpenAlchemist), lentement mais sûrement. Je travaille principalement sous Linux, mais je viens de réaliser le portage vers Windows.

Mon jeu sauvegarde ses préférences (qui peuvent changer à chaque éxecution) dans un fichier INI que je place, sous Linux, dans le répertoire de l'utilisateur (/home/user/.openalchemist/preferences.ini). Cest une façon de travailler habituelle sous Unix, qui ne pose pas de problème.

Sous Windows, j'ai placé ce fichier dans le répertoire de l'application. Mais ceci pose un problème. Si j'installe le jeu dans le répertoire "Program Files", et que je l'execute avec un utilisateur standard (c'est à dire sans droit d'administration), le programme n'a pas les droits d'accès pour modifier son fichier de préférences !

Autre soucis : avec cette solution, tous les utilisateurs partagent les même préférences, ce qui n'est peut-être pas de leur goût.

Quelle solution envisager ?
* Placer le fichier INI dans le répertoire Mes Documents de chaque utilisateur ? Ceux-ci vont peut-être se plaindre de la polution engendrée (on n'est pas sous unix où les fichiers de préférences sont cachés).
* Utiliser la base de registre ? C'est hors de question. Je développe une application portable et je ne veux pas me prendre le choux à développer tout un pan de programme pour utiliser l'API windows.
* Utiliser une bibliothèque portable qui se charge de stocker les préférences comme il faut selon chaque OS ? Ceci a le même inconvénient que la base de registre, il faut que je programme tout un truc, et j'aime pas suffisament windows pour ca :p

Bref, avez-vous une solution simple à me proposer ?

Merci d'avance.

Keph
Avatar de l’utilisateur
Keph
Hello World, I'm new !
 
Messages: 214
Inscription: 26 Avr 2005, 22:17
Localisation: Angers

Messagepar Atréides » 31 Mai 2008, 22:15

Mettre directement dans "Mes Documents" est fait par pas mal de jeux commerciaux.
Je ne peux pas t'en dire plus : je n'utilise heureusement pas vista, et j'ai les droits d'administrateur.
Souvent présent sur #gcn, irc.langochat.net
Site web : seuret . com (programmation, biostatistiques, CP Explo 2/1)
Avatar de l’utilisateur
Atréides
 
Messages: 1349
Inscription: 13 Mar 2005, 13:12
Localisation: Suisse

Messagepar Keph » 31 Mai 2008, 22:20

Je ne pensais pas avoir une réponse aussi rapidement, merci !

Les jeux commerciaux font vraiment comme ca ? Je ne savais pas, je n'ai aucun jeu commercial récent sur mon PC !

Tu as bien raison de ne pas utiliser Vista, c'est vraiment l'horreur ce truc.

EDIT :
Je viens d'avoir une idée. En dehors du dossier "Mes Documents", les utilisateurs n'ont pas un répertoire "Application Data" ou quelque chose de ce genre là ?

Je vais me renseigner là dessus...
Avatar de l’utilisateur
Keph
Hello World, I'm new !
 
Messages: 214
Inscription: 26 Avr 2005, 22:17
Localisation: Angers

Messagepar Mokona » 31 Mai 2008, 22:46

Oui, sur les Windows multi-utilisateurs (depuis NT ? Pas sûr... mais peut-être), il existe des données locales à l'utilisateur courant sur le disque (ailleurs que dans la base de registres), un peu l'équivalent du $HOME d'Unix. Il a très longtemps été ignoré par les applications (peut-être pour garder une compatibilité avec 95/98) mais est de plus en plus utilisé.

Et cela semble être le bon endroit pour mettre ton .ini

Firefox est un exemple d'application qui met ses données dans Application Data
Mokona
Hello World, I'm new !
 
Messages: 1686
Inscription: 13 Mar 2005, 13:00

Messagepar Keph » 31 Mai 2008, 23:42

Donc il faut que je regarde si le Windows courant est un 9x ou un NT. Si c'est un 9x, je met le fichier dans le répertoire de l'application car il n'y a pas de gestion des droits (Fat32), et si c'est un NT, je le place dans Application Data (comme firefox).

Bon, bas ya plus qu'à !
Avatar de l’utilisateur
Keph
Hello World, I'm new !
 
Messages: 214
Inscription: 26 Avr 2005, 22:17
Localisation: Angers

Messagepar listorien » 02 Juin 2008, 12:14

Avec Vista en effet on a plus le droit d'écrire n'importe où, comme sous linux.

Perso en Dotnet, j'utilise la fonction System.Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) qui me renvoie le chemin complet vers un dossier correspondant à l'utilisateur actuellement connecté et ça fonctionne très bien.
La fonction est dispo aussi sous Mac & Linux via Mono.
Avatar de l’utilisateur
listorien
Hello World, I'm new !
 
Messages: 1206
Inscription: 17 Juin 2005, 14:04
Localisation: Le Pecq

Messagepar Keph » 04 Juin 2008, 21:00

Merci. Connais-tu l'équivalent de cette fonction pour C++ ?
Avatar de l’utilisateur
Keph
Hello World, I'm new !
 
Messages: 214
Inscription: 26 Avr 2005, 22:17
Localisation: Angers

Messagepar Keph » 01 Aoû 2008, 23:32

Pour résoudre le problème, j'utilise la ligne suivante :

Code: Tout sélectionner
std::string path = ((std::string)getenv("APPDATA")) + "\\OpenAlchemist";


Ceci permet d'écrire dans le répertoire Applications Data. Je n'ai pas essayé sur les Windows 9x.

Ceci est du pur C++, sans .NET.
Avatar de l’utilisateur
Keph
Hello World, I'm new !
 
Messages: 214
Inscription: 26 Avr 2005, 22:17
Localisation: Angers


Retourner vers Programmation

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 15 invités

cron