2009-11-06 5 views
12

¿De qué sirven si no se pueden modificar sus valores predeterminados de todos modos? Pregunta retórica.¿Cómo puedo evitar que las configuraciones del alcance de la aplicación sean de solo lectura?

En primer lugar, ¿cuál es la mejor manera de eludir el sistema de configuración y escribir directamente en el archivo de configuración del alcance de la aplicación (problemas de seguridad en el siguiente párrafo)? XmlReader/XmlWriter?

IIRC, si una aplicación intenta escribir en su carpeta Archivos de programa, Windows Vista y 7 hacen algo de magia para evitar eso. Supongo que tengo que llamar a UAC para elevarlo y debo poner ese elegante icono de escudo en el botón Aceptar de la ventana Opciones de mi aplicación, y así sucesivamente. Enlace a un rápido cómo hacerlo?

Como alternativa, puede decirme que lo que estoy tratando de hacer es estúpido y debería almacenar mi configuración de ámbito de aplicación alterable en otro lugar completamente.

Respuesta

10

Si los cambia a la configuración de "usuario" pueden cambiarse en el código, y cuando llame a Guardar() se guardarán en un archivo user.config en la carpeta de configuración local actual de los usuarios.

Obviamente, esto significa que pueden ser diferentes para cada usuario. En general, las configuraciones globales de la aplicación que son las mismas para cada usuario no se modifican en el código porque un cambio que hace un usuario afectará a todos los demás (por lo tanto, la configuración de la aplicación es de solo lectura).

Si no desea que tengan un ámbito de usuario, eche un vistazo a la clase ConfigurationManager. Esto le permitirá leer y escribir manualmente en archivos .config. Sin embargo, recuerde que la carpeta c: \ program files \ está protegida y los usuarios normales no tendrán acceso a ella (esto dará como resultado avisos UAC o fallas en vista/win7). Considere cuidadosamente cómo lo manejará, y recuerde que cualquier cambio en un app.config afectará a todos los usuarios.

No hay ninguna ubicación en Windows a la que se les garantice a todos los usuarios acceso de escritura.

+2

¡Pero eso es exactamente lo que quiero! El usuario A modifica algo, y el usuario B no tiene que repetir esa modificación. – CannibalSmith

+9

Es extraño para mí que más personas no necesiten esta característica. Seguramente, muchas aplicaciones tienen configuraciones globales para las que el programador quiere construir una interfaz de usuario amigable. –

+1

@Ben: puede usar la clase [ConfigurationManager] (http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.aspx) si realmente desea guardar configuraciones directamente en el global. archivo exe.configObviamente, si ese archivo está en c: \ programfiles \ su usuario necesitará los permisos de administrador apropiados. Primero abra la configuración de esta manera: var config = ConfigurationManager.OpenExeConfiguration (ConfigurationUserLevel.None); luego agregue su nueva configuración de esta manera: config.AppSettings.Settings.Add ("key", "value"); (O puede crear secciones de configuración personalizadas) No olvide llamar a guardar. –

0

vistazo aquí: Best practice to save application settings in a Windows Forms Application

La clase ApplicationSettings no ahorro de apoyo ajustes realizados en el archivo app.config . Eso es mucho por el diseño , las aplicaciones que se ejecutan correctamente con una cuenta de usuario segura (creo que Vista UAC) no tienen acceso de escritura a la carpeta de instalación del programa .

Puede luchar contra el sistema con la clase ConfigurationManager. Pero la solución trivial es ir al diseñador de configuraciones y cambiar el alcance de la configuración al usuario. Si eso provoca dificultades (por ejemplo, el ajuste es relevante para cada usuario), se debe poner cuentan con sus opciones en un programa separado para que pueda pedir la solicitud de elevación privilegio. O renuncie al usando una configuración.

Cuestiones relacionadas