none
Consulta sobre archivo de configuración de una aplicación de VB Net RRS feed

  • Pregunta

  • Explico:

    Tengo definidos ítems en la ventana de configuración con ámbito de usuario, al guardarlas se ha creado correctamente el archivo app.config en la carpeta de los archivos fuente, la consulta es cómo fuerzo que en tiempo de diseño al ejecutar el programa se cree su archivo user.config respectivo en:

    c:\users\NOMBRE DE USUARIO\appdata\Local

    o en

    c:\users\NOMBRE DE USUARIO\appdata\Roaming

    (En la que sea, en su carpeta por defecto)

    Es que no veo que se cree user.config por ningún lado ¿Cómo hago?



    • Editado James2016-2 domingo, 6 de agosto de 2017 18:45
    domingo, 6 de agosto de 2017 18:44

Respuestas

  • No, no tienes que hacer nada adicional porque entonces ¿de que serviría definir una configuración con ámbito de usuario?, no tendría sentido.

    Imagino que no has podido dar con el archivo de configuración de usuario (user.config) porque su creación en disco se condiciona a que el usuario -que ejecuta la aplicación- efectúe algún cambio sobre la configuración, en tanto los valores se leen desde el archivo de configuración de la aplicación o por lo menos así lo entiendo. Por ejemplo, siguiendo el caso de la propiedad Ruta -con ámbito de usuario- que almacena el valor 'F:\Prueba', el usuario decide cambiar la ruta de disco por 'Z:\Carpeta1\SubCarpeta2',  en ese momento se escribe el cambio en disco, si el archivo aun no existe se crea.

    Tan simple como:

    My.Settings.Ruta = "Z:\Carpeta1\SubCarpeta2"
    My.Settings.Save()
    
    MsgBox(Path.GetPathRoot(My.Settings.Ruta))
    
    'Resultado: Z:\

    - El archivo se encuentra en la ruta:

    C:\Users\<nombre usuario>\AppData\Local\<nombre proyecto>\...\...\user.config



    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    • Marcado como respuesta James2016-2 lunes, 7 de agosto de 2017 4:22
    lunes, 7 de agosto de 2017 3:58
  • Ya me confundí, ¿en que hilo seguimos?. 

    A ver, si actualizas un valor desde la aplicación -para forzar la creación del archivo- pisará los cambios que hayas hecho manualmente sobre el archivo, por tanto debemos hacerlo únicamente cuando el archivo no exista, por ejemplo:

    Imports System.Configuration
    
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
    	Dim Config = ConfigurationManager.OpenExeConfiguration(
    					ConfigurationUserLevel.PerUserRoamingAndLocal)
    	If Not File.Exists(Config.FilePath) Then
    		My.Settings.Ruta = My.Settings.Ruta 'Colocar cualquier nombre de propiedad
    		My.Settings.Save()
    	End If
    
    End Sub
    



    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.

    lunes, 7 de agosto de 2017 4:46
  • Igual: System.Configuration 


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    lunes, 7 de agosto de 2017 5:16

Todas las respuestas

  • Hola

    Podrías utilizar Clase StreamWriter

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Using escritor As New StreamWriter("E:\user.xml")
                escritor.WriteLine("Esto es una prueba")
            End using
    
            MessageBox.Show("Listo!!!")
        End Sub

    Como se ve en el código tienes que poner la extensión del tipo de archivo que deseas crear, y le das la ruta donde se va a crear el archivo.


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú


    domingo, 6 de agosto de 2017 19:56
  • Hola James:

     Tienes dos opciones.

    1. Crear tu propio archivo xml y utilizarlo como tu "customAppConfig", porque como sabrás el archivo de configuraciones no es otra cosa mas que un Xml, si tu creas el propio podrás escribirlo en donde quieras y mandarlo a llamar en donde quieras sin necesidad de usar el espacio de nombres System.Configuration.

    2. Utilizar dos archivos de configuraciones uno ubicado en el path que tu elijas y definir este path en el app.config actual:

     
    <appSettings file="relative file name">
    </appSettings>

     Mas informacion en este link:

    Elemento appSettings <appsettings></appsettings>

    Espero te sea de utilidad


    Saludos desde Monterrey, Nuevo León, México!!!

    domingo, 6 de agosto de 2017 21:27
  • mm, puede ser una alternativa, gracias.
    domingo, 6 de agosto de 2017 22:11
  • Gracias.
    domingo, 6 de agosto de 2017 22:12
  • Verán, añadí a mi programa algunas configuraciones y se creó el archivo app.config, el programa ya funciona ok, corre con normalidad desde VB Net.

    Generé el ejecutable y lo copié a otra ubicación (no instalé el programa porque está corriendo desde mi misma máquina, solo uso el .exe directamente), renombré la carpeta donde están los archivos fuente para que el ejecutable no tenga ninguna relación con este. La cosa es que corro el .exe (que copié en otra ubicación) y el programa funciona con normalidad usa las configuraciones que definí por tanto deduzco que está usando un archivo user.config pero no lo encuentro por ningún lado, busqué en estas carpetas donde se supone debería estar y no está:

    C:\Users\USUARIO\AppData\LOCAL\

    C:\Users\USUARIO\AppData\Roaming\

    ¿Dónde puede estar el archivo de configuración? me imagino que en algún lado tiene que estar porque sino de dónde toma los valores que usa el programa? 

    Ojalá alguien tenga idea de lo que está pasando


    lunes, 7 de agosto de 2017 3:54
  • Hola:

     EL archivo App.Config se compila bajo la siguiente nomenclatura:

    "NombreTuAplicacion..exe.config" y por defaul se crea en la misma ruta de ubicacion del ejecutable ".Exe", entonces si tu aplicacion esta funcionando es porque a un lado del exe esta el app.config.


    Saludos desde Monterrey, Nuevo León, México!!!

    lunes, 7 de agosto de 2017 3:57
  • No, no tienes que hacer nada adicional porque entonces ¿de que serviría definir una configuración con ámbito de usuario?, no tendría sentido.

    Imagino que no has podido dar con el archivo de configuración de usuario (user.config) porque su creación en disco se condiciona a que el usuario -que ejecuta la aplicación- efectúe algún cambio sobre la configuración, en tanto los valores se leen desde el archivo de configuración de la aplicación o por lo menos así lo entiendo. Por ejemplo, siguiendo el caso de la propiedad Ruta -con ámbito de usuario- que almacena el valor 'F:\Prueba', el usuario decide cambiar la ruta de disco por 'Z:\Carpeta1\SubCarpeta2',  en ese momento se escribe el cambio en disco, si el archivo aun no existe se crea.

    Tan simple como:

    My.Settings.Ruta = "Z:\Carpeta1\SubCarpeta2"
    My.Settings.Save()
    
    MsgBox(Path.GetPathRoot(My.Settings.Ruta))
    
    'Resultado: Z:\

    - El archivo se encuentra en la ruta:

    C:\Users\<nombre usuario>\AppData\Local\<nombre proyecto>\...\...\user.config



    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    • Marcado como respuesta James2016-2 lunes, 7 de agosto de 2017 4:22
    lunes, 7 de agosto de 2017 3:58
  • Creo que la respuesta está en el hilo que aperturaste con anterioridad: Consulta sobre archivo de configuración de una aplicación de VB Net


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    lunes, 7 de agosto de 2017 4:00
  • mm, te entiendo, eso es lo que debe estar pasando, entonces cómo haría si desde el programa no tengo ninguna opción para cambiar la configuración, lo que quería era poder acceder al archivo directamente para editarlo manualmente y hacer allí mismo los cambios.

    Creo que una forma sería haciendo cualquier cambio en una de las variables de configuración desde el mismo programa para que se cree, pero a lo mejor hay alguna forma de forzar a que se cree?

    lunes, 7 de agosto de 2017 4:16
  • Sí, ya lo vi, gracias.
    lunes, 7 de agosto de 2017 4:17
  • Así es, en tiempo de diseño se genera en \reléase o \debug pero en tiempo de ejecución entiendo que pasa a llamarse user.config, lo que trato es, saber cómo fuerzo a que se cree sin hacer ninguna modificación.
    lunes, 7 de agosto de 2017 4:18
  • Ya me confundí, ¿en que hilo seguimos?. 

    A ver, si actualizas un valor desde la aplicación -para forzar la creación del archivo- pisará los cambios que hayas hecho manualmente sobre el archivo, por tanto debemos hacerlo únicamente cuando el archivo no exista, por ejemplo:

    Imports System.Configuration
    
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
    	Dim Config = ConfigurationManager.OpenExeConfiguration(
    					ConfigurationUserLevel.PerUserRoamingAndLocal)
    	If Not File.Exists(Config.FilePath) Then
    		My.Settings.Ruta = My.Settings.Ruta 'Colocar cualquier nombre de propiedad
    		My.Settings.Save()
    	End If
    
    End Sub
    



    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.

    lunes, 7 de agosto de 2017 4:46
  • mm, claro, si no chancaría los datos anteriores, ahora sí queda, gracias.
    lunes, 7 de agosto de 2017 4:51
  • Creo no tengo referenciado System.Configuration porque no me reconoce ConfigurationManager ¿Qué referencia tendrá?
    lunes, 7 de agosto de 2017 5:04
  • Igual: System.Configuration 


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    lunes, 7 de agosto de 2017 5:16