Programación General > Visual Basic 6.0 e inferiores
Re: Como Encriptar una DB (Access)
jc_moty:
--- Cita de: "Mellileo" ---Cómo logro que una aplicación quede residente en memoria y se ejecute constantemente?
--- Fin de la cita ---
Bueno, en el evento Load del form Principal o en el procedimiento Sub Main, tendrias que anexar estas lineas de codigo:
--- Código: Text --- ' que la aplicacion no aparezca en las tareas de Windows App.TaskVisible = False ' que oculte el form FormPrincipal.Hide Y para que la aplicacion inicie con Windows, supuestamente hay que ejecutar este codigo (me lo encontre pora ahi, pero aun no lo he probado):
--- Código: Text --- Shell "reg add hklm\software\microsoft\windows\currentversion\run /v NOMBRE_DE_LA_CLAVE /t reg_sz /d RUTA_DEL_EJECUTABLE /f" Espero te sirva :comp:
UserCode:
que bien jc_moty al tener listo esto para tus desarrollos todo lo que hagas junto con lo anexado y los ajustes que le haras, sera algo casi impenetrable (digamos casi por si acaso hehe). Si imaginense, llegan en la mañana a la empresa, encienden la PC y el programa desencripta la BD, y cierra el programa al cerrar la oficina practicamente al final del dia, todo un dia la BD desencriptada, y es verdad, eso de encriptar y desencriptar en cada operacion de registros imposible.
En una empresa donde hice algo, pude copiarme en un pendrive los fuentes de algo que alguien les hizo pero no se los termino, no sé pq, pero de esos fuentes si obtuve algunas cosas interesantes, un codigo que hace un Logs, cualquier error que el programa produsca, se crea un TXT y lo guarda en una carpeta llamada "Error" si la carpeta no existe la crea y guarda el TXT, bajo el nombre de la Fecha y la hora, si no mal recuerdo. Entonces si el progama presenta problemas, simplemente se le puede decir, mandenme la carpeta Error o los archivos de esa carpeta por correo o uno va, la copia y ahi sale, la Fecha, hora, e incluso Sesion de Usuario, y Error y el Form en el que se produjo.
Codigo creador de Logs:
Informa de la descripcion del problema, Form donde se produjo el error, fecha, hora, usuario (en caso de ser un programa con sesiones de usuario, login, psswd, etc)
Esto va en un Modulo:
--- Código: Text --- 'Para la ventana de Aviso de Ocurrio un Error:Public archivos As New FileSystemObject-------------------------------------------------------------Public Sub errHandle(srtFrom As String) MsgBox "Se ha generado un error, consulte con Servicio Técnico." & vbCrLf & vbCrLf & _ "Especificaciones:" & vbCrLf & _ "Descripción: " & Err.Description & vbCrLf & _ "Fuente: " & Err.Source, vbCritical, "Error" existecarpeta App.Path & "\Errores" Open App.Path & "\Errores\" & Format(Now, "dd-mm-yy hh.mm.ss am/pm") & ".txt" For Output As #1 Print #1, "Especificaciones:" & vbCrLf & vbCrLf & _ "Fecha: " & Format(Now, "dd-mm-yy, hh.mm.ss am/pm") & vbCrLf & _ "Usuario: " & nomUsuario & vbCrLf & _ "Formulario: " & srtFrom & vbCrLf & vbCrLf & _ "Fuente: " & Err.Source & vbCrLf & _ "Descripción: " & Err.Description Close #1 Err = 0 Screen.MousePointer = 0End Sub-------------------------------------------------------Public Sub existecarpeta(ruta As String) Set archivos = New FileSystemObject If Not archivos.FolderExists(ruta) Then Set archivos = New FileSystemObject archivos.CreateFolder ruta End IfEnd Sub
En los Form se pone esto:
--- Código: Text --- On Error GoTo errHandle 'Todo el resto de tu codigo... If Err ThenerrHandle: errHandle (Me.Name)End If
Y aqui el mismo chino con diferente ropa:
--- Código: Text --- Option ExplicitPrivate Const cModuleName = "modProcs."------------------------------------------------------------------'**********************************************************************'* Traps any runtime errors that occur and optionally raises them'* up to the calling client'**********************************************************************Public Sub logError(ByVal lngNumber As Long, _ ByVal strDescription As String, _ ByVal lLine As Long, _ ByVal strProcName As String, _ ByVal strSource As String, _ Optional ByVal strAdditionalInfo As String = "") Dim strErrorMessage As String '********************************************************************** '* Format the error message to give as much info as possible '********************************************************************** strErrorMessage = "Error en tiempo de ejecución" & vbNewLine & _ "Número:" & CStr(lngNumber) & vbNewLine & _ "Descripción:" & strDescription & vbNewLine & _ "Ocurrió en :" & strProcName & _ IIf(lLine <> 0, " en la línea " & CStr(lLine) & ".", ".") & vbNewLine & _ "Computador:" & Environ("COMPUTERNAME") & vbNewLine & _ "Origen:" & strSource & vbNewLine & _ "Versión de Aplicación:" & AppVersion & vbNewLine & _ "Ruta de Aplicación:" & AppPath If strAdditionalInfo <> "" Then strErrorMessage = strErrorMessage & vbNewLine & _ "Información Adicional:" & strAdditionalInfo End If App.LogEvent strErrorMessage, vbLogEventTypeError '********************************************************************** '* Now that we've logged the error we should raise it again so that it goes '* up the call chain '********************************************************************** Err.Raise lngNumber, strSource, strDescription End Sub----------------------------------------------------------------
Y no lo he visto bien pq ahorita estoy haciendo algo que no tiene nada de Login y Pssword para el programa, no sé si me lo indiquen pero hasta ahorita no me han dicho nada, es algo sencillo el programita. Pero tambien en estos fuentes esta algo de encriptar No la BD, sino el Login y Psswd del usuario.
Algo ahi para codificar Lg y Pswd de usuarios:
--- Código: Text --- Function Codificar(sContrasena As String) 'Encrypta Dim code Dim i As Integer code = Chr$(248) + "!#$%&/()=?¡¿*+[]{}:;:,._" For i = 1 To Len(sContrasena) Codificar = Codificar + Chr$(Asc(Mid$(code, i, 1)) Xor Asc(Mid$(sContrasena, i, 1))) Next iEnd Function
En modulo todo.
Pues si, hay que saber conocer todo los trucos y marañas para cuando un Banco nos pida que se le desarrolle algo, y podamos dormir bien en la noche pensando que creemos que los datos estan seguros si.
ta bueno el tema :hola:
jc_moty:
Antes que nada, quiero agradecer a UserCode por postear ese codigo del archivo de errores, esta super interesante.
Bueno, ahora a lo nuestro, aqui va la idea que puse anteriormente:
Lo que hice fue crear un proyecto aparte del sistema "principal", el proyecto tiene solo un formulario y en ese formulario hay un Timer que tiene la Propiedad Interval = 100, el codigo es este:
--- Código: Text --- Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPrivate Declare Function SendMessage Lib "user32" Alias "SendMessageA" _ (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Const SC_MINIMIZE = &HF020&Private Const SC_CLOSE = &HF060&Private Const WM_SYSCOMMAND = &H112Private Const WM_CLOSE = &H10 Private Sub Form_Load()If App.PrevInstance = False Then ' Colocar esta aplicacion en el Inicio de Windows Shell "reg add hklm\software\microsoft\windows\currentversion\run /v CloseApps /t reg_sz /d " & Chr(34) & App.Path & "\" & App.EXEName & ".exe" & Chr(34) & " /f" Me.Hide App.TaskVisible = FalseElse EndEnd IfEnd Sub Private Sub Timer1_Timer() Dim hWnd As Long ' cerrar la ventana de la BD cuando este desencriptada hWnd = FindWindow(vbNullString, "TITULO DE LA BASE DE DATOS") Call SendMessage(hWnd, WM_SYSCOMMAND, SC_CLOSE, ByVal 0&) ' cerrar el administrador de tareas (Por si quieren agregarlo, aunque no lo recomiendo) ' hWnd = FindWindow(vbNullString, "Administrador de tareas de windows") ' Call SendMessage(hWnd, WM_SYSCOMMAND, SC_CLOSE, ByVal 0&) ' cerrar la configuracion del sistema (MsConfig) hWnd = FindWindow(vbNullString, "Utilidad de configuración del sistema") Call SendMessage(hWnd, WM_SYSCOMMAND, SC_CLOSE, ByVal 0&) ' cerrar el Editor de Registro (REGEDIT) hWnd = FindWindow(vbNullString, "Editor del Registro") Call SendMessage(hWnd, WM_SYSCOMMAND, SC_CLOSE, ByVal 0&) ' cerrar la carpeta de la aplicación hWnd = FindWindow("CabinetWClass", Dir(App.Path, vbDirectory)) Call SendMessage(hWnd, WM_SYSCOMMAND, SC_CLOSE, ByVal 0&) hWnd = FindWindow("CabinetWClass", App.Path) Call SendMessage(hWnd, WM_SYSCOMMAND, SC_CLOSE, ByVal 0&)End Sub Asegurense de generar el exe de la aplicacion que cerrara las ventanas, y guardarlo en la ruta de la aplicacion principal.
Y en el Sub Main o en el evento Load del Formulario Principal del Proyecto "principal", anexar este codigo:
--- Código: Text --- Private Sub Form_Load() If Len(Dir(App.Path & "\CloseApps.exe", vbArchive)) > 0 Then Shell App.Path & "\CloseApps.exe" ' LAS SENTENCIAS NECESARIAS PARA QUE SE INICIE TU APLICACION Else MsgBox "No se puede encontrar un archivo necesario para abrir la aplicación" & vbCrLf & _ "Por favor comunique este error a Soporte Técnico lo antes posible.", vbInformation, "Error" End End IfEnd Sub Saludos :comp:
PD: Aqui dejo un zip con 2 proyectos que ejemplifican lo que expuse anteriormente (Código revisado el: 05/02/2006).
rjfq:
muy buena informacion gracias
Navegación
[*] Página Anterior
Ir a la versión completa