CLI-referentie

Documentatie voor versie v0.1.0-beta.3Bron bekijken op GitHub

Vertaling van de oorspronkelijke Engelse pagina voor OmsiLaunch 0.1.0-beta3. De Engelse pagina is normatief: bij verschillen gelden de Engelse pagina en de code.

Deze pagina is de volledige, normatieve referentie voor de opdrachtregel van OmsiLaunch 0.1.0-beta3: de drie uitvoerbare bestanden, de argumentgrammatica, de dispatchvolgorde, elk opdrachtwoord, elke hiërarchische route, elke vlag, de uitvoer-envelopes en het foutgedrag van elke opdracht. De pagina is gegenereerd uit 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 en de twee native shims onder tools\OmsiLaunch.Bootstrapper. Procesresultaten staan in exitcodes, foutcodes in fouten en uitgewerkte aanroepen in CLI-voorbeelden.

Uitvoerbare bestanden#

BestandSubsysteemRolVerschillen
OmsiLaunch.exeConsoleNative bootstrapper (OmsiLaunch.Bootstrapper.cpp): bepaalt zijn eigen map, splitst de opdrachtregel op met CommandLineToArgvW, zoekt hostfxr via nethost.dll en voert OmsiLaunch.Controller.dll uit met dezelfde argumenten.Er wordt console-uitvoer geschreven; de exitcode van het proces is de exitcode van de managed controller, of een shimcode 100..106 als de .NET-host niet kon worden gestart.
OmsiLaunchW.exeWindows (GUI)Dezelfde shim (OmsiLaunch.WindowsHost.cpp), gebouwd voor het Windows-subsysteem. Deze stelt de omgevingsvariabele OMSILAUNCH_WINDOWS_HOST=1 in voordat de controller wordt gestart.Geen console: console-uitvoer wordt onderdrukt tenzij --json is opgegeven (WindowsHost.SuppressConsole), fouten worden als berichtvensters getoond (WindowsHost.ShowFailure: bericht, Code: OL_E_... en de hint See .omsilaunch\diagnostics for details.), en een shimfout 100..106 wordt getoond als OmsiLaunch could not start the .NET host (code N). Volledig gedrag: referentie voor OmsiLaunchW.exe.
OmsiLaunch.Controller.dllManaged (x64, net6.0-windows, Windows Forms)De controller zelf. Gebruikers roepen deze nooit rechtstreeks aan; beide shims geven het pad van de controller door als eerste hostargument, zodat het nooit in de openbare argumentenlijst verschijnt.Vereist de x64-.NET 6-runtime met Microsoft.WindowsDesktop.App; zie installatie.

nethost.dll moet naast de shims staan. De shims lezen zelf geen argumenten; elk argument bereikt CliInput.Parse ongewijzigd, zodat OmsiLaunch.exe en OmsiLaunchW.exe precies dezelfde syntaxis accepteren.

Aanroepmodel#

Argumentgrammatica (CliInput.Parse)#

VormBetekenis
/key:value, /key, -key:value, -keyEen vlag. De sleutel is niet hoofdlettergevoelig; de waarde is alles na de eerste :. Onbekende sleutels mislukken met OL_E_INVALID_ARGUMENT (Unknown argument: ...), exit 2.
--key=valueEen runtimeargument voor de geselecteerde runtime-operatie (bijvoorbeeld --handle=rv-000001). Elk ---token dat = bevat, is een runtimeargument en nooit een vlag.
--json, /jsonGestructureerde uitvoer (zie Uitvoerformaten). --json is het enige ---token zonder = dat betekenis heeft; het wordt geparseerd als de vlag /json.
los woordAls er nog geen opdrachtwoord is gezien en het woord een van de opdrachtwoorden is, wordt het de opdracht. Zodra er een opdrachtwoord aanwezig is, is elk later los woord een opdrachtwoord (de route). Anders is het eerste losse woord de installatiemap en wordt elk later los woord aan de route toegevoegd.

Gevolgen: een hiërarchische route (time get) kan niet worden gecombineerd met een installatieargument dat erna staat (time get D:\OMSI is de onbekende route time get d:\omsi, exit 2). D:\OMSI time get wordt geaccepteerd, maar is eigenaarmodus (er wordt een nieuwe sessie gestart en de operatie wordt daarin één keer uitgevoerd). Parseerfouten (ArgumentException, FormatException, InvalidDataException, OverflowException) en sessieprofielfouten (SessionProfileException) worden gemeld voordat er iets wordt uitgevoerd, altijd met exit 2.

Installatiemap#

  • Een expliciet installatieargument als los woord heeft voorrang op RootPath in een /spec-bestand (CliInput.BuildSpecAsync).
  • . betekent de map die het uitvoerbare bestand bevat (AppContext.BaseDirectory), nooit de werkmap van de aanroeper (CliInput.ResolveInstallationRoot). Een portable pakket is hiervan afhankelijk.
  • Als het argument ontbreekt, gebruiken operaties in eigenaarmodus (/new, /saved, /spec, /list, /recovery-status, /recover) ook de map van het uitvoerbare bestand. Het pad wordt genormaliseerd met Path.GetFullPath.
  • Opdrachten in clientmodus nemen nooit een installatieargument: ze richten zich tot het lokale control-endpoint van de installatie waarin het uitvoerbare bestand staat (AppContext.BaseDirectory). Zie local control.

Eigenaar en client#

  • Eigenaar: het proces dat een sessie plant, start, bewaakt en herstelt (OwnerSession.RunAsync). Het houdt de installatielease (Local\OmsiLaunch.Installation.<sha256(root)>) en de configuratietransactie vast, stelt het lokale control-endpoint beschikbaar zolang de sessie actief is en toont het systeemvakpictogram. Precies één eigenaar per installatie: als een eigenaar al antwoordt op session.status via het control-endpoint, mislukt een tweede start met OL_E_SESSION_ALREADY_ACTIVE (exit 7).
  • Client: elke aanroep zonder installatieargument die session status, session stop, events read, events watch of een runtime-operatie verstuurt. Deze wordt doorgestuurd via de local-control-pipe; zonder eigenaar mislukt hij met OL_E_NO_ACTIVE_SESSION (exit 4).

Dispatchvolgorde (CliProgram.RunAsync)#

  1. /silent (als het proces nog niet onder OmsiLaunchW.exe draait): start OmsiLaunchW.exe vanuit de map van het uitvoerbare bestand via ShellExecute (zonder overerving van handles) met dezelfde argumenten zonder /silent/--silent, schrijf de envelope silent (delegated, host_process_id) en retourneer 0. Het consoleproces wacht niet op de sessie; zie OmsiLaunchW.exe. OL_E_WINDOWS_HOST_MISSING / OL_E_WINDOWS_HOST_START_FAILED retourneren 7.
  2. /version: envelope version met product, version (informatieve assemblyversie, gestempeld vanuit OmsiLaunch.Version.props, 0.1.0-beta3), protocol_version (0.1), supported_family (OMSI_2_3_004_COMMON); exit 0.
  3. capabilities: envelope met elke PublicStableBeta- of PublicExperimental-descriptor van PublicCapabilityRegistry; exit 0.
  4. help [family]: envelope help met usage, product_version, protocol_version, family en de openbare commands (CliRoute, Description, Classification, RuntimeValidation), optioneel gefilterd op familie; exit 0.
  5. profiles: envelope met family en de supported varianten van het uitvoerbare bestand (ALTERNATE_LAA 692EBFBF..., runtime_validated=true; de Steam-LAA-hash 7DAB063D... met validation_status=pending_beta_field_validation); exit 0.
  6. Runtime-operatie als client (geen installatieargument en een route of /runtime:): argumenten worden gevalideerd tegen PublicCapabilityRegistry.ValidateRuntimeArguments (OL_E_RUNTIME_OPERATION_UNKNOWN, OL_E_RUNTIME_ARGUMENT_REQUIRED, exit 2), waarna runtime.execute wordt doorgestuurd met een timeout van 8 s (30 s voor road-vehicles.spawn).
  7. Client-session status (750 ms), session stop (gebonden aan de actieve sessie-id, 750 ms), events read (750 ms), events watch (pollt elke 250 ms tot Ctrl+C).
  8. detect, of helemaal geen argumenten (geen installatie, geen opdracht, geen /?, geen /spec, geen startvlag, geen recoveryvlag, geen /list): somt Omsi-processen op en test het control-endpoint (250 ms); envelope detect; exit 0.
  9. /? of /help: druk de gebruikstekst af, exit 0. Elke andere aanroep met een opdrachtwoord maar zonder dispatchbare route (bijvoorbeeld d3d alleen of session status D:\OMSI) drukt de gebruikstekst af en eindigt met exit 2.
  10. Eigenaarmodus. Voorwaarden: plugins\OmsiLaunch.Plugin.opl en plugins\OmsiLaunch.Native.x86.dll moeten naast het uitvoerbare bestand staan (OL_E_RUNTIME_INSTALLATION_INCOMPLETE, exit 7). release-manifest.json naast het uitvoerbare bestand levert, indien aanwezig, de verwachte plugin-hashes.
  11. /recovery-status / /recover: RecoverPendingAsync; envelope recover met pending, recovered, diagnostics; exit 8 alleen als een herstel is aangevraagd en niet is voltooid, anders 0.
  12. /list:<category>: DiscoverAsync; envelope content.list; exit 0.
  13. Bouw de LaunchSpec (BuildSpecAsync), plan deze (PlanSessionAsync) en druk het plan af. /plan of /validate: exit 0 als IsRunnable, anders 1. Een niet-uitvoerbaar plan start OMSI nooit (exit 1); onder OmsiLaunchW.exe toont een start met een niet-uitvoerbaar plan de laatste OL_E_-diagnose in een berichtvenster (documentatie-audit BUG-06). Tijdens het plannen wordt ook de geïnstalleerde permanente plugin-closure gecontroleerd tegen release-manifest.json, zodat een ontbrekende of gewijzigde plugin het plan niet uitvoerbaar maakt (OL_E_PERMANENT_PLUGIN_*).
  14. Test of er al een eigenaar is (OL_E_SESSION_ALREADY_ACTIVE, exit 7) en voer daarna OwnerSession.RunAsync uit.

Levenscyclus van de eigenaar (OwnerSession.RunAsync)#

  1. StartSessionAsync(plan). Vanaf hier bereikt elk exitpad CloseAsync in een finally-blok: exceptions, Ctrl+C (Console.CancelKeyPress), sluiten van de console / afmelden (AppDomain.ProcessExit met een budget van 4 s voor stop + herstel; wat overblijft, wordt bij de volgende start via het journal hersteld), "End session" in het systeemvak, pipe-session.stop en /observe-seconds.
  2. Het systeemvakpictogram wordt aangemaakt, tenzij Presentation.SuppressTrayIcon in de spec is ingesteld.
  3. Wacht StartupTimeoutSeconds + 5 seconden op Running. De status wordt afgedrukt. Als de toestand niet Running is, exit 1 (OmsiLaunchW.exe toont The OMSI session did not reach gameplay. met de laatste OL_E_-diagnose of OL_E_SESSION_START_FAILED).
  4. Validatiebatches (/runtime-batch, /runtime-write-batch, /d3d-batch) worden uitgevoerd en schrijven hun artefacten.
  5. Het lokale control-endpoint start.
  6. /runtime:<operation> wordt één keer uitgevoerd (5 s, 15 s voor road-vehicles.spawn); het resultaat wordt geschreven naar <root>\.omsilaunch\diagnostics\<sessionId>-runtime-operation.json en afgedrukt. Een mislukte runtimeopdracht beëindigt de sessie nooit (in plaats daarvan wordt runtime_error afgedrukt).
  7. Wachten: met /observe-seconds:n wordt de sessie na n seconden gestopt, of eerder bij een stop via systeemvak/pipe, of wanneer OMSI afsluit; zonder deze vlag wacht de eigenaar tot OMSI afsluit of een stop wordt aangevraagd.
  8. De eindstatus wordt afgedrukt; exit 0 bij Completed, anders 1.

session.stop, "End session" in het systeemvak, Ctrl+C en CloseAsync vragen allemaal de canonieke stop aan: OMSI wordt beëindigd met TerminateProcess (de eigen afsluitroutine van OMSI wordt niet uitgevoerd en options.cfg wordt niet door OMSI herschreven), waarna elk bestand in bezit van de sessie wordt hersteld. Zie levenscyclus van de sessie en transacties en recovery.

Opdrachtwoorden#

Elk woord dat op de eerste positie wordt geaccepteerd (CliInput.CommandWordsAccepted):

WoordDoelModusOpmerkingen
capabilitiesOpenbare capabilities weergevenLokaal, geen sessieEnvelope capabilities.
profilesOndersteunde Omsi.exe-varianten weergevenLokaal, geen sessieEnvelope profiles.
detectOmsi.exe-processen en een actieve eigenaar rapporterenLokaal, geen sessieOok de standaard als er geen argumenten worden opgegeven. Toestanden: NO_OMSI_FOUND, OMSI_FOUND_UNMANAGED, per proces UNKNOWN_BINARY_FOUND als het binaire bestand niet kan worden geïnspecteerd; active_omsilaunch_instance, managed_session.
helpGebruik en openbare opdrachtcatalogusLokaal, geen sessiehelp <family> filtert op capabilityfamilie (session, time, weather, map, camera, vehicles, player, humans, timetable, scripts, constants, curves, hof, drivers, tickets, d3d, events).
sessionsession status, session stopClientPrecies één volgend woord; al het andere drukt de gebruikstekst af, exit 2. session plan/session start zijn API-routenamen, geen CLI-woorden: gebruik /plan en /new.
eventsevents read, events watchClientread retourneert de begrensde lijst met events één keer; watch drukt elk nieuw event (op Sequence) elke 250 ms af als events.watch-envelope tot Ctrl+C (exit 0), 4 als geen eigenaar antwoordt, 7 bij een control-fout.
timetime get, time setClientroute
weatherweather get, weather set, weather actual getClientroute
mapmap getClientroute
cameracamera get, camera set, camera lock, camera unlockClientroute
vehiclesvehicles list, vehicles get, vehicles summary, vehicles spawn, vehicles place-randomClientroute
playerplayer getClientroute
humanshumans list, humans get, humans summaryClientroute
timetabletimetable get, timetable <table> list, timetable logs listClientroute
scriptsscripts variable list|get|set, scripts string list|getClientroute
constantsconstants list, constants getClientroute
curvescurves list, curves evaluateClientroute
hofhof getClientroute
driversdrivers listClientroute
ticketstickets getClientroute
d3dGereserveerd familiewoordGeend3d heeft geen hiërarchische route: d3d texture ... is een onbekende route (exit 2) en d3d alleen drukt de gebruikstekst af (exit 2). D3D-operaties worden bereikt met /runtime:d3d.status, /runtime:d3d.texture.create enzovoort (zie Operaties zonder route).

Hiërarchische routes#

CliInput.HierarchicalRoutes koppelt een route in kleine letters aan een runtime-operatie-id. Alle routes vereisen een sessie in Running en worden uitgevoerd via de runtime-mailbox (ExecuteRuntimeAsync). Runtime-schrijfacties wijzigen alleen de toestand van OMSI in het geheugen: ze raken nooit bestanden aan, maken geen deel uit van de configuratietransactie en worden bij de stop niet teruggedraaid (OMSI wordt beëindigd). De stabiliteit volgt PublicCapabilityRegistry en de validatiematrix; details en resultaatvelden staan in runtimebesturing.

RouteRuntime-operatieSoortVereist RunningWijzigt OMSIDeelname aan herstelStabiliteitOpmerkingen
time gettime.readReadJaNeeGeenSTABLE_BETAKlok- en kalendervelden.
time settime.setWriteJaJa (klok in het geheugen)Geen, niet teruggedraaidEXPERIMENTALBijvoorbeeld --minute=<0..59>; schrijven, teruglezen en herstel gevalideerd op 2026-09-20.
weather getweather.readReadJaNeeGeenSTABLE_BETA
weather setweather.setWriteJaNee (altijd geweigerd)GeenUNAVAILABLERetourneert OL_E_RUNTIME_SETTING_NOT_PERSISTENT; OMSI overschrijft de waarde bij zijn volgende weertick.
weather actual getweather.actual.readReadJaNeeGeenEXPERIMENTALToestand van de actual/ICAO-controller.
map getmap.readReadJaNeeGeenSTABLE_BETAKaartnaam, bestand, beschrijving, aantal tegels, jaarbereik en rijzijde; opnieuw runtime-gevalideerd op het gecorrigeerde kaartslot.
camera getcamera.readReadJaNeeGeenSTABLE_BETA
camera setcamera.setWriteJaJa (camerascalairen, bijv. --field_of_view=)Geen, niet teruggedraaidEXPERIMENTALSchrijven/teruglezen van FOV gevalideerd.
camera lockcamera.lockActionJaJa (beleid binnen de sessie)GeenEXPERIMENTALVereist --family=<0..3> (chauffeur=0, passagier=1, extern=2, kaart=3), optioneel --preset=<n> (familie 0 of 1). Heeft een spelersvoertuig nodig (bijvoorbeeld een opgeslagen situatie). Runtime-gevalideerd in de runtime-closure (CAM01); de RuntimeValidation-tekenreeks van het register zegt nog steeds STATICALLY_VALIDATED (zie capabilities).
camera unlockcamera.unlockActionJaJaGeenEXPERIMENTALHeft het beleid op dat door camera lock is ingesteld (CAM01).
vehicles listroad-vehicles.listReadJaNeeGeenSTABLE_BETARetourneert rv-NNNNNN-handles binnen de sessie.
vehicles getroad-vehicle.readReadJaNeeGeenSTABLE_BETAVereist --handle=. Verouderde handle: OL_E_RUNTIME_OBJECT_HANDLE_STALE.
vehicles summaryroad-vehicles.readReadJaNeeGeenSTABLE_BETAAantallen en spelerstoestand, geen handles.
vehicles spawnroad-vehicles.spawnActionJaJa (voegt één RoadVehicle toe)Geen, niet verwijderdEXPERIMENTALVereist --model=Vehicles\...\*.bus. Timeout van 30 s voor de client, 15 s voor de eigenaar. Wijst het spelersvoertuig niet toe. RV-003 RUNTIME_PASS.
vehicles place-randomroad-vehicles.place-randomActionJaJaGeenEXPERIMENTALGeprofileerde PlaceRandomBus.
player getplayer-vehicle.readReadJaNeeGeenSTABLE_BETASemantische null als er geen spelersvoertuig is.
humans listhumans.listReadJaNeeGeenEXPERIMENTALRetourneert hb-NNNNNN-handles.
humans gethuman.readReadJaNeeGeenEXPERIMENTALVereist --handle=.
humans summaryhumans.readReadJaNeeGeenEXPERIMENTALAlleen aantallen.
timetable gettimetable.readReadJaNeeGeenSTABLE_BETAToestand van de dienstregelingmanager.
timetable tracks listtimetable.tracks.listReadJaNeeGeenSTABLE_BETAOnderdeel van de capability timetable.read; batchleesbewijs 2026-09-20.
timetable trips listtimetable.trips.listReadJaNeeGeenSTABLE_BETAZoals hierboven.
timetable lines listtimetable.lines.listReadJaNeeGeenSTABLE_BETAZoals hierboven.
timetable tours listtimetable.tours.listReadJaNeeGeenSTABLE_BETAZoals hierboven.
timetable profiles listtimetable.profiles.listReadJaNeeGeenSTABLE_BETAZoals hierboven.
timetable bus-stops listtimetable.bus-stops.listReadJaNeeGeenSTABLE_BETAZoals hierboven.
timetable station-links listtimetable.station-links.listReadJaNeeGeenSTABLE_BETAZoals hierboven.
timetable logs listtimetable.logs.readReadJaNeeGeenSTABLE_BETAZoals hierboven.
drivers listdrivers.readReadJaNeeGeenEXPERIMENTALChauffeursrecords.
tickets gettickets.readReadJaNeeGeenEXPERIMENTALRecords van kaartjespakketten.
hof getvehicle.hofs.readReadJaNeeGeenSTABLE_BETAVereist --handle=.
constants listvehicle.constants.listReadJaNeeGeenSTABLE_BETAVereist --handle=.
constants getvehicle.constant.getReadJaNeeGeenSTABLE_BETAVereist --handle=, --name=.
curves listvehicle.curves.listReadJaNeeGeenSTABLE_BETAVereist --handle=.
curves evaluatevehicle.curve.evaluateReadJaNeeGeenSTABLE_BETAVereist --handle=, --name=, --x=.
scripts variable listvehicle.variables.listReadJaNeeGeenEXPERIMENTALVereist --handle=.
scripts variable getvehicle.variable.getReadJaNeeGeenEXPERIMENTALVereist --handle=, --name=.
scripts variable setvehicle.variable.setWriteJaJa (scriptvariabele)Geen, niet teruggedraaidEXPERIMENTALVereist --handle=, --name=, --value= (eindig getal).
scripts string listvehicle.string-variables.listReadJaNeeGeenEXPERIMENTALVereist --handle=.
scripts string getvehicle.string-variable.getReadJaNeeGeenEXPERIMENTALVereist --handle=, --name=.

Operaties zonder route#

Deze openbare operatie-id's (PublicCapabilityRegistry.PublicRuntimeOperationIds) hebben geen hiërarchische route en worden aangeroepen met /runtime:<operation> plus --key=value of /runtime-arg:key=value: timetable.rv-files.list, timetable.track-entries.list, timetable.tour-entries.list, d3d.status, d3d.texture.create (width, height, format vereist; levels optioneel), d3d.texture.describe (handle; level optioneel), d3d.texture.update (handle, width, height, pixels_base64 vereist; level, x, y optioneel), d3d.texture.release (handle). D3D-operaties zijn EXPERIMENTAL; de levenscyclus van textures en de invalidatie bij een apparaatreset zijn runtime-gevalideerd (runtime-closure H02, D01; zie capabilities). timetable.track-entries.list en timetable.tour-entries.list zijn begrensde lijsten: een resultaat dat niet in het runtime-slot past, wordt ingekort (truncated=true). internal.road-vehicles.make-basic is INTERNAL en wordt door zowel de CLI als de API geweigerd met OL_E_RUNTIME_OPERATION_UNKNOWN.

Vlaggen#

Elke vlag van CliInput.KnownFlags. "Fase" is starttijd (bepaalt de LaunchSpec/het plan van een nieuwe sessie), runtime (werkt op een actieve sessie) of control (verandert het gedrag van de CLI zelf). Vlaggen die alleen voor compatibiliteit worden geparseerd (CliInput.AcceptedNoEffectFlags), zijn op hun regel gemarkeerd.

Besturing en uitvoer#

VlagSyntaxis en waardenStandaardFaseStabiliteitGedrag
/?/?uitcontrolSTABLE_BETADruk de gebruikstekst af, exit 0.
/help/helpuitcontrolSTABLE_BETAHetzelfde als /?. (Het losse woord help retourneert in plaats daarvan de gestructureerde catalogus.)
/version/versionuitcontrolSTABLE_BETAEnvelope version, exit 0. Wordt vóór elke andere opdracht geëvalueerd, behalve /silent.
/json/json of --jsonuitcontrolSTABLE_BETAGeef JSON-envelopes uit; forceert ook console-uitvoer, zelfs onder OmsiLaunchW.exe.
/quiet/quietuitcontrolACCEPTED_FOR_COMPATIBILITY / CURRENTLY_NO_EFFECTStelt CliInput.Quiet in; niets leest deze waarde.
/silent/silent (ook --silent)uitcontrolEXPERIMENTALDelegeer de volledige opdrachtregel aan OmsiLaunchW.exe en retourneer 0 zodra het hostproces is gestart. De uitkomst van de sessie wordt gerapporteerd door OmsiLaunchW.exe (berichtvensters, systeemvakpictogram), .omsilaunch\diagnostics en het lokale control-endpoint. De delegatie en de foutdialoogvensters zijn runtime-gevalideerd (runtime-closure T04); zie OmsiLaunchW.exe.
/serve/serveuitcontrolACCEPTED_FOR_COMPATIBILITY / CURRENTLY_NO_EFFECTStelt CliInput.Serve in; niets leest deze waarde. Het control-endpoint wordt altijd door een eigenaar gestart.
/verbose/verboseuitstarttijdPARTIALDiagnosticsSpec.Verbose. Waarden worden in de spec meegenomen; hun effect is beperkt tot de host-trace onder .omsilaunch\diagnostics.
/log/logaan (DiagnosticsSpec.Log staat standaard op true)starttijdPARTIALDiagnosticsSpec.Log. In de praktijk altijd aan.
/logall/logalluitstarttijdPARTIALStelt Verbose, ProcessTrace, PluginTrace en NativeTrace tegelijk in.
/omsi-logall/omsi-logalluitstarttijdPARTIALDiagnosticsSpec.OmsiLogAll.
/trace/traceuitstarttijdPARTIALAlias van /trace-process.
/trace-process/trace-processuitstarttijdPARTIALDiagnosticsSpec.ProcessTrace.
/trace-plugin/trace-pluginuitstarttijdPARTIALDiagnosticsSpec.PluginTrace.
/trace-native/trace-nativeuitstarttijdPARTIALDiagnosticsSpec.NativeTrace.

Plannen, validatie en harnassen#

VlagSyntaxis en waardenStandaardFaseStabiliteitGedrag
/plan/planuitstarttijdSTABLE_BETABouw het SessionPlan en druk het af, zonder OMSI te starten. Exit 0 bij IsRunnable, anders 1. Vereist een startselectie (/new, /saved, /spec of een installatieargument); /plan alleen, zonder iets anders, voert detect uit.
/validate/validateuitstarttijdSTABLE_BETAIdentiek aan /plan in deze build.
/runtime-batch/runtime-batchuitruntime (eigenaar)INTERNALValidatieharnas: voert na Running de set leesoperaties uit en schrijft <sessionId>-runtime-read-batch.json.
/runtime-write-batch/runtime-write-batchuitruntime (eigenaar)INTERNALValidatieharnas: leesacties plus time.set, camera.set en vehicle.variable.set met herstel; schrijft <sessionId>-runtime-write-batch.json.
/d3d-batch/d3d-batchuitruntime (eigenaar)INTERNALValidatieharnas voor de levenscyclus van D3D-textures; schrijft <sessionId>-d3d-wave-d-batch.json.
/runtime/runtime:<operation>geenruntimeSTABLE_BETA (dispatch)Selecteer een openbare runtime-operatie op id. Clientmodus (geen installatieargument): doorgestuurd naar de eigenaar. Eigenaarmodus: één keer uitgevoerd na Running. Onbekende id's: OL_E_RUNTIME_OPERATION_UNKNOWN, exit 2.
/runtime-arg/runtime-arg:<key>=<value> (herhaalbaar)geenruntimeSTABLE_BETA (dispatch)Runtimeargument; gelijkwaardig aan --key=value. Ontbrekende =: /runtime-arg requires key=value, exit 2.

Wereldselectie#

VlagSyntaxis en waardenStandaardFaseStabiliteitGedrag
/new/newWorldMode.NewMap is de standaardmodus, maar een start wordt alleen aangevraagd als een van /new, /saved, /last, /spec aanwezig isstarttijdSTABLE_BETANEW_MAP. Vereist /map en /entrypoint-index (een plan zonder index van een gepresenteerd instappunt meldt OL_E_ENTRYPOINT_REQUIRED; zonder /map wordt geen kaart bepaald). /new selecteert nooit stilzwijgend een kaart.
/saved/saved:<file.osn>geenstarttijdSTABLE_BETASAVED_SITUATION. Kaart en positie komen uit het .osn-bestand; /map, /entrypoint, /entrypoint-index worden in combinatie met /saved geweigerd (exit 2). Ontbrekende situatie: OL_E_SITUATION_NOT_FOUND; ontbrekende kaart van de situatie: OL_E_SITUATION_MAP_NOT_FOUND.
/last/lastgeenstarttijdUNAVAILABLELAST_MAP_STATE. Levert op dit profiel altijd OL_E_CAPABILITY_UNAVAILABLE op (niet uitvoerbaar, exit 1); er wordt geen terugval op een .osn op basis van tijdstempels uitgevoerd.
/map/map:<identity> (bijvoorbeeld maps\Grundorf\global.cfg)geenstarttijdSTABLE_BETAKaartidentiteit voor /new, of het bereik voor /list:Entrypoints. Onbekend: OL_E_MAP_NOT_FOUND.
/entrypoint/entrypoint:<identity>geenstarttijdUNAVAILABLEInstappunt op label. Afgeschermd: het plan registreert world.entrypoint-identity als RUNTIME_PARTIAL en wordt niet uitvoerbaar (OL_E_CAPABILITY_UNAVAILABLE). Sluit /entrypoint-index uit (de identiteit heeft voorrang en wist de index).
/entrypoint-index/entrypoint-index:<n>, 0..2147483647geenstarttijdSTABLE_BETAIndex van het instappunt in de gepresenteerde lijst (op 1 gebaseerd, zoals OMSI de lijst presenteert). Vereist voor een uitvoerbaar NEW_MAP-plan.

Datum, tijd en weer#

Alle vier worden geaccepteerd en in de LaunchSpec meegenomen, maar het native startpad past ze niet toe: de planner registreert ze als STATICALLY_PARTIAL en voegt OL_E_CAPABILITY_UNAVAILABLE toe, zodat het plan NIET UITVOERBAAR is (exit 1). Een /spec-bestand of sessieprofiel dat ze instelt, heeft hetzelfde effect.

VlagSyntaxis en waardenStandaardFaseStabiliteitGedrag
/date/date:<yyyy-mm-dd> of /date:systemniet ingesteldstarttijdUNAVAILABLEDateSpec expliciet/systeem. Niet-parseerbare waarde: OL_E_INVALID_ARGUMENT, exit 2.
/time/time:<hh:mm[:ss]> of /time:systemniet ingesteldstarttijdUNAVAILABLETimeSpec expliciet/systeem.
/year/year:<n> of /year:systemniet ingesteldstarttijdUNAVAILABLEYearSpec.
/weather/weather:<preset>niet ingesteldstarttijdUNAVAILABLEWeatherMode.Preset.
/weather-icao/weather-icao:<code>niet ingesteldstarttijdUNAVAILABLEWeatherMode.Icao.
/weather-real/weather-realniet ingesteldstarttijdUNAVAILABLEWeatherMode.RealCurrent. De laatste van /weather, /weather-icao, /weather-real heeft voorrang.

Spelersvoertuig#

Geaccepteerd en bepaald aan de hand van de installatie, maar niet toegepast door de runtime: elk ingesteld veld is STATICALLY_PARTIAL en voegt OL_E_CAPABILITY_UNAVAILABLE toe (plan NIET UITVOERBAAR, exit 1).

VlagSyntaxis en waardenStandaardFaseStabiliteitGedrag
/vehicle/vehicle:<identity> (Vehicles\...\*.bus)niet ingesteldstarttijdUNAVAILABLEWordt als eerste bepaald (OL_E_VEHICLE_NOT_FOUND als onbekend).
/repaint/repaint:<id>niet ingesteldstarttijdUNAVAILABLEWordt alleen samen met /vehicle bepaald (OL_E_REPAINT_NOT_FOUND).
/hof/hof:<id>niet ingesteldstarttijdUNAVAILABLEOL_E_HOF_NOT_FOUND als onbekend.
/fleet/fleet:<n>niet ingesteldstarttijdUNAVAILABLEWagennummer.
/registration/registration:<text>niet ingesteldstarttijdUNAVAILABLEKenteken.
/no-vehicle/no-vehicleuitstarttijdSTABLE_BETAWist elk spelersvoertuig uit de basis (/spec of profiel). Onschadelijk.

Configuratie-overlays#

VlagSyntaxis en waardenStandaardFaseStabiliteitGedrag
/set/set:<key>=<value> (herhaalbaar; sleutels niet hoofdlettergevoelig)geenstarttijdSTABLE_BETASemantische options.cfg-overlay uit ConfigurationCatalog (bijvoorbeeld graphics.maxFPS=60, traffic.randomVehicles=150). Onbekende sleutel: OL_E_UNKNOWN_SETTING (exit 2); alleen-lezen sleutel (advanced.multithreadingCalculate, advanced.multithreadingTextureLoad, graphics.texture, graphics.textureFilter): OL_E_SETTING_NOT_WRITABLE (exit 2); waarde buiten bereik of ongeldig gevormd: OL_E_INVALID_SETTING_VALUE bij het opbouwen van de overlay. De overlay is een sessiewijziging: er wordt een snapshot van gemaakt, hij wordt toegepast voordat OMSI start en bij de stop byte voor byte hersteld (RV-005 RUNTIME_PASS). Conflicten met een sleutel die eigendom is van een preset van een geselecteerd profiel: OL_E_SESSION_PROFILE_OVERRIDE_CONFLICT.

Presentatie van het opstartscherm#

VlagSyntaxis en waardenStandaardFaseStabiliteitGedrag
/splash/splash:Managed, /splash:Native, /splash:Unset (niet hoofdlettergevoelig)ManagedstarttijdSTABLE_BETAManaged: de meegeleverde 24-bits BMP's van 640x480 worden één keer gekopieerd naar <root>\.omsilaunch\assets\splash, en GUI\NewSplashscreen_ENG.bmp plus GUI\NewSplashscreen_<lang>.bmp worden transactioneel als overlay aangebracht en exact hersteld (RV-006 RUNTIME_PASS). Native/Unset (aliassen): OMSI-bestanden blijven onaangeroerd. Ontbrekende waarde: /splash requires Unset, Native, or Managed, exit 2.
/splash-language/splash-language:PTB|ENG|DEU|FRA (ook pt-BR, de, fr, en; al het andere valt terug op ENG)[language] uit options.cfg, anders ENGstarttijdSTABLE_BETASelecteert het gelokaliseerde doelbestand.
/splash-assets/splash-assets:<directory> (relatieve paden worden onder de installatiemap bepaald)<root>\.omsilaunch\assets\splash, anders de meegeleverde setstarttijdSTABLE_BETAAangepaste assetmap; moet ENG.bmp bevatten en, voor een niet-Engelse taal, <lang>.bmp. Fouten: OL_E_SPLASH_ASSET_DIRECTORY_MISSING, OL_E_SPLASH_ASSET_MISSING, OL_E_SPLASH_FORMAT_UNSUPPORTED (in het plan gemeld als OL_E_SESSION_PRESENTATION_INVALID; niet uitvoerbaar).

Internettextures#

VlagSyntaxis en waardenStandaardFaseStabiliteitGedrag
/internet-textures/internet-textures:Native|Disabled|OverrideNativestarttijdEXPERIMENTALNative: onaangeroerd. Disabled: de geprofileerde downloader binnen het proces wordt onderdrukt. Override: het opgegeven .itx-profiel wordt als overlay Texture\standard.itx aangebracht; elk daarin vermeld HTTP(S)-doel plus Texture\standard.ipr worden sessieverwijderingen (voor de sessie verwijderd, bij de stop hersteld). Ontbrekende waarde: exit 2.
/internet-textures-profile/internet-textures-profile:<file.itx>geenstarttijdEXPERIMENTALVereist bij Override (OL_E_ITX_PROFILE_REQUIRED, exit 2). OL_E_ITX_PROFILE_MISSING, OL_E_ITX_PROFILE_INVALID (moet bestaan uit paren van URL- en doelregels met http/https-URL's), OL_E_ITX_TARGET_OUTSIDE_TEXTURE_PATH (doelen moeten onder Texture\ uitkomen, zonder absolute paden, .. of reparse points).

Sessieprofielen#

VlagSyntaxis en waardenStandaardFaseStabiliteitGedrag
/predefined-profile/predefined-profile:<id>geenstarttijdSTABLE_BETA (compilatie; offline OmsiLaunch.ProfileTests)Laadt <root>\.omsilaunch\session-profiles\<id>\profile.yaml (zie sessieprofielen). Vereist /predefined-profile-index (OL_E_SESSION_PROFILE_PRESET_NOT_FOUND, exit 2). Het new:-blok geldt alleen met /new; compatibility.maps wordt afgedwongen voor /new en /saved (OL_E_SESSION_PROFILE_MAP_MISMATCH). Expliciete vlaggen die botsen met een veld dat eigendom is van het profiel, worden geweigerd met OL_E_SESSION_PROFILE_OVERRIDE_CONFLICT (CliInput.RejectProfileConflicts): kaart/instappunt/datum/tijd/jaar/weer wanneer het new:-blok die bezit, /set-sleutels die eigendom zijn van de preset, opstartschermvlaggen wanneer de preset presentation heeft, internettexturevlaggen wanneer hij internet-textures heeft, timeouts wanneer hij behavior heeft.
/predefined-profile-index/predefined-profile-index:<1..5>geenstarttijdSTABLE_BETASelecteert de preset op index. Buiten bereik: exit 2.

LaunchSpec-bestand#

VlagSyntaxis en waardenStandaardFaseStabiliteitGedrag
/spec/spec:<path.json>geenstarttijdSTABLE_BETA (loader offline getest; sessiesemantiek identiek aan vlaggen)Laadt een LaunchSpec-JSON-bestand als basis (zie LaunchSpec) en markeert dat een start is aangevraagd. Regels (LaunchSpecJson): het bestand moet bestaan (OL_E_SPEC_NOT_FOUND, exit 6); maximaal 1 MiB (OL_E_SPEC_TOO_LARGE, exit 2); de root moet een object zijn (OL_E_SPEC_INVALID); eigenschapsnamen niet hoofdlettergevoelig; //-commentaar en afsluitende komma's toegestaan; diepte maximaal 32; elke onbekende eigenschap wordt geweigerd met haar JSON-pad (OL_E_SPEC_UNKNOWN_PROPERTY: $.Presentation.Foo, exit 2).

Voorrang (CliInput.BuildSpecAsync): standaardwaarden → /spec-bestand → /predefined-profile (vervangt Installation en World en past daarna het profiel toe) → expliciete vlaggen. Een expliciet installatieargument gaat vóór RootPath in de spec. /no-vehicle wist het spelersvoertuig van de spec; /vehicle en verwante vlaggen worden er veld voor veld in samengevoegd. /set-sleutels worden samengevoegd in Environment.General. /splash, /splash-language, /splash-assets, /internet-textures, /internet-textures-profile overschrijven alleen als ze zijn opgegeven. /startup-timeout en /shutdown-timeout overschrijven alleen als ze zijn opgegeven; Presentation.SuppressTrayIcon komt alleen uit de spec (geen vlag). Diagnosevlaggen worden met OR gecombineerd met de Diagnostics van de spec.

Inhoud ontdekken#

VlagSyntaxis en waardenStandaardFaseStabiliteitGedrag
/list/list:<category>; categorieën zijn de ContentQueryKind-waarden Maps, Situations, Vehicles, Repaints, Hofs, FleetNumbers, Registrations, Addons, Entrypoints (niet hoofdlettergevoelig)geenlokaal, geen sessieSTABLE_BETADiscoverAsync over de installatie; envelope content.list met items Identity, Kind, DisplayName; exit 0. Onbekende categorie: Unknown discovery category, exit 2. Reparse points (junctions/symlinks) worden overgeslagen, OMSI-bestanden worden gelezen als Windows-1252.
/vehicle-scope/vehicle-scope:<vehicle identity>geenlokaalSTABLE_BETABereik dat wordt doorgegeven voor elke categorie behalve Entrypoints, die /map als bereik gebruikt.

Timeouts en observatie#

VlagSyntaxis en waardenStandaardFaseStabiliteitGedrag
/startup-timeout/startup-timeout:<1..600> secondenwaarde uit spec/profiel, anders 180starttijdSTABLE_BETABehavior.StartupTimeoutSeconds. De eigenaar wacht deze waarde plus 5 s op Running; OL_E_STARTUP_TIMEOUT beëindigt de sessie met exit 1.
/shutdown-timeout/shutdown-timeout:<1..600> secondenwaarde uit spec/profiel, anders 30starttijdACCEPTED_FOR_COMPATIBILITY / CURRENTLY_NO_EFFECTWordt meegenomen in Behavior.ShutdownTimeoutSeconds; de supervisor gebruikt deze waarde in deze build niet (OMSI wordt beëindigd, niet gevraagd om af te sluiten).
/observe-seconds/observe-seconds:<0..2147483647>geen (actief tot OMSI afsluit of een stop wordt aangevraagd)runtime (eigenaar)STABLE_BETABovengrens voor de actieve fase: na n seconden in Running wordt de canonieke stop aangevraagd. Een stop via systeemvak of pipe, of het afsluiten van OMSI, beëindigt de fase eerder. 0 stopt direct na Running.

Recovery#

VlagSyntaxis en waardenStandaardFaseStabiliteitGedrag
/recovery-status/recovery-statusuitlokaalSTABLE_BETARapporteert of <root>\.omsilaunch\journal.json openstaat (pending), herstelt nooit; exit 0. Neemt de installatielease: OL_E_INSTALLATION_BUSY (exit 7) zolang een eigenaar die vasthoudt.
/recover/recoveruitlokaalSTABLE_BETAHerstelt een openstaand journal (back-ups worden eerst gecontroleerd tegen de SHA-256 van de snapshot; OL_E_RECOVERY_BACKUP_CORRUPT, OL_E_RECOVERY_ABSENT_OWNERSHIP_MISMATCH, OL_W_RESTORE_FOREIGN_FILE_RETAINED worden gemeld in diagnostics). Exit 0 als er niets openstond of het herstel is voltooid; 8 als er een journal openstond en dat blijft openstaan. Geweigerd met OL_E_INSTALLATION_BUSY zolang het in het journal vastgelegde OMSI-proces (PID, aanmaaktijd, exe-pad) actief is, of, voor een journal voorbij HandoffCreated zonder PID, zolang enige Omsi.exe uit die root actief is. Elke sessiestart voert dezelfde recovery automatisch uit voordat de installatie wordt gelezen.

Uitvoerformaten#

  • Envelope bij succes (CliInput.WriteEnvelope, met --json): {"ok": true, "command": "<name>", "protocol_version": "0.1", "result": <object>}, ingesprongen. Doorgestuurde antwoorden op session status en events read krijgen een extra lid metadata wanneer oudere events zijn weggelaten om in het control-frame te passen (events_dropped_count, zie local control). Zonder --json wordt alleen <object> als ingesprongen JSON afgedrukt, gevolgd door Note: <n> older events were omitted to fit the control frame. wanneer events zijn weggelaten.
  • Envelope bij fout (CliInput.WriteError, met --json): {"ok": false, "command": "<name>", "protocol_version": "0.1", "error": {"code": "OL_E_...", "category": "<category>", "message": "..."}}. Zonder --json: OL_E_<CODE>: message op één regel. Categorieën: invalid_argument, unsupported_profile, session, runtime, not_found, transaction, internal. Onder OmsiLaunchW.exe worden dezelfde code en hetzelfde bericht in een berichtvenster getoond.
  • Plan en status (CliInput.Write): de records SessionPlan, SessionStatus en RuntimeCommandResult worden als ingesprongen JSON zonder envelope afgedrukt. Zonder --json wordt een plan samengevat als Plan: READY profile=Omsi23004_692EBFBF of Plan: NOT RUNNABLE profile=...; andere records worden nog steeds als JSON afgedrukt. Enumwaarden worden als gehele getallen geserialiseerd (SessionState.Running is 14, Completed is 18, Failed is 19).
  • Opdrachtnamen die in envelopes worden gebruikt: silent, version, capabilities, help, profiles, detect, recover, content.list, session, session.status, session.stop, events.read, events.watch, events watch, installation, cli, session profile, en de runtime-operatie-id voor doorgestuurde runtimeopdrachten.
  • Onder OmsiLaunchW.exe (OMSILAUNCH_WINDOWS_HOST=1) wordt niets naar de console geschreven, tenzij --json is opgegeven.

Fouten per opdracht#

OpdrachtGebruikelijke foutcodesExit
Elke parseerfoutOL_E_INVALID_ARGUMENT, sessieprofielcodes (OL_E_SESSION_PROFILE_*)2
/silentOL_E_WINDOWS_HOST_MISSING, OL_E_WINDOWS_HOST_START_FAILED7
Clientroute, /runtime (client)OL_E_RUNTIME_OPERATION_UNKNOWN, OL_E_RUNTIME_ARGUMENT_REQUIRED (2); OL_E_NO_ACTIVE_SESSION (4); OL_E_CONTROL_*, OL_E_RUNTIME_* geretourneerd door de eigenaar, bijv. 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
Voorafgaande controle van de eigenaarOL_E_RUNTIME_INSTALLATION_INCOMPLETE, OL_E_SESSION_ALREADY_ACTIVE7
/recovery-status, /recoverOL_E_INSTALLATION_BUSY (7); OL_E_RECOVERY_*, OL_E_RESTORE_FAILED (8); openstaand maar niet hersteld (8)7, 8
/listonbekende categorie (2); OL_E_INSTALLATION_NOT_FOUND/ontbrekende mappen (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, startplandiagnoses: OL_E_PERMANENT_PLUGIN_MISSING, OL_E_PERMANENT_PLUGIN_HASH_MISMATCH, OL_E_PERMANENT_PLUGIN_MANIFEST_INCOMPLETE (geïnstalleerde plugin-closure), 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 (informatief)1
SessiestartOL_E_PLAN_NOT_RUNNABLE (opnieuw plannen bij de start, 1); OL_E_PERMANENT_PLUGIN_MISSING, OL_E_PERMANENT_PLUGIN_HASH_MISMATCH, OL_E_PERMANENT_PLUGIN_MANIFEST_INCOMPLETE, OL_E_RELEASE_MANIFEST_INVALID (normaal door het plannen gemeld als plandiagnose, exit 1; 7 alleen als de plugin-bestanden tussen plannen en starten veranderen), 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 (sessie Failed, 1)1, 7
Onafgehandelde exception, waar dan ookgeclassificeerd door CliProgram.Classify (zie exitcodes)2..10

Omgeving#

VariabeleIngesteld doorEffect
OMSILAUNCH_WINDOWS_HOST=1OmsiLaunchW.exeWindowsHost.IsActive: console-uitvoer onderdrukt, fouten als berichtvensters, /silent niet opnieuw gedelegeerd.

Zie ook#

CLI-voorbeelden · OmsiLaunchW.exe · exitcodes · fouten · local control · Windows-systeemvak · runtimebesturing · capabilities · LaunchSpec · sessieprofielen · verpakking · compatibiliteit · bekende beperkingen · openbare API