Onde Armazenar as Informações
Alguns aplicativos armazenam suas configurações em áreas globais do registro (HKLM\Software) ao invés de armazenar perfil do usuário (HKCU\Software), assim como, gravam configurações e logs nas suas próprias pastas, ou nas pastas de sistema (Windows, System32, Arquivos de Programas).
A tabela a seguir exibe a diferença da localização dos diretórios no Windows XP e no Windows 7:
Diretório |
Windows XP |
Windows 7 |
Usuário |
%SystemDrive%\Documents and Settings\<user> |
%SystemDrive%\users\<user> |
Área de Trabalho |
%UserProfile%\Desktop |
%UserProfile%\Desktop |
Documentos |
%UserProfile%\My Documents |
%UserProfile%\Documents |
Todos Usuários |
%SystemDrive%\Documents and Settings\All Users
|
%SystemDrive%\Users\Public or ... %SystemDrive%\ProgramData
|
Uma boa prática recomendada pela Microsoft é instalar apenas os arquivos da aplicação no diretório Arquivos de Programas. Os dados específicos dos usuários devem ser armazenados no diretório %AppData% e as configurações dos usuários no perfil de registro do usuário (HKEY_CURRENT_USER\Software). Sempre que possível utilize as variáveis de ambiente ao invés de deixar hard code os caminhos utilizados pela aplicação.
A tabela a seguir serve como guia para orientar onde salvar as informações:
Requisitos |
Informações Compartilhadas |
Informações do Usuário |
Visível no Explorer |
%PUBLIC% (%SystemDrive%\Users\Public) |
%USERPROFILE%\Documents |
Oculto no Explorer e armazenado apenas localmente |
%ALLUSERSPROFILE% (%ProgramData%, %SystemDrive%\ProgramData) |
%LOCALAPPDATA% (%USERPROFILE%\AppData\Local) |
Oculto no Explorer e que faz parte do perfil do usuário |
n/a |
%APPDATA% (%USERPROFILE%\AppData\Roaming) |
Para código não gerenciado (C,C++) utilize as APIs:
- ShGetFolderPath function (CLSID_...)
- SHGetKnownFolderPath(FOLDERID_...)
Para código gerenciado (C#, VB.NET) utilize as APIs:
- System.Environment.GetFolderPath
- Microsoft.VisualBasic.FileIO.SpecialDirectories
- My.Computer.FileSystem.SpecialDirectories