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 originalPublic Function UltimoInicio()
Dim regData As RegistryKey
Const PathKey As String = "SOFTWARE\\..."
If regData Is Nothing Then
Exit Function
End If
regData = Registry.LocalMachine.OpenSubKey(PathKey, True)
regData.SetValue("DATA71", DateTime.Now.)
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 originalPublic Function VerificarUpdate() As Integer
Try
Dim regData As RegistryKey
Const PathKey As String = "SOFTWARE\\..."
If Registry.LocalMachine.OpenSubKey(PathKey) Is Nothing Then
Return 1000
End If
' -----------------------------------------------------------
Dim Data71 As DateTime
' -----------------------------------------------------------
' Variables para lectura de propiedades de archivos
' ...
' Data71. Ultimo ingreso registrado.
' -----------------------------------------------------------
' Listado de valores de retorno
' -----------------------------------------------------------
' -1: Se ha producido un error no clasificado.
' 2001: Fecha de instalación original posterior a la actual.
' El usuario ha alterado la fecha del sistema.
' 2002: ...
' 2003: La fecha de la ultima sesión es posterior a la fecha actual.
' El usuario ha alterado la fecha del sistema.
' 2004: ...
' -----------------------------------------------------------
regData = Registry.LocalMachine.OpenSubKey(PathKey, True)
' -----------------------------------------------------------
' ...
' -----------------------------------------------------------
Data71 = regData.GetValue("DATA71")
' -----------------------------------------------------------
oDia = Data71
' -----------------------------------------------------------
If oDia > DateTime.Now Then
Return 2003
End If
Catch ex As Exception
Return -1
End Try
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?