¡Siempre los OCX, VB, Setup!

Resuelto
armiou Mensajes publicados 7 Estado Miembro -  
armiou Mensajes publicados 7 Estado Miembro -
Hola,
He creado un setup de mi programa en VB, pero cuando lo instalo en otra máquina, muestra el error: "Error de tiempo de ejecución '339' Componente 'Rey_Xpbasics.ocx' o uno de sus dependencias no está registrado correctamente: un archivo falta o es inválido"
Ustedes me dirán que instale el .ocx en c:\windows\system32, ¿verdad?
Pero en mi caso eso no resuelve el problema porque mi disco local es E, así que el .ocx se encuentra en e:\windows\system32
¿Qué debo hacer para que encuentre el .ocx en c:\windows\system32 en otra máquina?
Gracias de antemano
Configuración: Windows Vista Internet Explorer 7.0

8 respuestas

  1. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
     
    Hola,
    Si has creado tu instalación con el empaquetado de VB, el error no está ahí, a menos que hayas modificado los directorios, debes dejar los directorios de Windows y System32 como se indicó, la instalación los colocará en el lugar correcto.
    Según el mensaje, tu problema proviene del registro del ocx en la base de registro. (bajo Vista)
    Para solucionarlo ver este enlace
    Sigue las instrucciones, salvo para abrir cmd, debes hacerlo como administrador,
    >> Iniciar >> Escribir CMD >> NO VALIDAR >> En la parte superior del menú haz clic derecho en el icono >> Abrir como administrador y luego seguir las indicaciones del enlace.

    Hasta luego
    EDIT:
    Para hacerlo automático (no lo conocía) El código dado por Jean-Yvon probablemente también deberá activarse como administrador.
    --
    La experiencia enseña con más certeza que el consejo. (André Gide)
    Si te topas con una olla y suena hueca, no necesariamente es la olla la que está vacía. ;-)(Confucio)
    1
  2. jean-yvon Mensajes publicados 112 Estado Miembro 10
     
    Hola,
    Es necesario registrar el ocx o la dll en el sistema anfitrión.
    Adjunto un pequeño programa
    que permite hacerlo

    Private Declare Sub SetWindowPos Lib "User32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) Private Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long Private Sub Form_Load() SetWindowPos Me.hwnd, -1, (Screen.Width - Me.Width) / Screen.TwipsPerPixelX / 2, (Screen.Height - Me.Height) / Screen.TwipsPerPixelY / 2, Me.Width / Screen.TwipsPerPixelX, Me.Height / Screen.TwipsPerPixelY, 0 End Sub Private Sub Label2_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single) VamosY Data.Files(1), True End Sub Private Sub Label3_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single) VamosY Data.Files(1), False End Sub Private Sub picDesenr_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single) VamosY Data.Files(1), False End Sub Private Sub picEnr_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single) VamosY Data.Files(1), True End Sub Private Sub VamosY(sFichero As String, bEnreg As Boolean) Dim sCamino As String Dim lRet As Long sCamino = String(256, 0) lRet = GetShortPathName(sFichero, sCamino, 255) sFichero = Left(sCamino, lRet) If bEnreg Then Shell "regsvr32 " & sFichero, vbNormalFocus Else Shell "regsvr32 /u " & sFichero, vbNormalFocus End If End Sub 

    ¡Hasta luego!
    0
  3. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
     
    Al reflexionar, creo que hay manera de solucionarlo sin ninguna manipulación.
    Con una configuración hecha en XP, la instalación en Vista no presenta ningún problema, así que pienso que crear la configuración estando conectado como admin debería generar un setup válido.
    Para eso, no hay que llamar al asistente desde el IDE, sino desde el menú Inicio y abrir el asistente como admin. (clic derecho)

    ¡Hasta luego!
    --
    La experiencia enseña más seguramente que el consejo. (André Gide)
    Si te golpeas contra una olla y suena hueca, no necesariamente es la olla la que está vacía. ;-)(Confucio)
    0
  4. armiou Mensajes publicados 7 Estado Miembro
     
    ¡Gracias a todos por las respuestas!
    He creado el setup con Inno Setup
    Y no lo instalo en Vista, de hecho, sino en otro PC con XP.
    Quisiera añadir que he intentado ejecutar el programa exe (compilado solamente) en algunos PCs de mis amigos, el error no aparece y el programa funciona bien, mientras que en otros no funciona, así que no entiendo nada.

    ¿Y este programa Jean-Yvon, dónde se debe colocar, por favor?
    0
  5. jean-yvon Mensajes publicados 112 Estado Miembro 10
     
    Hola,

    "¿Y este programa jean-Yvon, dónde se coloca, por favor?"
    Es algo que funciona solo en modo arrastrar y soltar. Solo debes arrastrar la DLL a registrar en el área de "registro" y ¡el programa se encarga de todo! Para desinstalar es lo mismo, un arrastrar y soltar y ¡listo!
    ¡Hasta luego!
    JY
    0
  6. armiou Mensajes publicados 7 Estado Miembro
     
    Jean Yvon, no entiendo!!
    Pero creo que he resuelto el problema, he incluido todos los ocx utilizados en innosetup y he elegido que se coloquen en el sistema de Windows de la máquina anfitriona. El error mencionado anteriormente ya no aparece, pero ahora se muestra el error 91 variable de objeto o bloque con....
    0
  7. jean-yvon Mensajes publicados 112 Estado Miembro 10
     
    Hola,
    No conozco innosetup. Hago todos mis empaquetados con VB. ¡Nunca he tenido grandes problemas! ¡No sé cómo responder a tu pregunta!
    ¡Hasta luego!
    JY
    0
  8. VBDev
     
    Hola,

    No sé si el problema sigue vigente, pero el primer mensaje de error que tuviste (problema de registro de OCX) seguramente se debe a que omitiste incluir el archivo Rey_SubClasser.dll en tu instalación. Yo también uso el OCX Rey_XPBasics y este OCX depende de Rey_SubClasser.dll, de ahí tu mensaje de error de dependencia al registrar el OCX.
    En cuanto a tu segundo mensaje de error, seguramente tienes un objeto mal declarado o no declarado, pero cuál... es cosa tuya averiguarlo (ten cuidado con el databasename de las bases de datos. Si es incorrecto, el recordsource no se pasa y tendrás este mensaje de error, por ejemplo).
    Esperando que esto te haya sido útil o que pueda servir a otros.

    Fab.
    0
    1. armiou Mensajes publicados 7 Estado Miembro
       
      hola,

      De hecho, este tema está resuelto, ¡pero gracias igual a Fab!

      Lo resolví utilizando simplemente la herramienta de empaquetado de VB y luego lo importé en Inno Setup utilizando istool.
      0