4.0· Personalizando la estética de la instalación de WindowsAhora que ya sabemos automatizar la instalación de Windows... hagámosla bonita, ¿no?, cambiemosle todas las "florituras" y colores
.
En esta parte del tutorial aprenderemos a personalizar las imágenes que usa el instalador de Windows, y de esta manera lo pondré punto y final a la personalización de la instalación, ya llegaremos a lo verdaderamente interesante en los siguientes volumenes del tutorial
.
Nota: Se aconseja un cierto nivel de conocimientos sobre la edición de imágenes
BMP (Bitmap) y sus transparencias, y opcionalmente conocimientos de archivos
ICO (Iconos).
Nota: Vuelvo a recordar que este tutorial está basado y orientado en una imagen ISO de Windows 8.1 x64.
· ¿Que herramientas necesitaremos? Un editor de recursos, recomiendo la aplicación
Restorator 2009, puero pueden usar
Resource Hacker,
Anolis Resourcer, o su herramienta favorita.
Un editor de imágenes, recomiendo la aplicación
Photoshop, pero pueden usar
Microsoft Paint , cualquier otro e incluso pueden descargar imágenes (válidas) de Internet.
Opcional: Un grabador de imágenes ISO para testear nuestra instalación personalizada, recomiendo la herramienta
OSCDIMG que se encuentra ubicada en
%WinKit%\oscdimg\oscdimg.exe Opcional: Una máquina virtual para testear la ISO, recomiendo la aplicación
VirtualBox.
4.1· Ubicación de los recursos de imágenes de la instalaciónDentro del DVD de Windows hay 3 librerías que contienen imágenes Bitmap e Iconos:
·
...\Sources\spwizimg.dll·
...\Sources\w32uiimg.dll·
...\Sources\arunimg.dllY el archivo Bitmap ubicado en
...\Sources\Background.bmpAparte, los mismos archivos se encuentran dentro de la imagen
Boot.wim en las mismas ubicaciones, y esos archivos dentro de la imagen son las que debemos modificar.
Dentro de la imagen
Boot.wim además hay otro archivo Bitmap ubicado en
...\Windows\System32\Setup.bmpNota: Si queremos hacer una modificación muy básica entonces solo debemos tener en cuenta la librería
spwizimg.dllEste es el contenido de las 3 librerías:
Nota: Los números son el nombre del recurso.
· spwizimg.dllBitmaps:
· w32uiimg.dllBitmaps:
Iconos:
· arunimg.dllBitmaps:
Iconos:
4.2· Identificando los recursos de imagen que utiliza el instaladorEstos son los nombres de algunos recursos
Bitmap que se usan en la instalación de Windows, en el punto
3.1 del tutorial pueden enlazar el nombre del recurso para saber en que librería se encuentra.
4.3· Modificando los recursos de imágenesPueden modificar los recursos de las librerías que se encuentran en el DVD de Windows, pero les recuerdo que los recursos que nos interesan modificar son los de las librerías que se encuentran dentro de la imagen Boot.wim (la cual ya expliqué como se puede montar en el punto
3.2 del tutorial), se encuentran en el índice de imagen
2.
En este punto la verdad es que no puedo ayudar mucho ni creo poder dar explicaciones útiles, es cosa tuya saber como editar una imagen y reemplazarla con un editor de recursos, si no sabes... ¿para que leiste hasta aquí?. ¡ ánimo !
4.3· Automatizar la tarea de personalización de recursos de imágenes...¿Te creiste que no iba a ayudar?
Al empezar este tutorial dije que iba a proporcionar todas mis herramientas y creaciones en todos los temas, así que si te parece algo complicado la edición de recursos entonces estás de suerte!
Voy a explicar una manera muy sencilla de automatizar todo este tutorial utilizando un Script Batch y un archivo de texto, pero antes que nada quiero comentarles que en este enlace pueden descargar todo lo necesario que voy a comentar, y un ejemplo completo con imagenes y PSD's, para los que no les guste leer instrucciones largas
http://www.mediafire.com/download/bf17fpnjpqi30fd/WIM_Resource_Replacer.zipActualizado:
http://www.mediafire.com/download/ktzms7i09qt4n2b/wim+resource+replacer+0.2.rarEstas son las instrucciones:
Por un lado deben descargar el editor de recursos
Anolis Resourcer, ¿porque?, porque es con el que yo manejo de manera commandline
Lo pueden descargar aquí:
http://anolis.codeplex.com/releases/view/32286Por otro lado deben conocer las ubicaciones de las librerías que quieren modificar y/o archivos que quieren reemplazar, en el caso de las librerías deben conocer también los nombres de los recursos que quieren modificar (los tienen en el punto 4.1 del tutorial), y obviamente también deben tener las imagenes modificadas.
Conociendo y teniendo los archivos necesarios que acabo de mencionar, deben crear un archivo de texto delimitado por puntos y comas, estos archivos los parseará/procesará el script que luego les mostraré.
La sintaxis que deben usar para delimitar los recursos en el archivo de texto, para reemplazar archivos es:
Ruta relativa del archivo que va a ser reemplazado;Ruta relativao absoluta del archivo que se copiará
La sintaxis que deben usar para delimitar los recursos en el archivo de texto, para librerías de recursos de imágenes es:
Ruta relativa del recurso a modificar;Nombre del recurso;Ruta del recurso modificado
Nota: ¡ No se debe escribir la ruta absoluta del directorio montado !
Lean esta ayuda que escribí para entender la sintaxis del archivo de texto delimitado:
ResourceList Help - By Elektro
##############################
========================
To add or replace files:
========================
Syntax: OutFile;InFile
· Outfile:
Indicates the file that will be Created/Replaced.
Should be written as a relative mount filepath.
· InFile:
Indicates the file that will be copied to the OutFile.
Should be written as an absolute filepath.
Examples:
---------
Sources\Background.bmp;.\Resources\Background.bmp
Sources\Background.bmp;C:\Resources\Background.bmp
=====================
To replace resources:
=====================
Syntax: ResourceFile;ResourceName;InResource
· ResourceFile:
Indicates the dll file that will be opened to replace resources inside.
Should be written as a relative mount filepath.
· ResourceName:
Indicates the resource name that will be replaced inside the resource file.
· InResource:
Indicates the resource to copy inside the resource file.
Should be written as an absolute filepath.
Examples:
---------
Sources\spwizimg.dll;517;.\Resources\517.bmp
Sources\spwizimg.dll;517;C:\Resources\517.bmp
Esto es un ejemplo de un archivo delimitado escrito de forma correcta:
Resources.txtSources\Background.bmp;.\Resources\Background.bmp
Windows\System32\Setup.bmp;.\Resources\Setup.bmp
Sources\spwizimg.dll;405;.\Resources\405.bmp
Sources\spwizimg.dll;407;.\Resources\407.bmp
Sources\spwizimg.dll;408;.\Resources\408.bmp
Sources\spwizimg.dll;516;.\Resources\516.bmp
Sources\spwizimg.dll;517;.\Resources\517.bmp
Sources\w32uiimg.dll;207;.\Resources\207.bmp
A continuación, lo único que tienen que hacer es ejecutar este Script, el Script se encargará de montar la imagen, reemplazar archivos (si especificaron alguno) y/o reemplazar recursos de imagenes si especificaron alguno, después desmontará la imagen y listo.
Antes de poder automatizar esta tarea usando mi Script primero deben configurar las rutas de los valores
WindowsImage,
MountDir,
Anolis,
Dism, y
ResourceList que se encuentran documentados en la cabecera del archivo.
WIM Resource Replacer.bat@Echo Off
& Title WIM Resource Replacer - By Elektro
Mode
Con Cols=150 Lines=50
REM ======
REM About:
REM ======
:: Header Info.
Echo -----------------------------------------------------------------------------------------
Echo This script mounts a Windows Image
^(WIM
^) to replace image resources of a resource file.
Echo -----------------------------------------------------------------------------------------
REM ====================
REM User defined values:
REM ====================
:: User defined values.
REM This value indicates whether the Windows Image should be mounted.
REM True = 'DISM' will try to mount the 'WIM' image.
REM False = 'DISM' will not try to mount the WIM image.
REM Set this value to 'FALSE' if the 'WIM' image is already mounted in the specified mount directory,
REM Otherwise, keep it as 'TRUE'.
REM This value indicates whether the Windows Image should be unmounted at the end.
REM True = 'DISM' will try to unmount the 'WIM' image.
REM False = 'DISM' will not try to unmount the WIM image.
REM Set this value to 'FALSE' if you want to keep the image mounted to make other changes,
REM Otherwise, keep it as 'TRUE'.
REM This value indicates the 'WIM' image to be mounted.
Set "WindowsImage=
%UserProfile%\Desktop\win 8 .1\win\sources\Boot.wim"
REM This value indicates the Image Index of the 'WIM' image.
REM This value indicates the directory where to mount the 'WIM' image.
Set "MountDir=
%HomeDrive%\WinBootMount"
REM This value indicates the location of Anolis Resourcer 'Anolis.exe' file.
Set "Anolis=
%CD%\Tools\Anolis.exe"
REM This value indicates the textfile that contains the Recource files to replace.
Set "ResourceList=
%CD%\Resources.txt"
REM This value indicates the location of a custom 'DISM.exe' file if needed.
REM Default location:
REM "%SystemRoot%\System32\Dism.exe"
Set "Dism=
%CD%\Tools\Dism\Dism.exe"
REM This value indicates the location of the logfile that will record 'DISM' exceptions.
Set "DismLogfile=
%UserProfile%\Desktop\Dism.log"
REM This value indicates the logging-level of the 'DISM' process.
REM 1 = Errors only
REM 2 = Errors and warnings
REM 3 = Errors, warnings, and informational
REM 4 = All of the information listed previously, plus debug output
REM =====
REM Main:
REM =====
CLS
REM ========
REM Methods:
REM ========
:CreateLog
:: Create the 'DISM' logfile with 'ANSI' encoding,
:: this is necessary to record a non-default 'DISM' loglevel such as '1' or '2'.
:: Record initial info.
(
Echo Automated DISM processing:
Echo ==========================
Echo WIM Resource Replacer
Echo [i] Date:
%DATE% -
%TIME:~0,2%:
%TIME:~3,2%:
%TIME:~6,2% Echo [i] Mount Image?...:
%MountImage% Echo [i] Unmount Image?.:
%UnmountImage% Echo [i] Windows Image..:
%WindowsImage% Echo [i] Image Index....:
%ImageIndex% Echo [i] Mount Directory:
%MountDir% Echo [i] Dism Path......:
%Dism% Echo [i] Dism Logfile...:
%DismLogfile% Echo [i] Dism Log Level.:
%DismLogLevel% Echo [i] Anolis Path....:
%Anolis% Echo ===========================
)>"%DismLogfile%"
:: Display initial info.
Type "%DismLogfile%"
:CreateMountDir
:: Create the mount directory.
(
)
) || (
Echo [X] Error trying to create the directory "
%MountDir%" to mount the Windows Image.
Echo [i] Ensure that you have Admin rights to create the directory.
Echo [i] Ensure that the directory name does
not contains illegal characters.
)
:Mount
:: Mounts the Windows Image into the mount directory.
If /I "
%MountImage%"
EQU "True"
(
"%Dism%" /Mount-Image /ImageFile:"%WindowsImage%" /Index:"%ImageIndex%" /MountDir:"%MountDir%" /English /LogPath:"%DismLogfile%" /LogLevel:"%DismLogLevel%" || (
Echo [X] Error mounting the Image Index "
%ImageIndex%"
in "
%MountDir%"
Echo [i] Ensure that you have Admin rights to write inside the directory.
Echo [i] Ensure that the directory is
not already mounted.
Echo [i] Ensure that the directory is fully empty.
REM Try to unmount the failed image and discard changes.
If /I "
%UnmountImage%"
EQU "True"
( "%Dism%" /Unmount-WIM /Discard /MountDir:"%MountDir%"
)
)
)
:ParseResources
For /F "UseBackQ Tokens=1,2,* Delims=;"
%%a In ("Resources.txt"
) Do (
If /I "
%%~xa"
EQU ".dll"
(Call :
ReplaceResource "
%MountDir%\
%%~a" "
%%~b" "
%%~c"
) If /I "
%%~xa"
NEQ ".dll"
(Call :
CopyFile "
%MountDir%\
%%~a" "
%%~b"
)
)
:Unmount
:: Unmount the Windows Image commiting changes.
If /I "
%UnmountImage%"
EQU "True"
( "%Dism%" /Unmount-WIM /Commit /MountDir:"%MountDir%" /English /LogPath:"%DismLogfile%" /LogLevel:"%DismLogLevel%"
)
:TakeOwn
Takeown.exe /F "
%~f1" 1
>NULICacls.exe "
%~f1" /Grant "
%UserName%":"F" 1
>NUL
:CopyFile
Echo [+] Copying "
%~2" to "
%~1"
Echo [X] Can't locate the input file "
%~2".
| MORE
)
:ReplaceResource
Echo [+] Replacing Resource Name "
%~2" with "
%~3"
in resource file "
%~f1"
Echo [X] Can't locate the resource file to open "
%~1".
| MORE
)
Echo [X] Can't locate the resource to
copy "
%~3".
| MORE
)
If /I "
%~x3"
EQU ".bmp"
( Start /W "Anolis" "%Anolis%" -op:upd -src:"%~f1" -type:Bitmap -name:"%~2" -lang:1033 -file:"%~f3")
)
If /I "
%~x3"
EQU ".ico"
( Start /W "Anolis" "%Anolis%" -op:upd -src:"%~f1" -type:Icon -name:"%~2" -lang:1033 -file:"%~f3")
)
REM ====================
REM File Error Controls:
REM ====================
:CheckErrors
:: WIM File Error-Check.
Echo [X] Windows Image
not found
in: "
%WindowsImage%"
| MORE
)
:: ResourceList File Error-Check.
Echo [X] Resource-List file
not found
in: "
%ResourceList%"
| MORE
)
:: DISM File Error-Check.
Echo [X] DISM process
not found
in: "
%DISM%"
| MORE
)
:: Anolis Resourcer File Error-Check.
Echo [X] Anolis process
not found
in: "
%Anolis%"
| MORE
)
4.4· Obteniendo resultadosUna vez hayan montado la imagen
Boot.wim para modificar los recursos de imágenes que queramos, deben desmontar la imagen WIM y guardar los cambios (lease el punto
3.3 del tutorial si no sabes hacerlo).
Nota: Si usaste mi Script para reemplazar recursos entonces no tienes porque desmontar nada.
Ya solo nos quedará generar la ISO y testearla en un DVD, ¡¡ aquí os muestro el resultado visual del ejemplo que hice para este tutorial !! :
¡ Les invito a postear sus modificaciones en este tema !