Referencia de la CLI

Documentación de la versión v0.1.0-beta.3Ver código 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 hay diferencias, 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 archivos ejecutables, la gramática de argumentos, el orden de despacho, cada palabra de comando, cada ruta jerárquica, cada flag, los envoltorios 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.

Archivos 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 la salida de consola; el código de salida del proceso es el código de salida 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 errores se muestran como cuadros de mensaje (WindowsHost.ShowFailure: mensaje, Code: OL_E_... y la sugerencia See .omsilaunch\diagnostics for details.), y un error 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 controlador propiamente dicho. 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; consulte instalación.

nethost.dll debe estar junto a los shims. Los shims no leen ningún argumento por sí mismos; cada argumento llega 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). Cualquier token -- que contenga = es un argumento de runtime, nunca un flag.
--json, /jsonSalida estructurada (consulte Formatos de salida). --json es el único token -- sin = que tiene significado; se interpreta como el flag /json.
palabra sueltaSi todavía no se vio ninguna palabra de comando y la palabra es una de las palabras de comando, se convierte en el comando. Una vez que hay una palabra de comando, cada 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 agrega 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 de perfil de sesión (SessionProfileException) se informan antes de que se ejecute nada, siempre con salida 2.

Raíz de la instalación#

  • Un argumento explícito de instalación como palabra suelta tiene prioridad sobre RootPath en un archivo /spec (CliInput.BuildSpecAsync).
  • . significa el directorio que contiene el archivo 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 archivo 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 se encuentra el archivo ejecutable (AppContext.BaseDirectory). Consulte 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 ícono de la bandeja. Exactamente un propietario por instalación: si un propietario ya responde a session.status en el endpoint de control, un segundo inicio 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 el pipe de control local; sin un 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 archivo ejecutable mediante ShellExecute (sin herencia de handles) con los mismos argumentos menos /silent/--silent, escribe el envoltorio silent (delegated, host_process_id) y devuelve 0. El proceso de consola no espera a la sesión; consulte OmsiLaunchW.exe. OL_E_WINDOWS_HOST_MISSING / OL_E_WINDOWS_HOST_START_FAILED devuelven 7.
  2. /version: envoltorio 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: envoltorio con cada descriptor PublicStableBeta o PublicExperimental de PublicCapabilityRegistry; salida 0.
  4. help [family]: envoltorio help con usage, product_version, protocol_version, family y los commands públicos (CliRoute, Description, Classification, RuntimeValidation), opcionalmente filtrados por familia; salida 0.
  5. profiles: envoltorio con family y las variantes de archivo 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 del 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 luego se reenvía runtime.execute con un timeout de 8 s (30 s para road-vehicles.spawn).
  7. session status del cliente (750 ms), session stop (vinculado al id de la sesión activa, 750 ms), events read (750 ms), events watch (consulta 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 inicio, sin flag de recuperación, sin /list): enumera los procesos Omsi y sondea el endpoint de control (250 ms); envoltorio 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. Precondiciones: plugins\OmsiLaunch.Plugin.opl y plugins\OmsiLaunch.Native.x86.dll deben existir junto al archivo ejecutable (OL_E_RUNTIME_INSTALLATION_INCOMPLETE, salida 7). release-manifest.json junto al archivo ejecutable, cuando existe, proporciona los hashes esperados de los plugins.
  11. /recovery-status / /recover: RecoverPendingAsync; envoltorio 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; envoltorio 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 inicio 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 plugins permanentes instalados contra release-manifest.json, de modo que un plugin faltante o alterado hace que el plan no sea ejecutable (OL_E_PERMANENT_PLUGIN_*).
  14. Sondea si ya existe un propietario (OL_E_SESSION_ALREADY_ACTIVE, salida 7) y luego ejecuta 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 pendiente lo recupera el journal en el siguiente inicio), "End session" (finalizar sesión) de la bandeja, session.stop por pipe y /observe-seconds.
  2. Se crea el ícono de la bandeja, salvo que en el spec esté establecido Presentation.SuppressTrayIcon.
  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_ o 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 después de n segundos o antes, ante una detención desde la bandeja o por pipe, 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 luego se restaura cada archivo propiedad de la sesión. Consulte ciclo de vida de la sesión y transacciones y recuperación.

Palabras de comando#

Cada palabra aceptada en la primera posición (CliInput.CommandWordsAccepted):

PalabraPropósitoModoNotas
capabilitiesEnumera las capacidades públicasLocal, sin sesiónEnvoltorio capabilities.
profilesEnumera las variantes compatibles de Omsi.exeLocal, sin sesiónEnvoltorio profiles.
detectInforma los procesos Omsi.exe y si hay un propietario activoLocal, sin sesiónTambién es el valor por defecto cuando no se indican argumentos. 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: use /plan y /new.
eventsevents read, events watchClienteread devuelve una vez la lista acotada de eventos; watch imprime cada evento nuevo (por Sequence) como un envoltorio events.watch cada 250 ms hasta Ctrl+C (salida 0), 4 cuando ningún propietario responde, 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. (consulte 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 estado 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 modifican 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 de clima.
weather actual getweather.actual.readReadSíNoNingunaEXPERIMENTALEstado del controlador de clima real/ICAO.
map getmap.readReadSíNoNingunaSTABLE_BETANombre del mapa, archivo, descripción, cantidad de tiles, rango de años y lado de circulación; revalidado en runtime con el slot de mapa corregido.
camera getcamera.readReadSíNoNingunaSTABLE_BETA
camera setcamera.setWriteSíSí (escalares de la cámara, p. ej., --field_of_view=)Ninguna, no se revierteEXPERIMENTALEscritura/relectura del FOV validadas.
camera lockcamera.lockActionSíSí (política con alcance de sesión)NingunaEXPERIMENTALRequiere --family=<0..3> (conductor=0, pasajero=1, externa=2, mapa=3), y opcionalmente --preset=<n> (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 todavía indica STATICALLY_VALIDATED (consulte capacidades).
camera unlockcamera.unlockActionSíSíNingunaEXPERIMENTALLibera la política establecida por camera lock (CAM01).
vehicles listroad-vehicles.listReadSíNoNingunaSTABLE_BETADevuelve handles rv-NNNNNN con alcance de sesión.
vehicles getroad-vehicle.readReadSíNoNingunaSTABLE_BETARequiere --handle=. Handle obsoleto: OL_E_RUNTIME_OBJECT_HANDLE_STALE.
vehicles summaryroad-vehicles.readReadSíNoNingunaSTABLE_BETAConteos y estado del jugador, sin handles.
vehicles spawnroad-vehicles.spawnActionSíSí (agrega un RoadVehicle)Ninguna, no se eliminaEXPERIMENTALRequiere --model=Vehicles\...\*.bus. Timeout de 30 s en el cliente, 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 conteos.
timetable gettimetable.readReadSíNoNingunaSTABLE_BETAEstado del administrador 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 boletos.
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 reinicio del dispositivo están validados en runtime (cierre de runtime H02, D01; consulte 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#

Cada flag de CliInput.KnownFlags. La "Fase" es de inicio (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 señalan en su fila.

Control y salida#

FlagSintaxis y valoresValor por defectoFaseEstabilidadComportamiento
/?/?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_BETAEnvoltorio version, salida 0. Se evalúa antes que cualquier otro comando excepto /silent.
/json/json o --jsondesactivadocontrolSTABLE_BETAEmite envoltorios 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 a OmsiLaunchW.exe y devuelve 0 en cuanto se inició el proceso host. El resultado de la sesión lo informan OmsiLaunchW.exe (cuadros de mensaje, ícono de la bandeja), .omsilaunch\diagnostics y el endpoint de control local. La delegación y los diálogos de error están validados en runtime (cierre de runtime T04); consulte OmsiLaunchW.exe.
/serve/servedesactivadocontrolACCEPTED_FOR_COMPATIBILITY / CURRENTLY_NO_EFFECTEstablece CliInput.Serve; nada lo lee. Un propietario siempre inicia el endpoint de control.
/verbose/verbosedesactivadode inicioPARTIALDiagnosticsSpec.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 por defecto)de inicioPARTIALDiagnosticsSpec.Log. En la práctica, siempre activado.
/logall/logalldesactivadode inicioPARTIALEstablece Verbose, ProcessTrace, PluginTrace y NativeTrace a la vez.
/omsi-logall/omsi-logalldesactivadode inicioPARTIALDiagnosticsSpec.OmsiLogAll.
/trace/tracedesactivadode inicioPARTIALAlias de /trace-process.
/trace-process/trace-processdesactivadode inicioPARTIALDiagnosticsSpec.ProcessTrace.
/trace-plugin/trace-plugindesactivadode inicioPARTIALDiagnosticsSpec.PluginTrace.
/trace-native/trace-nativedesactivadode inicioPARTIALDiagnosticsSpec.NativeTrace.

Planificación, validación y harnesses#

FlagSintaxis y valoresValor por defectoFaseEstabilidadComportamiento
/plan/plandesactivadode inicioSTABLE_BETAConstruye e imprime el SessionPlan, no inicia OMSI. Salida 0 cuando IsRunnable, 1 en caso contrario. Requiere una selección de inicio (/new, /saved, /spec o un argumento de instalación); /plan solo, sin nada más, ejecuta detect.
/validate/validatedesactivadode inicioSTABLE_BETAIdéntico a /plan en este build.
/runtime-batch/runtime-batchdesactivadode runtime (propietario)INTERNALHarness de validación: después de 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 para el 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 id. Modo cliente (sin argumento de instalación): se reenvía al propietario. Modo propietario: se ejecuta una vez después de Running. Ids desconocidos: OL_E_RUNTIME_OPERATION_UNKNOWN, salida 2.
/runtime-arg/runtime-arg:<key>=<value> (repetible)ningunode runtimeSTABLE_BETA (despacho)Argumento de runtime; equivale a --key=value. Si falta =: /runtime-arg requires key=value, salida 2.

Selección del mundo#

FlagSintaxis y valoresValor por defectoFaseEstabilidadComportamiento
/new/newWorldMode.NewMap es el modo por defecto, pero solo se solicita un inicio cuando está presente uno de /new, /saved, /last, /specde inicioSTABLE_BETANEW_MAP. Requiere /map y /entrypoint-index (un plan sin índice de punto de entrada presentado informa 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 inicioSTABLE_BETASAVED_SITUATION. El mapa y la posición provienen del .osn; /map, /entrypoint, /entrypoint-index se rechazan con /saved (salida 2). Situación inexistente: OL_E_SITUATION_NOT_FOUND; si falta su mapa: OL_E_SITUATION_MAP_NOT_FOUND.
/last/lastningunode inicioUNAVAILABLELAST_MAP_STATE. Siempre produce OL_E_CAPABILITY_UNAVAILABLE (no ejecutable, salida 1) en este perfil; no se realiza ningún respaldo basado en la marca de tiempo de un .osn.
/map/map:<identity> (por ejemplo, maps\Grundorf\global.cfg)ningunode inicioSTABLE_BETAIdentidad del mapa para /new, o el alcance de /list:Entrypoints. Desconocido: OL_E_MAP_NOT_FOUND.
/entrypoint/entrypoint:<identity>ningunode inicioUNAVAILABLEPunto de entrada por etiqueta. Bloqueado por gate: el plan registra world.entrypoint-identity como RUNTIME_PARTIAL y pasa a no 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 inicioSTABLE_BETAÍndice del punto de entrada en la lista presentada (basado en 1, tal como lo presenta OMSI). Obligatorio para un plan NEW_MAP ejecutable.

Fecha, hora y clima#

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 agrega 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 valoresValor por defectoFaseEstabilidadComportamiento
/date/date:<yyyy-mm-dd> o /date:systemsin establecerde inicioUNAVAILABLEDateSpec explícito/del sistema. Valor no analizable: OL_E_INVALID_ARGUMENT, salida 2.
/time/time:<hh:mm[:ss]> o /time:systemsin establecerde inicioUNAVAILABLETimeSpec explícito/del sistema.
/year/year:<n> o /year:systemsin establecerde inicioUNAVAILABLEYearSpec.
/weather/weather:<preset>sin establecerde inicioUNAVAILABLEWeatherMode.Preset.
/weather-icao/weather-icao:<code>sin establecerde inicioUNAVAILABLEWeatherMode.Icao.
/weather-real/weather-realsin establecerde inicioUNAVAILABLEWeatherMode.RealCurrent. Prevalece el último de /weather, /weather-icao, /weather-real.

Vehículo del jugador#

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

FlagSintaxis y valoresValor por defectoFaseEstabilidadComportamiento
/vehicle/vehicle:<identity> (Vehicles\...\*.bus)sin establecerde inicioUNAVAILABLESe resuelve primero (OL_E_VEHICLE_NOT_FOUND si es desconocido).
/repaint/repaint:<id>sin establecerde inicioUNAVAILABLESolo se resuelve junto con /vehicle (OL_E_REPAINT_NOT_FOUND).
/hof/hof:<id>sin establecerde inicioUNAVAILABLEOL_E_HOF_NOT_FOUND si es desconocido.
/fleet/fleet:<n>sin establecerde inicioUNAVAILABLENúmero de flota.
/registration/registration:<text>sin establecerde inicioUNAVAILABLEPlaca (matrícula).
/no-vehicle/no-vehicledesactivadode inicioSTABLE_BETABorra cualquier vehículo del jugador de la base (/spec o perfil). Inofensivo.

Overlays de configuración#

FlagSintaxis y valoresValor por defectoFaseEstabilidadComportamiento
/set/set:<key>=<value> (repetible; las claves no distinguen mayúsculas de minúsculas)ningunode inicioSTABLE_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 toma un snapshot, se aplica antes de que OMSI inicie y se restaura byte por byte en la detención (RV-005 RUNTIME_PASS). Conflicto con una clave de un preset del perfil seleccionado: OL_E_SESSION_PROFILE_OVERRIDE_CONFLICT.

Presentación del splash (pantalla de presentación)#

FlagSintaxis y valoresValor por defectoFaseEstabilidadComportamiento
/splash/splash:Managed, /splash:Native, /splash:Unset (no distingue mayúsculas de minúsculas)Managedde inicioSTABLE_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 superponen de forma transaccional y se restauran exactamente (RV-006 RUNTIME_PASS). Native/Unset (alias): los archivos de OMSI no se modifican. Valor faltante: /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 inicioSTABLE_BETASelecciona el archivo de destino localizado.
/splash-assets/splash-assets:<directory> (las rutas relativas se resuelven dentro de la raíz de la instalación)<root>\.omsilaunch\assets\splash; si no, el conjunto empaquetadode inicioSTABLE_BETADirectorio de assets 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).

Internet Textures#

FlagSintaxis y valoresValor por defectoFaseEstabilidadComportamiento
/internet-textures/internet-textures:Native|Disabled|OverrideNativede inicioEXPERIMENTALNative: sin cambios. Disabled: se suprime el descargador perfilado dentro del proceso. Override: el perfil .itx indicado se superpone como Texture\standard.itx; cada destino HTTP(S) enumerado en él más Texture\standard.ipr pasan a ser eliminaciones de la sesión (se quitan durante la sesión y se restauran en la detención). Valor faltante: salida 2.
/internet-textures-profile/internet-textures-profile:<file.itx>ningunode inicioEXPERIMENTALObligatorio 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 dentro de Texture\, sin rutas absolutas, .. ni puntos de reanálisis).

Perfiles de sesión#

FlagSintaxis y valoresValor por defectoFaseEstabilidadComportamiento
/predefined-profile/predefined-profile:<id>ningunode inicioSTABLE_BETA (compilación; OmsiLaunch.ProfileTests offline)Carga <root>\.omsilaunch\session-profiles\<id>\profile.yaml (consulte 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 exige para /new y /saved (OL_E_SESSION_PROFILE_MAP_MISMATCH). Los flags explícitos que chocan 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/clima cuando el bloque new: los define, claves de /set definidas por el preset, flags de splash cuando el preset tiene presentation, flags de Internet Textures cuando tiene internet-textures, timeouts cuando tiene behavior.
/predefined-profile-index/predefined-profile-index:<1..5>ningunode inicioSTABLE_BETASelecciona el preset por index. Fuera de rango: salida 2.

Archivo LaunchSpec#

FlagSintaxis y valoresValor por defectoFaseEstabilidadComportamiento
/spec/spec:<path.json>ningunode inicioSTABLE_BETA (cargador probado offline; semántica de sesión idéntica a la de los flags)Carga un archivo JSON LaunchSpec como base (consulte LaunchSpec) y marca que se solicitó un inicio. 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 permiten 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 por defecto → archivo /spec → /predefined-profile (reemplaza Installation y World y luego aplica el perfil) → flags explícitos. Un argumento de instalación explícito prevalece sobre RootPath en el spec. /no-vehicle borra el vehículo del jugador del spec; /vehicle y los flags relacionados se combinan con él campo por 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 proviene únicamente del spec (no hay flag). Los flags de diagnóstico se combinan con OR con los Diagnostics del spec.

Descubrimiento de contenido#

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

Timeouts y observación#

FlagSintaxis y valoresValor por defectoFaseEstabilidadComportamiento
/startup-timeout/startup-timeout:<1..600> segundosvalor del spec/perfil; si no, 180de inicioSTABLE_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 inicioACCEPTED_FOR_COMPATIBILITY / CURRENTLY_NO_EFFECTSe transporta a Behavior.ShutdownTimeoutSeconds; el supervisor no lo usa en este build (OMSI se termina, no se le pide que se cierre).
/observe-seconds/observe-seconds:<0..2147483647>ninguno (se ejecuta hasta que OMSI termina o se solicita una detención)de runtime (propietario)STABLE_BETALímite superior de la fase de ejecución: después de n segundos en Running se solicita la detención canónica. Una detención desde la bandeja o por pipe, o la terminación de OMSI, la finaliza antes. 0 detiene inmediatamente después de Running.

Recuperación#

FlagSintaxis y valoresValor por defectoFaseEstabilidadComportamiento
/recovery-status/recovery-statusdesactivadolocalSTABLE_BETAInforma 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 journal pendiente (antes se verifican las copias de seguridad contra el SHA-256 del snapshot; OL_E_RECOVERY_BACKUP_CORRUPT, OL_E_RECOVERY_ABSENT_OWNERSHIP_MISMATCH, OL_W_RESTORE_FOREIGN_FILE_RETAINED se informan en diagnostics). Salida 0 cuando no había nada pendiente o la restauración se completó; 8 cuando había un journal pendiente y sigue pendiente. Se rechaza con OL_E_INSTALLATION_BUSY mientras siga activo el proceso de OMSI registrado en el journal (PID, hora de creación, ruta del archivo ejecutable) o, para un journal posterior a HandoffCreated sin PID, cualquier Omsi.exe de esa raíz. Cada inicio de sesión realiza automáticamente la misma recuperación antes de leer la instalación.

Formatos de salida#

  • Envoltorio 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 agregan un miembro metadata cuando se omitieron eventos más antiguos para que quepan en la trama de control (events_dropped_count, consulte 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.
  • Envoltorio 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 sola 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 envoltorio. 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 envoltorios: 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 típicosSalida
Cualquier error de análisisOL_E_INVALID_ARGUMENT, códigos de 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
Verificació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 faltantes (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, iniciodiagnósticos del plan: OL_E_PERMANENT_PLUGIN_MISSING, OL_E_PERMANENT_PLUGIN_HASH_MISMATCH, OL_E_PERMANENT_PLUGIN_MANIFEST_INCOMPLETE (conjunto de plugins instalados), 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 (se vuelve a planificar 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 la planificación los informa 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 (consulte códigos de salida)2..10

Entorno#

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

Consulte 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