Programmierung

Verwendung von Kommandozeilenargumenten

Kommandozeilenargumente gibt es bereits seit der DOS-Zeit. Sie sind ein einfacher Weg einem Programm zusätzliche Werte zu übergeben und damit den Programmablauf zu beeinflussen. In der CONZEPT 16-Installationsroutine ist es beispielsweise möglich über Kommandozeilenargumente die komplette Installation zu automatisieren.


Es wäre falsch zu behaupten, dass moderne Software keine Kommandozeilenargumente verwendet oder benötigt. Die meisten Programme, auch die mit grafischer Oberfläche, bieten oft versteckte Optionen, welche über die Kommandozeile definiert werden können.

Kommandozeilenargumente werden hinter dem Kommando, bzw. dem Programmnamen, angegeben. Es gibt verschiedene Möglichkeiten ein Argument anzugeben. Für CONZEPT 16-Applikationen sind dabei zwei Arten besonders zu unterscheiden:

1. Argumente, die über den Namen definiert werden:

c16_?.exe /<Argumentname>=<Argumentwert>

c16_setup.exe /cpn_action=extract /cpn_cln=1 /dir=.

Die Installationsroutine extrahiert den Standard- und Advanced-Client in das aktuelle Verzeichnis.

Diese Variante hat den Vorteil, dass die Argumente über den Namen identifiziert werden. Die Reihenfolge spielt dabei keine Rolle.

Unter Windows wird der Name eines Arguments oft durch ‚-‚ oder ‚/‚ eingeleitet. Jedoch kann dies je nach Programm variieren. Ebenso müssen Name und Wert eines Arguments nicht unbedingt durch ein ‚=‘ getrennt sein. Ein Argumentwert, der ein oder mehrere Leerzeichen enthält, muss durch Anführungszeichen umschlossen werden:

/path="C:\Program Files\MyApp.exe".

2. Argumente, die über die Position definiert werden:

c16_?.exe <Argumentwert1> <Argumentwert2> ... <ArgumentwertN>

c16_apgi.exe * CodeLibrary START

Der Client verbindet sich als Benutzer "START" mit der CodeLibrary auf dem lokalen Server. Die zweite Variante hat den Nachteil, dass es für den Benutzer nicht ersichtlich ist, welches Argument welche Bedeutung hat.

CONZEPT 16

Auch CONZEPT 16-Applikationen können Kommandozeilenargumente verarbeiten. Dazu steht der Befehl SysGetArg() zur Verfügung. Dem Befehl wird der Name des Arguments übergeben und liefert den Wert zurück (Variante 1).

Beispiel (Applikation im Debug-Modus starten)

c16_apgi.exe * Verwaltung USER /debug_mode=on
// Programm im Debug-Modus ausführen?
tDebug # SysGetArg('debug_mode') =^ 'on';
if (tDebug)
  ... // Programm im Debug-Modus starten

Wird das Argument nicht angegeben, liefert der Befehl einen Leerstring zurück.

Anwendungsbeispiel

Ein gebräuchlicher Einsatz ist die Startprozedur über ein Kommandozeilenargument definieren zu können. Dadurch kann ein „erfahrener Anwender“ über einen Benutzer unterschiedliche Funktionen ausführen. Insbesondere für den CONZEPT 16-Entwickler ist dies interessant, um z. B. spezielle Werkzeuge zu starten, ohne immer den Benutzer wechseln zu müssen.

sub ProcExecutable
(
  aProcName             : alpha(20);  // Prozedur
)
: logic;                              // Prozedur darf ausgeführt werden (true)

  local
  {
    tText               : handle;

    tExecutable         : logic;
  }

{

  tText # TextOpen(16);
  if (tText > 0)
  {
    // Prüfen ob Text existiert und ausgeführt werden darf
    tExecutable # tText->TextRead(aProcName, _TextProc | _TextNoContents) = _rOk and (
      aProcName =^ 'DebugClient' or
      aProcName =^ 'FTP'         or
      aProcName =^ 'LogFiles'    or
      aProcName =^ 'Manager'     or
      aProcName =^ 'XMLViewer'
    );

    tText->TextClose();
  }

  return (tExecutable);
}

main
()

  local
  {
    tProcStart          : alpha(20);
  }

{
  tProcStart # SysGetArg('proc_start');
  if (tProcStart != '')
  {
    if (ProcExecutable(tProcStart))
    {
      Call(tProcStart);
      return;
    }
  }

  StartApp();
}
Hinweis

Die folgenden Namen werden bereits von CONZEPT 16 verwendet, können aber auch mit dem Befehl SysGetArg() abgefragt werden:

  • /c16=<path>
    Pfad der Programmdateien
  • /c16cfg=<path\file>
    Speicherort der Konfigurationsdatei
  • /c16tmp=<path>
    Pfad für temporäre Dateien
  • /c16lang=DE|EN|TR|*U
    Anzeigesprache im Designer (Deutsch, Englisch, Türkisch, Abhängig vom Betriebssystem)
  • /c16splashon=y|n (Standard: y)
    Splash-Screen beim Starten anzeigen?
  • /load_user_profile=y|n (Standard: y)
    Benutzerprofil laden?
Keine Kommentare

Kommentar abgeben