Référence de la CLI

Documentation de la version v0.1.0-beta.3Voir la source sur GitHub

Traduction de la page originale en anglais d’OmsiLaunch 0.1.0-beta3. La page anglaise fait foi : en cas de divergence, la page anglaise et le code prévalent.

Cette page est la référence complète et normative de la ligne de commande d'OmsiLaunch 0.1.0-beta3 : les trois exécutables, la grammaire des arguments, l'ordre de dispatch, chaque mot de commande, chaque route hiérarchique, chaque option, les enveloppes de sortie et le comportement en cas d'erreur de chaque commande. Elle est générée à partir de tools\OmsiLaunch.Cli\Program.cs (CliProgram.RunAsync, OwnerSession.RunAsync, CliInput.Parse, CliInput.KnownFlags, CliInput.AcceptedNoEffectFlags, CliInput.CommandWordsAccepted, CliInput.HierarchicalRoutes, CliInput.BuildSpecAsync, CliEventWatch), de tools\OmsiLaunch.Cli\LaunchSpecJson.cs et des deux shims natifs situés sous tools\OmsiLaunch.Bootstrapper. Les résultats de processus sont listés dans codes de sortie ; les codes d'erreur dans erreurs ; des invocations commentées dans exemples de CLI.

Exécutables#

FichierSous-systèmeRôleDifférences
OmsiLaunch.exeConsoleBootstrapper natif (OmsiLaunch.Bootstrapper.cpp) : il résout son propre répertoire, découpe la ligne de commande avec CommandLineToArgvW, localise hostfxr via nethost.dll et exécute OmsiLaunch.Controller.dll avec les mêmes arguments.La sortie console est écrite ; le code de sortie du processus est celui du contrôleur managé, ou un code de shim 100..106 si l'hôte .NET n'a pas pu être démarré.
OmsiLaunchW.exeWindows (GUI)Même shim (OmsiLaunch.WindowsHost.cpp) compilé pour le sous-système Windows. Il définit la variable d'environnement OMSILAUNCH_WINDOWS_HOST=1 avant de démarrer le contrôleur.Pas de console : la sortie console est supprimée sauf si --json est indiqué (WindowsHost.SuppressConsole), les échecs sont affichés dans des boîtes de message (WindowsHost.ShowFailure : message, Code: OL_E_... et l'indication See .omsilaunch\diagnostics for details.), et un échec du shim 100..106 est affiché sous la forme OmsiLaunch could not start the .NET host (code N). Comportement complet : référence d'OmsiLaunchW.exe.
OmsiLaunch.Controller.dllManagé (x64, net6.0-windows, Windows Forms)Le contrôleur lui-même. Il n'est jamais invoqué directement par les utilisateurs ; les deux shims passent le chemin du contrôleur comme premier argument de l'hôte, de sorte qu'il n'apparaît jamais dans la liste publique des arguments.Nécessite le runtime .NET 6 x64 avec Microsoft.WindowsDesktop.App ; voir installation.

nethost.dll doit se trouver à côté des shims. Les shims ne lisent eux-mêmes aucun argument ; chaque argument parvient inchangé à CliInput.Parse, de sorte que OmsiLaunch.exe et OmsiLaunchW.exe acceptent exactement la même syntaxe.

Modèle d'invocation#

Grammaire des arguments (CliInput.Parse)#

FormeSignification
/key:value, /key, -key:value, -keyUne option. La clé est insensible à la casse ; la valeur est tout ce qui suit le premier :. Les clés inconnues échouent avec OL_E_INVALID_ARGUMENT (Unknown argument: ...), sortie 2.
--key=valueUn argument runtime pour l'opération runtime sélectionnée (par exemple --handle=rv-000001). Tout jeton -- contenant = est un argument runtime, jamais une option.
--json, /jsonSortie structurée (voir Formats de sortie). --json est le seul jeton -- sans = qui ait un sens ; il est analysé comme l'option /json.
mot nuSi aucun mot de commande n'a encore été rencontré et que le mot fait partie des mots de commande, il devient la commande. Dès qu'un mot de commande est présent, chaque mot nu suivant est un mot de commande (la route). Sinon, le premier mot nu est la racine de l'installation et tout mot nu ultérieur est ajouté à la route.

Conséquences : une route hiérarchique (time get) ne peut pas être combinée avec un argument d'installation placé après elle (time get D:\OMSI est la route inconnue time get d:\omsi, sortie 2). D:\OMSI time get est accepté mais relève du mode propriétaire (une nouvelle session est démarrée et l'opération s'exécute une fois à l'intérieur). Les erreurs d'analyse (ArgumentException, FormatException, InvalidDataException, OverflowException) et les erreurs de profil de session (SessionProfileException) sont signalées avant toute exécution, toujours avec la sortie 2.

Racine de l'installation#

  • Un argument d'installation explicite sous forme de mot nu l'emporte sur RootPath dans un fichier /spec (CliInput.BuildSpecAsync).
  • . désigne le répertoire qui contient l'exécutable (AppContext.BaseDirectory), jamais le répertoire de travail de l'appelant (CliInput.ResolveInstallationRoot). Un paquet portable s'appuie sur ce comportement.
  • Lorsque l'argument est omis, les opérations du mode propriétaire (/new, /saved, /spec, /list, /recovery-status, /recover) utilisent également le répertoire de l'exécutable. Le chemin est normalisé avec Path.GetFullPath.
  • Les commandes du mode client ne prennent jamais d'argument d'installation : elles s'adressent au point de terminaison de contrôle local de l'installation dans laquelle se trouve l'exécutable (AppContext.BaseDirectory). Voir contrôle local.

Propriétaire et client#

  • Propriétaire : le processus qui planifie, démarre, supervise et restaure une session (OwnerSession.RunAsync). Il détient le bail d'installation (Local\OmsiLaunch.Installation.<sha256(root)>) et la transaction de configuration, expose le point de terminaison de contrôle local tant que la session est active et affiche l'icône de la zone de notification. Exactement un propriétaire par installation : si un propriétaire répond déjà à session.status sur le point de terminaison de contrôle, un second lancement échoue avec OL_E_SESSION_ALREADY_ACTIVE (sortie 7).
  • Client : toute invocation sans argument d'installation qui envoie session status, session stop, events read, events watch ou une opération runtime. Elle est transmise via le pipe de contrôle local ; sans propriétaire, elle échoue avec OL_E_NO_ACTIVE_SESSION (sortie 4).

Ordre de dispatch (CliProgram.RunAsync)#

  1. /silent (lorsque le processus ne s'exécute pas déjà sous OmsiLaunchW.exe) : démarre OmsiLaunchW.exe depuis le répertoire de l'exécutable via ShellExecute (sans héritage de handles) avec les mêmes arguments moins /silent/--silent, écrit l'enveloppe silent (delegated, host_process_id) et renvoie 0. Le processus console n'attend pas la session ; voir OmsiLaunchW.exe. OL_E_WINDOWS_HOST_MISSING / OL_E_WINDOWS_HOST_START_FAILED renvoient 7.
  2. /version : enveloppe version avec product, version (version informationnelle de l'assembly, estampillée à partir de OmsiLaunch.Version.props, 0.1.0-beta3), protocol_version (0.1), supported_family (OMSI_2_3_004_COMMON) ; sortie 0.
  3. capabilities : enveloppe contenant chaque descripteur PublicStableBeta ou PublicExperimental de PublicCapabilityRegistry ; sortie 0.
  4. help [family] : enveloppe help avec usage, product_version, protocol_version, family et les commands publiques (CliRoute, Description, Classification, RuntimeValidation), éventuellement filtrées par famille ; sortie 0.
  5. profiles : enveloppe avec family et les variantes d'exécutable supported (ALTERNATE_LAA 692EBFBF..., runtime_validated=true ; le hash Steam LAA 7DAB063D... avec validation_status=pending_beta_field_validation) ; sortie 0.
  6. Opération runtime client (pas d'argument d'installation et une route ou /runtime:) : les arguments sont validés par PublicCapabilityRegistry.ValidateRuntimeArguments (OL_E_RUNTIME_OPERATION_UNKNOWN, OL_E_RUNTIME_ARGUMENT_REQUIRED, sortie 2), puis runtime.execute est transmis avec un timeout de 8 s (30 s pour road-vehicles.spawn).
  7. Client session status (750 ms), session stop (lié à l'identifiant de la session active, 750 ms), events read (750 ms), events watch (interroge toutes les 250 ms jusqu'à Ctrl+C).
  8. detect, ou aucun argument du tout (pas d'installation, pas de commande, pas de /?, pas de /spec, pas d'option de lancement, pas d'option de récupération, pas de /list) : énumère les processus Omsi et sonde le point de terminaison de contrôle (250 ms) ; enveloppe detect ; sortie 0.
  9. /? ou /help : affiche le texte d'utilisation, sortie 0. Toute autre invocation qui comporte un mot de commande mais aucune route pouvant être dispatchée (par exemple d3d seul ou session status D:\OMSI) affiche le texte d'utilisation et sort avec 2.
  10. Mode propriétaire. Préconditions : plugins\OmsiLaunch.Plugin.opl et plugins\OmsiLaunch.Native.x86.dll doivent exister à côté de l'exécutable (OL_E_RUNTIME_INSTALLATION_INCOMPLETE, sortie 7). release-manifest.json à côté de l'exécutable, lorsqu'il est présent, fournit les hashs attendus du plugin.
  11. /recovery-status / /recover : RecoverPendingAsync ; enveloppe recover avec pending, recovered, diagnostics ; sortie 8 uniquement lorsqu'une restauration a été demandée et ne s'est pas achevée, sinon 0.
  12. /list:<category> : DiscoverAsync ; enveloppe content.list ; sortie 0.
  13. Construction du LaunchSpec (BuildSpecAsync), planification (PlanSessionAsync), affichage du plan. /plan ou /validate : sortie 0 si IsRunnable, sinon 1. Un plan non exécutable ne démarre jamais OMSI (sortie 1) ; sous OmsiLaunchW.exe, un lancement avec un plan non exécutable affiche son dernier diagnostic OL_E_ dans une boîte de message (audit de documentation BUG-06). La planification vérifie également la closure du plugin permanent installé par rapport à release-manifest.json, de sorte qu'un plugin manquant ou modifié rend le plan non exécutable (OL_E_PERMANENT_PLUGIN_*).
  14. Recherche d'un propriétaire existant (OL_E_SESSION_ALREADY_ACTIVE, sortie 7), puis OwnerSession.RunAsync.

Cycle de vie du propriétaire (OwnerSession.RunAsync)#

  1. StartSessionAsync(plan). À partir de là, chaque chemin de sortie atteint CloseAsync dans un bloc finally : exceptions, Ctrl+C (Console.CancelKeyPress), fermeture de la console / déconnexion (AppDomain.ProcessExit avec un budget de 4 s pour l'arrêt et la restauration ; ce qui reste est récupéré par le journal au démarrage suivant), « End session » (Terminer la session) dans la zone de notification, session.stop via le pipe et /observe-seconds.
  2. L'icône de la zone de notification est créée, sauf si Presentation.SuppressTrayIcon est défini dans la spec.
  3. Attente de Running pendant StartupTimeoutSeconds + 5 secondes. L'état est affiché. Si l'état n'est pas Running, sortie 1 (OmsiLaunchW.exe affiche The OMSI session did not reach gameplay. avec le dernier diagnostic OL_E_ ou OL_E_SESSION_START_FAILED).
  4. Les lots de validation (/runtime-batch, /runtime-write-batch, /d3d-batch) s'exécutent et écrivent leurs artefacts.
  5. Le point de terminaison de contrôle local démarre.
  6. /runtime:<operation> s'exécute une fois (5 s, 15 s pour road-vehicles.spawn) ; le résultat est écrit dans <root>\.omsilaunch\diagnostics\<sessionId>-runtime-operation.json et affiché. Une commande runtime en échec ne met jamais fin à la session (runtime_error est affiché à la place).
  7. Attente : avec /observe-seconds:n, la session est arrêtée après n secondes ou plus tôt lors d'un arrêt par la zone de notification ou le pipe, ou lorsque OMSI se termine ; sans cette option, le propriétaire attend que OMSI se termine ou qu'un arrêt soit demandé.
  8. L'état final est affiché ; sortie 0 si Completed, 1 sinon.

session.stop, « End session » (Terminer la session) dans la zone de notification, Ctrl+C et CloseAsync demandent tous l'arrêt canonique : OMSI est terminé avec TerminateProcess (la routine d'arrêt propre à OMSI ne s'exécute pas et options.cfg n'est pas réécrit par OMSI), puis chaque fichier appartenant à la session est restauré. Voir cycle de vie de la session et transactions et récupération.

Mots de commande#

Chaque mot accepté en première position (CliInput.CommandWordsAccepted) :

MotObjetModeRemarques
capabilitiesLister les capacités publiquesLocal, sans sessionEnveloppe capabilities.
profilesLister les variantes de Omsi.exe prises en chargeLocal, sans sessionEnveloppe profiles.
detectSignaler les processus Omsi.exe et un propriétaire actifLocal, sans sessionC'est aussi le comportement par défaut lorsqu'aucun argument n'est fourni. États : NO_OMSI_FOUND, OMSI_FOUND_UNMANAGED, UNKNOWN_BINARY_FOUND par processus lorsque le binaire ne peut pas être inspecté ; active_omsilaunch_instance, managed_session.
helpUtilisation et catalogue public des commandesLocal, sans sessionhelp <family> filtre par famille de capacités (session, time, weather, map, camera, vehicles, player, humans, timetable, scripts, constants, curves, hof, drivers, tickets, d3d, events).
sessionsession status, session stopClientExactement un mot à la suite ; toute autre forme affiche l'utilisation, sortie 2. session plan/session start sont des noms de routes de l'API, pas des mots de la CLI : utilisez /plan et /new.
eventsevents read, events watchClientread renvoie une fois la liste bornée des événements ; watch affiche chaque nouvel événement (selon Sequence) sous forme d'enveloppe events.watch toutes les 250 ms jusqu'à Ctrl+C (sortie 0), 4 lorsqu'aucun propriétaire ne répond, 7 en cas d'erreur de contrôle.
timetime get, time setRoute client
weatherweather get, weather set, weather actual getRoute client
mapmap getRoute client
cameracamera get, camera set, camera lock, camera unlockRoute client
vehiclesvehicles list, vehicles get, vehicles summary, vehicles spawn, vehicles place-randomRoute client
playerplayer getRoute client
humanshumans list, humans get, humans summaryRoute client
timetabletimetable get, timetable <table> list, timetable logs listRoute client
scriptsscripts variable list|get|set, scripts string list|getRoute client
constantsconstants list, constants getRoute client
curvescurves list, curves evaluateRoute client
hofhof getRoute client
driversdrivers listRoute client
ticketstickets getRoute client
d3dMot de famille réservéAucund3d n'a aucune route hiérarchique : d3d texture ... est une route inconnue (sortie 2) et d3d seul affiche l'utilisation (sortie 2). Les opérations D3D s'atteignent avec /runtime:d3d.status, /runtime:d3d.texture.create, etc. (voir Opérations sans route).

Routes hiérarchiques#

CliInput.HierarchicalRoutes associe une route en minuscules à un identifiant d'opération runtime. Toutes les routes nécessitent une session Running et sont exécutées via la boîte aux lettres runtime (ExecuteRuntimeAsync). Les écritures runtime ne modifient que l'état en mémoire d'OMSI : elles ne touchent jamais de fichiers, ne font pas partie de la transaction de configuration et ne sont pas annulées à l'arrêt (OMSI est terminé). La stabilité suit PublicCapabilityRegistry et la matrice de validation ; les détails et les champs de résultat figurent dans contrôle runtime.

RouteOpération runtimeTypeNécessite RunningModifie OMSIParticipation à la restaurationStabilitéRemarques
time gettime.readReadOuiNonAucuneSTABLE_BETAChamps d'horloge et de calendrier.
time settime.setWriteOuiOui (horloge en mémoire)Aucune, non annuléeEXPERIMENTALPar exemple --minute=<0..59> ; écriture, relecture et restauration validées le 2026-09-20.
weather getweather.readReadOuiNonAucuneSTABLE_BETA
weather setweather.setWriteOuiNon (toujours rejetée)AucuneUNAVAILABLERenvoie OL_E_RUNTIME_SETTING_NOT_PERSISTENT ; OMSI écrase la valeur à son prochain cycle météo.
weather actual getweather.actual.readReadOuiNonAucuneEXPERIMENTALÉtat du contrôleur météo actuelle/ICAO.
map getmap.readReadOuiNonAucuneSTABLE_BETANom, fichier, description, nombre de tuiles, plage d'années et sens de circulation de la carte ; revalidé à l'exécution sur le slot de carte corrigé.
camera getcamera.readReadOuiNonAucuneSTABLE_BETA
camera setcamera.setWriteOuiOui (scalaires de caméra, p. ex. --field_of_view=)Aucune, non annuléeEXPERIMENTALÉcriture et relecture du FOV validées.
camera lockcamera.lockActionOuiOui (politique limitée à la session)AucuneEXPERIMENTALNécessite --family=<0..3> (conducteur=0, passager=1, extérieur=2, carte=3), --preset=<n> facultatif (famille 0 ou 1). Nécessite un véhicule du joueur (par exemple une situation enregistrée). Validé à l'exécution dans la closure runtime (CAM01) ; la chaîne RuntimeValidation du registre indique toujours STATICALLY_VALIDATED (voir capacités).
camera unlockcamera.unlockActionOuiOuiAucuneEXPERIMENTALLibère la politique définie par camera lock (CAM01).
vehicles listroad-vehicles.listReadOuiNonAucuneSTABLE_BETARenvoie des handles rv-NNNNNN limités à la session.
vehicles getroad-vehicle.readReadOuiNonAucuneSTABLE_BETANécessite --handle=. Handle obsolète : OL_E_RUNTIME_OBJECT_HANDLE_STALE.
vehicles summaryroad-vehicles.readReadOuiNonAucuneSTABLE_BETADécomptes et état du joueur, sans handles.
vehicles spawnroad-vehicles.spawnActionOuiOui (ajoute un RoadVehicle)Aucune, non suppriméEXPERIMENTALNécessite --model=Vehicles\...\*.bus. Timeout client de 30 s, timeout propriétaire de 15 s. N'attribue pas le véhicule du joueur. RV-003 RUNTIME_PASS.
vehicles place-randomroad-vehicles.place-randomActionOuiOuiAucuneEXPERIMENTALPlaceRandomBus profilé.
player getplayer-vehicle.readReadOuiNonAucuneSTABLE_BETANull sémantique lorsqu'il n'y a pas de véhicule du joueur.
humans listhumans.listReadOuiNonAucuneEXPERIMENTALRenvoie des handles hb-NNNNNN.
humans gethuman.readReadOuiNonAucuneEXPERIMENTALNécessite --handle=.
humans summaryhumans.readReadOuiNonAucuneEXPERIMENTALDécomptes uniquement.
timetable gettimetable.readReadOuiNonAucuneSTABLE_BETAÉtat du gestionnaire d'horaires.
timetable tracks listtimetable.tracks.listReadOuiNonAucuneSTABLE_BETAFait partie de la capacité timetable.read ; preuves de lecture par lot du 2026-09-20.
timetable trips listtimetable.trips.listReadOuiNonAucuneSTABLE_BETAIdem.
timetable lines listtimetable.lines.listReadOuiNonAucuneSTABLE_BETAIdem.
timetable tours listtimetable.tours.listReadOuiNonAucuneSTABLE_BETAIdem.
timetable profiles listtimetable.profiles.listReadOuiNonAucuneSTABLE_BETAIdem.
timetable bus-stops listtimetable.bus-stops.listReadOuiNonAucuneSTABLE_BETAIdem.
timetable station-links listtimetable.station-links.listReadOuiNonAucuneSTABLE_BETAIdem.
timetable logs listtimetable.logs.readReadOuiNonAucuneSTABLE_BETAIdem.
drivers listdrivers.readReadOuiNonAucuneEXPERIMENTALEnregistrements de conducteurs.
tickets gettickets.readReadOuiNonAucuneEXPERIMENTALEnregistrements de jeux de billets.
hof getvehicle.hofs.readReadOuiNonAucuneSTABLE_BETANécessite --handle=.
constants listvehicle.constants.listReadOuiNonAucuneSTABLE_BETANécessite --handle=.
constants getvehicle.constant.getReadOuiNonAucuneSTABLE_BETANécessite --handle=, --name=.
curves listvehicle.curves.listReadOuiNonAucuneSTABLE_BETANécessite --handle=.
curves evaluatevehicle.curve.evaluateReadOuiNonAucuneSTABLE_BETANécessite --handle=, --name=, --x=.
scripts variable listvehicle.variables.listReadOuiNonAucuneEXPERIMENTALNécessite --handle=.
scripts variable getvehicle.variable.getReadOuiNonAucuneEXPERIMENTALNécessite --handle=, --name=.
scripts variable setvehicle.variable.setWriteOuiOui (variable de script)Aucune, non annuléeEXPERIMENTALNécessite --handle=, --name=, --value= (nombre fini).
scripts string listvehicle.string-variables.listReadOuiNonAucuneEXPERIMENTALNécessite --handle=.
scripts string getvehicle.string-variable.getReadOuiNonAucuneEXPERIMENTALNécessite --handle=, --name=.

Opérations sans route#

Ces identifiants d'opération publics (PublicCapabilityRegistry.PublicRuntimeOperationIds) n'ont pas de route hiérarchique et s'invoquent avec /runtime:<operation> accompagné de --key=value ou /runtime-arg:key=value : timetable.rv-files.list, timetable.track-entries.list, timetable.tour-entries.list, d3d.status, d3d.texture.create (width, height, format obligatoires ; levels facultatif), d3d.texture.describe (handle ; level facultatif), d3d.texture.update (handle, width, height, pixels_base64 obligatoires ; level, x, y facultatifs), d3d.texture.release (handle). Les opérations D3D sont EXPERIMENTAL ; le cycle de vie des textures et l'invalidation lors d'une réinitialisation du périphérique sont validés à l'exécution (closure runtime H02, D01 ; voir capacités). timetable.track-entries.list et timetable.tour-entries.list sont des listes bornées : un résultat qui ne tient pas dans le slot runtime est raccourci (truncated=true). internal.road-vehicles.make-basic est INTERNAL et est rejeté avec OL_E_RUNTIME_OPERATION_UNKNOWN par la CLI comme par l'API.

Options#

Chaque option de CliInput.KnownFlags. La « phase » est lancement (façonne le LaunchSpec/le plan d'une nouvelle session), runtime (agit sur une session en cours d'exécution) ou contrôle (modifie le comportement de la CLI elle-même). Les options analysées uniquement par compatibilité (CliInput.AcceptedNoEffectFlags) sont signalées sur leur ligne.

Contrôle et sortie#

OptionSyntaxe et valeursDéfautPhaseStabilitéComportement
/?/?désactivéecontrôleSTABLE_BETAAffiche le texte d'utilisation, sortie 0.
/help/helpdésactivéecontrôleSTABLE_BETAIdentique à /?. (Le mot nu help renvoie à la place le catalogue structuré.)
/version/versiondésactivéecontrôleSTABLE_BETAEnveloppe version, sortie 0. Évaluée avant toute autre commande, sauf /silent.
/json/json ou --jsondésactivéecontrôleSTABLE_BETAÉmet des enveloppes JSON ; force aussi la sortie console, même sous OmsiLaunchW.exe.
/quiet/quietdésactivéecontrôleACCEPTED_FOR_COMPATIBILITY / CURRENTLY_NO_EFFECTDéfinit CliInput.Quiet ; rien ne le lit.
/silent/silent (également --silent)désactivéecontrôleEXPERIMENTALDélègue toute la ligne de commande à OmsiLaunchW.exe et renvoie 0 dès que le processus hôte a démarré. Le résultat de la session est signalé par OmsiLaunchW.exe (boîtes de message, icône de la zone de notification), .omsilaunch\diagnostics et le point de terminaison de contrôle local. La délégation et les boîtes de dialogue d'échec sont validées à l'exécution (closure runtime T04) ; voir OmsiLaunchW.exe.
/serve/servedésactivéecontrôleACCEPTED_FOR_COMPATIBILITY / CURRENTLY_NO_EFFECTDéfinit CliInput.Serve ; rien ne le lit. Le point de terminaison de contrôle est toujours démarré par un propriétaire.
/verbose/verbosedésactivéelancementPARTIALDiagnosticsSpec.Verbose. Les valeurs sont transportées dans la spec ; leur effet se limite à la trace de l'hôte sous .omsilaunch\diagnostics.
/log/logactivée (DiagnosticsSpec.Log vaut true par défaut)lancementPARTIALDiagnosticsSpec.Log. Toujours activée en pratique.
/logall/logalldésactivéelancementPARTIALDéfinit ensemble Verbose, ProcessTrace, PluginTrace et NativeTrace.
/omsi-logall/omsi-logalldésactivéelancementPARTIALDiagnosticsSpec.OmsiLogAll.
/trace/tracedésactivéelancementPARTIALAlias de /trace-process.
/trace-process/trace-processdésactivéelancementPARTIALDiagnosticsSpec.ProcessTrace.
/trace-plugin/trace-plugindésactivéelancementPARTIALDiagnosticsSpec.PluginTrace.
/trace-native/trace-nativedésactivéelancementPARTIALDiagnosticsSpec.NativeTrace.

Planification, validation et harnais#

OptionSyntaxe et valeursDéfautPhaseStabilitéComportement
/plan/plandésactivéelancementSTABLE_BETAConstruit et affiche le SessionPlan, sans démarrer OMSI. Sortie 0 si IsRunnable, 1 sinon. Nécessite une sélection de lancement (/new, /saved, /spec ou un argument d'installation) ; /plan seul, sans rien d'autre, exécute detect.
/validate/validatedésactivéelancementSTABLE_BETAIdentique à /plan dans ce build.
/runtime-batch/runtime-batchdésactivéeruntime (propriétaire)INTERNALHarnais de validation : après Running, exécute l'ensemble des opérations de lecture et écrit <sessionId>-runtime-read-batch.json.
/runtime-write-batch/runtime-write-batchdésactivéeruntime (propriétaire)INTERNALHarnais de validation : lectures plus time.set, camera.set et vehicle.variable.set avec restauration ; écrit <sessionId>-runtime-write-batch.json.
/d3d-batch/d3d-batchdésactivéeruntime (propriétaire)INTERNALHarnais de validation du cycle de vie des textures D3D ; écrit <sessionId>-d3d-wave-d-batch.json.
/runtime/runtime:<operation>aucuneruntimeSTABLE_BETA (dispatch)Sélectionne une opération runtime publique par son identifiant. Mode client (pas d'argument d'installation) : transmise au propriétaire. Mode propriétaire : exécutée une fois après Running. Identifiants inconnus : OL_E_RUNTIME_OPERATION_UNKNOWN, sortie 2.
/runtime-arg/runtime-arg:<key>=<value> (répétable)aucuneruntimeSTABLE_BETA (dispatch)Argument runtime ; équivalent à --key=value. = manquant : /runtime-arg requires key=value, sortie 2.

Sélection du monde#

OptionSyntaxe et valeursDéfautPhaseStabilitéComportement
/new/newWorldMode.NewMap est le mode par défaut, mais un lancement n'est demandé que si l'une des options /new, /saved, /last, /spec est présentelancementSTABLE_BETANEW_MAP. Nécessite /map et /entrypoint-index (un plan sans index de point d'entrée présenté signale OL_E_ENTRYPOINT_REQUIRED ; sans /map, aucune carte n'est résolue). /new ne sélectionne jamais une carte de manière implicite.
/saved/saved:<file.osn>aucunelancementSTABLE_BETASAVED_SITUATION. La carte et la position proviennent du .osn ; /map, /entrypoint, /entrypoint-index sont rejetées avec /saved (sortie 2). Situation manquante : OL_E_SITUATION_NOT_FOUND ; sa carte manquante : OL_E_SITUATION_MAP_NOT_FOUND.
/last/lastaucunelancementUNAVAILABLELAST_MAP_STATE. Produit toujours OL_E_CAPABILITY_UNAVAILABLE (non exécutable, sortie 1) sur ce profil ; aucun repli sur un .osn choisi d'après l'horodatage n'est effectué.
/map/map:<identity> (par exemple maps\Grundorf\global.cfg)aucunelancementSTABLE_BETAIdentité de la carte pour /new, ou portée de /list:Entrypoints. Inconnue : OL_E_MAP_NOT_FOUND.
/entrypoint/entrypoint:<identity>aucunelancementUNAVAILABLEPoint d'entrée par libellé. Bloqué : le plan enregistre world.entrypoint-identity comme RUNTIME_PARTIAL et devient non exécutable (OL_E_CAPABILITY_UNAVAILABLE). Mutuellement exclusive avec /entrypoint-index (l'identité l'emporte et efface l'index).
/entrypoint-index/entrypoint-index:<n>, 0..2147483647aucunelancementSTABLE_BETAIndex du point d'entrée dans la liste présentée (à partir de 1, tel qu'OMSI le présente). Obligatoire pour un plan NEW_MAP exécutable.

Date, heure et météo#

Ces quatre options sont acceptées et transportées dans le LaunchSpec, mais le chemin de démarrage natif ne les applique pas : le planificateur les enregistre comme STATICALLY_PARTIAL et ajoute OL_E_CAPABILITY_UNAVAILABLE, de sorte que le plan est NON EXÉCUTABLE (sortie 1). Un fichier /spec ou un profil de session qui les définit a le même effet.

OptionSyntaxe et valeursDéfautPhaseStabilitéComportement
/date/date:<yyyy-mm-dd> ou /date:systemnon définielancementUNAVAILABLEDateSpec explicite/système. Valeur non analysable : OL_E_INVALID_ARGUMENT, sortie 2.
/time/time:<hh:mm[:ss]> ou /time:systemnon définielancementUNAVAILABLETimeSpec explicite/système.
/year/year:<n> ou /year:systemnon définielancementUNAVAILABLEYearSpec.
/weather/weather:<preset>non définielancementUNAVAILABLEWeatherMode.Preset.
/weather-icao/weather-icao:<code>non définielancementUNAVAILABLEWeatherMode.Icao.
/weather-real/weather-realnon définielancementUNAVAILABLEWeatherMode.RealCurrent. La dernière option parmi /weather, /weather-icao, /weather-real l'emporte.

Véhicule du joueur#

Acceptées et résolues par rapport à l'installation, mais non appliquées par le runtime : chaque champ défini est STATICALLY_PARTIAL et ajoute OL_E_CAPABILITY_UNAVAILABLE (plan NON EXÉCUTABLE, sortie 1).

OptionSyntaxe et valeursDéfautPhaseStabilitéComportement
/vehicle/vehicle:<identity> (Vehicles\...\*.bus)non définielancementUNAVAILABLERésolue en premier (OL_E_VEHICLE_NOT_FOUND si inconnue).
/repaint/repaint:<id>non définielancementUNAVAILABLERésolue uniquement conjointement avec /vehicle (OL_E_REPAINT_NOT_FOUND).
/hof/hof:<id>non définielancementUNAVAILABLEOL_E_HOF_NOT_FOUND si inconnue.
/fleet/fleet:<n>non définielancementUNAVAILABLENuméro de flotte.
/registration/registration:<text>non définielancementUNAVAILABLEImmatriculation.
/no-vehicle/no-vehicledésactivéelancementSTABLE_BETAEfface tout véhicule du joueur provenant de la base (/spec ou profil). Sans effet indésirable.

Overlays de configuration#

OptionSyntaxe et valeursDéfautPhaseStabilitéComportement
/set/set:<key>=<value> (répétable ; clés insensibles à la casse)aucunelancementSTABLE_BETAOverlay sémantique de options.cfg issu de ConfigurationCatalog (par exemple graphics.maxFPS=60, traffic.randomVehicles=150). Clé inconnue : OL_E_UNKNOWN_SETTING (sortie 2) ; clé en lecture seule (advanced.multithreadingCalculate, advanced.multithreadingTextureLoad, graphics.texture, graphics.textureFilter) : OL_E_SETTING_NOT_WRITABLE (sortie 2) ; valeur hors plage ou mal formée : OL_E_INVALID_SETTING_VALUE lors de la construction de l'overlay. L'overlay est une mutation de session : capturé dans un instantané, appliqué avant le démarrage d'OMSI, restauré octet pour octet à l'arrêt (RV-005 RUNTIME_PASS). Conflit avec une clé détenue par le préréglage d'un profil sélectionné : OL_E_SESSION_PROFILE_OVERRIDE_CONFLICT.

Présentation de l'écran de démarrage#

OptionSyntaxe et valeursDéfautPhaseStabilitéComportement
/splash/splash:Managed, /splash:Native, /splash:Unset (insensible à la casse)ManagedlancementSTABLE_BETAManaged : les BMP 640x480 24 bits du paquet sont copiés une fois dans <root>\.omsilaunch\assets\splash, et GUI\NewSplashscreen_ENG.bmp ainsi que GUI\NewSplashscreen_<lang>.bmp sont remplacés par overlay de manière transactionnelle et restaurés à l'identique (RV-006 RUNTIME_PASS). Native/Unset (alias) : fichiers OMSI non modifiés. Valeur manquante : /splash requires Unset, Native, or Managed, sortie 2.
/splash-language/splash-language:PTB|ENG|DEU|FRA (également pt-BR, de, fr, en ; toute autre valeur se replie sur ENG)[language] de options.cfg, sinon ENGlancementSTABLE_BETASélectionne le fichier cible localisé.
/splash-assets/splash-assets:<directory> (les chemins relatifs sont résolus sous la racine de l'installation)<root>\.omsilaunch\assets\splash, sinon l'ensemble fourni dans le paquetlancementSTABLE_BETARépertoire de ressources personnalisé ; doit contenir ENG.bmp et, pour une langue autre que l'anglais, <lang>.bmp. Erreurs : OL_E_SPLASH_ASSET_DIRECTORY_MISSING, OL_E_SPLASH_ASSET_MISSING, OL_E_SPLASH_FORMAT_UNSUPPORTED (remontées sous la forme OL_E_SESSION_PRESENTATION_INVALID dans le plan ; non exécutable).

Textures Internet#

OptionSyntaxe et valeursDéfautPhaseStabilitéComportement
/internet-textures/internet-textures:Native|Disabled|OverrideNativelancementEXPERIMENTALNative : aucune modification. Disabled : le téléchargeur profilé intégré au processus est neutralisé. Override : le profil .itx indiqué est appliqué par overlay en tant que Texture\standard.itx ; chaque cible HTTP(S) qu'il liste ainsi que Texture\standard.ipr deviennent des suppressions de session (supprimées pour la session, restaurées à l'arrêt). Valeur manquante : sortie 2.
/internet-textures-profile/internet-textures-profile:<file.itx>aucunelancementEXPERIMENTALObligatoire avec Override (OL_E_ITX_PROFILE_REQUIRED, sortie 2). OL_E_ITX_PROFILE_MISSING, OL_E_ITX_PROFILE_INVALID (doit être composé de paires de lignes URL/cible avec des URL http/https), OL_E_ITX_TARGET_OUTSIDE_TEXTURE_PATH (les cibles doivent se résoudre sous Texture\, sans chemins absolus, sans .. ni points d'analyse).

Profils de session#

OptionSyntaxe et valeursDéfautPhaseStabilitéComportement
/predefined-profile/predefined-profile:<id>aucunelancementSTABLE_BETA (compilation ; OmsiLaunch.ProfileTests hors ligne)Charge <root>\.omsilaunch\session-profiles\<id>\profile.yaml (voir profils de session). Nécessite /predefined-profile-index (OL_E_SESSION_PROFILE_PRESET_NOT_FOUND, sortie 2). Le bloc new: ne s'applique qu'avec /new ; compatibility.maps est appliqué pour /new et /saved (OL_E_SESSION_PROFILE_MAP_MISMATCH). Les options explicites qui entrent en collision avec un champ détenu par le profil sont rejetées avec OL_E_SESSION_PROFILE_OVERRIDE_CONFLICT (CliInput.RejectProfileConflicts) : carte/point d'entrée/date/heure/année/météo lorsque le bloc new: les détient, clés /set détenues par le préréglage, options d'écran de démarrage lorsque le préréglage contient presentation, options de textures Internet lorsqu'il contient internet-textures, timeouts lorsqu'il contient behavior.
/predefined-profile-index/predefined-profile-index:<1..5>aucunelancementSTABLE_BETASélectionne le préréglage par son index. Hors plage : sortie 2.

Fichier LaunchSpec#

OptionSyntaxe et valeursDéfautPhaseStabilitéComportement
/spec/spec:<path.json>aucunelancementSTABLE_BETA (chargeur testé hors ligne ; sémantique de session identique à celle des options)Charge un fichier JSON LaunchSpec comme base (voir LaunchSpec) et marque un lancement comme demandé. Règles (LaunchSpecJson) : le fichier doit exister (OL_E_SPEC_NOT_FOUND, sortie 6) ; 1 MiB au maximum (OL_E_SPEC_TOO_LARGE, sortie 2) ; la racine doit être un objet (OL_E_SPEC_INVALID) ; noms de propriétés insensibles à la casse ; commentaires // et virgules finales autorisés ; profondeur de 32 au maximum ; chaque propriété inconnue est rejetée avec son chemin JSON (OL_E_SPEC_UNKNOWN_PROPERTY: $.Presentation.Foo, sortie 2).

Priorité (CliInput.BuildSpecAsync) : valeurs par défaut → fichier /spec → /predefined-profile (remplace Installation et World, puis applique le profil) → options explicites. Un argument d'installation explicite l'emporte sur RootPath dans la spec. /no-vehicle efface le véhicule du joueur de la spec ; /vehicle et les options associées y sont fusionnées champ par champ. Les clés /set sont fusionnées dans Environment.General. /splash, /splash-language, /splash-assets, /internet-textures, /internet-textures-profile ne remplacent la valeur que lorsqu'elles sont indiquées. /startup-timeout et /shutdown-timeout ne remplacent la valeur que lorsqu'elles sont indiquées ; Presentation.SuppressTrayIcon provient uniquement de la spec (aucune option). Les options de diagnostic sont combinées par OU avec les Diagnostics de la spec.

Découverte du contenu#

OptionSyntaxe et valeursDéfautPhaseStabilitéComportement
/list/list:<category> ; les catégories sont les valeurs de ContentQueryKind Maps, Situations, Vehicles, Repaints, Hofs, FleetNumbers, Registrations, Addons, Entrypoints (insensibles à la casse)aucunelocal, sans sessionSTABLE_BETADiscoverAsync sur l'installation ; enveloppe content.list avec des entrées Identity, Kind, DisplayName ; sortie 0. Catégorie inconnue : Unknown discovery category, sortie 2. Les points d'analyse (jonctions/liens symboliques) sont ignorés, les fichiers OMSI sont lus en Windows-1252.
/vehicle-scope/vehicle-scope:<vehicle identity>aucunelocalSTABLE_BETAPortée transmise pour chaque catégorie sauf Entrypoints, qui utilise /map comme portée.

Timeouts et observation#

OptionSyntaxe et valeursDéfautPhaseStabilitéComportement
/startup-timeout/startup-timeout:<1..600> secondesvaleur de la spec/du profil, sinon 180lancementSTABLE_BETABehavior.StartupTimeoutSeconds. Le propriétaire attend Running pendant cette valeur plus 5 s ; OL_E_STARTUP_TIMEOUT met fin à la session avec la sortie 1.
/shutdown-timeout/shutdown-timeout:<1..600> secondesvaleur de la spec/du profil, sinon 30lancementACCEPTED_FOR_COMPATIBILITY / CURRENTLY_NO_EFFECTTransportée dans Behavior.ShutdownTimeoutSeconds ; le superviseur ne l'utilise pas dans ce build (OMSI est terminé, on ne lui demande pas de se fermer).
/observe-seconds/observe-seconds:<0..2147483647>aucune (exécution jusqu'à ce que OMSI se termine ou qu'un arrêt soit demandé)runtime (propriétaire)STABLE_BETABorne supérieure de la phase d'exécution : après n secondes en Running, l'arrêt canonique est demandé. Un arrêt par la zone de notification ou le pipe, ou la fin d'OMSI, y met fin plus tôt. 0 arrête immédiatement après Running.

Récupération#

OptionSyntaxe et valeursDéfautPhaseStabilitéComportement
/recovery-status/recovery-statusdésactivéelocalSTABLE_BETAIndique si <root>\.omsilaunch\journal.json est en attente (pending), ne restaure jamais ; sortie 0. Prend le bail d'installation : OL_E_INSTALLATION_BUSY (sortie 7) tant qu'un propriétaire le détient.
/recover/recoverdésactivéelocalSTABLE_BETARestaure un journal en attente (sauvegardes d'abord vérifiées par rapport au SHA-256 de l'instantané ; OL_E_RECOVERY_BACKUP_CORRUPT, OL_E_RECOVERY_ABSENT_OWNERSHIP_MISMATCH, OL_W_RESTORE_FOREIGN_FILE_RETAINED signalés dans diagnostics). Sortie 0 lorsque rien n'était en attente ou que la restauration s'est achevée ; 8 lorsqu'un journal était en attente et le reste. Refusée avec OL_E_INSTALLATION_BUSY tant que le processus OMSI journalisé (PID, heure de création, chemin de l'exe) ou, pour un journal ayant dépassé HandoffCreated sans PID, tout Omsi.exe issu de cette racine est actif. Chaque démarrage de session effectue automatiquement la même récupération avant de lire l'installation.

Formats de sortie#

  • Enveloppe de succès (CliInput.WriteEnvelope, avec --json) : {"ok": true, "command": "<name>", "protocol_version": "0.1", "result": <object>}, indentée. Les réponses transmises de session status et events read ajoutent un membre metadata lorsque des événements plus anciens ont été omis pour tenir dans la trame de contrôle (events_dropped_count, voir contrôle local). Sans --json, seul <object> est affiché en JSON indenté, suivi de Note: <n> older events were omitted to fit the control frame. lorsque des événements ont été abandonnés.
  • Enveloppe d'erreur (CliInput.WriteError, avec --json) : {"ok": false, "command": "<name>", "protocol_version": "0.1", "error": {"code": "OL_E_...", "category": "<category>", "message": "..."}}. Sans --json : OL_E_<CODE>: message sur une ligne. Catégories : invalid_argument, unsupported_profile, session, runtime, not_found, transaction, internal. Sous OmsiLaunchW.exe, le même code et le même message sont affichés dans une boîte de message.
  • Plan et état (CliInput.Write) : les enregistrements SessionPlan, SessionStatus et RuntimeCommandResult sont affichés en JSON indenté sans enveloppe. Sans --json, un plan est résumé sous la forme Plan: READY profile=Omsi23004_692EBFBF ou Plan: NOT RUNNABLE profile=... ; les autres enregistrements sont toujours affichés en JSON. Les valeurs d'énumération sont sérialisées en entiers (SessionState.Running vaut 14, Completed vaut 18, Failed vaut 19).
  • Noms de commande utilisés dans les enveloppes : silent, version, capabilities, help, profiles, detect, recover, content.list, session, session.status, session.stop, events.read, events.watch, events watch, installation, cli, session profile, et l'identifiant de l'opération runtime pour les commandes runtime transmises.
  • Sous OmsiLaunchW.exe (OMSILAUNCH_WINDOWS_HOST=1), rien n'est écrit sur la console sauf si --json est indiqué.

Erreurs par commande#

CommandeCodes d'erreur typiquesSortie
Tout échec d'analyseOL_E_INVALID_ARGUMENT, codes de profil de session (OL_E_SESSION_PROFILE_*)2
/silentOL_E_WINDOWS_HOST_MISSING, OL_E_WINDOWS_HOST_START_FAILED7
Route client, /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_* renvoyés par le propriétaire, p. ex. 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
Vérifications préalables du propriétaireOL_E_RUNTIME_INSTALLATION_INCOMPLETE, OL_E_SESSION_ALREADY_ACTIVE7
/recovery-status, /recoverOL_E_INSTALLATION_BUSY (7) ; OL_E_RECOVERY_*, OL_E_RESTORE_FAILED (8) ; en attente mais non récupéré (8)7, 8
/listcatégorie inconnue (2) ; OL_E_INSTALLATION_NOT_FOUND/répertoires manquants (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, lancementdiagnostics du plan : OL_E_PERMANENT_PLUGIN_MISSING, OL_E_PERMANENT_PLUGIN_HASH_MISMATCH, OL_E_PERMANENT_PLUGIN_MANIFEST_INCOMPLETE (closure du plugin installé), 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 (informatif)1
Démarrage de la sessionOL_E_PLAN_NOT_RUNNABLE (nouvelle planification au démarrage, 1) ; OL_E_PERMANENT_PLUGIN_MISSING, OL_E_PERMANENT_PLUGIN_HASH_MISMATCH, OL_E_PERMANENT_PLUGIN_MANIFEST_INCOMPLETE, OL_E_RELEASE_MANIFEST_INVALID (normalement signalés par la planification comme diagnostic du plan, sortie 1 ; 7 uniquement si les fichiers du plugin changent entre la planification et le démarrage), 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 (session Failed, 1)1, 7
Exception non gérée, où que ce soitclassée par CliProgram.Classify (voir codes de sortie)2..10

Environnement#

VariableDéfinie parEffet
OMSILAUNCH_WINDOWS_HOST=1OmsiLaunchW.exeWindowsHost.IsActive : sortie console supprimée, échecs affichés dans des boîtes de message, /silent non redélégué.

Voir aussi#

Exemples de CLI · OmsiLaunchW.exe · codes de sortie · erreurs · contrôle local · zone de notification Windows · contrôle runtime · capacités · LaunchSpec · profils de session · empaquetage · compatibilité · limitations connues · API publique