Cómo integrar Service Pack 1 en un DVD de Windows 7/Server 2008 R2

Ante la inminente llegada del primer service pack para Windows 7/Server 2008 R2, mucha gente aprovecha estos momentos para preparar sus sistemas para acoger la actualización. Si se requiere instalar una nueva copia del sistema operativo, es un buen momento para hacerlo usando una imagen que ya lo tenga integrado, para ahorrarnos el tiempo de acudir posteriormente a Windows Update y descargar la actualización.

La integración de service packs en Windows Vista y Windows 7 no es tan sencilla como lo era en Windows XP, por ejemplo. En los primeros no está soportada la integración de service packs en una imagen offline (es decir, no arrancada), por lo que tendremos que instalar el service pack en un sistema arrancado y “generalizarlo” (es decir, quitar todo aquello que lo hace dependiente de la máquina, tales como controladores instalados y demás). En este artículo voy a describir un posible método de integración sobre una edición de Windows 7. Vamos a necesitar lo siguiente:

  • Un DVD o imagen ISO con Windows 7/Server 2008 R2
  • Windows AIK para Windows 7, que se puede descargar gratuitamente desde http://www.microsoft.com/downloads/details.aspx?familyid=696DD665-9F76-4177-A811-39C26D3B3B34&displaylang=es.
  • Guardar una copia de Service Pack 1 para Windows 7/Server 2008 R2 en un DVD o en un dispositivo de almacenamiento USB.
  • Una máquina de laboratorio que disponga de al menos dos particiones (cada una de unos 20 GB de tamaño pues van a albergar un sistema operativo cada una y además la instalación de SP1 requiere de aproximadamente 5 GB libres.

Comenzamos la integración

El primer paso consiste en instalar en el sistema principal la aplicación Windows AIK, que contiene herramientas especializadas que nos servirán para manipular la imagen integrada del sistema operativo.

Una vez instalada esta aplicación, copie el contenido del DVD o ISO de Windows 7/Server 2008 R2 en una carpeta de este sistema principal, por ejemplo C:\DVD.

En la segunda partición que tiene libre, instale del modo habitual una edición de Windows 7/Server 2008 R2. Este será el sistema que actúe como base para la integración del service pack, así que le recomiendo que instale la edición que use más a menudo.

Cuando finalice la instalación, le aparecerá un asistente para crear usuarios, configurar la zona horaria, etc. Este asistente recibe el nombre de OOBE (Out Of the Box Experience). En esta imagen puede ver qué aspecto tiene:

OOBE

En este momento, sin rellenar nada, pulse la combinación de teclas Ctrl+Mayúsculas+F3. El sistema se reiniciará en modo auditoría. El modo auditoría lo suelen usar los OEM para personalizar las imágenes de Windows 7 e instalar todos los programas de serie que suelen incluir (antivirus, Office, etc.). Puede informarse más sobre el modo auditoría en este artículo: http://technet.microsoft.com/en-us/library/dd744337(WS.10).aspx

Una vez se haya reiniciado el sistema en modo auditoría, introduzca el DVD o dispositivo de almacenamiento USB que contiene Service Pack 1 y proceda a instalarlo. Es recomendable que seleccione la casilla para reiniciar el sistema automáticamente cuando finalice la instalación. Dicho proceso de instalación puede llevar bastante tiempo, dependiendo de la configuración hardware de la máquina.

Una vez se haya instalado el service pack, el sistema se reiniciará automáticamente. Cuando arranque de nuevo el sistema, en la ventana de título Herramienta de preparación del sistema (SysPrep), seleccione la opción Iniciar la configuración rápida (OOBE) del sistema, marque la casilla Generalizar, y seleccione la opción Reiniciar.

Inicie ahora el sistema operativo principal, donde ha instalado Windows AIK.

Abra Inicio, Todos los programas, seleccione Microsoft Windows AIK, seleccione con el botón derecho Línea de comandos de las herramientas de implementación y pulse sobre Ejecutar como administrador.

Teclee este comando y pulse INTRO:

dism /Image:D: /Cleanup-Image /spsuperseded

(donde D: es la unidad que contiene al sistema operativo que tiene SP1 instalado)

Este comando eliminará archivos antiguos que quedan tras la instalación del service pack, evitando también que el usuario pueda desinstalarlo (lo cual carece de sentido en una instalación integrada).

A continuación vamos a crear una imagen WIM a partir del sistema operativo generalizado. Teclee este comando:

imagex /capture D: C:\Install.wim “Windows 7 Ultimate” “Windows 7 Ultimate SP1 (x86)” /compress maximum /flags “Ultimate”

El proceso puede tardar más de media hora, dependiendo del hardware del equipo.

Cuando finalice, tendrá una imagen de instalación (Install.wim) que contiene la edición de Windows 7 que haya elegido, así como SP1 integrado.

Ya solo falta sustituir el fichero C:\DVD\sources\install.wim por el nuevo fichero C:\install.wim que se acaba de crear y generar una ISO de Windows 7, mediante la herramienta Oscdimg.exe:

oscdimg –bC:\DVD\boot\etfsboot.com –u2 –h –m –lWindows7_SP1_x86_ES C:\DVD C:\Windows7_SP1_x86_ES.iso

Recuerde que si la imagen tiene un tamaño superior a 4,5 GB, debe crear un fichero Bootorder.txt para que los ficheros de arranque se sitúen correctamente, tal y como describo en los pasos finales de este otro artículo.

Probamos nuestro DVD integrado

Procedemos a instalar nuestro DVD con Windows 7/Server 2008 R2 SP1 y al finalizar la instalación abrimos Inicio, hacemos clic con el botón derecho sobre Equipo, Propiedades, y observamos que todo ha ido bien:

SP1_RC

Nota: La imagen representa los números de versión de la versión RC del SP1, no de la versión final.

Hay otras formas de integrar Windows 7 SP1 en un único DVD, usando otras herramientas de instalación desatendida de Microsoft. También existe la posibilidad de integrar varias ediciones, arquitecturas e idiomas, usando los conceptos que explico en mi otro artículo sobre integración de Windows 7. Tenga en cuenta que siempre se deben instalar las actualizaciones después de los paquetes de idiomas. De lo contrario la instalación del paquete de idiomas “macharía” los archivos dependientes del idioma que pudiera contener la actualización, y por lo tanto tendría que reinstalarla.

Esto lo dejo como ejercicio al lector interesado, con posibilidad de discutirlo en la sección de comentarios de este artículo o bien en mis foros: http://www.wintecnico.com/foros

¡Feliz 2011!

Otro año que llega, y, aunque parece que fue ayer cuando comenzó este blog, ya han pasado dos años y medio desde su nacimiento. En él he intentado ofrecer información interesante y útil sobre Windows y a la vez derribar algunos “mitos” o “inexactitudes” que han acompañado a este sistema operativo. Siempre lo he pretendido hacer desde una perspectiva neutral y nunca desde una perspectiva “fanboy”, ya que pienso que Windows no es la solución universal para cualquier necesidad. El futuro cercano va a deparar muchas novedades en lo que a los sistemas operativos respecta y Microsoft no debería dormirse en los laureles si quiere que Windows siga siendo un sistema operativo competitivo. Estoy seguro de que las mentes brillantes de Microsoft tendrán la capacidad de innovación y la creatividad necesarias para que así sea.

Además, 2010 fue el año de nacimiento oficial de www.wintecnico.com, un portal que pretende recoger soluciones a problemas con Windows (especialmente con Windows 7). La comunidad de www.wintecnico.com/foros cada vez es mayor (ya hay 42 miembros registrados), y en ella se han analizado y discutido problemas muy interesantes con Windows.

En 2010 habrá novedades, seguro, y espero que sean novedades útiles tanto para las personas que quieren ver a Windows desde una perspectiva diferente, como para aquellas que simplemente quieren una solución para su problema y que tras perder horas buscando en Internet no han conseguido solucionar.

¡Feliz año!

Cómo elegir la mejor imagen de fondo para la pantalla de bienvenida

Windows 7 es el primer sistema operativo de Microsoft que permite a los OEM establecer una imagen cualquiera como fondo de la pantalla de bienvenida. Sin embargo, como la pantalla de bienvenida de Windows 7 solo soporta imágenes de ciertas resoluciones, es posible que estas tengan que ser escaladas para que ocupen toda la pantalla, con el consiguiente efecto estético negativo y, por qué no, con la consiguiente degradación en el tiempo de arranque del sistema. Este artículo dará las pautas para lograr la imagen de fondo perfecta.

¿Qué resoluciones soporta Windows 7 para la imagen de fondo de la pantalla de bienvenida?

Windows 7 soporta las siguientes resoluciones:

  • 1280×1024
  • 1024×768
  • 1280×960
  • 1600×1200
  • 1440×900
  • 1920×1200
  • 1280×768
  • 1360×768

Además también se soportan las resoluciones análogas en estilo de orientación vertical, donde se intercambian ancho y alto, es decir: 1024×1280, 768×1024, etc.

La clave es la relación de aspecto de la pantalla

Lo principal a la hora de elegir una resolución para la imagen de fondo de la pantalla de bienvenida es la relación de aspecto que tenga, entendiendo esta como el cociente entre ancho y alto (en píxeles). Aunque existen multitud de posibles resoluciones de pantalla, si contamos las más frecuentes y calculamos sus relaciones de aspecto, nos quedaremos con muchas menos. En el caso de las resoluciones de pantalla soportadas por Windows 7 para la imagen de fondo de la pantalla de bienvenida (que son las más frecuentes entre los usuarios), estas quedan agrupadas en 5 clases:

Relación de aspecto

Resoluciones soportadas

1,25 1280×1024
1,33 1024×768, 1280×960 y 1600×1200
1,60 1440×900 y 1920×1200
1,67 1280×768
1,77 1360×768

 

A la hora de seleccionar una imagen para la pantalla de bienvenida, Windows buscará aquella cuya relación de aspecto coincida exacta o aproximadamente con alguna de las categorías anteriores. Una vez encontrada, el sistema busca entre las resoluciones de pantalla alguna que coincida exactamente con la resolución de pantalla del usuario. Esto se hace con el objetivo de evitar escalar la imagen, puesto que se trata de un procedimiento complejo computacionalmente. En caso de que no haya ninguna coincidencia, el sistema elegirá cualquiera de las resoluciones posibles (para la relación de aspecto hallada) y escalará la imagen convenientemente.

Como conclusión, si su resolución de pantalla coincide exactamente con alguna de las soportadas por Windows 7, lo ideal es que cree una imagen con esa misma resolución. De no ser así, calcule la relación de aspecto de su pantalla (ancho / alto, si se trata de una orientación horizontal) y examine en la tabla anterior las resoluciones soportadas. En caso de que solo haya una alternativa, cree una imagen con esa misma resolución; en caso de que haya varias, pruebe con imágenes de esas resoluciones y elija la que mejor resultados le ofrezca.

Por supuesto, si le gusta exprimir hasta la última gota el rendimiento de su sistema, puede cambiar la resolución de trabajo de la pantalla para que coincida con alguna de las soportadas, y evitar así que se tenga que escalar la imagen.

¿Qué significan precisamente los rangos de fechas de la búsqueda de Windows 7?

Un usuario preguntaba qué representan exactamente los rangos de fecha de modificación que aparecen en el cuadro de búsqueda de Windows 7 (hace mucho tiempo, al principio de este mes, etc.). A modo de referencia, esta es la explicación de los correspondientes rangos:

  • Hace mucho tiempo: En algún año anterior al actual.
  • Al principio de este año: Desde que comenzó el año actual hasta el final del mes pasado.
  • Al principio de este mes: Desde que comenzó el mes hasta la semana antepasada.
  • La semana pasada: No requiere explicación.
  • Al principio de esta semana: Desde que comenzó la semana hasta anteayer.
  • Ayer: No requiere explicación.

Espero que esto aclare un poco más las búsquedas por fecha de modificación en Windows 7, para que se sepa exactamente qué se puede esperar encontrar y qué no.

El caso del fondo de escritorio inmutable

Con este artículo inicio una temática que apenas había tratado hasta ahora en el blog y es la de programación para Windows y los fallos más comunes e interesantes que he ido viendo en Internet. Hoy vamos a ver un error no poco frecuente entre la gente que empieza a adentrarse en la programación para Windows.

El caso de hoy es el de un usuario que quería cambiar el fondo de escritorio de su máquina de manera inmediata mediante un programa que hiciera uso de la API de programación de Windows. La función que nos proporciona la API para cambiar el fondo de escritorio es SystemParametersInfo, con el primer parámetro establecido a la constante SPI_SETDESKWALLPAPER. El programa que había escrito el usuario era, de manera simplificada, el siguiente:

int _tmain(int argc, _TCHAR* argv[])
{
    char wallString[200];

    strcpy(wallString, "C:\\Users\\Public\\Pictures\\Sample Pictures\\Desert.jpg");

    SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (void*)wallString, SPIF_SENDWININICHANGE);  

    return 0;
}

Si examinamos la documentación de la función SystemParametersInfo, el programa tiene buen aspecto: El primer parámetro, SPI_SETDESKWALLPAPER, le indica al sistema que lo que se va a cambiar es el fondo de escritorio; el segundo parámetro está establecido en 0, ya que no es aplicable cuando el primer parámetro está establecido en SPI_SETDESKWALLPAPER; el tercer parámetro es la cadena correspondiente al fondo de escritorio; y el último parámetro le indica al Windows que debe notificar del cambio de fondo a todas las ventanas de primer nivel del sistema, de forma que el cambio se vea inmediatamente.

Sorprendentemente para el usuario, el código no funciona, aunque en otros sistemas antiguos lo había hecho perfectamente. ¿Cuál sería el problema?

Vamos a fijarnos bien en la variable local “wallString”. Está declarada como un vector de tipo “char”. En C/C++, el tipo de datos “char” representa por defecto a un entero con signo entre –128 y 127 y, por lo tanto, ocupa un byte. La documentación de la función SystemParametersInfo dice que el tercer parámetro debe recibir una variable de tipo PVOID, que es un “alias” de un puntero a una dirección de memoria que contenga cualquier tipo de datos, es decir, lo que en C++ se expresa como void*.

Aunque SystemParametersInfo venga documentada como función en MSDN, en realidad es una macro de C que “delega” el trabajo a la verdadera función, dependiendo de si el programa está compilado como Unicode (SystemParametersInfoW) o no (SystemParametersInfoA). Así que hoy en día es más que probable que internamente el programa esté llamando a SystemParametersInfoW. La clave está en la interpretación de la cadena de caracteres que se pasa como tercer parámetro. El usuario estaba pasando una cadena ANSI (1 byte por caracter), mientras que el sistema la estaba interpretando como Unicode (2 bytes por caracter). Este es un esquema gráfico de lo que ocurre por lo bajo:

Unicode

Los números hexadecimales representan cada carácter (un dígito hexadecimal es medio byte). Al interpretar la cadena con caracteres anchos (de 2 bytes) como unidad básica, se traduce en una ristra de caracteres “extraños” y por consiguiente el fondo de escritorio no se cambia correctamente.

Lo ideal hoy en día es usar Unicode en todo lugar. Si se usa el formato de carácter de Windows TCHAR, éste se convertirá en un carácter normal (char) en sistemas antiguos que no soportan Unicode y en un carácter ancho (wchar) en sistemas Unicode. La “T” que precede a “CHAR en “TCHAR” indica que se trata de un tipo de datos general que se convertirá apropiadamente en la versión ANSI o Unicode dependiendo de los parámetros de compilación. Si necesitamos un puntero en lugar de un único carácter, podemos usar el tipo LPTSTR (Long Pointer to String). Este sería el programa resultante:

int _tmain(int argc, _TCHAR* argv[])
{
    LPTSTR lpString = TEXT("C:\\Users\\Public\\Pictures\\Sample Pictures\\Desert.jpg");

    SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, lpString, SPIF_SENDWININICHANGE);  

    return 0;
}

La moraleja del artículo es que siempre hay que tener en cuenta el tipo de cadena que empleemos. La API de Windows ofrece muchos nuevos tipos de datos de caracteres que conviene interiorizar para evitar este tipo de fallos y ser más productivos mientras se aprende programación usando la API de Windows. Otro punto destacado de la programación con cadenas es la posibilidad de incluir vulnerabilidades de seguridad con cierta facilidad. Trataremos este punto en un próximo artículo.

En el futuro iré tratando otros problemas más complejos que pueden surgir al programar usando la API de Windows, especialmente casos en los que la documentación oficial no ofrece información, o bien la que ofrece es ambigua, o bien inexacta.

Sobre las distintas opciones de actualización a Windows 7

En este artículo voy a resumir las posibilidades existentes de actualización a Windows 7, tanto desde sistemas anteriores como desde versiones menos completas de este sistema operativo. También explicaré en detalle en qué consiste Windows Anytime Upgrade, y por qué es técnicamente diferente a lo habitualmente conocemos como una actualización de sistema operativo.

Posibilidades de actualización

Existen tres posibilidades de actualización a Windows 7 dependiendo del sistema operativo y de la edición de la que partamos:

  • Actualización no disponible: Típicamente estamos intentando actualizar desde Windows XP o sistemas anteriores. La única opción sería realizar una instalación limpia, salvaguardando antes los datos de valor, o usando Windows Easy Transfer.
  • Actualización disponible: Si partimos de ciertas ediciones de Windows Vista (SP1 o superiores) existe la posibilidad de actualizar a Windows 7 sin perder datos mediante la típica opción de actualización del programa de instalación. Si podemos permitirnos el tiempo necesario para realizar una instalación limpia, personalmente lo recomiendo a este tipo de actualización, pues herederá los problemas que tuviéramos en Windows Vista (y podría añadir nuevos). La instalación limpia siempre que sea posible es la manera mejor de hacer llegar Windows 7 a nuestro equipo “por la puerta grande”.
  • WAU (Windows Anytime Upgrade): Esta opción permite actualizar desde una edición de Windows 7 a otra más completa. Técnicamente el proceso de instalación no tiene que ver con una actualización desde un sistema anterior y además podemos usar cualquier tipo de clave de Windows 7 que tengamos, no solamente las que adquiramos desde la web de Microsoft.

Tabla resumen

Una vez descritas las tres posibilidades de actualización, detallo en esta tabla todas las posibilidades de actualización a Windows 7:

Desde/Hacia

7 Starter

7 Home Basic

7 Home Premium

7 Professional

7 Enterpise

7 Ultimate

Vista Home Basic No No No
Vista Home Premium No No No No
Vista Business No No No
Vista Enterprise No No No No No
Vista Ultimate No No No No No
7 Starter Rep. No WAU WAU No WAU
7 Home Basic No Rep. WAU WAU No WAU
7 Home Premium No No Rep. WAU No WAU
7 Professional No No No Rep. No WAU
7 Enterprise No No No No Rep. WAU
7 Ultimate No No No No No Rep.

 

Nota: Las versiones de Windows Vista deben tener instalado como mínimo Service Pack 1.

Leyenda: “No” – No está disponible la actualización. “Sí” – Actualización disponible. “Rep.” – Reparación del sistema operativo. “WAU” – Windows Anytime Upgrade.

Para facilitar la lectura, he marcado en la tabla en negrita las combinaciones posibles.

Windows Anytime Upgrade ¿en qué consiste realmente?

Windows Anytime Upgrade (WAU en adelante) es una característica incorporada a Windows 7 que permite actualizar el sistema operativo a una edición superior, si existe un camino de actualización (ver tabla anterior). Al iniciar WAU el sistema nos invitará a comprar una clave de producto en el sitio web de Microsoft o bien proporcionar una clave (ya sea comprada en la tienda de Microsoft, de actualización o versión completa, perteneciente a una suscripción técnica MSDN/Technet, etc.). Cualquier clave “retail” o de actualización de esa edición superior de Windows 7 será admitida por WAU, siempre y cuando exista un camino soportado de actualización.

WindowsAnytimeUpgrade.exe es el ejecutable principal. Al ejecutarlo, el sistema comprueba si la edición es actualizable mediante WAU y si no hay aplicada una directiva de grupo (claves de registro Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\WAU, bajo las ramas HKCU y HKLM, valor Disabled con contenido 1).

Cabe destacar que podemos ejecutar WindowsAnyTimeUpgrade.exe desde la línea de comandos y que admite como parámetro la clave de la edición de Windows 7 a la que queremos pasar. Por tanto, podemos utilizar este ejecutable en baterías de scripts que automaticen todo el procedimiento. El sistema seguidamente procede a validar la clave de producto que le hemos pasado, así como comprobar que el sistema esté activado correctamente. De no ser así, el sistema nos ofrecerá la opción de activarlo en este momento.

Antes de comenzar con la actualización propiamente dicha, Windows 7 crea un punto de restauración por si algo fuera mal. La actualización se realiza mediante el ejecutable DISM.exe, que activa y configura los componentes correspondientes a la versión de Windows 7 a la que queremos actualizar. No necesitaremos disponer de un DVD de Windows 7 con esa edición, puesto que al instalar cualquier edición de Windows 7 está presente en nuestro disco todo el contenido completo del sistema operativo en su edición Ultimate. El proceso de actualización de WAU es similar a lo que ocurre cuando añadimos características de Windows (como IIS o Telnet) desde Panel de control, Programas.

Una vez acabada la actualización de WAU, se instalarán actualizaciones de Windows Update para que el sistema resultante quede completamente al día. Este paso se realiza si la configuración del usuario con respecto a las actualizaciones automáticas de Windows Update no lo impide. Algunas actualizaciones no se instalarán, y son aquellas que requieren intervención por parte del usuario, por ejemplo para aceptar un EULA (para que la experiencia de usuario no sea mala). Si fallara por algún motivo la instalación de las actualizaciones, no se detendrá ni fallará el proceso de actualización de WAU.

Una vez finalizada la actualización, se añade una entrada de registro a la clave RunOnce del registro para que se ejecute WindowsAnytimeUpgradeResults.exe nada más volver a iniciar sesión. Esto sirve para informar al usuario de si el proceso de actualización concluyó con éxito o no.

¿Qué hacer en caso de fallo?

Si WAU no ha podido actualizar nuestra edición de Windows 7, hay que examinar los ficheros de reporte. Estos son los ficheros de reporte que deberemos examinar en primer lugar en busca de información precisa sobre lo que ha ocurrido:

  • %UserProfile%\AppData\Local\Microsoft\Windows\Windows Anytime Upgrade\*.log
  • %SystemRoot%\Logs\CBS\CBS.log.

Algunas soluciones generales que quizá solucionen el problema son reiniciar el sistema por si hubiera operaciones pendientes que estuvieran interfiriendo en la actualización, analizar el disco con la herramienta Chkdsk, o usar esta herramienta de Microsoft.

Si tuviera problemas con WAU que no ha podido solucionar, lo mejor es que abra un nuevo tema en mis foros, http://www.wintecnico.com/foros, para facilitar su seguimiento.

Cómo crear un DVD de Windows 7 (x86/x64) con cuatro idiomas integrados

En otros artículos expliqué cómo integrar varias arquitecturas de Windows 7 en un mismo DVD, así como varios idiomas de Windows 7. En este artículo vamos a combinar las técnicas de ambos artículos para explicar, con todo detalle, cómo crear un DVD de Windows 7 Ultimate que contenga las ediciones de 32 y de 64 bits, así como 3 idiomas: inglés (Estados Unidos), español, portugués (Portugal) y portugués (Brasil). Debido a la extensión del artículo, es recomendable que lo imprima y guarde como referencia para consultarlo con más comodidad.

Preliminares

Antes de comenzar, deberá disponer de una licencia de Windows 7 Ultimate así como acceso tanto a la versión de 32 bits como a la de 64 bits (en formato DVD o ISO). También podría seguir este tutorial con Windows 7 Enterprise, pues es la otra edición de Windows 7 que permite instalar varios idiomas en un mismo equipo. Sin pérdida de generalidad, en este tutorial supondremos que el idioma de Windows 7 Ultimate 32 bits y 64 bits sobre el que se realizará la integración tiene como idioma base el inglés (Estados Unidos).

Para realizar la integración, vamos a usar las herramientas incluidas en el Windows AIK, que se puede descargar gratuitamente desde http://www.microsoft.com/downloads/details.aspx?FamilyID=696dd665-9f76-4177-a811-39c26d3b3b34&displayLang=es. Instálelas en una máquina destinada a realizar la integración. Esta máquina deberá disponer de un mínimo de 15 GB de espacio libre en disco, aproximadamente. Quizá los requerimientos exactos en su caso sean menos exigentes, pero es recomendable que haya suficiente espacio en disco en todo momento para evitar corromper la imagen resultante.

Por supuesto, deberá descargar los paquetes de idiomas español, portugués (Portugal) y portugués (Brasil), tanto en sus versiones de 32 bits, como sus versiones en 64 bits. Para ahorrarle trabajo, aquí dejo los correspondientes enlaces al sitio de Windows Update:

Español (32 bits): windows6.1-kb972813-x86-es-es_1943a073d8f00e387301deb22cd177bf77319ee8.exe

Español (64 bits): windows6.1-kb972813-x64-es-es_2e593c26d9e23ad8176224a53c68a04f996ee014.exe

Portugués (Portugal) (32 bits): windows6.1-kb972813-x86-pt-pt_4165bd9cd083abd8ddd81986e18b1fd86aab5ce9.exe

Portugués (Portugal) (64 bits): windows6.1-kb972813-x64-pt-pt_f8310aa4a73841aec29b3f4e74ecaece56b695e9.exe

Portugués (Brasil) (32 bits): windows6.1-kb972813-x86-pt-br_0a3fe79820d6d199dd43495d4efa5c40f270e45a.exe

Portugués (Brasil) (64 bits): windows6.1-kb972813-x64-pt-br_276b65f3b6b2657c8fe936f9841dc1243e02dc7b.exe

Estructura de directorios inicial

Para comenzar, cree los siguientes directorios dentro de alguna carpeta vacía dedicada a este procedimiento de integración:

  • \Distribution
  • \Offline
  • \ScratchDir
  • \Boot

Copie en el directorio \Distribution el contenido del DVD o ISO de Windows 7 Ultimate de 32 bits. Cree dentro de este directorio un subdirectorio de nombre \langpacks que dentro contenga los subdirectorios \es-es, \pt-pt y \pt-br. Deje dentro de cada uno de estos subdirectorios el paquete de idiomas en formato .cab correspondiente a cada idioma. Los paquetes de 32 bits denomínelos “Lp.cab” y los de 64 bits “Lp64.cab”. Para extraer el fichero lp.cab a partir del .exe, haga doble clic sobre el .exe y en el momento que aparezca el fichero .cab en el mismo directorio que el fichero .exe, cámbielo momentáneamente de nombre (para evitar que Windows lo elimine a los pocos segundos). Cancele la instalación del paquete de idiomas.

Cree aparte unas carpetas temporales, por ejemplo

C:\LPs\es-es\expanded

C:\LPs\pt-pt\expanded

C:\LPs\pt-br\expanded

A continuación abra una ventana de línea de comandos (Inicio, Todos los programas, Accesorios, Símbolo de sistema) y teclee estos comandos:

expand.exe -f:* <Ruta Distribution>\langpacks\es-es\lp.cab C:\LPs\es-es\expanded

expand.exe -f:* <Ruta Distribution>\langpacks\pt-pt\lp.cab C:\LPs\pt-pt\expanded

expand.exe -f:* <Ruta Distribution>\langpacks\pt-br\lp.cab C:\LPs\pt-br\expanded

xcopy C:\LPs\es-es\expanded\sources\license\* <Ruta Distribution>\sources\license\ /cherkyi

xcopy C:\LPs\es-es\expanded\setup\sources\* <Ruta Distribution>\sources\ /cherkyi

xcopy C:\LPs\pt-pt\expanded\sources\license\* <Ruta Distribution>\sources\license\ /cherkyi

xcopy C:\LPs\pt-pt\expanded\setup\sources\* <Ruta Distribution>\sources\ /cherkyi

xcopy C:\LPs\pt-br\expanded\sources\license\* <Ruta Distribution>\sources\license\ /cherkyi

xcopy C:\LPs\pt-br\expanded\setup\sources\* <Ruta Distribution>\sources\ /cherkyi

Este debería ser el aspecto final del directorio \Distribution:

Aspecto del directorio \Distribution en Explorador de Windows.

Y este sería parte del contenido del subdirectorio \sources:

Aspecto del subdirectorio \sources en Explorador de Windows

En este punto ya disponemos de un directorio \Distribution con todo preparado para un albergar varios idiomas. El resto del artículo tratará sobre la integración de los paquetes de idiomas en cada edición de Windows 7, juntar ambas en una misma imagen Install.wim, e integrar los paquetes de idiomas en la imagen de instalación (Boot.wim).

Montaje de la imagen de 32 bits e integración de los paquetes de idiomas

Abra Inicio, Todos los programas, Microsoft Windows AIK, seleccione Deployment Tools Command Prompt con el botón derecho del ratón y escoja Ejecutar como administrador.

En este artículo la edición de Windows 7 copiada en el directorio Distribution contiene varias ediciones de Windows 7 32 bits. Concretamente, la imagen con índice 5 es la correspondiente a Windows 7 Ultimate, y es la que se va a montar. Para ver el listado de imágenes contenidas en un fichero .wim, teclee este comando y pulse INTRO:

Imagex /info <Ruta Distribucion>\sources\install.wim

Fíjese en el atributo “index” de las etiquetas “image” para identificar la imagen de Windows 7 Ultimate.

En la ventana de línea de comandos teclee el siguiente comando y pulse INTRO:

Dism /Mount-WIM /WimFile:<Ruta Distribution>\sources\install.wim /index:5 /MountDir:<Ruta Offline>

A continuación vamos a instalar los 3 paquetes de idiomas de 32 bits en la imagen que acabamos de montar:

Dism /Image:<Ruta Offline> /ScratchDir:<Ruta ScratchDir> /Add-Package /PackagePath:<Ruta Distribution>\langpacks\e
s-es\lp.cab /PackagePath:<Ruta Distribution>\langpacks\pt-pt\lp.cab /PackagePath:<Ruta Distribution>\langpacks\pt-br\lp.cab

Tenga en cuenta que esta operación podría tardar bastantes miinutos, pues se están instalando 3 paquetes de idiomas en la imagen offline.

A continuación se debe volver a generar el fichero Lang.ini contenido en el directorio \Distribution\sources. Para ello, introduzca este comando:

Dism /image:<Ruta Offline> /Gen-LangINI /distribution:<Ruta Distribution> /Set-AllIntl:en-us

Seguidamente, capture el contenido de la imagen de Windows 7 Ultimate montada con los paquetes de idiomas integrados para generar un nuevo fichero .wim. Antes de nada, cree un directorio C:\W7, que contendrá la imagen resultante.

Imagex /capture <Ruta Offline> C:\W7\install.wim “Windows 7 Ultimate (x86)” “Windows 7 Ultimate (x86)” /flags “Ultimate” /verify /compress maximum

Este procedimiento podría tardar bastante tiempo, así como consumir un alto porcentaje de CPU, pues se están aplicando algoritmos complejos de compresión para que la imagen ocupe lo mínimo posible.

Una vez finalizada la integración, debe desmontar la imagen para liberar el directorio \Offline:

Dism /unmount-WIM /MountDir:<Ruta Offline> /Commit

Hacemos lo mismo con la edición de 64 bits

Ya tenemos la mitad de lo que queremos conseguir, nos falta integrar la edición de 64 bits, con sus correspondientes paquetes de idiomas. Copie en un directorio temporal el fichero \sources\install.wim de su DVD o ISO de Windows 7 64 bits. A continuación siga los mismos pasos anteriores de montaje de la imagen en el directorio /Offline, integre los paquetes de idiomas siguiendo el mismo comando que el ya citado (Ojo, tenga en cuenta que debe integrar los ficheros Lp64.cab) y capture la imagen de modo que se agregue a la imagen que ya tiene creada, con este comando:

Imagex /append <Ruta Offline>  C:\W7\install.wim  “Windows 7 Ultimate (x64)” /verify

Ya solo queda desmontar la imagen de 64 bits mediante el comando

Dism /unmount-WIM /MountDir:<Ruta Offline> /Commit

Sustituya el fichero \Distribution\sources\install.wim por el nuevo fichero C:\W7\install.wim.

Modificación de la imagen Boot.wim

Resta por agregar los paquetes de idiomas a la imagen de instalación y preinstalación (Windows PE) de Windows 7.

En primer lugar, extraiga en unas carpetas temporales el contenido del directorio \WinPE_LangPacks\x86 de la ISO de Windows AIK; puede quedarse solamente con las subcarpetas es-es, pt-pt y pt-br y eliminar el resto, por ejemplo:

C:\WinPE_LPs\es-es

C:\WinPE_LPs\pt-pt

C:\WinPE_LPs\pt-br

En la ventana de línea de comandos que está abierta, teclee lo siguiente para montar la imagen de Windows PE en el directorio \Boot que creó al principio del artículo:

Dism /Mount-WIM /WimFile:<Ruta Distribution>\sources\boot.wim /index:1 /MountDir:<Ruta Boot>

Teclee este comando para instalar los paquetes de idiomas:

Dism /Image:<Ruta Boot> /Add-Package /PackagePath:C:\WinPE_LPs\es-es\lp.cab /PackagePath:C:\WinPE_LPs\pt-pt\lp.cab /PackagePath:C:\WinPE_LPs\pt-br\lp.cab

Cuando finalice la instalación, teclee este comando para guardar y desmontar la imagen:

Dism /unmount-WIM /MountDir:<Ruta Boot> /Commit

A continuación debe montarse la imagen de Windows Setup (imagen número 2) de Boot.wim:

Dism /Mount-WIM /WimFile:<Ruta Distribution>\sources\boot.wim /index:2 /MountDir:<Ruta Boot>

Instalamos los paquetes de idiomas:

Dism /Mount:<Ruta Boot> /Add-Package /PackagePath:C:\WinPE_LPs\es-es\lp.cab /PackagePath:C:\WinPE_LPs\es-es\winpe-setup_es-es.cab /PackagePath:C:\WinPE_LPs\es-es\winpe-setup-client_es-es.cab /PackagePath:C:\WinPE_LPs\pt-pt\lp.cab /PackagePath:C:\WinPE_LPs\pt-pt\winpe-setup_pt-pt.cab /PackagePath:C:\WinPE_LPs\pt-pt\winpe-setup-client_pt-pt.cab /PackagePath:C:\WinPE_LPs\pt-br\lp.cab /PackagePath:C:\WinPE_LPs\pt-br\winpe-setup_pt-br.cab /PackagePath:C:\WinPE_LPs\pt-br\winpe-setup-client_pt-br.cab

Salve los cambios:

Dism /unmount-WIM /MountDir:<Ruta Boot> /Commit

Creación de una imagen ISO y grabación en un DVD

Ya tenemos nuestro Windows 7 Ultimate x86/x64 con cuatro idiomas integrados. Solo nos queda generar una imagen ISO con Oscdimg.exe (incluido también en el Windows AIK) y grabarla en un DVD.

Como la imagen tiene un tamaño superior a 4,5 GB, es necesario indicarle a Oscdimg.exe el orden de los archivos de arranque para asegurar que estos se sitúen al principio de la imagen. Para ello, abra Bloc de notas, copie y pegue este texto y guárdelo como C:\Docs\Bootorder.txt, por ejemplo:

boot\bcd
boot\boot.sdi
boot\bootfix.bin
boot\bootsect.exe
boot\etfsboot.com
boot\memtest.efi
boot\memtest.exe
boot\en-us\bootsect.exe.mui
boot\fonts\chs_boot.ttf
boot\fonts\cht_boot.ttf
boot\fonts\jpn_boot.ttf
boot\fonts\kor_boot.ttf
boot\fonts\wgl4_boot.ttf
sources\boot.wim

A continuación ejecute este comando en la línea de comandos que tiene abierta (respete al pie de la letra los espacios):

oscdimg -m -n -yoC:\Docs\bootorder.txt –l”Windows7_x86_x64_MultiLanguage” –b<Ruta Distribution>\boot\etfsboot.com <Ruta Distribution> <Ruta ISO>\Windows7_x86_x64_en-us_es-es_pt-pt_pt-br.iso

Cuando finalice la creación de la imagen ISO, grábela en un DVD usando por ejemplo la herramienta de grabación de imágenes de Windows 7 (simplemente haga doble clic sobre la imagen para arrancar esta herramienta). Cuando arranque desde el DVD y proceda a instalar el sistema operativo, el programa de instalación le invitará a seleccionar su idioma nada más comenzar:

Pantalla de selección del idioma de instalación de Windows 7.

Conclusión

Este artículo ha explicado paso a paso y detalladamente cómo crear un DVD de Windows 7 Ultimate que contenga ambas arquitecturas (32 bits y 64 bits), así como cuatro idiomas. Los idiomas están disponibles tanto externamente a la imagen (en la carpeta \langpacks de la nueva ISO) como integrados en las imágenes Install.wim y Boot.wim. Con el primer Service Pack de Windows 7 a la vuelta de la esquina, explicaré próximamente cómo crear un DVD de Windows 7 con SP1 integrado, partiendo de este artículo.

Tutorial sobre Windbg [Parte VI]

En la quinta parte de este tutorial introductorio de depuración de aplicaciones vimos algunos comandos de Windbg que nos permiten mostrar información sobre la pila de ejecución en un determinado momento, una tarea bastante cotidiana en el ámbito de la depuración. En esta parte veremos algunas otras tareas relacionadas con la pila de ejecución y los correspondientes comandos de Windbg que nos permite llevarlas a cabo.

Puede darse el caso de que necesitemos saber el espacio que ocupa cada marco de pila de una traza de pila concreta. Para ello podemos obtenerlo de dos formas: Aplicando la teoría que vimos en la parte anterior, el tamaño de cada marco de pila se podría obtener restando la dirección del puntero base (registro ebp) del marco de pila anterior a la del marco de pila actual. Recuerde que las direcciones de los punteros base aparecen bajo la columna "ChildEBP” en la salida de la familia de comandos k* de Windbg. Alternativamente, se puede hacer uso del comando kf, que hace todo este cálculo por nosotros. La salida de este comando nos mostrará el espacio ocupado por cada marco de pila, exceptuando el actual. Esta es una salida de ejemplo del comando kf de Windbg:

0:000> kf
  Memory  ChildEBP RetAddr 
          0020f868 77c0e351 ntdll!LdrpDoDebuggerBreak+0x2c
      15c 0020f9c4 77bf9048 ntdll!LdrpInitializeProcess+0x125c
       50 0020fa14 77beb365 ntdll!_LdrpInitialize+0x78
       10 0020fa24 00000000 ntdll!LdrInitializeThunk+0x10

A modo de ejemplo, vamos a calcular el tamaño del segundo marco de pila. Tenemos que restar las direcciones 0020f9c4 y 0020f868, que coincide con el contenido actual del registro ebp. Windbg incorpora un comando muy práctico que nos permite evaluar este tipo de expresiones, ?:

0:000> ? 0020f9c4-0020f868
Evaluate expression: 348 = 0000015c

Como vemos, el resultado hexadecimal obtenido es 15c, que coincide con lo que nos muestra el comando kf.

Otro comando relacionado que nos permite evaluar y convertir expresiones a diferentes formatos es .formats. Veamos un ejemplo de la salida de este comando:

0:000> .formats 0020f9c4-0020f868
Evaluate expression:
  Hex:     0000015c
  Decimal: 348
  Octal:   00000000534
  Binary:  00000000 00000000 00000001 01011100
  Chars:   ...\
  Time:    Thu Jan 01 01:05:48 1970
  Float:   low 4.87652e-043 high 0
  Double:  1.71935e-321

A veces hay que ayudar a Windbg para que muestre una buena traza de pila

En determinados ambientes de servidores es bastante común que tengamos que depurar un sistema que haya recibido una carga de trabajo bastante elevada. Una consecuencia de esto es que la información correspondiente a la pila no reside en memoria principal. Técnicamente, se dice que las páginas correspondientes a la pila han paginado a disco. Otro escenario común es que estemos depurando un software cuya ejecución haya corrompido la pila. Para que Windbg pueda construir una buena traza de pila, es necesario que ciertas estructuras de la misma estén en estado intacto. De no ser así, con total seguridad no podemos confiar en la traza de pila resultante que obtengamos mediante la familia de comandos k*. Un ejemplo de traza de pila sospechosa sería aquella en la que el marco de pila actual (es decir, el que está el primero en la traza) se le haya hecho corresponder con una dirección de memoria hexadecimal en lugar de el símbolo de una función. ¿Por qué motivo Windbg no ha podido hacer corresponder esa dirección de memoria con un módulo? Posiblemente porque con anterioridad se haya sobreescrito partes importantes de la pila (como la dirección de retorno) y el flujo de ejecución haya acabado ahí por error. Es más que probable que la dirección ni siquiera sea código ejecutable, con la correspondiente excepción que surgirá cuando el procesador se disponga a ejecutar a partir de ella.

En estos casos de la vida real, no nos queda otra opción que ayudar a Windbg aplicando nuestros conocimientos para reconstruir una buena traza de pila. Lo primero es hacer uso del comando dd (display memory, double-word) para mostrar el contenido de la pila (almacenado en la dirección de memoria contenida en el registro puntero de pila, esp):

dd esp

De la salida de este comando hay que identificar aquellas direcciones que se correspondan con funciones. Para ver los rangos de direcciones de los símbolos de todos los módulos cargados en memoria, podemos hacer uso del comando

x *!

Buscamos en la salida del comando dd esp aquellas direcciones que podrían corresponderse con direcciones de funciones. Para ello comparamos cada dirección con los rangos de direcciones que nos muestra el comando x *!. Una vez que hayamos identificado alguna dirección de memoria que sea potencialmente candidata de ckrrresponderse con una función, podemos comprobar si estamos en lo cierto haciendo uso del comando

ln <Dirección>

El comando ln (list nearest symbols) nos muestra los símbolos más cercanos a la dirección de memoria pasada como argumento.

Una vez identificadas las posibles funciones que conformarían nuestra traza de pila reconstruida, debemos tener en cuenta las direcciones de retorno que se almacenan en la pila previamente a una llamada a subrutina (como vimos en el artículo anterior). Desensamblando unas cuantas instrucciones alrededor de esa dirección de retorno mediante el comando u podemos confirmar nuestra teoría viendo si hay una llamada a subrutina (call, en ensamblador) y en cuyo caso, a qué dirección de función está llamando. Si nuestras averiguaciones han sido correctas, dicha llamada debería ser a la función que esté justo encima en nuestra hipotética traza de pila. Una vez identificado el flujo de ejecución de la aplicación, podemos dar visto bueno a nuestra traza de pila y proseguir con la depuración.

En el próximo artículo vamos a ver un ejemplo práctico donde reconstruyo una traza de pila para poner en práctica y afianzar totalmente los pasos anteriormente comentados. Seguiremos tratando el tema de la pila de ejecución con otros casos del mundo real con los que me he encontrado en los que ha sido necesario comprobar que una traza de pila es correcta para seguidamente analizarla y determinar por qué ha ocurrido cierto problema.

¿Se pueden deshabilitar las vistas en miniatura de la barra de tareas en Windows 7?

Uno de los temas que más se han comentado en Internet con respecto a Windows 7 es si en este sistema es posible deshabilitar las vistas en miniatura que aparecen al posar el puntero del ratón sobre un icono de aplicación abierta de la barra de tareas. En algunas páginas en Internet se muestran algunos pasos, y algunos usuarios comentan que funcionan, otros que no, etc. Este artículo aclarará qué es lo que realmente sirve aproximadamente, qué no sirve, y todo lo que se puede hacer con las vistas en miniatura de la barra de tareas en Windows 7.

TaskbarNoThumbnail: Una directiva que se aplicaba a Windows Vista pero que ya no sirve en Windows 7

Si busca en Internet sobre cómo desactivar las vistas en miniatura de la barra de tareas en Windows 7, es probable que se encuentre con artículos que indican cómo aplicar una directiva de grupo que aparentemente consigue esto mismo. En concreto se trata del valor de tipo DWORD “TaskbarNoThumbnail” que se puede agregar a la clave de registro HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer. Lamentablemente esta directiva solo es aplicable a Windows Vista. De hecho, en Windows Vista se pueden activar/desactivar las vistas en miniatura desde las propiedades de la barra de tareas. En Windows 7 se ha eliminado completamente esta opción de la interfaz de usuario. Por lo tanto, esta alternativa no consigue lo que queremos.

DisablePreviewWindow: Cómo desactivar Live Preview. Pero Live Preview no es la vista en miniatura de la barra de tareas

Otras páginas tratan una cuestión parecida e invitan al usuario a crear un valor de registro de nombre DisablePreviewWindow con contenido 1 en la clave de registro HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced. Este valor de registro desactiva lo que se conoce como Live Preview, que no es exactamente lo que está buscando. Live Preview es el efecto que surge cuando el usuario posa el cursor del ratón sobre una miniatura de la barra de tareas: La ventana en cuestión aparece visible y “aislada” del resto, para echar un vistazo rápido. Similarmente, el valor de registro DisablePreviewDesktop, de esa misma clave de registro, desactiva Aero Peek.

ExtendedUIHoverTime: Una forma de desactivarlas “aproximadamente”

Si añade a la clave de registro HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced un valor de tipo DWORD y nombre ExtendedUIHoverTime que contenga el tiempo (en milisegundos) que quiere que pase hasta que se muestre la vista en miniatura, efectivamente si establece un valor alto conseguirá el efecto de que la vista no se muestre nada más posar el puntero sobre un elemento de la barra de tareas. El problema es que mucha gente quiere que al posar el puntero sobre un elemento de la barra de tareas se muestre una lista clásica de todas las ventanas que hay abiertas de ese elemento. Para ello una opción es activar un tema clásico de Windows, o desactivar la composición de escritorio (con la consecuente pérdida de efectos visuales), o bien manipular un valor del registro, comentado a continuación.

NumThumbnails: Probablemente casi lo que está buscando

Si añade a la clave de registro HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband un valor de tipo DWORD y nombre NumThumbnails, podrá controlar el número de vistas en miniatura máximo para que el sistema pase a mostrar una lista vertical de ventanas. Por defecto Windows muestra hasta un máximo de 16 vistas en miniatura en la barra de tareas. Los límites superior e inferior para el valor NumThumbnails es 32 y 1. Como ve, el límite inferior es 1, por lo que las ventanas individuales siempre mostrarán una vista en miniatura.

Por último, una aplicación denominada Taskbar Tweaker (http://rammichael.com/7-taskbar-tweaker) es capaz de eliminar las vistas en miniatura de la barra de tareas, sin modificar el registro (es una aplicación que se inyecta en Explorer.exe). La pega de esta opción es que tampoco es capaz de mostrar una lista de ventanas en lugar de la lista de vistas en miniatura.

Como observa, no hay una opción de registro perfecta que consiga pasar a modo lista la visualización de ventanas abiertas en la barra de tareas de Windows 7, sin tener que desactivar Windows Aero. Lo más cercano quizá sea la opción cuarta (NumThumbnails) estableciendo como contenido para este valor de registro un 1.

¿Qué versión de .NET Framework instalar?

Existen bastantes dudas entre la gente que no se dedica a programar (en especial en .NET)sobre las versiones de .NET Framework. Desde el punto de vista de un usuario final o de un profesional de las TI que no desarrolla software, ¿qué versiones instalar y cuáles no? ¿Se actualizan las versiones anteriores o se instalan de forma paralela? Este artículo dará respuesta a estas preguntas.

¿De qué se compone .NET?

El punto de partida para aclarar el caos que existe con las versiones de .NET es comprender exactamente cuáles son los dos componentes principales de .NET: Por un lado está el CLR (Common Language Runtime) y por otro el Framework, o conjunto de librerías que proporcionan funcionalidades a los programadores de aplicaciones. Existe un tercer componente, el lenguaje de programación (C# o VB.NET), que no vamos a tratar en este artículo.

El núcleo de .NET Framework es el CLR, y es el componente que se encarga entre otras cosas de traducir el código gestionado (IL), generado por el compilador, en código adaptado a la máquina de destino (por ejemplo, x86). La clave está en el número de versión del CLR es independiente de la versión de .NET Framework; o dicho de otra manera, una nueva versión de .NET Framework no necesariamente incorpora una nueva versión del CLR. Este punto es el que confunde a mucha gente. Históricamente, las versiones de .NET (sin contar Service Packs intermedios) han sido la 1.0, 1.1, 2.0, 3.0, 3.5 y 4.0, disponible desde hace poco tiempo. Hasta la versión 2.0, cada nueva versión de .NET Framework ha incorporado una nueva versión del CLR. Sin embargo, las versiones 3.0 y 3.5 siguen usando la versión 2.0 del CLR. Estas dos versiones solo han consistido en la adición de nuevas librerías, manteniéndose el mismo núcleo de .NET. ¿Por qué ha elegido Microsoft denominarlas con un nuevo número de versión? Realmente lo desconozco, quizá sea un aspecto de marketing.

.NET Framework en su versión 4.0 introdujo la versión 4.0 de las librerías y además incorporó una nueva versión del CLR, la 4.0. Esta tabla resume toda esta información:

Versión del CLR

Versión de .NET

Incorporado de serie en

1.0

1.0

Ningún sistema

1.1

1.1

Ningún sistema

2.0

2.0

Windows Vista y Windows Server 2008*

2.0

3.0

Windows Vista y Windows Server 2008

2.0

3.5

Windows 7 y Windows Server 2008 R2**

4.0

4.0

Ningún sistema

* Incorpora la versión 2.0 SP2 como requisito de la versión 3.0.

** Incorpora la versión 3.5 SP1.

(No ha habido una versión 3.0 del CLR).

Las versiones instaladas de .NET están en el directorio C:\Windows\Microsoft.NET\Framework, dentro de la subcarpeta correspondiente a su número de versión. Podrá comprobar que algunas versiones, como la 3.0 o 3.5, no incorporan una nueva versión del fichero Mscorlib.dll, que implementa el núcleo de .NET.

¿Se pueden instalar varias versiones en un mismo equipo? ¿Se actualizan automáticamente las versiones anteriores?

Podemos tener instaladas varias versiones de .NET Framework. La versión 3.0, por ejemplo, requiere tener instalada la versión 2.0 para añadirle unas cuantas librerías más. Lo mismo ocurre con la versión 3.5. No es necesario instalarlas gradualmente, cada instalación incorpora todos los componentes necesarios. Por lo general, si un programa requiere una versión específica de .NET, la instalará automáticamente, o bien le indicará al usuario de dónde tiene que bajarla e instalarla. No hay ningún problema por tener instaladas varias versiones de .NET en un mismo equipo, estas se ejecutan “side-by-side”, impidiendo que ocurran conflictos. La práctica totalidad de aplicaciones diseñadas para .NET Framework 1.0, 1.1, 2.0, 3.0 ó 3.5 van a funcionar sin problemas en .NET Framework 4.0.

Este es un resumen del “caos” de versiones de .NET Framework, que trae de cabeza a muchos usuarios finales que no saben exáctamente qué versión instalar. Si el sistema operativo es superior a Windows XP, el usuario probablemente no va a tener que preocuparse de instalar nada, pues estos sistemas ya incorporan de serie una versión de .NET Framework. En estos casos, lo único que hay que hacer es mantenerla actualizada. En el caso de que aparezca una nueva versión del motor CLR de .NET, al instalarla se mantendrán las versiones anteriores que pudiera haber en el equipo; no es necesario desinstalarlas. En casos como las versiones 3.0 y 3.5 esto incluso no es posible hacerlo puesto que dependen del motor de la versión 2.0 para funcionar. Otro caso en el que no es posible la desinstalación es si la versión de .NET venía incorporada de serie con el sistema operativo (tercera columna de la tabla anterior).