Solución al Problema del Instalador de Visual Basic en Windows Me/2000

Es posible que en ocasiones la instalación de cualquier programa en un equipo con Windows Me/2000 esté continuamente indicando que el equipo debe reiniciarse. El mensaje concreto que aparece es el siguiente: "Instalar no puede continuar porque algunos archivos del sistema no están actualizados...", y por más que se reinicia el sistema, siempre vuelve a dar el mismo mensaje. Este error es bastante frustrante y, según documentación leída en Microsoft, se debe a la imposibilidad de la actualización de ciertos archivos por parte del sistema operativo, que los mantiene en uso, mientras el instalador de Visual Basic insiste en que deben ser actualizados.

Conozco gente que ha resuelto el problema instalando una versión adecuada del Service Pack de Windows 2000, otros lo han conseguido con determinada versión del Service Pack de Visual Basic, ... en definitiva, depende mucho del sistema en particular y de lo que haya instalado en él.

La solución que yo he encontrado es tosca, pero le ha funcionado a muchas más personas:

  • Existe un fichero setup.lst con cada instalación, hay que editarlo.
  • Buscar algo parecido a las siguientes líneas tras la sección de BOOTSTRAP [Bootstrap Files]

    File1=@VB6STKIT.DLL,$(WinSysPathSysFile),,,7/14/00 11:00:00 PM,101888,6.0.84.50
    File2=@VB6ES.DLL,$(WinSysPath),,$(Shared),10/1/00 11:00:00 PM,119568,6.0.89.88
    File3=@COMCAT.DLL,$(WinSysPathSysFile),$(DLLSelfRegister),,5/31/98 11:00:00 PM,22288,4.71.1460.1
    File4=@stdole2.tlb,$(WinSysPathSysFile),$(TLBRegister),,8/24/01 4:00:00 PM,17920,3.50.5014.0
    File5=@asycfilt.dll,$(WinSysPathSysFile),,,8/24/01 4:00:00 PM,77824,3.50.5014.0
    File6=@olepro32.dll,$(WinSysPathSysFile),$(DLLSelfRegister),,8/24/01 4:00:00 PM,106496,5.0.5014.0
    File7=@oleaut32.dll,$(WinSysPathSysFile),$(DLLSelfRegister),,8/24/01 4:00:00 PM,569344,3.50.5014.0
    File8=@msvbvm60.dll,$(WinSysPathSysFile),$(DLLSelfRegister),,8/24/01 4:00:00 PM,1388544,6.0.92.37

  • A partir del File3 (incluído), cambiar el número de la versión a la 1.0.0.0 (es el último número que aparece), es decir, cambiar asycfilt, olepro32, oleaut32, comcat y stdole2 (msvbvm60 no hace falta). El resultado es:

    File1=@VB6STKIT.DLL,$(WinSysPathSysFile),,,7/14/00 11:00:00 PM,101888,6.0.84.50
    File2=@VB6ES.DLL,$(WinSysPath),,$(Shared),10/1/00 11:00:00 PM,119568,6.0.89.88
    File3=@COMCAT.DLL,$(WinSysPathSysFile),$(DLLSelfRegister),,5/31/98 11:00:00 PM,22288,1.0.0.0
    File4=@stdole2.tlb,$(WinSysPathSysFile),$(TLBRegister),,8/24/01 4:00:00 PM,17920,1.0.0.0
    File5=@asycfilt.dll,$(WinSysPathSysFile),,,8/24/01 4:00:00 PM,77824,1.0.0.0
    File6=@olepro32.dll,$(WinSysPathSysFile),$(DLLSelfRegister),,8/24/01 4:00:00 PM,106496,1.0.0.0
    File7=@oleaut32.dll,$(WinSysPathSysFile),$(DLLSelfRegister),,8/24/01 4:00:00 PM,569344,1.0.0.0
    File8=@msvbvm60.dll,$(WinSysPathSysFile),$(DLLSelfRegister),,8/24/01 4:00:00 PM,1388544,6.0.92.37

Con eso yo he logrado que funcione en el 99% de los casos (encontré una instalación con 100 controles que no funcionó, posiblemente por alguno de esos 100 controles añadidos).

¿Qué hemos hecho? Según yo entiendo, hemos engañado al sistema operativo diciéndole que las versiones necesarias para la instalación son las 1.0.0.0. Como el sistema operativo tiene versiones superiores, no intenta instalar las del instalador, con lo que la instalación sigue normalmente.

Puede parecer que entonces el programa no debería trabajar bien, al tener versiones diferentes: la realidad es que nunca se ha quejado ningún programa por esto, posiblemente porque las versiones de Windows 2000 sean superiores a las que trae el instalador de Visual Basic (recordemos que Visual Basic 6 salió allá por 1998, creo recordar), y en ese caso las versiones superiores casi siempre son compatibles con versiones anteriores (no al contrario, por supuesto).

Bueno, eso es lo que hay, si quieres comentarme algo al respecto ya sabes, mi email es manu_condeXXXX@XXXhotmail.com (recuerda quitar las X)

Si te he ayudado con esto, estaré encantado de saberlo.