Ver Mensaje Individual
  #9 (permalink)  
Antiguo 09/02/2010, 15:34
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: llamar hora del servidor!

Te paso un par de detalles del modo en que una de nuestras aplicaciones registra y verifica que no se haya movido la fecha de sistema hacia atrás.
Cada vez que el login sale bien:
Código vb.net:
Ver original
  1. Public Function UltimoInicio()
  2.         Dim regData As RegistryKey
  3.         Const PathKey As String = "SOFTWARE\\..."
  4.         If regData Is Nothing Then
  5.             Exit Function
  6.         End If
  7.         regData = Registry.LocalMachine.OpenSubKey(PathKey, True)
  8.         regData.SetValue("DATA71", DateTime.Now.)
  9.         regData.Close()
  10.     End Function
"..." sería la ruta de la clave en el Registry que se crea al iniciar por primera vez la aplicación.

Luego, esta función se invoca en el Load del formulario principal, antes de iniciar el login. Valida varias cosas, por lo que la respuesta de esta función tiene un Select Case:
Código vb.net:
Ver original
  1. Public Function VerificarUpdate() As Integer
  2.         Try
  3.             Dim regData As RegistryKey
  4.             Const PathKey As String = "SOFTWARE\\..."
  5.             If Registry.LocalMachine.OpenSubKey(PathKey) Is Nothing Then
  6.                 Return 1000
  7.             End If
  8.             ' -----------------------------------------------------------
  9.             Dim Data71 As DateTime
  10.             ' -----------------------------------------------------------
  11.             ' Variables para lectura de propiedades de archivos
  12.             '  ...
  13.             '  Data71. Ultimo ingreso registrado.
  14.             ' -----------------------------------------------------------
  15.             ' Listado de valores de retorno
  16.             ' -----------------------------------------------------------
  17.             ' -1:   Se ha producido un error no clasificado.
  18.             ' 2001: Fecha de instalación original posterior a la actual.
  19.             '       El usuario ha alterado la fecha del sistema.
  20.             ' 2002: ...
  21.             ' 2003: La fecha de la ultima sesión es posterior a la fecha actual.
  22.             '       El usuario ha alterado la fecha del sistema.
  23.             ' 2004: ...
  24.             ' -----------------------------------------------------------
  25.             regData = Registry.LocalMachine.OpenSubKey(PathKey, True)
  26.             ' -----------------------------------------------------------
  27.             ' ...
  28.             ' -----------------------------------------------------------
  29.             Data71 = regData.GetValue("DATA71")
  30.             regData.Close()
  31.             ' -----------------------------------------------------------
  32.             oDia = Data71
  33.             ' -----------------------------------------------------------
  34.             If oDia > DateTime.Now Then
  35.                 Return 2003
  36.             End If
  37.         Catch ex As Exception
  38.             Return -1
  39.         End Try
  40.     End Function
Si la respuesta no es la esperada en el Select Case, aparece una advertencia y la aplicación se cierra sin que pueda evitarse.
Esta función esta creada en una clase específica, que también contiene la función anterior, y que sólo se instancia en otra clase, la cual a su vez no puede ser accedida desde afuera del form principal.

¿La idea te sirve?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 09/02/2010 a las 17:35