AppData « Local », « LocalLow » et « Roaming » prêtent souvent à confusion sous Windows. Voici un guide complet pour savoir quoi y stocker, ce qui se synchronise entre PC (profil itinérant/AD/Azure AD), et comment le niveau d’intégrité UAC influence l’emplacement utilisé.
Vue d’ensemble de la question
L’objectif est de clarifier l’usage des trois emplacements de données par utilisateur sous Windows (AppData\Local, AppData\LocalLow, AppData\Roaming) : quels types de fichiers y vont, dans quels cas ils sont synchronisés vers d’autres machines d’un même domaine, et comment les niveaux d’intégrité (Mandatory Integrity Control) limitent l’écriture dans ces dossiers.
Réponse & solutions
| Dossier | Objectif principal | Synchronisation (profil itinérant) | Niveau d’intégrité requis | Exemples de contenu |
|---|---|---|---|---|
Roaming (%APPDATA%) | Paramètres légers et profils qui doivent suivre l’utilisateur sur plusieurs PC (domaines AD ou Azure AD selon la stratégie). | Oui : copié vers le serveur de profils au logoff, rapatrié au logon (sous réserve de la configuration IT). | Medium (standard) | Modèles Office (ex. Normal.dotm), signatures Outlook (Microsoft\Signatures), paramètres d’IDE/éditeurs, fichiers .ini/.json de configuration, profils VS Code (AppData\Roaming\Code\User). |
Local (%LOCALAPPDATA%) | Données spécifiques à la machine : caches volumineux, ressources téléchargées, logs, bases locales. | Non : reste exclusivement sur le poste pour préserver performances et bande passante. | Medium (standard) / High (élevée si appli exécutée en admin) | Caches de navigateurs et d’apps (Teams, Slack, Edge/Chrome/Brave), bases SQLite, journaux (Logs), fichiers temporaires, dossiers GPUCache, données UWP Packages\<PFN>\LocalState. |
LocalLow (%USERPROFILE%\AppData\LocalLow) | Identique à Local mais réservé aux processus en faible intégrité (sandbox/protected mode). Empêche l’écriture dans Local ou Roaming pour ces processus. | Non | Low | Données isolées d’anciens modules en mode protégé (ex. Internet Explorer Protected Mode), composants sandboxés, certains lecteurs PDF en mode protégé (Adobe\Acrobat\ sous LocalLow). |
Points clés à retenir
- Profil itinérant : seul Roaming est conçu pour être copié entre machines. Local et LocalLow restent locaux pour éviter des connexions/déconnexions interminables.
- Gestion de l’espace : en cas de manque d’espace, on peut purger prudemment Local (caches,
Temp) sans perdre les réglages. Sauvegardez avant toute suppression manuelle. - Niveau d’intégrité (UAC/MIC) :
- Processus Low : écrivent dans LocalLow uniquement.
- Processus Medium (applis standard) : peuvent écrire dans Local et Roaming.
- Processus High (élevés) : n’obtiennent pas de droits supplémentaires sur les profils d’autres utilisateurs ; Local/Roaming restent par‑utilisateur.
- Pour les développeurs :
- Paramètres légers ? Utilisez
%APPDATA%\<Éditeur>\<Appli>(roaming). - Fichiers lourds ou caches ? Préférez
%LOCALAPPDATA%. - Processus sandboxé ? Récupérez
LocalAppDataLowvia l’API des Known Folders.
- Paramètres légers ? Utilisez
- Sauvegarde : une sauvegarde sérieuse du profil utilisateur inclut les trois emplacements. Pour migrer hors domaine, utilisez un outil dédié (ex. USMT) ou copiez sélectivement en connaissant les risques.
Comment Windows choisit le bon dossier ?
Le choix dépend de deux axes : portabilité et sécurité.
- Portabilité : si la donnée doit suivre l’utilisateur (réglages, profils, gabarits), utilisez Roaming. Sinon, Local est le bon endroit (caches, index locaux, éléments reconstruisibles).
- Sécurité/Intégrité : sous Mandatory Integrity Control, un processus « Low » ne peut modifier que des cibles marquées « Low ». Windows fournit LocalLow précisément pour ces scénarios. Les processus standards (Medium) utilisent Roaming et Local.
En pratique : un navigateur en mode protégé écrira ses fichiers temporaires dans LocalLow, tandis que son profil utilisateur (extensions, préférences) résidera plutôt dans Local ou Roaming suivant le design de l’éditeur.
Emplacements, variables et Known Folders
| Type | Variable | Chemin par défaut | Known Folder ID (GUID) | Commande shell: |
|---|---|---|---|---|
| Roaming | %APPDATA% | C:\Users\<User>\AppData\Roaming | {3EB685DB-65F9-4CF6-A03A-E3EF65729F3D} | shell:AppData |
| Local | %LOCALAPPDATA% | C:\Users\<User>\AppData\Local | {F1B32785-6FBA-4FCF-9D55-7B8E7F157091} | shell:Local AppData |
| LocalLow | (pas de variable dédiée) | C:\Users\<User>\AppData\LocalLow | {A520A1A4-1780-4FF6-BD18-167343C5AF16} | shell:LocalAppDataLow |
Astuce : utilisez toujours les variables (%APPDATA%, %LOCALAPPDATA%) ou l’API « Known Folders » plutôt que des chemins codés en dur ; cela fonctionne même si le profil est redirigé.
Ce qui se synchronise (ou pas) avec un profil itinérant
- Roaming Profiles (Active Directory) : à la déconnexion, Roaming est traité comme la source principale de paramètres à synchroniser vers le serveur de profils. À la connexion suivante, ces données sont téléchargées. Les performances dépendent de la taille du dossier et du réseau.
- Local et LocalLow : jamais copiés par ce mécanisme (ils restent locaux). C’est essentiel pour éviter de tirer des gigaoctets de cache sur le réseau à chaque session.
- Azure AD et Enterprise State Roaming : certaines préférences Windows et paramètres d’apps modernes peuvent « roamer » via le cloud, mais cela ne transforme pas Local en dossier synchronisé. Les données UWP disposent en parallèle de
RoamingState(quota) géré par le système. - OneDrive – Known Folder Move : redirige Documents/Bureau/Images, pas
AppData. Ne comptez pas dessus pour vos paramètres applicatifs. - VDI/FSLogix : en environnements non persistants, des conteneurs utilisateur peuvent embarquer Roaming et/ou Local selon la politique. Reportez-vous aux règles de votre organisation.
Exemples concrets (qui met quoi où ?)
| Application | Dans Roaming | Dans Local | Dans LocalLow |
|---|---|---|---|
| Microsoft Office | Modèles (Microsoft\Templates), signatures Outlook, dictionnaires perso. | Caches (par ex. Office Telemetry, Local\Microsoft\Office), fichiers temporaires. | — |
| Navigateurs Chromium | Rare : certaines préférences si l’éditeur choisit de roamer. | Profils utilisateur, cache, GPUCache (Local\<Browser>\User Data). | Peu courant aujourd’hui ; éventuels composants en mode protégé. |
| VS Code / IDE | Paramètres utilisateur (Roaming\Code\User, snippets). | Cache, workspaceStorage, extensions téléchargées. | — |
| Adobe Reader (mode protégé) | Préférences légères. | Caches locaux. | Données isolées de rendu/lock sous LocalLow\Adobe. |
Bonnes pratiques pour les développeurs
- Respectez le principe « réglages vs. données volumineuses » : tout ce qui est reconstruit (cache, index, téléchargements) doit aller dans
%LOCALAPPDATA%. Les préférences et fichiers de configuration légers vont dans%APPDATA%. - N’utilisez jamais le dossier du programme (
C:\Program Files) pour écrire des données utilisateur. Cela provoque une virtualisation (VirtualStore) ou des erreurs d’accès. - API recommandées :
- .NET :
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)(Roaming) et...LocalApplicationData(Local). - LocalLow : utilisez SHGetKnownFolderPath avec
FOLDERID_LocalAppDataLow.
- .NET :
// C# : récupérer Roaming, Local et LocalLow correctement
using System;
using System.Runtime.InteropServices;
class Folders
{
static class KnownFolders
{
public static readonly Guid FOLDERID_RoamingAppData = new Guid("3EB685DB-65F9-4CF6-A03A-E3EF65729F3D");
public static readonly Guid FOLDERID_LocalAppData = new Guid("F1B32785-6FBA-4FCF-9D55-7B8E7F157091");
public static readonly Guid FOLDERID_LocalAppDataLow = new Guid("A520A1A4-1780-4FF6-BD18-167343C5AF16");
[DllImport("shell32.dll")] static extern int SHGetKnownFolderPath(ref Guid rfid, uint dwFlags, IntPtr hToken, out IntPtr ppszPath);
public static string GetPath(Guid id){ IntPtr p; SHGetKnownFolderPath(ref id, 0, IntPtr.Zero, out p);
string path = Marshal.PtrToStringUni(p); Marshal.FreeCoTaskMem(p); return path; }
}
static void Main(){
Console.WriteLine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)); // Roaming
Console.WriteLine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)); // Local
Console.WriteLine(KnownFolders.GetPath(KnownFolders.FOLDERID_LocalAppDataLow)); // LocalLow
}
}
Bonnes pratiques IT (administration)
- Réduisez la taille de Roaming : configurez l’exclusion de sous‑dossiers volumineux via la stratégie Exclude directories in roaming profile. Évitez d’y laisser des caches.
- Folder Redirection : rediriger « AppData (Roaming) » est possible mais délicat ; testez l’impact latence/performances. Une latence élevée dégrade les applis qui lisent/écrivent souvent dans Roaming.
- Connexion lente : surveillez la taille de
AppData\Roaming. Au‑delà de quelques centaines de Mo, l’expérience utilisateur se détériore (premier chargement, logon/logoff). - Stratégies de nettoyage : utilisez Storage Sense ou des scripts supervisés pour purger Local\Temp, caches de navigateurs et artefacts reconstruisibles.
- VDI/Containers : dans FSLogix ou profils conteneurisés, décidez explicitement si Local doit être persistant (performances vs. taille du profil).
Maintenance & nettoyage : ce que l’on peut supprimer sans casse
En règle générale, ne touchez pas à AppData\Roaming sans savoir ; vous perdriez des réglages métiers. En revanche :
%LOCALAPPDATA%\Temp: supprimable quand aucune application ne l’utilise.- Dossiers
Cache,Code Cache,GPUCache,ShaderCache,Media Cache: souvent purgeables. - UWP : purger
LocalStated’une app peut la réinitialiser ; préférez les options « Réinitialiser » dans Paramètres > Applications.
Tip : effectuez la purge après un redémarrage, déconnecté d’une session RDP, pour libérer les verrous de fichiers.
Sécurité, intégrité et VirtualStore
- Integrity Levels : Untrusted < Low < Medium < High < System. Les objets marqués Low (dont
LocalLow) sont modifiables par des processus de même niveau uniquement. - Contrôler l’étiquette d’intégrité :
icacls "%USERPROFILE%\AppData\LocalLow" /getintegritylevel - VirtualStore : si un programme ancien tente d’écrire sous
Program Filessans élévation, Windows redirige vers%LOCALAPPDATA%\VirtualStore\.... C’est un indice d’appli non conforme.
Dépannage : symptômes et correctifs
- Connexion lente au domaine : traquez les sous‑dossiers géants de Roaming (extensions, caches, index). Externalisez‑les vers Local ou excluez‑les via GPO.
- Appli « perd ses réglages » en VDI : vérifiez si Local n’est pas persistant. Si l’appli stocke ses préférences dans Local, elles disparaîtront à la déconnexion.
- Erreur d’accès en mode protégé : le processus doit écrire dans LocalLow. Ajustez le chemin côté app ou les ACL si nécessaire.
- Profil corrompu : sauvegardez, créez un nouveau profil utilisateur, migrez sélectivement Roaming (config) et seulement ce qui est nécessaire depuis Local.
Scripts utiles (diagnostic et ouverture rapide)
Ouvrir les dossiers directement
start "" "%APPDATA%"
start "" "%LOCALAPPDATA%"
start "" "%USERPROFILE%\AppData\LocalLow"
Mesurer les plus gros sous‑dossiers (PowerShell ≥ 5)
$targets = @("$env:APPDATA", "$env:LOCALAPPDATA", "$env:USERPROFILE\AppData\LocalLow")
foreach ($t in $targets) {
Write-Host "Top dossiers dans $t" -ForegroundColor Cyan
Get-ChildItem -LiteralPath $t -Directory -Force |
ForEach-Object {
$size = (Get-ChildItem -LiteralPath $_.FullName -Recurse -File -Force -ErrorAction SilentlyContinue |
Measure-Object -Sum Length).Sum
[PSCustomObject]@{ Dossier = $_.FullName; TailleMB = [math]::Round(($size/1MB),2) }
} | Sort-Object TailleMB -Descending | Select-Object -First 15 | Format-Table -AutoSize
}
Checklist de décision rapide
| Cas d’usage | Où stocker ? | Pourquoi |
|---|---|---|
| Préférences utilisateur (léger) | Roaming | Suit l’utilisateur entre PC. |
| Cache volumineux, index, téléchargements | Local | Meilleures performances, pas de synchronisation réseau. |
| Processus sandbox (faible intégrité) | LocalLow | Contraintes de sécurité MIC. |
| Composants partagés par machine | ProgramData (pas AppData) | Concerne tous les utilisateurs du poste. |
Migrations & sauvegardes sans douleur
- USMT : capturez Roaming et, si nécessaire, sélectionnez des éléments de Local explicitement (profils applicatifs indispensables). Évitez d’embarquer les caches.
- Copie manuelle : fermez toutes les applis, puis copiez Roaming. Pour Local, soyez sélectif (ne copiez pas
Temp,Cache, etc.). - Sauvegarde récurrente : incluez les trois dossiers mais appliquez des filtres d’exclusion sur les caches et fichiers temporaires.
FAQ express
Q : Puis‑je supprimer tout le contenu de Local pour faire de la place ?
R : Non. Beaucoup de caches sont supprimables, mais certaines applis stockent des index nécessaires. Videz d’abord Temp et les dossiers nommés Cache ou GPUCache. Sauvegardez avant d’aller plus loin.
Q : Pourquoi mon appli écrit‑elle dans Local au lieu de Roaming ?
R : Parce que ses données sont trop lourdes ou spécifiques à la machine. Forcer leur copie sur le réseau pénaliserait la connexion/déconnexion.
Q : LocalLow n’est presque pas utilisé chez moi, est‑ce normal ?
R : Oui sur Windows 10/11 modernes. LocalLow est surtout utile aux processus « Low » hérités ou à certains modules en mode protégé.
Q : Les paramètres UWP se trouvent aussi dans AppData ?
R : Oui, dans AppData\Local\Packages\<PFN>\ : LocalState (local), RoamingState (roam selon quotas), TempState (temporaire). C’est distinct des applis Win32 classiques.
Résumé
Roaming est la « valise » de vos réglages portables, Local est l’atelier performant pour tout ce qui est reconstruisible, et LocalLow est la zone tampon pour les processus à faible intégrité. En suivant ces règles simples — réglages légers dans Roaming, données lourdes dans Local, sandbox dans LocalLow — vous obtenez un profil plus rapide, des migrations fiables et une posture de sécurité plus robuste.
Annexe : mémo complet
- Jamais de données utilisateur dans
C:\Program Files; utilisez AppData. - Privilégiez les Known Folders (API) et variables d’environnement (scripts).
- Surveillez la taille de Roaming pour éviter les profils géants.
- Documentez pour vos utilisateurs où se trouvent signatures, modèles, profils.
- Pour l’IT, gardez une liste d’exclusions GPO à jour (par éditeur/version).

