Preguntas generales de configuracion de Aplicacion

Iniciado por Skeletron, 19 Noviembre 2009, 23:56 PM

0 Miembros y 2 Visitantes están viendo este tema.

Skeletron

Hola gente, les comento que hasta hace unos dias, utilizaba variables blogables en mi sistema de la siguiente manera:
Ingresaba a las propiedades del proyecto, entraba a CONFIGURACIONES, agregaba supongamos un Boolean llamado: "Ejemplo" marcado con el valor TRUE.

Supongamos que la aplicacion tiene un boton que cambia el valor actual, al opuesto, o sea, si es TRUE, pasa a FALSE, y si es FALSE, pase a TRUE. Y en un LABEL, se mostraba el valor actual de la variable "EJEMPLO", el cual (el label) se cargaba con el valor al iniciar el software, y al modificarse precionando el boton, tambien se modificaba en el label.

El codigo para modificar, era:
My.Settings.Ejemplo = XXXX
Al terminar la modificacion, hacía un:
My.settings.save()


Supongamos que cambiaba el valor 1 vez, y quedaba en false.
SUpongamos luego, que cierro la aplicacion, y la desisntalo.
En la carpeta de instalacion, no quedaba nada, es mas, al instalar la aplicacion con un isntalador, al desinstalar, no quedaba ni la carpeta de instalacion.
Supongamos ahora, que vuelvo a instalar la aplicacion.
Al iniciarce, el valor de "Ejemplo", era FALSE. (y tenía que ser TRUE).
Nunca entendí porque me daba ese problema... Como si el valor de la variable Ejemplo, quedase guardado en algun lugar del PC, y que al desinstalar la aplicacion, no se borrara el valor, y que tampoco se sobreescriba al reinstalar la aplicacion.

(me gustaria que me den alguna ayuda de PORQUE PASA ESO?)

Pero continuo con la pregunta:
Viendo este problema, me dijeron que utilice el System.configuration.configurationmanager para crear variables globales y eso. OK
En mi app.confiig, tengo los siguientes datos:
<?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>
</configuration>

Me gustaria que me digan si algunos de esos datos estan de mas, porque yo nunca los escribi, pero bueno.. continuo:
Agregé las siguientes lineas, como me lo dijeron que haga:
  <appSettings>
    <add key="Nuevo" value="True" />
    <add key="Actualizacion" value="" />
    <add key="Database" value="" />
  </appSettings>

Y el archivo app.config, me quedó así al final:

<?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="Nuevo" value="True" />
    <add key="Actualizacion" value="" />
    <add key="Database" value="" />
  </appSettings>
</configuration>


Ahora bien, supongamos que tengo que leer los datos de la variable: "Nuevo"
tengo que hacer ésto:
MsgBox(System.ConfigurationConfigurationManager.AppSettings.Get("Nuevo"))
o
MsgBox(System.ConfigurationConfigurationManager.AppSettings("Nuevo"))
??????
Y para modificar el valor? que tengo que hacer?

Muchas gracias por sus ayudas!!

raul338

<appSettings>
    <add key="Nuevo" value="True" />
    <add key="Actualizacion" value="" />
    <add key="Database" value="" />
  </appSettings>


Porque los agregaste? el visual studio deberia haberlos agregados automaticamente en la edicion de las variables globales. Sabes que, dejate de hacer lio, y hacete una clase para guardarte tus propiedades (algo al estilo fichero INI o inventa un formato). Es raro esto de las variables globales, pero no creo que sea obligatorio usarlas, ademas sos programador, cuando no existia este visual studio se tenia que hacer asi xD xD

Skeletron

Pero, ya lo tengo...
Mira..

Ahora tengo un problema al refrescar solamente...

Ésto hago en el metodo principal:

MsgBox(ConfigurationManager.AppSettings.Get("Nuevo"))
       GuardarConfig("Nuevo", "456345634653465")  <<< Aca llamo al metodo que describo abajo
       ConfigurationManager.RefreshSection("appSettings")
       MsgBox(ConfigurationManager.AppSettings.Get("Nuevo"))



   Private Sub GuardarConfig(ByVal Nombre As String, ByVal Valor As String)
       ' Creamos un objeto Configuration, mediante el método OpenExeConfiguration
       Dim config As Configuration = ConfigurationManager.OpenExeConfiguration(Application.StartupPath & "\VIDay.exe")
       ' Obtenemos el objeto AppSettingsSection
       Dim aps As AppSettingsSection = config.AppSettings
       ' Leemos el valor del elemento Area
       'MessageBox.Show(aps.Settings.Item(Nombre).Value)
       ' Establecemos su nuevo valor
       aps.Settings.Item(Nombre).Value = Valor
       ' Guardamos los valores del objeto Configuration
       ' en el archivo de configuración XML actual.
       config.Save(ConfigurationSaveMode.Modified)
   End Sub


Y mi app.config se modifica PERFECTAMENTE luego de terminar el metodo GuardarConfig, pero al entrar a éstas 2 lineas:
       ConfigurationManager.RefreshSection("appSettings")
       MsgBox(ConfigurationManager.AppSettings.Get("Nuevo"))
No está leyendo el nuevo dato que le agregué... tDigamos que solo tengo un problema al refrescar...

Y si reinciio la aplicacion, el dato  "456345634653465", que tendría que ser el nuevo, ya que lo agregué en el metodo,... es leido perfectamente..

Digamos que tengo un problema en ésta linea:
        ConfigurationManager.RefreshSection("appSettings")

No esta funcionando como debe

Skeletron

Disculpen, Disculpen..

Funciona Perfectamente...
El problema es que en DUBUG, dandole F5 al VIsual Studio, da problemas en este tema...


Seguramente en estos dias hay un tutorial de variables GLobales.. Porque me quemó la cabeza hacer todo ésto... Por diferentes problemas...
y lo publico aqui, en otro tema nuevo..

Saludos.
Cierro el tema..