2009-10-12 18 views

Respuesta

26

ApplicationData: todo lo que su aplicación necesita como datos "por usuario" y no pertenece a otras categorías. Los archivos de configuración estándar irían aquí.

CommonApplicationData: Todo lo que no es información "por usuario".

LocalApplicationData: Datos que son por usuario y no itinerantes. Por ejemplo, todo lo que desee ASEGURAR que solo esté almacenado en esta máquina (como códigos de activación de la máquina, a menudo también datos de caché/temporales). Los archivos temporales estándar irían aquí.

MyDocuments: Datos de usuario que el usuario identificaría realmente como "documentos únicos reconocibles".

Si no le importa el nombre de archivo, también puede usar una API de tempfile para generar un archivo temporal en el directorio temp. NO deberías hacer esto manualmente. En, por ejemplo, .NET puede usar Path.GetTempFileName() para ese fin.

+1

+1 para obtener una respuesta útil, especialmente con respecto a la distinción "por usuario". Pero no tengo claro cuáles son los nombres en negrita ... ¿nombres literales de carpetas? no ... ¿bibliotecas? algún tipo de abstracción que .NET utiliza para referirse a las carpetas? – LarsH

+2

@LarsH: "Pero no tengo claro cuáles son los nombres en negrita ..." Son constantes de enumeración de .Net Environment.SpecialFolder: intente hacer clic en ellas. :-) – RenniePet

+0

@RenniePet: kthx. :-) – LarsH

1

AppData debe ser configuración automática y los perfiles, los documentos solo deben ser archivos guardados por el usuario. Me gustaría poner todo lo que podría ser útil en múltiples sistemas en AppData/Roaming, y cualquier otra cosa (máquina específica) en AppData/Local o LocalLow. Para archivos temporales, use el directorio Temp.

+0

Estoy de acuerdo. Odio cuando las aplicaciones que instalo hacen directorios y/o almacenan archivos en (Mis) Documentos. –

+0

¿Puede traducir su respuesta en términos de la enumeración de Environment.SpecialFolder? Environment.GetFolderPath (Environment.SpecialFolder.xxx) – Nestor

1

En general, las mejores prácticas de Windows son seguir las variables de entorno apropiadas. Los datos de configuración que desea conservar deberían ir en% APPDATA%, y los archivos temporales deberían ir en% TEMP%.

Esto tiene la ventaja de no romper horriblemente si Windows cambia las cosas, y respetando las configuraciones extrañas que puedan tener las personas.

Además, estoy de acuerdo con otras respuestas en que los "Documentos" solo deben ser para datos creados por el usuario y solo después de un aviso.

10

De Windows 7 Client Software Logo Program:

  • Las aplicaciones deben ser instalados en la carpeta Archivos de programa por defecto. Los datos del usuario o de la aplicación nunca se deben almacenar en esta ubicación debido a los permisos de seguridad % ProgramFiles% para aplicaciones nativas de 32 y 64 bits, y% ProgramFiles (x86)% para aplicaciones de 32 bits que se ejecutan en x64 respectivamente sobrescribiendo cada datos y configuraciones de otros.
  • Todos los datos de las aplicaciones que deben ser compartidos entre los usuarios en el equipo deben ser almacenados dentro ProgramData
  • Todos los datos de aplicación exclusiva a un usuario específico y no para ser compartidos con otros usuarios de la computadora deben ser almacenados en los usuarios \\ AppData
  • Nunca escriba directamente en el directorio "Windows" ni en los subdirectorios.Utilice los métodos correctos para instalar archivos, como fuentes o controladores
  • En las instalaciones "por máquina", los datos del usuario se deben escribir en la primera ejecución y no durante la instalación. Esto se debe a que no hay una ubicación de usuario correcta para almacenar datos en el momento de la instalación. Los intentos de una aplicación de modificar los comportamientos de asociación predeterminados a nivel de máquina después de la instalación no tendrán éxito. En cambio, los valores predeterminados se deben reclamar por nivel de usuario, lo que evita que varios usuarios sobrescriban los valores predeterminados de los demás.
0

Además, debe usar SHGetFolderPath o SHGetKnownFolderPath (en Vista +) para obtener las rutas. Esto le proporcionará la ubicación correcta en el sistema actual, independientemente de la versión o el idioma de la instalación actual. Nunca codifique con dificultad ninguna ruta que esté utilizando.

Cuestiones relacionadas