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

Introducción

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 de la secuencia de comandos 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 tu integra tus scripts de instalación en tu build, puedes tener cualquier número 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.

Ejemplo

Una versión básica serí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 keyname tras la raíz describe el tipo de acción que se ejecutará.

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

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 del ContentRoot definido 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 depósito. Puede ver un ejemplo en la página Uploading to Steam - Advanced File Mapping Rules.

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 para cualquier archivo con la marca de script de instalación y los iniciará.

Registro

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

Ejecutar proceso

El comando ejecutar proceso 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 mira el nombre de clave (como un valor DWORD del registro) en el valor HasRunKey. Si ese valor no está presente o es 0, efectuará entonces una llamada a CreateProcess para los valores processXX/commandXX. Si CreateProcess da error, entonces se ejecuta la llamada a ShellExecuteEx. Si el ExitCode del programa es 0, entonces el script de instalación asume que se ha realizado correctamente y escribe tu keyname como 1 en el registro.

Los clientes de Steam quieren que las instalaciones sean rápidas y silenciosas. Añadir parámetros silenciosos o tranquilos a todos ejecutan comandos de proceso y sólo añaden lo que necesita absolutamente para el juego.
el proceso ejecutar requiere clave/valor 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 installscript esté establecido, no borrará el keyname cuando se borre tu aplicación 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 requisitos del SO, consulta OS Specific Redists para obtener más detalles.
  • AsCurrentUser: indicador opcional, configúralo en 1 si es importante que el programa se ejecute como el usuario actual. De lo contrario, el cliente de Steam podría ejecutarlo como administrador para evitar los mensajes de elevación 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" }

Redistribuibles específicos de sistemas operativos

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 con un InstallScript. 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 \Documentos y configuración\nombre de usuario\Datos de la aplicación.
  • %USER_MYDOCS%: obtener la carpeta de usuario \Mis documentos.
  • %COMMON_MYDOCS%: obtener la carpeta Todos los usuarios \Documentos.
  • %LOCALAPPDATA%: \Documents and Settings\nombre de usuario\Configuración local\carpeta de Datos de la aplicación (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.

Valores específicos de idioma

Tanto a los valores string como DWORD pueden asignárseles 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. 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 encuentras ese valor, entonces "english" es el predeterminado.

Desinstalación de una aplicación

Cuando un usuario borra o verifica tu aplicación desde Steam, puede llamarse al script de instalación para eliminar cualquier valor de registro que hubiese creado. La secuencia de comandos de instalación también eliminará el valor utilizado para determinar si un programa debe ejecutarse desde Ejecutar proceso[code-inline], para que pueda ejecutarse la próxima vez que se ejecute tu aplicación (a menos que el indicador [code-inline]NoCleanUp sea conjunto).

Ejecutar proceso al desinstalar

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 los usen otros juegos. Está pensado solo para procesos de desinstalación de juegos específicos.
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 volviese 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 el código de retorno 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 dispositivo. 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 escribiendo en HKLM.
Consulta la sección sobre build integration, 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 escribir a HKLM.

Esto también puede deberse a la virtualización de Windows de 64 bits en Windows de 64 bits, Steam escribe Wow6432Node la ruta de 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 de Mac? o ¿Por qué no funciona Ejecutar Proceso en mi script de instalación de Mac?
R. Actualmente, no ofrecemos compatibilidad para la instalación de redistribuibles de Mac. Tendrás que poner el instalador en tu ejecutable principal.
[/code-inline][/code-inline]