martes, 26 de agosto de 2008

Problema (y solución) al instalar .NET Framework 3.5

Es lo que tiene estar siempre con lo último, que eres de los primeros en encontrar cosas raras :P El asunto es que habíamos preparado un instalador para el .NET Framework 3.5 (ahora lo estamos modificando para el SP1) y empezamos a hacer pruebas en diferentes sistemas operativos:


  • con XP SP2 -> todo bien

  • con XP SP3 -> todo bien

  • con Vista SP1 -> todo bien

  • con Windows 2003 Server SP1 -> todo bien



Todo iba sobre raíles y era demasiado bonito (la ley de Murphy acechaba y no tardó en aparecer) así que probamos con un Small Bussines Server 2003 SP1 y nos saltó un bonito error:

Microsoft .NET Framework 3.5 ha tenido problemas durante la instalación.
El programa de instalación no ser completó correctamente.


Vaya, no me dice nada que me sirva, menos mal que en el registro de errores encontramos lo siguiente:

[XX/XX/XX,XX:XX:XX] XPSEPSC Installer: [2] Setup Failed on component XPSEPSC Installer
[XX/XX/XX,XX:XX:XX] WapUI: [2] DepCheck indicates XPSEPSC Installer is not installed.
[XX/XX/XX,XX:XX:XX] XPSEPSC Installer: [2] Error code 1603 for this component means "Error grave durante la instalación."


Parece ser que no pudo instalar un componente que necesita el .NET Framework, veamos de qué se trata:

The XPSDrv Redist Package (XPSEPSC) contains the system and driver components that enable the XPSDrv print drivers to be installed and to enable the XPSDrv filter pipeline component to function.

¿Son componentes de la cola de impresión? Pues eso parece, no podemos instalar el .NET Framework porque no podemos instalar este paquete. Bueno, vamos a buscar una solución, ya que teníamos el instalador de únicamente este paquete (XPSEPSC-x86-en-US.exe o XPSEPSC-amd64-en-US.exe) lo ejecutamos para ver cuál era el auténtico problema, obteniendo el siguiente error:

Setup could not verify the integrity of the file Update.inf. Make sure the Cryptographic service is running in this computer.

Como os podréis imaginar lo primero que hicimos fue comprobar si el servicio de criptografía (Servicio de cifrado en el manager de Servicios) estaba activado y sí, lo estaba.
En el readme del instalador del .NET Framework 3.5 estaba especificado el error y planteaba una posible solución:

2.1.12. Installation fails if the Print Spooler Service is not running
The installation of the XPSEPSC component requires that the Print Spooler Service be running in the ‘Started’ state. If the Print Spooler Service is not running, the XPSEPSC installer will fail.

To resolve this issue:

Start the Print Spooler service before you install .NET Framework. To do this:
1. Click Start, point to Settings, click Control Panel, and then double-click Administrative Tools.
2. Double-click Services, click to select Services (Local), right-click Print Spooler, and then click Properties.
3. Click Start, and then click OK.

Pero no funcionó, así que buscamos el error en el Technet y encontramos lo siguiente: You cannot install some updates or programs. Os recomiendo que ni intentéis leerlo en el “castellano” del traductor automático porque no os enteraréis de nada.

En este documento se presentan 11 posibles soluciones, algunas más fáciles que otras, y para resumir diré que la que funcionó en nuestro caso fue la siguiente:

Method 4: Reregister DLL files that are associated with Cryptographic Services
To register .dll files that are associated with Cryptographic Services, follow these steps:


1. Click Start, click Run, type cmd in the Open box, and then OK.Note On a Windows Vista-based computer, click Start, type cmd in the Start Search box, right-click cmd.exe, and then click Run as administrator.

2. At the command prompt, type the following commands, and press ENTER after each command:
regsvr32 /u softpub.dll

regsvr32 /u wintrust.dll
regsvr32 /u initpki.dll
regsvr32 /u dssenh.dll
regsvr32 /u rsaenh.dll
regsvr32 /u gpkcsp.dll
regsvr32 /u sccbase.dll
regsvr32 /u slbcsp.dll
regsvr32 /u mssip32.dll
regsvr32 /u cryptdlg.dll
exit

Note Click OK if you are prompted.Note Microsoft Windows 2000 does not include the Sccbase.dll file. If you are running a version of Windows 2000, omit the Sccbase.dll file.

3. Restart your computer.

4. Click Start, click Run, type cmd in the Open box, and then click OK.

5. At the command prompt, type the following commands, and press ENTER after each command:
regsvr32 softpub.dll

regsvr32 wintrust.dll
regsvr32 initpki.dll
regsvr32 dssenh.dll
regsvr32 rsaenh.dll
regsvr32 gpkcsp.dll
regsvr32 sccbase.dll
regsvr32 slbcsp.dll
regsvr32 mssip32.dll
regsvr32 cryptdlg.dll
exit

Note Click OK if you are prompted.Note Microsoft Windows 2000 does not include the Sccbase.dll file. If you are running a version of Windows 2000, omit the Sccbase.dll file.

6. Restart the computer.

He de reconocer que nos funcionó sin necesidad de reiniciar la máquina, después de volver a registrar las DLLs volvimos a ejecutar el instalador y fue todo como la seda :D

PD: en caso de que falle la instalación y no tengáis información de qué ha pasado podéis consultar los ficheros de log que crea el instalador:

- dd_dotnetfx35install.txt
- dd_dotnetfx35error.txt
- dd_depcheck_NETFX_EXP_35.txt

que dependiendo de si se finaliza o no la instalación estarán en un directorio temporal o uno definitivo en la carpeta WINDOWS, os recomiendo que los busquéis porque están bastante “escondidos”.

3 comentarios:

Sibaja dijo...

En mi caso, intenté todos estos pasos y siempre se detuvo al verificar el archivo [update.inf] de XPSEPSC-x86-en-US. La solución fue instalar por el Centro de Descargas de Microsoft la versión .NET Framework 3.5 SP1. Previo a esto, apliqué el diagnóstico de Microsoft Office 2007, pero no sé si la reparación que hizo tuvo algún efecto positivo.

pbousan dijo...

Pues sí sibaja, hay algo raro con el .NET Framework y el Office, a nosotros también nos pasó algo con eso, en cuanto tenga un rato lo posteo.

DarkBlood dijo...

funciona el metodo 4 de refistracion de dlls, pero como es mucho trabajo hice una automatizacion con dos batch files.


abran notepad, copien y pegen lo que viene a continucacion y al guardar el archivo pongale extension .bat, con este nombre por ej:

XPSEPSC-x86-en-US (1er paso).bat




@echo off

echo PASO 1) Desregistracion de dll's para poder instalar el componente de windows "XPSDrv Redist Package (XPSEPSC)" XPSEPSC-x86-en-US.exe
pause

echo regsvr32 /su softpub.dll
regsvr32 /su softpub.dll
echo regsvr32 /su wintrust.dll
regsvr32 /su wintrust.dll
echo regsvr32 /su initpki.dll
regsvr32 /su initpki.dll
echo regsvr32 /su dssenh.dll
regsvr32 /su dssenh.dll
echo regsvr32 /su rsaenh.dll
regsvr32 /su rsaenh.dll
echo regsvr32 /su gpkcsp.dll
regsvr32 /su gpkcsp.dll
echo regsvr32 /su sccbase.dll
regsvr32 /su sccbase.dll
echo regsvr32 /su slbcsp.dll
regsvr32 /su slbcsp.dll
echo regsvr32 /su mssip32.dll
regsvr32 /su mssip32.dll
echo regsvr32 /su cryptdlg.dll
regsvr32 /su cryptdlg.dll

echo Listo! Ahora reinicia la pc y luego segui con el paso 2.
pause





-----------


creen otro archivo bat, con este nombre por ej:

XPSEPSC-x86-en-US (2do paso).bat





@echo off

echo -
echo PASO 2) Registracion de dll's para poder instalar el componente de windows "XPSDrv Redist Package (XPSEPSC)" XPSEPSC-x86-en-US.exe
echo -
pause

echo -
echo Iniciando servicios:
echo -

echo NET START "Servicios de cifrado"
NET START "CryptSvc"
echo NET START "Cola de impresion"
NET START "Spooler"


pause
echo -
echo Volviendo a registrar las dll's:
echo -

echo regsvr32 /s softpub.dll
regsvr32 /s softpub.dll
echo regsvr32 /s wintrust.dll
regsvr32 /s wintrust.dll
echo regsvr32 /s initpki.dll
regsvr32 /s initpki.dll
echo regsvr32 /s dssenh.dll
regsvr32 /s dssenh.dll
echo regsvr32 /s rsaenh.dll
regsvr32 /s rsaenh.dll
echo regsvr32 /s gpkcsp.dll
regsvr32 /s gpkcsp.dll
echo regsvr32 /s sccbase.dll
regsvr32 /s sccbase.dll
echo regsvr32 /s slbcsp.dll
regsvr32 /s slbcsp.dll
echo regsvr32 /s mssip32.dll
regsvr32 /s mssip32.dll
echo regsvr32 /s cryptdlg.dll
regsvr32 /s cryptdlg.dll


echo -
echo Todo terminado, ahora finalmente vas a poder instalar el componente de windows (XPSEPSC-x86-en-US.exe).
echo -
pause


start XPSEPSC-x86-en-US.exe