subir que nube mejor ilimitado gratis google archivos almacenamiento 1tb c# windows

c# - que - ¿El mejor lugar para almacenar archivos de configuración y archivos de registro en Windows para mi programa?



mejor que dropbox (9)

Necesito almacenar archivos de registro y configuración para mi aplicación. ¿Dónde está el mejor lugar para almacenarlos?

En este momento, solo estoy usando el directorio actual, que termina poniéndolos en el directorio Archivos de programa donde vive mi programa.

Es probable que el usuario acceda a los archivos de registro con cierta regularidad, por lo que %APPDATA% parece un poco difícil de conseguir.

¿Es un directorio en %USERPROFILE%/My Documents el mejor? Debe funcionar para todas las versiones de Windows, a partir de 2000 en adelante.


La mejor respuesta depende de la naturaleza de los registros y las configuraciones. Si son para todo el programa, y ​​no necesitan sobrevivir a la desinstalación de la aplicación, entonces creo que están bien donde están. Si los registros y configuraciones son específicos del usuario, o necesitan sobrevivir a la desinstalación, entonces pertenecen a algún lugar bajo% USERPROFILE% -% APPDATA% que es el directorio base ''apropiado'' para este tipo de cosas.


No almacene archivos de configuración en la carpeta de la aplicación, Microsoft ha declarado que NO es la ubicación ideal. Windows se ha estado moviendo hacia el bloqueo de la escritura en C: / Program Files / y encontrará en Vista cualquier aplicación que intente escribir aquí, activará una advertencia de UAC.

Windows 7 les permitirá a los usuarios personalizar las ventanas emergentes de UAC que utilizan (esperan que algunos usuarios avanzados bloqueen la mayoría) y su aplicación fallará / se congelará si el usuario nunca aprueba este intento de escritura.

Si usa las variables adecuadas de perfil de usuario y aplicación, Win 2000, XP, Vista y Win7 correlacionarán los datos con la carpeta adecuada para escritura, sin ventanas emergentes de UAC.


Para la configuración de la aplicación: use System.Environment.SpecialFolder.ApplicationData: aquí se almacenan los datos de un perfil móvil, de modo que le permite a su usuario iniciar sesión y trabajar desde diferentes máquinas en el dominio.

Para archivos de registro: System.Environment.SpecialFolder.LocalApplicationData


Para ser sincero,% appdata% sigue siendo el mejor lugar para colocar sus archivos de configuración y archivos de registro, ya que sirve como un marcador de posición para almacenar los datos de su aplicación. No debería ser tan difícil acceder, simplemente escriba% appdata% en el explorador y se lo dirigirá directamente a su directorio% appdata%.


Si no está utilizando ConfigurationManager para administrar su aplicación y la configuración del usuario, debería hacerlo. El kit de herramientas de configuración en .NET Framework está muy bien pensado, y las herramientas de Visual Studio que interoperan con él también lo son.

El comportamiento predeterminado de ConfigurationManager coloca las ConfigurationManager invariante (aplicación) y modificable (usuario) en los lugares correctos: la configuración de la aplicación se encuentra en la carpeta de la aplicación y la configuración del usuario va en System.Environment.SpecialFolder.LocalApplicationData . Funciona correctamente en todas las versiones de Windows compatibles con .NET.

En cuanto a los archivos de registro, System.Environment.SpecialFolder.LocalApplicationData generalmente es el lugar donde desea colocarlos, ya que se garantiza que el usuario puede escribirlos.

Ciertamente, hay casos en que no lo haría, por ejemplo, si desea escribir archivos en una red compartida para que pueda acceder a ellos de forma remota. Existe una amplia gama de formas de implementarlo, pero la mayoría de ellos comienzan con la creación de una configuración de aplicación que contiene la ruta a la carpeta compartida. Todos ellos implican administración.

Tengo un par de quejas sobre ConfigurationManager y las herramientas de VS: es necesario que haya una mejor documentación de alto nivel que la que hay y una mejor documentación de la clase de Settings generada por VS. El mecanismo por el cual el archivo app.config convierte en el archivo de configuración de la aplicación en el directorio de compilación de destino es opaco (y el origen de una de las preguntas más frecuentes de todas: "¿qué pasó con mi cadena de conexión?"). Y si hay una forma de crear configuraciones que no tienen valores predeterminados, no las he encontrado.


Uso el almacenamiento de aislamiento para la configuración. También puede usar la carpeta Temp para almacenar información temporal como el registro.


Nota: Puede obtener la ruta a la carpeta LocalApplicationData en .NET usando la siguiente función:

string strPath=System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData);


La respuesta aceptada señala que para los archivos de registro, el siguiente es un buen lugar. System.Environment.SpecialFolder.LocalApplicationData Esto equivale a una ruta de acceso de C:/Users/[User]/AppData/Roaming que puede ver es específico del usuario. Al igual que la respuesta aceptada menciona que esta es una ubicación garantizada por el usuario y puede ser útil para ciertas situaciones

Sin embargo, en un entorno de aplicaciones web, puede ejecutar su aplicación en una cuenta de red y es posible que usted o un compañero de trabajo tengan que intentar rastrear hacia dónde exactamente van esos registros por aplicación. Personalmente, me gusta utilizar la enumeración de ubicación no específica del usuario de System.Environment.SpecialFolder.CommonApplicationData que equivale a C:/ProgramData . Sí, deberá especificar los derechos de acceso para las carpetas que cree, pero generalmente es un acuerdo de una sola vez y luego todos los registros de la aplicación pueden vivir en una ubicación feliz.

Además, mientras busca en Internet, existe un proyecto para establecer programáticamente el acceso de escritura a las carpetas que crea dentro de CommonApplicationData , Permitir escribir / modificar el acceso a CommonApplicationData .


Puede usar SHGetSpecialFolderPath:

int MAX_PATH = 255; CString m_strMyPath; SHGetSpecialFolderPath(NULL, m_strMyPath.GetBuffer(MAX_PATH), CSIDL_COMMON_APPDATA, TRUE);

Esto especificará la ''ruta especial de la carpeta'' a la que puede escribir registros de manera segura para Windows:

Para XP: C:/Documents and Settings/All Users/Application Data

Para Vista: C:/ProgramData

Consulte la página de MSDN aquí: http://msdn.microsoft.com/en-us/library/bb762204(VS.85).aspx