Documentación de Steamworks
Creación y utilización de scripts de instalación

Descripción general

Aunque Steam puede instalar automáticamente muchos redistribuibles comunes, es posible que tu aplicación tenga otros requisitos de primera ejecución.
NOTA: la funcionalidad del script de instalación que se describe a continuación es principalmente para sistemas operativos Windows. La compatibilidad con macOS se limita a permisos de archivos y vínculos simbólicos. Actualmente no está disponible la funcionalidad de script de instalación para Linux/SteamOS.

Un archivo script de instalación es un archivo de configuración que te permite ejecutar determinadas acciones al instalar.

Tanto los juegos y las aplicaciones completas como los paquetes de DLC pueden tener scripts de instalación. Si integras tus scripts de instalación en tu compilación, puedes tener cualquier cantidad de scripts de instalación. En el caso de las aplicaciones de SteamPlay, se recomienda que siempre incluyas tus scripts de instalación en los repositorios específicos de tu SO.

Por ejemplo

Una versión básica se vería así:
"InstallScript" { "Registry" { "HKEY_LOCAL_MACHINE\\SOFTWARE\\Foo\\Bar" { "string" { "Install_Path" "%INSTALLDIR%" "Exe_Path" "%INSTALLDIR%\\foobar.exe" } "dword" { "PatchVersion" "12" } } } "Run Process" { "DirectX" { "HasRunKey" "HKEY_LOCAL_MACHINE\\Software\\Valve\\Steam\\Apps\\480" "Process 1" "%INSTALLDIR%\\DirectX\\DXSETUP.exe" "Command 1" "/silent" "NoCleanUp" "1" } } }

El segundo nombre clave tras la raíz describe el tipo de acción que se ejecutará.

Nota: todos los nombres de clave y valores pueden usar secuencias de escape, por lo que si vas a usar un \, conviértelo a \\.

Integración de scripts de instalación en tu compilación

En primer lugar, el archivo de script de instalación debe formar parte de un repositorio que se instale con la compilación. Asegúrate de que el archivo reside dentro de la carpeta raíz del contenido definida para la aplicación o el repositorio.

Segundo, marca un script de instalación usando la directiva InstallScript en un script de compilación de repositorio. Puedes ver un ejemplo en la página Carga de datos en Steam: Scripts de compilación avanzada.

Durante el proceso de compilación, tienen lugar dos cosas:
  • El script de instalación se carga en Steam y se firma criptográficamente. Esta firma se valida por parte de Steam antes de ejecutar cualquier script de instalación y es necesaria para realizar ciertas operaciones, incluida la escritura en el subárbol HKLM en Windows. Esto puede causar que tu copia local del script de instalación pueda modificarse.
  • El script de instalación se marca en el manifiesto del repositorio. Puedes ver esto en el archivo manifest.txt generado como un 100 en el campo Marcas.
Cuando un usuario esté iniciando un juego, Steam explorará todos los repositorios montados para ese juego en busca de todos los archivos con la marca de script de instalación y los ejecutará.

Registry

El comando Registry te permite crear o modificar valores de registro string y dword. Cualquier clave bajo el nombre de clave "Registry" se interpretará como la ruta completa a la clave de registro que quieres crear o abrir. Bajo esa clave, especifica una clave "string" o "dword". Cualquier nombre de clave y valor almacenados en la claves "string" o "dword" serán los nombres de registro y los valores que se van a establecer.
Para establecer el valor predeterminado para una clave de registro, debes ingresar el nombre de la clave como (Default).

Run Process

El comando Run Process permite que la aplicación ejecute programas antes de que el usuario inicie el juego por primera vez.
Para determinar si el programa necesita ejecutarse, el script de instalación busca el nombre de clave (como un valor DWORD en el registro) en el valor de HasRunKey. Si ese valor no está presente o es 0, llamará a CreateProcess con los valores processXX/commandXX. Si CreateProcess da error, entonces se ejecuta la llamada a ShellExecuteEx. Si el ExitCode del programa es 0, el script de instalación asume que se ha realizado correctamente y establece en 1 el nombre de clave en el registro.

Los clientes de Steam quieren que las instalaciones sean rápidas y silenciosas. Agrega los parámetros silent o quiet a todos los comandos Run Process y agrega lo solamente lo que sea absolutamente necesario para el juego.
Los pares clave/valores requeridos para Run Process son:
  • Process 1: ruta al programa que deseas iniciar.
Los pares clave/valor opcionales para Run Process son:
  • Command 1: comando opcional que quieres pasar al programa.
  • HasRunKey: clave de registro opcional para verificar que el requisito previo ya está instalado.
  • NoCleanUp: marcador opcional; cuando se establece, el script de instalación no borrará el nombre de clave cuando tu aplicación se elimine de Steam.
  • MinimumHasRunValue: establece el valor mínimo que debe comprobar el script de instalación cuando se esté determinando iniciar el programa. (Opcional).
  • Requirement_OS: clave opcional para aplicar los requerimientos del SO. Consulta Requisitos específicos del SO para más detalles.
  • AsCurrentUser: marca opcional, dale el valor 1 si es importante que el programa se ejecute como el usuario actual. De lo contrario, el cliente de Steam puede que lo ejecute como administrador para evitar los mensajes de elevación de privilegios en los entornos Big Picture o RV.

Excepciones de firewall

Si tu juego usa algún tipo de red, usa la excepción de firewall para conferirla automáticamente en Windows sin forzar al usuario a aceptar la excepción.
"Firewall" { "Space War Game" "%INSTALLDIR%\\SpaceWar.exe" }

Requisitos específicos del SO

El valor Requirement_OS está disponible para ejecutar diferentes instalaciones en distintas versiones de sistema operativo o SKU. Requiere un nuevo grupo de claves llamado Requirement_OS, que contiene pares clave-valor adicionales. A continuación se ofrece la lista de opciones para sistemas operativos.
  • Is64BitWindows: especifica que el proceso solo se ejecutará en una versión de 64 bits del sistema operativo. Los valores son 1 o 0.
  • OSType: Especifica que el proceso solo se ejecutará en una versión específica del sistema operativo. Los valores son:
    • Windows 3.11
    • Windows 95
    • Windows 98
    • Windows ME
    • Windows NT
    • Windows 2000
    • Windows XP
    • Windows 2003
    • Windows Vista
    • Windows 7
    • Windows 2008
    • Windows 2012
    • Windows 2012 R2
    • Windows 8
    • Windows 8.1
    • Windows 10

Ejemplo para 64 bits
Este ejemplo ejecutará el instalador adecuado para el instalador de 32 o 64 bits.
"Net32" { "Process 1" "%INSTALLDIR%\\redist\\Controller\\32bitInstaller.exe" "NoCleanUp" "1" "Requirement_OS" { "Is64BitWindows" "0" } } "Net64" { "Process 1" "%INSTALLDIR%\\redist\\Controller\\64bitInstaller.exe" "NoCleanUp" "1" "Requirement_OS" { "Is64BitWindows" "1" } }

Ejemplo para tipo de SO
Este ejemplo solo es compatible con Windows XP.

"Controller" { "Process 1" "%INSTALLDIR%\\redist\\WinXPInstaller.exe" "NoCleanUp" "1" "Requirement_OS" { "OSType" "Windows XP" } }

Variables de entorno

Las variables de entorno son compatibles en un script de instalación. Se pueden usar todas las variables de entorno estándar disponibles en Windows, junto con algunas otras específicas de un script de instalación. Estas son:
  • %INSTALLDIR%: la ruta completa donde se instala la aplicación, sin una barra invertida.
  • %ROOTDRIVE%: la letra de la unidad donde está instalada la aplicación, como C.
  • %APPDATA%: la carpeta \Users\<nombre de usuario>\AppData\.
  • %USER_MYDOCS%: obtiene la carpeta Users\<nombre de usuario>\Documents.
  • %COMMON_MYDOCS%: obtiene la carpeta All Users\Documents.
  • %LOCALAPPDATA%: carpeta \Documents and Settings\nombre de usuario\Local Settings\Application Data (solo en Vista y más recientes).
  • %WinDir%: directorio de instalación de Windows.
  • %STEAMPATH%: la ruta completa al directorio de instalación del cliente de Steam.

Ten en cuenta que estas son las rutas habituales, pero pueden diferir dependiendo de qué versión de Windows ejecute el usuario.

Valores específicos de idioma

Tanto a string como a DWORD se le pueden asignar datos diferentes en función del idioma en que el usuario esté ejecutando Steam. Para usarlos, crea una subclave en la clave "string" o "dword" con el nombre del idioma, y asigna después allí los nombres y valores. Por ejemplo:
"InstallScript" { "Registry" { "HKEY_LOCAL_MACHINE\\SOFTWARE\\MonkeyDime Studios\\Killer Banana Peel" { "dword" { "english" { "Language" "1" } "french" { "Language" "2" } "german" { "Language" "3" } "italian" { "Language" "4" } "spanish" { "Language" "5" } } } } }

El script de instalación obtiene el idioma de la clave de registro de Steam, al consultar el valor "Language". Si no se encuentra ese valor, entonces "english" es el predeterminado.

Desinstalación de una aplicación

Cuando un usuario borra o verifica tu aplicación desde Steam, se llama al script de instalación para eliminar cualquier valor de registro que hubiese creado. El script de instalación también eliminará el valor utilizado para determinar si un programa debe ejecutarse desde Run Process, para que pueda ejecutarse la próxima vez que se inicie tu aplicación (a menos que el indicador NoCleanUp esté habilitado).

Run Process on Uninstall

Si necesitas ejecutar cualquier proceso a la hora de desinstalar la aplicación, añádelo al script de instalación. No desinstales redistribuibles comunes tales como DirectX, msvc run time, etc., ya que probablemente se usan otros juegos. Está pensado solo para procesos de desinstalación específicos del juego.
NOTA: También se llamará a Run Process On Uninstall cuando el usuario verifique la aplicación en Steam. No ejecutes un proceso que borre todos los archivos, ya que eso causaría que Steam vuelva a descargar todo durante una verificación.
"InstallScript" { "Run Process On Uninstall" { "Process_name" { "Process 1" "process.exe" "Command 1" "/command" } } }

Preguntas frecuentes

P. ¿Por qué sigue mi script de instalación ejecutando mi redistribuible cada vez que inicio el juego?
R. Esto suele significar que el redistribuible está devolviendo un código de retorno distinto de cero. Steam comprueba que el código de retorno sea cero. Si ve que es cero, marca el redistribuible como instalado y no vuelve a ejecutarlo. Si devuelve cualquier otro valor, Steam intentará volver a ejecutarlo en el siguiente inicio.

Para arreglarlo, examina las rutas y los parámetros de tu distribuible. Algunos redistribuibles devolverán valores distintos de cero si ya existen en el equipo. A menudo, esto puede arreglarse usando el marcador silent o quiet del redistribuible.

P. ¿Por qué se escribe mi clave de registro?
R. Normalmente, esto se debe a que el script de instalación no está firmado y estás intentando escribir en HKLM.
Consulta la sección sobre integración de compilaciones, y asegúrate de que se haya agregado una clave "kvsignatures" a tu script durante la compilación, ya que Steam requiere que se complete esta firma para poder escribir en HKLM.

Esto también puede deberse a la virtualización de Windows de 64 bits en Windows de 64 bits, en la que Steam escribe en la ruta Wow6432Node en el registro.

P. ¿Por qué parece que mi script de instalación no se ejecuta en absoluto?
R. Vuelve a comprobar que tu configuración está preparada como corresponde.

P. ¿Cómo agrego los redistribuibles para macOS? ¿Por qué no funciona "Run Process" en mi script de instalación para macOS?
R. Actualmente, no ofrecemos compatibilidad para la instalación de redistribuibles para Mac. Tendrás que poner el instalador en tu ejecutable principal.