This is a follow on the below TomTom HOME complaint: Know where your application should store its data.
I know this can be tough, especially for applications that were developed before Windows Vista came around: that’s when CSIDL were introduced. But still: Windows XP already had %APPDATA% (the environment variable equivalent to CSIDL_APPDATA, it pointed to %USERPROFILE%\\Application Data)
Applications should store data under either of below locations. Values are KNOWNFOLDERID constants with CSIDL constants in parenthesis where available. Some have .NET equivalents in the System.Environment.SpecialFolder enumeration:
FOLDERID_LocalAppData(CSIDL_LOCAL_APPDATA)
The file system directory that serves as a data repository for local (nonroaming) applications.
FOLDERID_LocalAppDataLow(n/a)
The file system directory that serves as a data repository for local (nonroaming) applications that run under “low integrity” (like in a web browser).
FOLDERID_RoamingAppData(CSIDL_APPDATA)
The file system directory that serves as a common repository for application-specific data.
Do not use FOLDERID_Documents (CSIDL_MYDOCUMENTS) as this is specific to user documents, not application data.
The virtual folder that represents the
My Documentsdesktop item. This value is equivalent toCSIDL_PERSONAL.
Basically use FOLDERID_LocalAppData for data that is machine specific and FOLDERID_RoamingAppData for data that should travel to other machines when the user logs on to them.
Be very careful how much you store as potentially roamed data as these can go over slow networks (both low bandwidth and low latency).





