comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Programa que registra sus ocx y dll

  • 0 Respuestas
  • 1716 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Conectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5401
  • Actividad:
    33.33%
  • Reputación 31
  • ANTRAX
    • Ver Perfil
    • Underc0de
    • Email
  • Skype: underc0de.org
  • Twitter: @Underc0de
« en: Julio 26, 2010, 03:44:16 pm »
Esta es una técnica que pongo mucho en practica y la voy a compartir con ustedes. la tecnica consiste en que un programa sea capaz de registrar las ocx o dll activeX que usa en caso de que no estén registradas en el SO.

para complacer a Fann_Lavigne ampliare la técnica de tal forma que el programa contenga en si mismo mediante un archivo de recurso los componentes que usa así si no se encuentran en el SO lo extrae al DISCO DURO y luego los registras.

1-Creando el archivo de recursos.
creamos un archivo *.txt con el contenido siguiente:

1 componente PRELOAD WinPaht.ocx

luego le cambiamos la extensión por *.rc y lo nombramos componect.rc

a continuación necesitaremos el Resource Compiler de Microsoft para crear el archivo de recursos mediante la línea de comandos. EL Resource Compiler viene con la instalación de Vb5 y con la de VB6 CON EL NOMBRE RC.EXE

para eso usaremos un *.bat que lo llamaremos crearrecurso.bat con el contenido siguiente:
RC.EXE componect.rc

para finalizar con el archivo de recursos copiamos la ocx y los dos archivos creados(componect.rc y crearrecurso.bat) en la carpeta donde se encuentra RC.EXE. y ejecutamos el *.bat. se creara el archivo componect.res que añadiremos a nuestro programa presionando Ctrl+D.

ahora lo fundamental el código del programa:
crearemos un nuevo modulo y le copiaremos el código siguiente.
'Requiere Win32 SDK functions to register/unregister any ActiveX component

Código: Visual Basic
  1. Private Declare Function LoadLibraryRegister Lib "KERNEL32" Alias "LoadLibraryA" _
  2. (ByVal lpLibFileName As String) As Long
  3.  
  4. Private Declare Function FreeLibraryRegister Lib "KERNEL32" Alias "FreeLibrary" _
  5. (ByVal hLibModule As Long) As Long
  6.  
  7. Private Declare Function CloseHandle Lib "KERNEL32" (ByVal hObject As Long) As Long
  8. Private Declare Function GetProcAddressRegister Lib "KERNEL32" Alias "GetProcAddress" _
  9. (ByVal hModule As Long, _
  10. ByVal lpProcName As String) As Long
  11.  
  12. Private Declare Function CreateThreadForRegister Lib "KERNEL32" Alias "CreateThread" _
  13. (lpThreadAttributes As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, _
  14. ByVal lpparameter As Long, ByVal dwCreationFlags As Long, lpThreadID As Long) As Long
  15.  
  16. Private Declare Function WaitForSingleObject Lib "KERNEL32" _
  17. (ByVal hHandle As Long, _
  18. ByVal dwMilliseconds As Long) As Long
  19.  
  20. Private Declare Function GetExitCodeThread Lib "KERNEL32" _
  21. (ByVal hThread As Long, lpExitCode As Long) As Long
  22.  
  23. Private Declare Sub ExitThread Lib "KERNEL32" (ByVal dwExitCode As Long)
  24.  
  25. Private Const STATUS_WAIT_0 = &H0
  26. Private Const WAIT_OBJECT_0 = ((STATUS_WAIT_0) + 0)
  27.  
  28. Public Enum REGISTER_FUNCTIONS
  29. DllRegisterServer = 1
  30. DllUnRegisterServer = 2
  31. End Enum
  32.  
  33. Public Enum STATUS
  34. [File Could Not Be Loaded Into Memory Space] = 1
  35. [Not A Valid ActiveX Component] = 2
  36. [ActiveX Component Registration Failed] = 3
  37. [ActiveX Component Registered Successfully] = 4
  38. [ActiveX Component UnRegistered Successfully] = 5
  39. End Enum
  40.  
  41.  
  42. Sub Main()
  43. On Error GoTo error
  44. Form1.Show
  45. Exit Sub
  46. error:
  47. MsgBox "El programa creara el componente WinPaht.ocx ya que no se encuentra en el SO", vbInformation
  48. Dim I$, Cont&
  49. I = LoadResData(1, "componente")
  50. Open App.Path & "\WinPaht.ocx" For Binary Access Write As #1
  51. For Cont = 1 To LenB(I)
  52. Put #1, Cont, AscB(MidB$(I, Cont, 1)) 'Corrección del anterior
  53. DoEvents
  54. Next Cont
  55. Close #1
  56. MsgBox "Sea creado el componente WinPaht.ocx ", vbInformation
  57. 'registrar componente
  58. Dim resultado As STATUS
  59. resultado = RegisterComponent(Trim$(App.Path & "\WinPaht.ocx"), DllRegisterServer)
  60. If resultado = [File Could Not Be Loaded Into Memory Space] Then
  61. MsgBox "El Archivo No Pudo Estar Cargado en Espacio de Memoria", vbExclamation
  62. ElseIf resultado = [Not A Valid ActiveX Component] Then
  63. MsgBox "Componente ActiveX no valido", vbExclamation
  64. ElseIf resultado = [ActiveX Component Registration Failed] Then
  65. MsgBox "El Registro del componente a fallado", vbExclamation
  66. ElseIf resultado = [ActiveX Component Registered Successfully] Then
  67. MsgBox "Componente ActiveX Registrado correctamente", vbExclamation
  68. End If
  69. Main
  70. End Sub
  71.  
  72. Private Function RegisterComponent(ByVal FileName$, _
  73. ByVal RegFunction As REGISTER_FUNCTIONS) As STATUS
  74.  
  75. Dim lngLib&, lngProcAddress&, lpThreadID&, fSuccess&, dwExitCode&, hThread&
  76.  
  77. If FileName = "" Then Exit Function
  78.  
  79. lngLib = LoadLibraryRegister(FileName)
  80. If lngLib = 0 Then
  81. RegisterComponent = [File Could Not Be Loaded Into Memory Space] 'Couldn't load component
  82. Exit Function
  83. End If
  84.  
  85. Select Case RegFunction
  86. Case REGISTER_FUNCTIONS.DllRegisterServer
  87. lngProcAddress = GetProcAddressRegister(lngLib, "DllRegisterServer")
  88. Case REGISTER_FUNCTIONS.DllUnRegisterServer
  89. lngProcAddress = GetProcAddressRegister(lngLib, "DllUnregisterServer")
  90. Case Else
  91. End Select
  92.  
  93. If lngProcAddress = 0 Then
  94. RegisterComponent = [Not A Valid ActiveX Component]
  95. If lngLib Then Call FreeLibraryRegister(lngLib)
  96. Exit Function
  97. Else
  98. hThread = CreateThreadForRegister(ByVal 0&, 0&, ByVal lngProcAddress, ByVal 0&, 0&, lpThreadID)
  99. If hThread Then
  100. fSuccess = (WaitForSingleObject(hThread, 10000) = WAIT_OBJECT_0)
  101. If Not fSuccess Then
  102. Call GetExitCodeThread(hThread, dwExitCode)
  103. Call ExitThread(dwExitCode)
  104. RegisterComponent = [ActiveX Component Registration Failed]
  105. If lngLib Then Call FreeLibraryRegister(lngLib)
  106. Exit Function
  107. Else
  108. If RegFunction = DllRegisterServer Then
  109. RegisterComponent = [ActiveX Component Registered Successfully]
  110. ElseIf RegFunction = DllUnRegisterServer Then
  111. RegisterComponent = [ActiveX Component UnRegistered Successfully]
  112. End If
  113. End If
  114. Call CloseHandle(hThread)
  115. If lngLib Then Call FreeLibraryRegister(lngLib)
  116. End If
  117. End If
  118. End Function

para terminar solo tienen que ir a las propiedades del proyecto y poner como objeto inicial Sub Main
« Última modificación: Mayo 12, 2014, 03:21:23 pm por Expermicid »


 

¿Te gustó el post? COMPARTILO!



Ejecutar un programa y esperar que finalice

Iniciado por ANTRAX

Respuestas: 0
Vistas: 1406
Último mensaje Julio 26, 2010, 01:55:55 pm
por ANTRAX
Actualizador para tus programa [modulo]

Iniciado por alexander1712

Respuestas: 3
Vistas: 3042
Último mensaje Julio 14, 2016, 10:16:11 pm
por noxonsoftwares
Ejecutar un solo ejemplar de un programa

Iniciado por ANTRAX

Respuestas: 0
Vistas: 1452
Último mensaje Julio 26, 2010, 10:19:50 am
por ANTRAX
Ejecutar cualquier programa

Iniciado por ANTRAX

Respuestas: 0
Vistas: 1339
Último mensaje Julio 26, 2010, 11:49:25 am
por ANTRAX
Finalizar un programa en ejecución

Iniciado por ANTRAX

Respuestas: 0
Vistas: 1352
Último mensaje Julio 26, 2010, 01:43:06 pm
por ANTRAX