none
Cambiar los valores de App.config durante la ejecución del programa

    Pregunta

  • Hola:

    Estoy desarrollando un programa del cual necessito guardar algunos valores. Leí por internet que se pueden guardar en un archivo llamado App.config.

    He añadido el fichero App.config a la solución como nuevo elemento de tipo configuracion de aplicaciones. He añadido manualmente algunos campos y me ha quedado así:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <system.diagnostics>
            <sources>
                <!-- En esta sección se define la configuración del registro para My.Application.Log -->
                <source name="DefaultSource" switchName="DefaultSwitch">
                    <listeners>
                        <add name="FileLog"/>
                        <!-- Quite los comentarios de la sección posterior para escribir en el registro de eventos de la aplicación -->
                        <!--<add name="EventLog"/>-->
                    </listeners>
                </source>
            </sources>
            <switches>
                <add name="DefaultSwitch" value="Information" />
            </switches>
            <sharedListeners>
                <add name="FileLog"
                     type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
                     initializeData="FileLogWriter"/>
                <!-- Quite los comentarios de la sección posterior y reemplace APPLICATION_NAME con el nombre de su aplicación para escribir en el registro de eventos de la aplicación -->
                <!--<add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="APPLICATION_NAME"/> -->
            </sharedListeners>
        </system.diagnostics>

      <appSettings>
        <add key="fitxer_config" value="Bicicletes.mp3"/>
        <add key="volum" value="50"/>
        <add key="inici" value="8"/>
        <add key="duracio" value="13"/>
        <add key="horari1" value=""/>
        <add key="horari2" value=""/>
        <add key="horari3" value=""/>
        <add key="horari4" value=""/>
        <add key="horari5" value=""/>
        <add key="horari6" value=""/>
        <add key="horari7" value=""/>
        <add key="horari8" value=""/>
        <add key="horari9" value=""/>
        <add key="horari10" value=""/>
        <add key="horari11" value=""/>
        <add key="horari12" value=""/>
        <add key="horari13" value=""/>
        <add key="horari14" value=""/>
        <add key="horari15" value=""/>
        <add key="horari16" value=""/>
      </appSettings>
    </configuration>

    Durante la ejecución del programa cambio los valores de App.config mediante el siguiente código. Sucede que los valores en el ficjhero no quedan grabados. He mirado en el fichero TimbreAules.exe.config del directorio Debug pero tampoco quedan grabados. En cambio en el programa todo funciona como si quedasen grabados. Alguien sabria decirme que puede passar? Muchas gracias.

       Try
                Dim configFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
                Dim settings = configFile.AppSettings.Settings
                If IsNothing(settings(key)) Then
                    settings.Add(key, value)
                Else

                    settings.Remove(key)
                    settings.Add(key, value)
                End If

                configFile.Save(ConfigurationSaveMode.Modified, True)
                ConfigurationManager.RefreshSection("appSettings")
                MsgBox(configFile.AppSettings.Settings(key).Value)
                Return 1
            Catch e As ConfigurationErrorsException
                MsgBox("Error writing app settings")
                Return -1
            End Try

    miércoles, 3 de mayo de 2017 14:16

Respuestas

  • Ojo con lo de cambiar el web.config en tiempo de ejecución. Una vez que pongas tu aplicación en producción, lo normal es que se despliegue en una subcarpeta por debajo de "c:\Archivos de Programa", y por lo tanto, el .exe.config quedará también en esa carpeta, junto al ejecutable. Pero esa carpeta es de solo-lecura para los usuarios comunes, por lo que solo funcionará lo de modificar el .config si el programa lo ejecutas como administrador.

    Para evitar ese problema, se usan los Properties.Settings, que verás en una pestaña separada dentro del proyecto si has usado la plantilla predeterminada para una aplicación de escritorio. Las propiedades que definas en el Properties.Settings salvan sus valores predeterminados en el app.config. Pero si luego cambias algún valor en tiempo de ejecución, las diferencias se salvan en un fichero en la carpeta AppData del usuario, que sí que es escribible por cada usuario.

    miércoles, 3 de mayo de 2017 16:00

Todas las respuestas

  • Ojo con lo de cambiar el web.config en tiempo de ejecución. Una vez que pongas tu aplicación en producción, lo normal es que se despliegue en una subcarpeta por debajo de "c:\Archivos de Programa", y por lo tanto, el .exe.config quedará también en esa carpeta, junto al ejecutable. Pero esa carpeta es de solo-lecura para los usuarios comunes, por lo que solo funcionará lo de modificar el .config si el programa lo ejecutas como administrador.

    Para evitar ese problema, se usan los Properties.Settings, que verás en una pestaña separada dentro del proyecto si has usado la plantilla predeterminada para una aplicación de escritorio. Las propiedades que definas en el Properties.Settings salvan sus valores predeterminados en el app.config. Pero si luego cambias algún valor en tiempo de ejecución, las diferencias se salvan en un fichero en la carpeta AppData del usuario, que sí que es escribible por cada usuario.

    miércoles, 3 de mayo de 2017 16:00
  • Muy interesante lo que dices. Voy a documentarme de como funcionan las properties.settings y lo pruebo.

    Muchas gracias Alberto.

    miércoles, 3 de mayo de 2017 18:44