Puede ampliar el programa de instalación de Windows de tres formas:
Puede usar los comandos del sistema Rundll.exe o Rundll32.exe de Windows para ejecutar una sección Install en un archivo .INF. La sintaxis de la línea de comandos es la siguiente:
RunDll setupx.dll,InstallHinfSection <sección> <modo-de-reinicio> <nombre-inf>
El parámetro <sección> es una sección Install del archivo .INF. Por ejemplo, la línea de comandos siguiente instala el componente opcional Games y, si el programa de instalación determina que se debe reiniciar el equipo, le pregunta al usuario si desea reiniciar el equipo inmediatamente una vez que se complete la instalación. El significado de los valores del parámetro <modo-de-reinicio> se describe en "Utilizar el parámetro modo de reinicio", posteriormente.
RunDll setupx.dll,InstallHinfSection games 4 applets.inf
Notas
Hay cinco modos de reinicio:
define HOW_NEVER_REBOOT 0
define HOW_ALWAYS_SILENT_REBOOT 1
define HOW_ALWAYS_PROMPT_REBOOT 2
define HOW_SILENT_REBOOT 3
define HOW_PROMPT_REBOOT 4
Si <nombre-inf> especifica su archivo .INF en lugar de un archivo .INF de Windows, sume 128 a los valores mostrados arriba. En el ejemplo anterior que instala el componente opcional Games, <modo-de-reinicio> se establece a 4. Esto se debe a que Applets.inf es un archivo .INF de Windows. Si está instalando un componente opcional que tiene su propio archivo .INF, establezca <modo-de-reinicio> a 132. Si suma 128 al parámetro <modo-de-reinicio>, todos los archivos que instale deben estar en la misma carpeta que su archivo .INF del disco de instalación.
Nota
La lista siguiente describe cada modo de reinicio:
NeverReboot
Establece <modo-de-reinicio> a 0 o 128. En cualquier caso, el equipo no se reiniciará. Es decisión del cliente determinar si el equipo debe reiniciarse. Para el programa de instalación, esto significa que hay un archivo C:\Windows\Wininit.ini que no tiene un tamaño de cero bytes.
AlwaysSilentReboot
Establece <modo-de-reinicio> a 1 o 129. No se pedirá al usuario que reinicie el equipo y éste se reiniciará siempre.
AlwaysPromptReboot
Establece <modo-de-reinicio> a 2 o 130. Siempre se pedirá al usuario que decida si desea reiniciar el equipo. El programa de instalación no intenta determinar si es necesario reiniciar el equipo.
SilentReboot
Establece <modo-de-reinicio> a 3 o 131. Si el programa de instalación determina que es necesario reiniciar el equipo, no hay interacción con el usuario.
PromptReboot
Establece <modo-de-reinicio> a 4 o 132. Si el programa de instalación determina que es necesario reiniciar el equipo, pregunta al usuario con un cuadro de diálogo.
Una vez que Windows se instala en un equipo, puede ser necesario agregar uno o varios componentes opcionales de Windows, por ejemplo, Games. Este tipo de instalación, que ocurre después de que el programa de instalación instale inicialmente Windows, se denomina instalación en modo de mantenimiento. Normalmente, la instalación en modo de mantenimiento se inicia desde Windows al hacer clic en el icono Agregar o quitar programas del Panel de control. Sin embargo, hay una alternativa disponible para los fabricantes y proveedores del componente de software opcional: pueden instalarlo mediante una llamada a CreateProcess en una aplicación de 32 bis.
Nota
Para instalar un componente opcional desde una aplicación de 32 bits, use una combinación de los métodos descritos a continuación.
En primer lugar, compruebe el Registro para ver si el componente opcional ya está instalado o busque los archivos. La clave del Registro que contiene información acerca de todos los componentes opcionales instalados actualmente es la siguiente:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SETUP\OptionalComponents]
Habrá valores debajo de esta clave que señalen a subclaves y cada subclave contiene información acerca de los componentes opcionales instalados, así como información necesaria para instalar un componente opcional nuevo. Por ejemplo, suponga que desea instalar Games como componente opcional. Para ver si Games está instalado, busque el valor de la subclave siguiente debajo de la clave OptionalComponents:
"Games"="Games"
A continuación, abra la clave "Games" situada debajo de la clave de componentes opcionales para buscar lo siguiente:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SETUP\OptionalComponents\Games]
"INF"="applets.inf"
"Section"="games"
"Installed"="0"
Esto indica que el componente opcional Games no está instalado en este equipo Windows, porque el indicador "Installed" tiene el valor 0.
Para instalar un componente opcional como Games, use los valores "INF" y "Section" de la clave anterior en una llamada a CreateProcess que ejecute Setupx.dll a través de RUNDLL. Este método hace exactamente lo mismo que Agregar o quitar programas en el Panel de control cuando instala un componente. La sintaxis del parámetro lpCommandLine en la llamada a CreateProcess es la siguiente:
RunDll setupx.dll,InstallHinfSection <sección> <modo-de-reinicio> <nombre-inf>
Los valores de los parámetros <sección> y <nombre-inf> son los de la clave del Registro descrita anteriormente (Section e INF). Por ejemplo, la llamada a CreateProcess siguiente instala el componente opcional Games y, si el programa de instalación de Windows determina que hay que reiniciar el equipo, pregunta al usuario si desea que se reinicie inmediatamente una vez que se complete la instalación. El significado de los valores del parámetro <modo-de-reinicio> se describe en la sección "Usar el parámetro modo de reinicio".
RunDll setupx.dll,InstallHinfSection games 4 applets.inf
Nota
La aplicación de instalación no debe ejecutar código después de que se realice una llamada a CreateProcess porque, una vez que Setupx.dll tiene el control, el código adicional puede ocasionar que se reinicie el equipo del usuario. Si el proceso de instalación tiene que ejecutar otro código después de que el suyo llame a CreateProcess, use la lista RunOnce del archivo .INF.
Nota
El programa de instalación reconoce un nombre de sección Install determinada, DefaultInstall, en los archivo .INF que instalan componentes opcionales. Si usa una sección [DefaultInstall] en su archivo .INF, el usuario puede hacer clic con el botón secundario del mouse en un icono del archivo .INF en la interfaz de usuario de las versiones de Windows de 32 bits para ejecutar la sección [DefaultInstall]. Después de que el usuario haga clic con el botón secundario del mouse en el icono de un archivo .INF, se mostrará un menú emergente donde el usuario puede seleccionar la opción Install para ejecutar realmente la sección [DefaultInstall].
Si utiliza una sección Install denominada [DefaultInstall] en su archivo .INF, ofrece un método cómodo de instalar el componente opcional. Esto resulta de utilidad, particularmente, durante el desarrollo de su aplicación. Si va a escribir una aplicación de instalación, dispondrá de un método para instalar el componente opcional antes de desarrollar el código de la misma.
El siguiente es un ejemplo de sección DefaultInstall que contiene entradas típicas:
[DefaultInstall]CopyFiles=QCD.copy.prog, QCD.copy.hlp, QCD.copy.win, QCD.copy.sys, QCD.copy.inf
UpdateInis=QCD.LinksAddReg=QCD.reg, QCD.run
Uninstall=FlexiCD_remove