Referencia de la CLI

Documentación de la versión v0.1.0-beta.3Ver fuente en GitHub

Traducción de la página original en inglés de OmsiLaunch 0.1.0-beta3. La página en inglés es la referencia normativa: si difieren, prevalecen la página en inglés y el código.

Esta página es la referencia completa y normativa de la línea de comandos de OmsiLaunch 0.1.0-beta3: los tres ejecutables, la gramática de argumentos, el orden de despacho, cada palabra de comando, cada ruta jerárquica, cada flag, los envelopes de salida y el comportamiento ante errores de cada comando. Se genera a partir de tools\OmsiLaunch.Cli\Program.cs (CliProgram.RunAsync, OwnerSession.RunAsync, CliInput.Parse, CliInput.KnownFlags, CliInput.AcceptedNoEffectFlags, CliInput.CommandWordsAccepted, CliInput.HierarchicalRoutes, CliInput.BuildSpecAsync, CliEventWatch), tools\OmsiLaunch.Cli\LaunchSpecJson.cs y los dos shims nativos de tools\OmsiLaunch.Bootstrapper. Los resultados del proceso se enumeran en códigos de salida; los códigos de error, en errores; las invocaciones de ejemplo, en ejemplos de la CLI.

Ejecutables#

ArchivoSubsistemaFunciónDiferencias
OmsiLaunch.exeConsolaBootstrapper nativo (OmsiLaunch.Bootstrapper.cpp): resuelve su propio directorio, divide la línea de comandos en tokens con CommandLineToArgvW, localiza hostfxr mediante nethost.dll y ejecuta OmsiLaunch.Controller.dll con los mismos argumentos.Se escribe salida en la consola; el código de salida del proceso es el del controlador administrado o un código del shim 100..106 si no se pudo iniciar el host de .NET.
OmsiLaunchW.exeWindows (GUI)El mismo shim (OmsiLaunch.WindowsHost.cpp) compilado para el subsistema Windows. Establece la variable de entorno OMSILAUNCH_WINDOWS_HOST=1 antes de iniciar el controlador.Sin consola: la salida de consola se suprime salvo que se indique --json (WindowsHost.SuppressConsole), los fallos se muestran como cuadros de mensaje (WindowsHost.ShowFailure: mensaje, Code: OL_E_... y la indicación See .omsilaunch\diagnostics for details.), y un fallo del shim 100..106 se muestra como OmsiLaunch could not start the .NET host (code N). Comportamiento completo: referencia de OmsiLaunchW.exe.
OmsiLaunch.Controller.dllAdministrado (x64, net6.0-windows, Windows Forms)El propio controlador. Los usuarios nunca lo invocan directamente; ambos shims pasan la ruta del controlador como primer argumento del host, de modo que nunca aparece en la lista pública de argumentos.Requiere el runtime de .NET 6 x64 con Microsoft.WindowsDesktop.App; consulta instalación.

nethost.dll debe estar junto a los shims. Los shims no leen ningún argumento por sí mismos; todos los argumentos llegan sin cambios a CliInput.Parse, por lo que OmsiLaunch.exe y OmsiLaunchW.exe aceptan exactamente la misma sintaxis.

Modelo de invocación#

Gramática de argumentos (CliInput.Parse)#

FormaSignificado
/key:value, /key, -key:value, -keyUn flag. La clave no distingue mayúsculas de minúsculas; el valor es todo lo que sigue al primer :. Las claves desconocidas fallan con OL_E_INVALID_ARGUMENT (Unknown argument: ...), salida 2.
--key=valueUn argumento de runtime para la operación de runtime seleccionada (por ejemplo, --handle=rv-000001). Todo token -- que contenga = es un argumento de runtime, nunca un flag.
--json, /jsonSalida estructurada (consulta Formatos de salida). --json es el único token -- sin = que tiene significado; se analiza como el flag /json.
palabra sueltaSi aún no se ha visto ninguna palabra de comando y la palabra es una de las palabras de comando, se convierte en el comando. Una vez presente una palabra de comando, toda palabra suelta posterior es una palabra de comando (la ruta). En caso contrario, la primera palabra suelta es la raíz de la instalación y cualquier palabra suelta posterior se añade a la ruta.

Consecuencias: una ruta jerárquica (time get) no se puede combinar con un argumento de instalación colocado después de ella (time get D:\OMSI es la ruta desconocida time get d:\omsi, salida 2). D:\OMSI time get se acepta, pero es modo propietario (se inicia una sesión nueva y la operación se ejecuta una vez dentro de ella). Los errores de análisis (ArgumentException, FormatException, InvalidDataException, OverflowException) y los errores del perfil de sesión (SessionProfileException) se notifican antes de ejecutar nada, siempre con salida 2.

Raíz de la instalación#

  • Un argumento de instalación explícito en forma de palabra suelta tiene prioridad sobre RootPath en un archivo /spec (CliInput.BuildSpecAsync).
  • . significa el directorio que contiene el ejecutable (AppContext.BaseDirectory), nunca el directorio de trabajo del llamador (CliInput.ResolveInstallationRoot). Un paquete portable depende de esto.
  • Cuando se omite el argumento, las operaciones en modo propietario (/new, /saved, /spec, /list, /recovery-status, /recover) también usan el directorio del ejecutable. La ruta se normaliza con Path.GetFullPath.
  • Los comandos en modo cliente nunca aceptan un argumento de instalación: se dirigen al endpoint de control local de la instalación en la que reside el ejecutable (AppContext.BaseDirectory). Consulta control local.

Propietario y cliente#

  • Propietario: el proceso que planifica, inicia, supervisa y restaura una sesión (OwnerSession.RunAsync). Mantiene el lease de la instalación (Local\OmsiLaunch.Installation.<sha256(root)>) y la transacción de configuración, expone el endpoint de control local mientras la sesión está activa y muestra el icono de la bandeja. Exactamente un propietario por instalación: si un propietario ya responde a session.status en el endpoint de control, un segundo lanzamiento falla con OL_E_SESSION_ALREADY_ACTIVE (salida 7).
  • Cliente: cualquier invocación sin argumento de instalación que envíe session status, session stop, events read, events watch o una operación de runtime. Se reenvía por la canalización de control local; sin propietario falla con OL_E_NO_ACTIVE_SESSION (salida 4).

Orden de despacho (CliProgram.RunAsync)#

  1. /silent (cuando no se está ejecutando ya bajo OmsiLaunchW.exe): inicia OmsiLaunchW.exe desde el directorio del ejecutable mediante ShellExecute (sin herencia de handles) con los mismos argumentos excepto /silent/--silent, escribe el envelope silent (delegated, host_process_id) y devuelve 0. El proceso de consola no espera a la sesión; consulta OmsiLaunchW.exe. OL_E_WINDOWS_HOST_MISSING / OL_E_WINDOWS_HOST_START_FAILED devuelven 7.
  2. /version: envelope version con product, version (versión informativa del ensamblado, tomada de OmsiLaunch.Version.props, 0.1.0-beta3), protocol_version (0.1), supported_family (OMSI_2_3_004_COMMON); salida 0.
  3. capabilities: envelope con todos los descriptores PublicStableBeta o PublicExperimental de PublicCapabilityRegistry; salida 0.
  4. help [family]: envelope help con usage, product_version, protocol_version, family y los commands públicos (CliRoute, Description, Classification, RuntimeValidation), filtrados opcionalmente por familia; salida 0.
  5. profiles: envelope con family y las variantes de ejecutable supported (ALTERNATE_LAA 692EBFBF..., runtime_validated=true; el hash de Steam LAA 7DAB063D... con validation_status=pending_beta_field_validation); salida 0.
  6. Operación de runtime de cliente (sin argumento de instalación y con una ruta o /runtime:): los argumentos se validan con PublicCapabilityRegistry.ValidateRuntimeArguments (OL_E_RUNTIME_OPERATION_UNKNOWN, OL_E_RUNTIME_ARGUMENT_REQUIRED, salida 2) y después se reenvía runtime.execute con un timeout de 8 s (30 s para road-vehicles.spawn).
  7. session status de cliente (750 ms), session stop (vinculado al id de la sesión activa, 750 ms), events read (750 ms), events watch (sondea cada 250 ms hasta Ctrl+C).
  8. detect, o ningún argumento en absoluto (sin instalación, sin comando, sin /?, sin /spec, sin flag de lanzamiento, sin flag de recuperación, sin /list): enumera los procesos Omsi y sondea el endpoint de control (250 ms); envelope detect; salida 0.
  9. /? o /help: imprime el texto de uso, salida 0. Cualquier otra invocación que tenga una palabra de comando pero ninguna ruta despachable (por ejemplo, d3d sola o session status D:\OMSI) imprime el texto de uso y sale con 2.
  10. Modo propietario. Condiciones previas: plugins\OmsiLaunch.Plugin.opl y plugins\OmsiLaunch.Native.x86.dll deben existir junto al ejecutable (OL_E_RUNTIME_INSTALLATION_INCOMPLETE, salida 7). release-manifest.json junto al ejecutable, cuando existe, proporciona los hashes esperados del plugin.
  11. /recovery-status / /recover: RecoverPendingAsync; envelope recover con pending, recovered, diagnostics; salida 8 solo cuando se solicitó una restauración y no se completó; en caso contrario, 0.
  12. /list:<category>: DiscoverAsync; envelope content.list; salida 0.
  13. Construye el LaunchSpec (BuildSpecAsync), lo planifica (PlanSessionAsync) e imprime el plan. /plan o /validate: salida 0 si IsRunnable; si no, 1. Un plan no ejecutable nunca inicia OMSI (salida 1); bajo OmsiLaunchW.exe, un lanzamiento con un plan no ejecutable muestra su último diagnóstico OL_E_ en un cuadro de mensaje (auditoría de documentación BUG-06). La planificación también verifica el conjunto de archivos del plugin permanente instalado frente a release-manifest.json, de modo que un plugin ausente o modificado hace que el plan no sea ejecutable (OL_E_PERMANENT_PLUGIN_*).
  14. Sondea si existe un propietario (OL_E_SESSION_ALREADY_ACTIVE, salida 7) y después OwnerSession.RunAsync.

Ciclo de vida del propietario (OwnerSession.RunAsync)#

  1. StartSessionAsync(plan). A partir de aquí, toda ruta de salida llega a CloseAsync en un bloque finally: excepciones, Ctrl+C (Console.CancelKeyPress), cierre de la consola / cierre de sesión de Windows (AppDomain.ProcessExit con un margen de 4 s para detención + restauración; lo que quede lo recupera el diario en el siguiente inicio), «End session» (finalizar la sesión) de la bandeja, session.stop por la canalización y /observe-seconds.
  2. Se crea el icono de la bandeja, salvo que Presentation.SuppressTrayIcon esté establecido en el spec.
  3. Espera Running durante StartupTimeoutSeconds + 5 segundos. Se imprime el estado. Si el estado no es Running, salida 1 (OmsiLaunchW.exe muestra The OMSI session did not reach gameplay. con el último diagnóstico OL_E_ u OL_E_SESSION_START_FAILED).
  4. Se ejecutan los lotes de validación (/runtime-batch, /runtime-write-batch, /d3d-batch) y escriben sus artefactos.
  5. Se inicia el endpoint de control local.
  6. /runtime:<operation> se ejecuta una vez (5 s, 15 s para road-vehicles.spawn); el resultado se escribe en <root>\.omsilaunch\diagnostics\<sessionId>-runtime-operation.json y se imprime. Un comando de runtime que falla nunca termina la sesión (en su lugar se imprime runtime_error).
  7. Espera: con /observe-seconds:n, la sesión se detiene tras n segundos o antes ante una detención desde la bandeja o la canalización, o cuando OMSI termina; sin él, el propietario espera hasta que OMSI termine o se solicite una detención.
  8. Se imprime el estado final; salida 0 si Completed, 1 en caso contrario.

session.stop, «End session» de la bandeja, Ctrl+C y CloseAsync solicitan todos la detención canónica: OMSI se termina con TerminateProcess (la rutina de cierre propia de OMSI no se ejecuta y OMSI no reescribe options.cfg) y después se restauran todos los archivos propiedad de la sesión. Consulta ciclo de vida de la sesión y transacciones y recuperación.

Palabras de comando#

Todas las palabras aceptadas en primera posición (CliInput.CommandWordsAccepted):

PalabraPropósitoModoNotas
capabilitiesEnumera las capacidades públicasLocal, sin sesiónEnvelope capabilities.
profilesEnumera las variantes de Omsi.exe compatiblesLocal, sin sesiónEnvelope profiles.
detectInforma de los procesos Omsi.exe y de un propietario activoLocal, sin sesiónTambién es el valor predeterminado cuando no se indica ningún argumento. Estados: NO_OMSI_FOUND, OMSI_FOUND_UNMANAGED, UNKNOWN_BINARY_FOUND por proceso cuando no se puede inspeccionar el binario; active_omsilaunch_instance, managed_session.
helpUso y catálogo público de comandosLocal, sin sesiónhelp <family> filtra por familia de capacidades (session, time, weather, map, camera, vehicles, player, humans, timetable, scripts, constants, curves, hof, drivers, tickets, d3d, events).
sessionsession status, session stopClienteExactamente una palabra a continuación; cualquier otra cosa imprime el uso, salida 2. session plan/session start son nombres de rutas de la API, no palabras de la CLI: usa /plan y /new.
eventsevents read, events watchClienteread devuelve una vez la lista acotada de eventos; watch imprime cada evento nuevo (por Sequence) como un envelope events.watch cada 250 ms hasta Ctrl+C (salida 0), 4 cuando no responde ningún propietario, 7 ante un error de control.
timetime get, time setRuta de cliente
weatherweather get, weather set, weather actual getRuta de cliente
mapmap getRuta de cliente
cameracamera get, camera set, camera lock, camera unlockRuta de cliente
vehiclesvehicles list, vehicles get, vehicles summary, vehicles spawn, vehicles place-randomRuta de cliente
playerplayer getRuta de cliente
humanshumans list, humans get, humans summaryRuta de cliente
timetabletimetable get, timetable <table> list, timetable logs listRuta de cliente
scriptsscripts variable list|get|set, scripts string list|getRuta de cliente
constantsconstants list, constants getRuta de cliente
curvescurves list, curves evaluateRuta de cliente
hofhof getRuta de cliente
driversdrivers listRuta de cliente
ticketstickets getRuta de cliente
d3dPalabra de familia reservadaNingunod3d no tiene ruta jerárquica: d3d texture ... es una ruta desconocida (salida 2) y d3d sola imprime el uso (salida 2). A las operaciones D3D se accede con /runtime:d3d.status, /runtime:d3d.texture.create, etc. (consulta Operaciones sin ruta).

Rutas jerárquicas#

CliInput.HierarchicalRoutes asigna una ruta en minúsculas a un id de operación de runtime. Todas las rutas requieren una sesión en Running y se ejecutan a través del buzón de runtime (ExecuteRuntimeAsync). Las escrituras de runtime solo cambian el estado en memoria de OMSI: nunca tocan archivos, no forman parte de la transacción de configuración y no se revierten en la detención (OMSI se termina). La estabilidad sigue a PublicCapabilityRegistry y a la matriz de validación; los detalles y los campos de resultado están en control de runtime.

RutaOperación de runtimeTipoRequiere RunningModifica OMSIParticipación en la restauraciónEstabilidadNotas
time gettime.readReadSíNoNingunaSTABLE_BETACampos de reloj y calendario.
time settime.setWriteSíSí (reloj en memoria)Ninguna, no se revierteEXPERIMENTALPor ejemplo, --minute=<0..59>; escritura, relectura y restauración validadas el 2026-09-20.
weather getweather.readReadSíNoNingunaSTABLE_BETA
weather setweather.setWriteSíNo (siempre se rechaza)NingunaUNAVAILABLEDevuelve OL_E_RUNTIME_SETTING_NOT_PERSISTENT; OMSI sobrescribe el valor en su siguiente ciclo meteorológico.
weather actual getweather.actual.readReadSíNoNingunaEXPERIMENTALEstado del controlador real/ICAO.
map getmap.readReadSíNoNingunaSTABLE_BETANombre del mapa, archivo, descripción, número de tiles, rango de años y sentido de circulación; revalidado en runtime sobre el slot de mapa corregido.
camera getcamera.readReadSíNoNingunaSTABLE_BETA
camera setcamera.setWriteSíSí (escalares de cámara, p. ej. --field_of_view=)Ninguna, no se revierteEXPERIMENTALEscritura/relectura del FOV validada.
camera lockcamera.lockActionSíSí (política limitada a la sesión)NingunaEXPERIMENTALRequiere --family=<0..3> (conductor=0, pasajero=1, exterior=2, mapa=3), --preset=<n> opcional (familia 0 o 1). Necesita un vehículo del jugador (por ejemplo, una situación guardada). Validado en runtime en el cierre de runtime (CAM01); la cadena RuntimeValidation del registro sigue indicando STATICALLY_VALIDATED (consulta capacidades).
camera unlockcamera.unlockActionSíSíNingunaEXPERIMENTALLibera la política establecida por camera lock (CAM01).
vehicles listroad-vehicles.listReadSíNoNingunaSTABLE_BETADevuelve handles rv-NNNNNN limitados a la sesión.
vehicles getroad-vehicle.readReadSíNoNingunaSTABLE_BETARequiere --handle=. Handle obsoleto: OL_E_RUNTIME_OBJECT_HANDLE_STALE.
vehicles summaryroad-vehicles.readReadSíNoNingunaSTABLE_BETARecuentos y estado del jugador, sin handles.
vehicles spawnroad-vehicles.spawnActionSíSí (añade un RoadVehicle)Ninguna, no se eliminaEXPERIMENTALRequiere --model=Vehicles\...\*.bus. Timeout de 30 s en el cliente y de 15 s en el propietario. No asigna el vehículo del jugador. RV-003 RUNTIME_PASS.
vehicles place-randomroad-vehicles.place-randomActionSíSíNingunaEXPERIMENTALPlaceRandomBus perfilado.
player getplayer-vehicle.readReadSíNoNingunaSTABLE_BETANull semántico cuando no hay vehículo del jugador.
humans listhumans.listReadSíNoNingunaEXPERIMENTALDevuelve handles hb-NNNNNN.
humans gethuman.readReadSíNoNingunaEXPERIMENTALRequiere --handle=.
humans summaryhumans.readReadSíNoNingunaEXPERIMENTALSolo recuentos.
timetable gettimetable.readReadSíNoNingunaSTABLE_BETAEstado del gestor de horarios.
timetable tracks listtimetable.tracks.listReadSíNoNingunaSTABLE_BETAParte de la capacidad timetable.read; evidencia de lectura por lotes del 2026-09-20.
timetable trips listtimetable.trips.listReadSíNoNingunaSTABLE_BETAIgual que la anterior.
timetable lines listtimetable.lines.listReadSíNoNingunaSTABLE_BETAIgual que la anterior.
timetable tours listtimetable.tours.listReadSíNoNingunaSTABLE_BETAIgual que la anterior.
timetable profiles listtimetable.profiles.listReadSíNoNingunaSTABLE_BETAIgual que la anterior.
timetable bus-stops listtimetable.bus-stops.listReadSíNoNingunaSTABLE_BETAIgual que la anterior.
timetable station-links listtimetable.station-links.listReadSíNoNingunaSTABLE_BETAIgual que la anterior.
timetable logs listtimetable.logs.readReadSíNoNingunaSTABLE_BETAIgual que la anterior.
drivers listdrivers.readReadSíNoNingunaEXPERIMENTALRegistros de conductores.
tickets gettickets.readReadSíNoNingunaEXPERIMENTALRegistros de paquetes de billetes.
hof getvehicle.hofs.readReadSíNoNingunaSTABLE_BETARequiere --handle=.
constants listvehicle.constants.listReadSíNoNingunaSTABLE_BETARequiere --handle=.
constants getvehicle.constant.getReadSíNoNingunaSTABLE_BETARequiere --handle=, --name=.
curves listvehicle.curves.listReadSíNoNingunaSTABLE_BETARequiere --handle=.
curves evaluatevehicle.curve.evaluateReadSíNoNingunaSTABLE_BETARequiere --handle=, --name=, --x=.
scripts variable listvehicle.variables.listReadSíNoNingunaEXPERIMENTALRequiere --handle=.
scripts variable getvehicle.variable.getReadSíNoNingunaEXPERIMENTALRequiere --handle=, --name=.
scripts variable setvehicle.variable.setWriteSíSí (variable de script)Ninguna, no se revierteEXPERIMENTALRequiere --handle=, --name=, --value= (número finito).
scripts string listvehicle.string-variables.listReadSíNoNingunaEXPERIMENTALRequiere --handle=.
scripts string getvehicle.string-variable.getReadSíNoNingunaEXPERIMENTALRequiere --handle=, --name=.

Operaciones sin ruta#

Estos ids de operación públicos (PublicCapabilityRegistry.PublicRuntimeOperationIds) no tienen ruta jerárquica y se invocan con /runtime:<operation> más --key=value o /runtime-arg:key=value: timetable.rv-files.list, timetable.track-entries.list, timetable.tour-entries.list, d3d.status, d3d.texture.create (width, height, format obligatorios; levels opcional), d3d.texture.describe (handle; level opcional), d3d.texture.update (handle, width, height, pixels_base64 obligatorios; level, x, y opcionales), d3d.texture.release (handle). Las operaciones D3D son EXPERIMENTAL; el ciclo de vida de las texturas y la invalidación por reset del dispositivo están validados en runtime (cierre de runtime H02, D01; consulta capacidades). timetable.track-entries.list y timetable.tour-entries.list son listas acotadas: un resultado que no cabe en el slot de runtime se acorta (truncated=true). internal.road-vehicles.make-basic es INTERNAL y tanto la CLI como la API lo rechazan con OL_E_RUNTIME_OPERATION_UNKNOWN.

Flags#

Todos los flags de CliInput.KnownFlags. La «fase» es de lanzamiento (da forma al LaunchSpec/plan de una sesión nueva), de runtime (actúa sobre una sesión en ejecución) o de control (cambia el comportamiento de la propia CLI). Los flags que solo se analizan por compatibilidad (CliInput.AcceptedNoEffectFlags) se indican en su línea.

Control y salida#

FlagSintaxis y valoresPredeterminadoFaseEstabilidadComportamiento
/?/?desactivadocontrolSTABLE_BETAImprime el texto de uso, salida 0.
/help/helpdesactivadocontrolSTABLE_BETAIgual que /?. (La palabra suelta help devuelve en cambio el catálogo estructurado).
/version/versiondesactivadocontrolSTABLE_BETAEnvelope version, salida 0. Se evalúa antes que cualquier otro comando excepto /silent.
/json/json o --jsondesactivadocontrolSTABLE_BETAEmite envelopes JSON; también fuerza la salida de consola incluso bajo OmsiLaunchW.exe.
/quiet/quietdesactivadocontrolACCEPTED_FOR_COMPATIBILITY / CURRENTLY_NO_EFFECTEstablece CliInput.Quiet; nada lo lee.
/silent/silent (también --silent)desactivadocontrolEXPERIMENTALDelega toda la línea de comandos en OmsiLaunchW.exe y devuelve 0 en cuanto se ha iniciado el proceso host. El resultado de la sesión lo notifican OmsiLaunchW.exe (cuadros de mensaje, icono de la bandeja), .omsilaunch\diagnostics y el endpoint de control local. La delegación y los cuadros de diálogo de error están validados en runtime (cierre de runtime T04); consulta OmsiLaunchW.exe.
/serve/servedesactivadocontrolACCEPTED_FOR_COMPATIBILITY / CURRENTLY_NO_EFFECTEstablece CliInput.Serve; nada lo lee. El endpoint de control siempre lo inicia un propietario.
/verbose/verbosedesactivadode lanzamientoPARTIALDiagnosticsSpec.Verbose. Los valores se transportan en el spec; su efecto se limita a la traza del host en .omsilaunch\diagnostics.
/log/logactivado (DiagnosticsSpec.Log es true de forma predeterminada)de lanzamientoPARTIALDiagnosticsSpec.Log. En la práctica, siempre activado.
/logall/logalldesactivadode lanzamientoPARTIALEstablece Verbose, ProcessTrace, PluginTrace y NativeTrace a la vez.
/omsi-logall/omsi-logalldesactivadode lanzamientoPARTIALDiagnosticsSpec.OmsiLogAll.
/trace/tracedesactivadode lanzamientoPARTIALAlias de /trace-process.
/trace-process/trace-processdesactivadode lanzamientoPARTIALDiagnosticsSpec.ProcessTrace.
/trace-plugin/trace-plugindesactivadode lanzamientoPARTIALDiagnosticsSpec.PluginTrace.
/trace-native/trace-nativedesactivadode lanzamientoPARTIALDiagnosticsSpec.NativeTrace.

Planificación, validación y harnesses#

FlagSintaxis y valoresPredeterminadoFaseEstabilidadComportamiento
/plan/plandesactivadode lanzamientoSTABLE_BETAConstruye e imprime el SessionPlan, sin iniciar OMSI. Salida 0 cuando IsRunnable, 1 en caso contrario. Requiere una selección de lanzamiento (/new, /saved, /spec o un argumento de instalación); /plan solo, sin nada más, ejecuta detect.
/validate/validatedesactivadode lanzamientoSTABLE_BETAIdéntico a /plan en esta compilación.
/runtime-batch/runtime-batchdesactivadode runtime (propietario)INTERNALHarness de validación: tras Running, ejecuta el conjunto de operaciones de lectura y escribe <sessionId>-runtime-read-batch.json.
/runtime-write-batch/runtime-write-batchdesactivadode runtime (propietario)INTERNALHarness de validación: lecturas más time.set, camera.set y vehicle.variable.set con restauración; escribe <sessionId>-runtime-write-batch.json.
/d3d-batch/d3d-batchdesactivadode runtime (propietario)INTERNALHarness de validación del ciclo de vida de las texturas D3D; escribe <sessionId>-d3d-wave-d-batch.json.
/runtime/runtime:<operation>ningunode runtimeSTABLE_BETA (despacho)Selecciona una operación de runtime pública por su id. Modo cliente (sin argumento de instalación): se reenvía al propietario. Modo propietario: se ejecuta una vez tras Running. Ids desconocidos: OL_E_RUNTIME_OPERATION_UNKNOWN, salida 2.
/runtime-arg/runtime-arg:<key>=<value> (repetible)ningunode runtimeSTABLE_BETA (despacho)Argumento de runtime; equivalente a --key=value. Si falta =: /runtime-arg requires key=value, salida 2.

Selección del mundo#

FlagSintaxis y valoresPredeterminadoFaseEstabilidadComportamiento
/new/newWorldMode.NewMap es el modo predeterminado, pero solo se solicita un lanzamiento cuando está presente uno de /new, /saved, /last, /specde lanzamientoSTABLE_BETANEW_MAP. Requiere /map y /entrypoint-index (un plan sin índice del punto de entrada presentado notifica OL_E_ENTRYPOINT_REQUIRED; sin /map no se resuelve ningún mapa). /new nunca selecciona un mapa de forma implícita.
/saved/saved:<file.osn>ningunode lanzamientoSTABLE_BETASAVED_SITUATION. El mapa y la posición proceden del .osn; /map, /entrypoint, /entrypoint-index se rechazan junto con /saved (salida 2). Situación inexistente: OL_E_SITUATION_NOT_FOUND; su mapa inexistente: OL_E_SITUATION_MAP_NOT_FOUND.
/last/lastningunode lanzamientoUNAVAILABLELAST_MAP_STATE. Siempre produce OL_E_CAPABILITY_UNAVAILABLE (no ejecutable, salida 1) en este perfil; no se realiza ninguna alternativa con .osn basada en marcas de tiempo.
/map/map:<identity> (por ejemplo, maps\Grundorf\global.cfg)ningunode lanzamientoSTABLE_BETAIdentidad del mapa para /new, o el ámbito para /list:Entrypoints. Desconocido: OL_E_MAP_NOT_FOUND.
/entrypoint/entrypoint:<identity>ningunode lanzamientoUNAVAILABLEPunto de entrada por etiqueta. Bloqueado: el plan registra world.entrypoint-identity como RUNTIME_PARTIAL y deja de ser ejecutable (OL_E_CAPABILITY_UNAVAILABLE). Mutuamente excluyente con /entrypoint-index (la identidad prevalece y borra el índice).
/entrypoint-index/entrypoint-index:<n>, 0..2147483647ningunode lanzamientoSTABLE_BETAÍndice del punto de entrada en la lista presentada (empezando en 1, tal como lo presenta OMSI). Obligatorio para un plan NEW_MAP ejecutable.

Fecha, hora y meteorología#

Los cuatro se aceptan y se transportan al LaunchSpec, pero la ruta de inicio nativa no los aplica: el planificador los registra como STATICALLY_PARTIAL y añade OL_E_CAPABILITY_UNAVAILABLE, por lo que el plan NO ES EJECUTABLE (salida 1). Un archivo /spec o un perfil de sesión que los establezca tiene el mismo efecto.

FlagSintaxis y valoresPredeterminadoFaseEstabilidadComportamiento
/date/date:<yyyy-mm-dd> o /date:systemsin establecerde lanzamientoUNAVAILABLEDateSpec explícito/sistema. Valor no analizable: OL_E_INVALID_ARGUMENT, salida 2.
/time/time:<hh:mm[:ss]> o /time:systemsin establecerde lanzamientoUNAVAILABLETimeSpec explícito/sistema.
/year/year:<n> o /year:systemsin establecerde lanzamientoUNAVAILABLEYearSpec.
/weather/weather:<preset>sin establecerde lanzamientoUNAVAILABLEWeatherMode.Preset.
/weather-icao/weather-icao:<code>sin establecerde lanzamientoUNAVAILABLEWeatherMode.Icao.
/weather-real/weather-realsin establecerde lanzamientoUNAVAILABLEWeatherMode.RealCurrent. Prevalece el último de /weather, /weather-icao, /weather-real.

Vehículo del jugador#

Se aceptan y se resuelven frente a la instalación, pero el runtime no los aplica: cada campo establecido es STATICALLY_PARTIAL y añade OL_E_CAPABILITY_UNAVAILABLE (plan NO EJECUTABLE, salida 1).

FlagSintaxis y valoresPredeterminadoFaseEstabilidadComportamiento
/vehicle/vehicle:<identity> (Vehicles\...\*.bus)sin establecerde lanzamientoUNAVAILABLESe resuelve primero (OL_E_VEHICLE_NOT_FOUND si es desconocido).
/repaint/repaint:<id>sin establecerde lanzamientoUNAVAILABLESolo se resuelve junto con /vehicle (OL_E_REPAINT_NOT_FOUND).
/hof/hof:<id>sin establecerde lanzamientoUNAVAILABLEOL_E_HOF_NOT_FOUND si es desconocido.
/fleet/fleet:<n>sin establecerde lanzamientoUNAVAILABLENúmero de flota.
/registration/registration:<text>sin establecerde lanzamientoUNAVAILABLEMatrícula.
/no-vehicle/no-vehicledesactivadode lanzamientoSTABLE_BETAQuita cualquier vehículo del jugador de la semilla (/spec o perfil). Inocuo.

Overlays de configuración#

FlagSintaxis y valoresPredeterminadoFaseEstabilidadComportamiento
/set/set:<key>=<value> (repetible; las claves no distinguen mayúsculas de minúsculas)ningunode lanzamientoSTABLE_BETAOverlay semántico de options.cfg a partir de ConfigurationCatalog (por ejemplo, graphics.maxFPS=60, traffic.randomVehicles=150). Clave desconocida: OL_E_UNKNOWN_SETTING (salida 2); clave de solo lectura (advanced.multithreadingCalculate, advanced.multithreadingTextureLoad, graphics.texture, graphics.textureFilter): OL_E_SETTING_NOT_WRITABLE (salida 2); valor fuera de rango o mal formado: OL_E_INVALID_SETTING_VALUE al construir el overlay. El overlay es una mutación de la sesión: se guarda en un snapshot, se aplica antes de iniciar OMSI y se restaura byte a byte en la detención (RV-005 RUNTIME_PASS). Conflicto con una clave propiedad del preset de un perfil seleccionado: OL_E_SESSION_PROFILE_OVERRIDE_CONFLICT.

Presentación del splash#

FlagSintaxis y valoresPredeterminadoFaseEstabilidadComportamiento
/splash/splash:Managed, /splash:Native, /splash:Unset (sin distinguir mayúsculas de minúsculas)Managedde lanzamientoSTABLE_BETAManaged: los BMP empaquetados de 640x480 y 24 bits se copian una vez a <root>\.omsilaunch\assets\splash, y GUI\NewSplashscreen_ENG.bmp más GUI\NewSplashscreen_<lang>.bmp se aplican como overlay de forma transaccional y se restauran exactamente (RV-006 RUNTIME_PASS). Native/Unset (alias): los archivos de OMSI no se tocan. Si falta el valor: /splash requires Unset, Native, or Managed, salida 2.
/splash-language/splash-language:PTB|ENG|DEU|FRA (también pt-BR, de, fr, en; cualquier otro valor recurre a ENG)[language] de options.cfg; si no, ENGde lanzamientoSTABLE_BETASelecciona el archivo de destino localizado.
/splash-assets/splash-assets:<directory> (las rutas relativas se resuelven bajo la raíz de la instalación)<root>\.omsilaunch\assets\splash; si no, el conjunto empaquetadode lanzamientoSTABLE_BETADirectorio de recursos personalizado; debe contener ENG.bmp y, para un idioma distinto del inglés, <lang>.bmp. Errores: OL_E_SPLASH_ASSET_DIRECTORY_MISSING, OL_E_SPLASH_ASSET_MISSING, OL_E_SPLASH_FORMAT_UNSUPPORTED (se presentan como OL_E_SESSION_PRESENTATION_INVALID en el plan; no ejecutable).

Texturas de Internet#

FlagSintaxis y valoresPredeterminadoFaseEstabilidadComportamiento
/internet-textures/internet-textures:Native|Disabled|OverrideNativede lanzamientoEXPERIMENTALNative: sin cambios. Disabled: se suprime el descargador perfilado dentro del proceso. Override: el perfil .itx indicado se aplica como overlay en Texture\standard.itx; todos los destinos HTTP(S) enumerados en él más Texture\standard.ipr pasan a ser eliminaciones de sesión (se quitan durante la sesión y se restauran en la detención). Si falta el valor: salida 2.
/internet-textures-profile/internet-textures-profile:<file.itx>ningunode lanzamientoEXPERIMENTALObligatorio con Override (OL_E_ITX_PROFILE_REQUIRED, salida 2). OL_E_ITX_PROFILE_MISSING, OL_E_ITX_PROFILE_INVALID (deben ser pares de líneas URL/destino con URL http/https), OL_E_ITX_TARGET_OUTSIDE_TEXTURE_PATH (los destinos deben resolverse bajo Texture\, sin rutas absolutas, .. ni puntos de reanálisis).

Perfiles de sesión#

FlagSintaxis y valoresPredeterminadoFaseEstabilidadComportamiento
/predefined-profile/predefined-profile:<id>ningunode lanzamientoSTABLE_BETA (compilación; OmsiLaunch.ProfileTests offline)Carga <root>\.omsilaunch\session-profiles\<id>\profile.yaml (consulta perfiles de sesión). Requiere /predefined-profile-index (OL_E_SESSION_PROFILE_PRESET_NOT_FOUND, salida 2). El bloque new: solo se aplica con /new; compatibility.maps se aplica para /new y /saved (OL_E_SESSION_PROFILE_MAP_MISMATCH). Los flags explícitos que colisionan con un campo propiedad del perfil se rechazan con OL_E_SESSION_PROFILE_OVERRIDE_CONFLICT (CliInput.RejectProfileConflicts): mapa/punto de entrada/fecha/hora/año/meteorología cuando el bloque new: es su propietario, claves de /set propiedad del preset, flags de splash cuando el preset tiene presentation, flags de texturas de Internet cuando tiene internet-textures, timeouts cuando tiene behavior.
/predefined-profile-index/predefined-profile-index:<1..5>ningunode lanzamientoSTABLE_BETASelecciona el preset por index. Fuera de rango: salida 2.

Archivo LaunchSpec#

FlagSintaxis y valoresPredeterminadoFaseEstabilidadComportamiento
/spec/spec:<path.json>ningunode lanzamientoSTABLE_BETA (cargador probado offline; semántica de sesión idéntica a la de los flags)Carga un archivo JSON LaunchSpec como semilla (consulta LaunchSpec) y marca que se ha solicitado un lanzamiento. Reglas (LaunchSpecJson): el archivo debe existir (OL_E_SPEC_NOT_FOUND, salida 6); como máximo 1 MiB (OL_E_SPEC_TOO_LARGE, salida 2); la raíz debe ser un objeto (OL_E_SPEC_INVALID); los nombres de propiedad no distinguen mayúsculas de minúsculas; se admiten comentarios // y comas finales; profundidad máxima de 32; toda propiedad desconocida se rechaza con su ruta JSON (OL_E_SPEC_UNKNOWN_PROPERTY: $.Presentation.Foo, salida 2).

Precedencia (CliInput.BuildSpecAsync): valores predeterminados → archivo /spec → /predefined-profile (sustituye Installation y World y después aplica el perfil) → flags explícitos. Un argumento de instalación explícito prevalece sobre RootPath en el spec. /no-vehicle quita el vehículo del jugador del spec; /vehicle y los flags relacionados se combinan con él campo a campo. Las claves de /set se combinan en Environment.General. /splash, /splash-language, /splash-assets, /internet-textures, /internet-textures-profile solo sobrescriben cuando se indican. /startup-timeout y /shutdown-timeout solo sobrescriben cuando se indican; Presentation.SuppressTrayIcon procede únicamente del spec (no hay flag). Los flags de diagnóstico se combinan mediante OR con los Diagnostics del spec.

Descubrimiento de contenido#

FlagSintaxis y valoresPredeterminadoFaseEstabilidadComportamiento
/list/list:<category>; las categorías son los valores de ContentQueryKind Maps, Situations, Vehicles, Repaints, Hofs, FleetNumbers, Registrations, Addons, Entrypoints (sin distinguir mayúsculas de minúsculas)ningunolocal, sin sesiónSTABLE_BETADiscoverAsync sobre la instalación; envelope content.list con entradas Identity, Kind, DisplayName; salida 0. Categoría desconocida: Unknown discovery category, salida 2. Los puntos de reanálisis (uniones/enlaces simbólicos) se omiten y los archivos de OMSI se leen como Windows-1252.
/vehicle-scope/vehicle-scope:<vehicle identity>ningunolocalSTABLE_BETAÁmbito que se reenvía para todas las categorías excepto Entrypoints, que usa /map como ámbito.

Timeouts y observación#

FlagSintaxis y valoresPredeterminadoFaseEstabilidadComportamiento
/startup-timeout/startup-timeout:<1..600> segundosvalor del spec/perfil; si no, 180de lanzamientoSTABLE_BETABehavior.StartupTimeoutSeconds. El propietario espera Running durante este valor más 5 s; OL_E_STARTUP_TIMEOUT termina la sesión con salida 1.
/shutdown-timeout/shutdown-timeout:<1..600> segundosvalor del spec/perfil; si no, 30de lanzamientoACCEPTED_FOR_COMPATIBILITY / CURRENTLY_NO_EFFECTSe transporta a Behavior.ShutdownTimeoutSeconds; el supervisor no lo consume en esta compilación (OMSI se termina, no se le pide que se cierre).
/observe-seconds/observe-seconds:<0..2147483647>ninguno (se ejecuta hasta que OMSI termine o se solicite una detención)de runtime (propietario)STABLE_BETALímite superior de la fase de ejecución: tras n segundos en Running se solicita la detención canónica. Una detención desde la bandeja o la canalización, o la finalización de OMSI, la terminan antes. 0 detiene inmediatamente después de Running.

Recuperación#

FlagSintaxis y valoresPredeterminadoFaseEstabilidadComportamiento
/recovery-status/recovery-statusdesactivadolocalSTABLE_BETAInforma de si <root>\.omsilaunch\journal.json está pendiente (pending); nunca restaura; salida 0. Toma el lease de la instalación: OL_E_INSTALLATION_BUSY (salida 7) mientras un propietario lo mantiene.
/recover/recoverdesactivadolocalSTABLE_BETARestaura un diario pendiente (las copias de seguridad se verifican primero frente al SHA-256 del snapshot; OL_E_RECOVERY_BACKUP_CORRUPT, OL_E_RECOVERY_ABSENT_OWNERSHIP_MISMATCH, OL_W_RESTORE_FOREIGN_FILE_RETAINED se notifican en diagnostics). Salida 0 cuando no había nada pendiente o la restauración se completó; 8 cuando había un diario pendiente y sigue estándolo. Se rechaza con OL_E_INSTALLATION_BUSY mientras el proceso de OMSI registrado en el diario (PID, hora de creación, ruta del exe) o, en el caso de un diario posterior a HandoffCreated sin PID, cualquier Omsi.exe de esa raíz sigue vivo. Cada inicio de sesión realiza automáticamente la misma recuperación antes de leer la instalación.

Formatos de salida#

  • Envelope de éxito (CliInput.WriteEnvelope, con --json): {"ok": true, "command": "<name>", "protocol_version": "0.1", "result": <object>}, con sangría. Las respuestas reenviadas de session status y events read añaden un miembro metadata cuando se omitieron eventos más antiguos para que cupieran en la trama de control (events_dropped_count, consulta control local). Sin --json solo se imprime <object> como JSON con sangría, seguido de Note: <n> older events were omitted to fit the control frame. cuando se descartaron eventos.
  • Envelope de error (CliInput.WriteError, con --json): {"ok": false, "command": "<name>", "protocol_version": "0.1", "error": {"code": "OL_E_...", "category": "<category>", "message": "..."}}. Sin --json: OL_E_<CODE>: message en una línea. Categorías: invalid_argument, unsupported_profile, session, runtime, not_found, transaction, internal. Bajo OmsiLaunchW.exe, el mismo código y el mismo mensaje se muestran en un cuadro de mensaje.
  • Plan y estado (CliInput.Write): los registros SessionPlan, SessionStatus y RuntimeCommandResult se imprimen como JSON con sangría sin envelope. Sin --json, un plan se resume como Plan: READY profile=Omsi23004_692EBFBF o Plan: NOT RUNNABLE profile=...; los demás registros se siguen imprimiendo como JSON. Los valores de enumeración se serializan como enteros (SessionState.Running es 14, Completed es 18, Failed es 19).
  • Nombres de comando usados en los envelopes: silent, version, capabilities, help, profiles, detect, recover, content.list, session, session.status, session.stop, events.read, events.watch, events watch, installation, cli, session profile y el id de la operación de runtime para los comandos de runtime reenviados.
  • Bajo OmsiLaunchW.exe (OMSILAUNCH_WINDOWS_HOST=1) no se escribe nada en la consola salvo que se indique --json.

Errores por comando#

ComandoCódigos de error habitualesSalida
Cualquier fallo de análisisOL_E_INVALID_ARGUMENT, códigos del perfil de sesión (OL_E_SESSION_PROFILE_*)2
/silentOL_E_WINDOWS_HOST_MISSING, OL_E_WINDOWS_HOST_START_FAILED7
Ruta de cliente, /runtime (cliente)OL_E_RUNTIME_OPERATION_UNKNOWN, OL_E_RUNTIME_ARGUMENT_REQUIRED (2); OL_E_NO_ACTIVE_SESSION (4); OL_E_CONTROL_*, OL_E_RUNTIME_* devueltos por el propietario, p. ej. OL_E_RUNTIME_REQUEST_TIMEOUT, OL_E_RUNTIME_OBJECT_HANDLE_STALE, OL_E_RUNTIME_SETTING_NOT_PERSISTENT, OL_E_RUNTIME_RESPONSE_TOO_LARGE, OL_E_SESSION_NOT_RUNNING (7)2, 4, 7
session status, session stop, events read, events watchOL_E_NO_ACTIVE_SESSION (4); OL_E_CONTROL_SESSION_MISMATCH, OL_E_CONTROL_PROTOCOL, OL_E_CONTROL_FAILED (7)4, 7
Comprobación previa del propietarioOL_E_RUNTIME_INSTALLATION_INCOMPLETE, OL_E_SESSION_ALREADY_ACTIVE7
/recovery-status, /recoverOL_E_INSTALLATION_BUSY (7); OL_E_RECOVERY_*, OL_E_RESTORE_FAILED (8); pendiente pero no recuperado (8)7, 8
/listcategoría desconocida (2); OL_E_INSTALLATION_NOT_FOUND/directorios inexistentes (6)2, 6
/specOL_E_SPEC_NOT_FOUND (6); OL_E_SPEC_TOO_LARGE, OL_E_SPEC_INVALID, OL_E_SPEC_UNKNOWN_PROPERTY (2)2, 6
/setOL_E_UNKNOWN_SETTING, OL_E_SETTING_NOT_WRITABLE, OL_E_INVALID_SETTING_VALUE2
/plan, /validate, lanzamientodiagnósticos del plan: OL_E_PERMANENT_PLUGIN_MISSING, OL_E_PERMANENT_PLUGIN_HASH_MISMATCH, OL_E_PERMANENT_PLUGIN_MANIFEST_INCOMPLETE (conjunto de archivos del plugin instalado), OL_E_UNSUPPORTED_BUILD, OL_E_UNSUPPORTED_OPERATING_SYSTEM, OL_E_INSTALLATION_NOT_WRITABLE, OL_E_MAP_NOT_FOUND, OL_E_ENTRYPOINT_REQUIRED, OL_E_SITUATION_NOT_FOUND, OL_E_SITUATION_MAP_NOT_FOUND, OL_E_VEHICLE_NOT_FOUND, OL_E_REPAINT_NOT_FOUND, OL_E_HOF_NOT_FOUND, OL_E_CAPABILITY_UNAVAILABLE, OL_E_SESSION_PRESENTATION_INVALID, OL_E_RUNTIME_ARTIFACT_MISSING, plugin.integrity.reference (informativo)1
Inicio de sesiónOL_E_PLAN_NOT_RUNNABLE (nueva planificación al iniciar, 1); OL_E_PERMANENT_PLUGIN_MISSING, OL_E_PERMANENT_PLUGIN_HASH_MISMATCH, OL_E_PERMANENT_PLUGIN_MANIFEST_INCOMPLETE, OL_E_RELEASE_MANIFEST_INVALID (normalmente notificados por la planificación como diagnóstico del plan, salida 1; 7 solo si los archivos del plugin cambian entre la planificación y el inicio), OL_E_INSTALLATION_BUSY (7); OL_E_PROCESS_START_FAILED, OL_E_PROCESS_EXITED_EARLY, OL_E_STARTUP_TIMEOUT, OL_E_WORLD_START_FAILED, OL_E_SITUATION_LOAD_FAILED, OL_E_PLUGIN_NOT_LOADED (sesión Failed, 1)1, 7
Excepción no controlada en cualquier puntoclasificada por CliProgram.Classify (consulta códigos de salida)2..10

Entorno#

VariableEstablecida porEfecto
OMSILAUNCH_WINDOWS_HOST=1OmsiLaunchW.exeWindowsHost.IsActive: salida de consola suprimida, fallos como cuadros de mensaje, /silent no se vuelve a delegar.

Consulta también#

Ejemplos de la CLI · OmsiLaunchW.exe · códigos de salida · errores · control local · bandeja de Windows · control de runtime · capacidades · LaunchSpec · perfiles de sesión · empaquetado · compatibilidad · limitaciones conocidas · API pública