Introducción:
En esta revisión de la utilidad gsCopia, lo que he hecho es usar un fichero de
configuración propio que se guarda en "Mis Documentos\gsCopia" (o "Documentos\gsCopia" si es
Vista).
Esto es porque cuando se actualiza la aplicación con ClickOnce, se crea un nuevo fichero de
configuración para esa nueva versión, por tanto, si ya tienes cosas configuradas, al actualizar
la aplicación, pues... se pierden.
Mientras que al mantenerlo aparte, se usarán los datos que ya tuvieras, por tanto, las
actualizaciones por ClickOnce no afectarán a los datos de configuración que tuvieras (lo he
comprobado, je, je, por eso la versión es 2.2 en vez de 2.0).
Aquí tienes el código con los cambios que he hecho en esta revisión 1.0.2.2 y
más abajo tienes el resto de links de las revisiones anteriores, la explicación detallada y
el link para instalarlo con ClickOnce.
En este trozo de código te pongo lo que se hace para leer y guardar los datos de
configuración usando mi clase ConfigXml que es la que se encarga de leer/guardar los datos en un
fichero.
También tienes el código que he agregado en el constructor del formulario que es donde asigno el
directorio en el que se guardará este fichero de configuración.
Imports gsCopia.elGuille.info.Util
Public Class Form1
Private cfg As ConfigXml
Public Sub New()
' This call is required by the Windows Form Designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
Dim fic As String
With My.Application.Info
Dim appData As String = _
My.Computer.FileSystem.SpecialDirectories.MyDocuments & "\" & .ProductName
If My.Computer.FileSystem.DirectoryExists(appData) = False Then
My.Computer.FileSystem.CreateDirectory(appData)
End If
fic = appData & "\" & .ProductName & ".cfg"
End With
' Crear el objeto de configuración
cfg = New ConfigXml(fic, False)
End Sub
' Para saber si se ejecuta como administrador (14/Dic/07)
Private comoAdministrador As Boolean
Private cancelar As Boolean = False
Private expanderExpanded As Boolean = True
Private expanderSize As Size
Private expander2Expanded As Boolean = True
Private expander2Size As Size
Private Sub leerCfg()
With My.Settings
If .Location.X > -1 Then
Me.Location = .Location
Me.Size = .Size
End If
' Leer los datos del fichero de configuración (15/Dic/07)
' si el fichero .cfg no existe, se usan los datos actuales de configuración (Settings)
Dim obj As Object
obj = New SizeConverter().ConvertFromString(cfg.GetValue("General", "Size", _
.Size.Width & ";" & .Size.Height))
.Size = CType(obj, Size)
obj = New PointConverter().ConvertFromString(cfg.GetValue("General", "Location", _
.Location.X & ";" & .Location.Y))
.Location = CType(obj, Point)
.ComprobarDiscos = cfg.GetValue("General", "ComprobarDiscos", .ComprobarDiscos)
.Destino = cfg.GetValue("General", "Destino", .Destino)
.DestinoCol = cfg.GetValue("General", "DestinoCol", .DestinoCol)
.Expandido = cfg.GetValue("General", "Expandido", .Expandido)
.Expandido2 = cfg.GetValue("General", "Expandido2", .Expandido2)
.MostrarDestino = cfg.GetValue("General", "MostrarDestino", .MostrarDestino)
.NoModificar = cfg.GetValue("General", "NoModificar", .NoModificar)
.NoSeleccionar = cfg.GetValue("General", "NoSeleccionar", .NoSeleccionar)
.OcultarVentana = cfg.GetValue("General", "OcultarVentana", .OcultarVentana)
.Origen = cfg.GetValue("General", "Origen", .Origen)
.OrigenCol = cfg.GetValue("General", "OrigenCol", .OrigenCol)
.Parametros = cfg.GetValue("General", "Parametros", .Parametros)
.ParametrosCol = cfg.GetValue("General", "ParametrosCol", .ParametrosCol)
.Utilidad = cfg.GetValue("General", "Utilidad", .Utilidad)
.UtilidadCol = cfg.GetValue("General", "UtilidadCol", .UtilidadCol)
cboDestino.Text = .Destino
string2Cbo(.DestinoCol, cboDestino)
cboOrigen.Text = .Origen
string2Cbo(.OrigenCol, cboOrigen)
cboUtilidad.Text = .Utilidad
string2Cbo(.UtilidadCol, cboUtilidad)
cboParametros.Text = .Parametros
string2Cbo(.ParametrosCol, cboParametros)
chkOcultarVentana.Checked = .OcultarVentana
' No cambiar este valor (siempre debe ser False)
.ComprobarDiscos = False
chkComprobarDiscos.Checked = .ComprobarDiscos
chkComprobarDiscos.Enabled = False
expanderExpanded = .Expandido
' Las nuevas opciones de la versión 1.0.1.0 (12/Dic/07)
expander2Expanded = .Expandido2
chkMostrarDestino.Checked = .MostrarDestino
chkNoSeleccionar.Checked = .NoSeleccionar
chkNoModificar.Checked = .NoModificar
End With
End Sub
Private Sub guardarCfg()
With My.Settings
If Me.WindowState = FormWindowState.Normal Then
.Location = Me.Location
.Size = Me.Size
Else
.Location = Me.RestoreBounds.Location
.Size = Me.RestoreBounds.Size
End If
' Actualizar el contenido de los combos
' para añadir el texto si no está en la lista
actualizarCombos()
.Destino = cboDestino.Text
.DestinoCol = combo2String(cboDestino)
.Origen = cboOrigen.Text
.OrigenCol = combo2String(cboOrigen)
.Utilidad = cboUtilidad.Text
.UtilidadCol = combo2String(cboUtilidad)
.Parametros = cboParametros.Text
.ParametrosCol = combo2String(cboParametros)
.OcultarVentana = chkOcultarVentana.Checked
' No cambiar este valor
.ComprobarDiscos = False
'.ComprobarDiscos = chkComprobarDiscos.Checked
.Expandido = expanderExpanded
' Las nuevas opciones de la versión 1.0.1.0 (12/Dic/07)
.Expandido2 = expander2Expanded
.MostrarDestino = chkMostrarDestino.Checked
.NoSeleccionar = chkNoSeleccionar.Checked
.NoModificar = chkNoModificar.Checked
.Save()
' Guardar los datos en el fichero .cfg (15/Dic/07)
cfg.SetValue("General", "Size", .Size.Width & ";" & .Size.Height)
cfg.SetValue("General", "Location", .Location.X & ";" & .Location.Y)
cfg.SetValue("General", "ComprobarDiscos", .ComprobarDiscos)
cfg.SetValue("General", "Destino", .Destino)
cfg.SetValue("General", "DestinoCol", .DestinoCol)
cfg.SetValue("General", "Expandido", .Expandido)
cfg.SetValue("General", "Expandido2", .Expandido2)
cfg.SetValue("General", "MostrarDestino", .MostrarDestino)
cfg.SetValue("General", "NoModificar", .NoModificar)
cfg.SetValue("General", "NoSeleccionar", .NoSeleccionar)
cfg.SetValue("General", "OcultarVentana", .OcultarVentana)
cfg.SetValue("General", "Origen", .Origen)
cfg.SetValue("General", "OrigenCol", .OrigenCol)
cfg.SetValue("General", "Parametros", .Parametros)
cfg.SetValue("General", "ParametrosCol", .ParametrosCol)
cfg.SetValue("General", "Utilidad", .Utilidad)
cfg.SetValue("General", "UtilidadCol", .UtilidadCol)
cfg.Save()
End With
End Sub
Además de esto, también muestro la versión actual en la barra de estado (información).
Este es el código que uso (te muestro todo el método Form_Load, pero el nuevo es el
que está al principio):
Private Sub Form1_Load() Handles MyBase.Load
' La versión del ensamblado y la de Windows (15/Dic/07)
Dim sAppVer As String
With My.Application.Info
Dim ensamblado As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly
Dim fvi As System.Diagnostics.FileVersionInfo
fvi = System.Diagnostics.FileVersionInfo.GetVersionInfo(ensamblado.Location)
sAppVer = .ProductName & " v" & .Version.ToString & " (" & fvi.FileVersion & ")"
End With
If DateTime.Now.Year > 2007 Then
statusInfo.Text = "©Guillermo 'guille' Som, 2007-" & DateTime.Now.Year
Else
statusInfo.Text = "©Guillermo 'guille' Som, 2007"
End If
statusInfo.Text = sAppVer & " - " & statusInfo.Text
statusInfo.Tag = statusInfo.Text
Me.statusStrip1.Text = statusInfo.Text
' Comprobar si se ejecuta como administrador (14/Dic/07)
comoAdministrador = EsAdministrador()
If comoAdministrador Then
Me.statusOpAdmin.Image = My.Resources.escudo16_OK
Me.statusOpAdmin.ToolTipText = " Ejecutando como administrador "
Else
Me.statusOpAdmin.Image = My.Resources.escudo16_Exclamation
Me.statusOpAdmin.ToolTipText = " No estás ejecutando como administrador "
End If
toolTip1.SetToolTip(Me.statusStrip1, statusOpAdmin.ToolTipText)
progressBar1.Visible = False
expanderSize = expanderGroup.Size
expander2Size = expander2Group.Size
' El texto original de la cabecera
expanderHeader.Tag = expanderHeader.Text
expander2Header.Tag = expander2Header.Text
leerCfg()
' Asignar el contrario a lo que se quiere conseguir
' ya que en el evento Click se cambia.
expanderExpanded = Not expanderExpanded
expanderPic_Click()
expander2Expanded = Not expander2Expanded
expander2Pic_Click()
' Activar el timer con un intervalo pequeño
' para que al cargar el formulario no tarde demasiado
timerComprobarExtraibles.Interval = 100
timerComprobarExtraibles.Enabled = True
End Sub
Y esto es todo... por ahora...
Nos vemos.
Guillermo