2012-09-04 16 views
5

Tengo el siguiente problema al tratar de usar una sección de configuración personalizada en mi app.config. Yo uso una sección de configuración personalizada para realizar un seguimiento de una selección de carpetas que quiero hacer copia de seguridad con mi programa de este modo:Guardar los resultados de la sección de configuración personalizada en System.UnauthorizedAccessException

<CustomConfigSection> 
    <BackupLocations> 
     <clear /> 
     <add path="C:\Users\Marcel\Documents\" /> 
    </BackupLocations> 
</CustomConfigSection> 

Ahora, cada vez que guarde el archivo de configuración consigo esta excepción:

System.Configuration.ConfigurationErrorsException: Se produjo un error cargando un archivo de configuración: acceso a la ruta C: \ Archivos de programa (x86) \ Backup Solutions \ uqhuxi1j.tmp denegado. (C: \ Archivos de programa (x86) \ Backup Soluciones \ BS.exe.Config) ---> System.UnauthorizedAccessException

El código que utilizo es:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
CustomConfigSection section = (CustomConfigSection)config.GetSection("CustomConfigSection"); 

section.BackupLocations.Add(element); 

section.SectionInformation.ForceSave = true; 
config.Save(ConfigurationSaveMode.Full); 

Estos trabajos bien cuando inicias sesión como administrador y solo ocurre cuando hay varias cuentas configuradas en una PC, entonces esto significa que es un problema de UAC/permisos. Como usuario normal, no tengo los permisos de escritura adecuados para esa carpeta.

Ahora mi pregunta (s):

¿Cómo es que la configuración de usuario se guardan en la sección de configuración personalizada AppData y está tratando de ahorrar en el ApplicationFolder/exe.config? ¿Cómo puedo hacer que mi sección personalizada también se guarde en el archivo de configuración de AppData?

Necesito poder guardar mis datos para cada usuario, independientemente de los permisos. Entonces, ¿puedo lograr esto usando una sección de configuración personalizada o necesito un enfoque diferente? Preferiblemente, me gustaría guardar mi sección personalizada en el archivo de configuración de AppData también. No quiero usar trucos en mi Instalador para ajustar los permisos a la carpeta de mi aplicación para permitir que escriba. ¡Sobre todo no quiero requerir permisos de administrador al iniciar mi programa!

Gracias por sus respuestas, muy apreciadas.

Respuesta

0

Después de una buena noche de sueño, parezco haber tropezado conmigo mismo con la respuesta.

La configuración se guarda en el Directorio de datos de aplicación para la versión y datos específicos del usuario. Lo que estaba haciendo era abrir directamente el archivo exe.config y no hacer nada con respecto a la configuración del usuario, ni mucho menos escribir en el archivo de configuración de AppData para la versión actual de mi programa. Cuando me di cuenta de esto, supe qué buscar en google.

He encontrado estos artículos:

Windows Forms - Creating and Persisting Custom User Settings in C#

Windows Forms - Creating and Persisting Custom User Settings in C# - Part 2

La experimentación y la descarga de los archivos de origen de ese proyecto me ayudó mucho y me proporcionó exactamente lo que necesito. Así que, básicamente, estaba implementando las funciones incorrectas para lo que quería hacer.

Gracias a los lectores y gracias al Sr. Ritchie por haberme enviado en la dirección correcta.

0

La configuración del usuario se guarda en AppData porque los usuarios tienen permiso para escribir allí. Los usuarios no tienen permiso para escribir en Archivos de programa. Use la configuración del alcance del usuario para guardarlos en AppData. Vea http://msdn.microsoft.com/en-us/library/a65txexh(v=vs.100).aspx para más detalles.

Cuestiones relacionadas