Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

CoqBlog

.NET is good :-)
{ Blog de coq }

Actualités

Enregistrement de paramètres, sauvegardes etc en WinForm...

Par pitié, chers amis développeurs WinForm (et aussi développeurs Windows en général), arrêtez d'utiliser le répertoire courant de l'application comme répertoire de base pour vos enregistrement !

C'est dangereux et en environnement "standard" vous avez énormement de chances d'échec.
Par environnement "standard" j'entend que l'application est lancée depuis un compte ne possédant pas les pouvoirs administratifs.

Je viens une énième fois de me retrouver confronté à un des problèmes causé par ce comportement.
Soit 2 jeux effectuant leurs sauvegardes de parties dans le répertoire d'installation.
Installation effectuée sous le compte administratif.
Jeu lancé sous un compte "normal", c'est à dire limité.
Tentative de sauvegarde : échec (silencieux dans le cas de ce jeu, donc perte de données...)
Pourquoi ?
Tout simplement car par défaut les utilisateurs limités n'ont pas les droits suffisant en écriture dans le répertoire Program Files et ses sous-répertoires.
Donc en lancant le jeu sous un compte limité, les sauvegardes ne peuvent pas s'effectuer.

Bon, vous me direz la solution est simple : il suffit de marquer dans le manuel d'utilisation qu'il faut accorder les droits suffisants à l'utilisateur sur le répertoire de sauvegarde.
Ce qui va entrainer une réflexion de l'utilsateur et la conclusion suivante : "Pour être tranquille, je vais le faire sur Program Files directement." (Ouch !)
Ou encore pire : "Je vais mettre Contrôle total pour Tout le monde sur Program Files." (AAARG !)
En plus, dans ce cas, n'importe qui pourrait lire les données des autres utilisateurs...
Pour des sauvegardes de jeu ce n'est pas forcément génant (quoique la frustration de la personne qui se fait effacer ses sauvegardes par un autre joueur peut être grande...), mais imaginez pour des données un peu plus personnelles pour lesquelles vous risquez d'avoir le même réflexe...

Pour être complet, on peut aussi citer la """solution""" du lancement de l'application via runas ou de la demande de compte administrateur pour faire de l'impersonification dans l'application. (Ouch ! + AAARG !).
Un peu lourd à mettre en oeuvre pour une simple écriture de fichier, non ?
Sans parler des risques au niveau de l'execution de code potentiellement dangereux avec des privilèges élevés...

 

Je me permet donc de vous rappeler l'existence de répertoires propres à l'utilisateur et sur lequel vous pouvez être sûr d'avoir les droits suffisants.
Et l'API Win nous fournit justement de quoi récupérer leurs chemins d'accès : SHGetFolderPath

En .Net nous utiliserons pour celà directement la méthode Environment.GetFolderPath associée à l'énumération Environment.SpecialFolder.

    • Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) vous permettra de récupérer le chemin d'accès au répertoire de base de l'utilisateur (données itinérantes).
      => ex : C:\Documents and Settings\\Application Data
    • Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) vous permettra de récupérer le chemin d'accès au répertoire de base de l'utilisateur (données locales).
      => ex : C:\Documents and Settings\\Local Settings\Application Data

etc...

Si vous voulez visualiser rapidement les chemins associés au différentes valeurs de SpecialFolder, vous pouvez vous servir de ce petit utilitaire de Kenny Kerr :
Special Folders Browser
Il vous permettra aussi d'obtenir en 2 clics la ligne de code pour récupérer la valeur, donc plus d'excuses ;-)

 

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: dimanche 26 février 2006 20:42 par coq
Classé sous : , ,

Commentaires

Koinkoin a dit :

C'est à lui qu'il faudrait le dire :) :
http://blogs.developpeur.org/pc152/archive/2006/02/26/17764.aspx

^_^
# février 27, 2006 13:34

Keikun59 a dit :

Entièrement d'accord :)

Top !!
# février 28, 2006 09:41

sebmafate a dit :

elle est ou l'époque où l'on mettait tous nos .ini dans c:\windows :)
Windows 3.1 me manque :p
# mars 1, 2006 06:22

coq a dit :

T'inquiète, il parait que ça se soigne :p
# mars 1, 2006 22:30

TrackBack a dit :

# juin 13, 2006 11:55
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01