Beschreibung

Die Applikation UpdateJob kann für folgende Situationen verwendet werden:

Anwendungsbeispiel

Das Einsetzen der Applikation macht vor allem Sinn, wenn ausgeführte Anwendungen (die sich nicht selbst ersetzen können da sie zur Laufzeit schreibgeschützt sind) aktualisiert werden sollen.
Die zu aktualisierende Anwendung definiert einen oder mehrere Jobs (auch die eigene Aktualisierung), startet anschließend "UpdateJob.exe" und wird beendet.
Die Applikation führt jetzt alle definierten Jobs aus und startet anschließend die aktualisierte Anwendung.

Kommandozeilen Parameter

Die Applikation kann unter verwendung von (auch mehreren) Kommandozeilenparametern aufgerufen werden, dabei muss auf Groß- und Kleinschreibung keine Rücksicht genommen werden.

Die folgende Syntax ist zu gebrauchen:

UpdateJob.exe [/PARAMETER [ARGUMENTE]]

Die folgende Parameter sind zulässig:

Parameter Beschreibung
/jobfile Anstelle der normalen Anwendung der JobFile im Ausführungsverzeichnis kann eine JobFile in einem beliebigen Verzeichniss verwendet werden. Das Argument des Parameters ist der absolute oder auch relative Dateipfad der JobFile.
/runjob Führt nur einen bestimmten Job aus. Das Argument dieses Parameters ist der Name des Jobs, so wie er in der JobFile unter dem Attribut <name> definiert ist. Wenn mehrere Jobs.
/silent Unterdrückt sämtliche (mögliche) Fehlermeldungen.

Die JobFile

Es ist zwingend erforderlich eine JobFile mit einem übergeordneten Attribut zu beginnen, welches alle zu definierenden Jobs beinhaltet. Die Bezeichnung dieses Attributs spielt keine Rolle (jedoch meist <updatejob>), die Bezeichnungen aller weiteren Attribute ist wie in den folgenden Abschnitten vorgeschrieben:

Attribut Optional Beschreibung
<job> Definiert einen Job. Die Anzahl zu definierender Jobs ist beliebig, die Reihenfolge der auszuführenden Jobs wird jedoch, wie in der JobFile definiert, eingehalten.
  • <name>
JA Vergibt den Namen eines Jobs. Die Verwendung eines gleichen Namens für mehrere Jobs ist zulässig, somit werden durch den Commandozeilen Parameter /runjob alle Jobs ausgeführt, welche diesen Namen haben.
  • <object>
JA Definiert ein Verzeichnis (Verarbeitung immer inklusive Untervezeichnissen) oder eine Datei. Ein Job kann beliebig viele Objekte enthalten.
    • <source>
Gibt das Quellpfad eines zu definierenden Objktes an. Pfade dürfen relativ angewendet werden.
    • <target>
Gibt das Zielpfad eines zu definierenden Objktes an. Pfade relativ angewendet werden.
    • <action>
JA Gibt den zu verwendenden Ausführungstyp zum bearbeiten eines Objektes an.
  • <predelay>
JA Fügt vor der ausführung eines Jobs eine Wartezeit (Wert in Millisekunden) ein. Während dieser Zeit steht die Applikation still, auch weitere Anweisungen (wie <execute>) oder nachfolgende Jobs werden somit verzögert.
  • <postdelay>
JA Fügt nach der ausführung eines Jobs eine Wartezeit (Wert in Millisekunden) ein. Während dieser Zeit steht die Applikation still, auch weitere Anweisungen (wie <execute>) oder nachfolgende Jobs werden somit verzögert.
  • <balloon>
JA Zeigt einen "BalloonTip" zur Benutzerinformation in der Zymbolablage an. Wird ein BalloonTip per definition länger angezeigt, als der eigentliche Job andauert, so wird er anschließend weiterhin angezeigt. Ist im nachfolgenden Job jedoch ein weiter BalloonTip definiert, wird Dieser den zuvor angezeigten BalloonTip überschreiben.
Das Beenden der Applikation schließt einen angezeigten BalloonTip.
    • <title>
Definiert den Titel.
    • <description>
Definiert die Beschreibung.
    • <timeout>
JA Bestimmt die Anzeigedauer (in Millisekunden). Die Anzeigedauer wird automatisch auf 10 Sekunden eingestellt wird falls der Parameter nicht definiert ist.
  • <execute>
JA Führt eine Datei nach Beenden eines Jobs aus. Pfade dürfen relativ angewendet werden.
  • <conditioned>
JA Verknüpft das Ausführen eines Jobs mit dem Erfolgreichen Prüfen ein oder mehrer Bedingungen. Wird eine fehlerhafte Bezeichnung verwendet, schlägt die Ausführung des Jobs fehl.
  • <closeapp>
JA Beendet eine aktive Anwendung. Die Anzahl an zu beendender Anwendungen pro Job ist beliebig.
Ein Job wird weiterhin (auch ohne Fehlermeldung) ausgeführt wenn die zu schließende Anwendung nicht gefunden wird. Auch das Finden der Anwendung gantantiert nicht dass Diese auch wirklich geschlossen werden kann, setzt das Fortführen des jeweiligen Jobs aber fort - es gibt also keine Rückmeldung ob eine Anwendung tatsächlich geschloßen ist.

Dieser Parameter wird in der Ablaufreihenfolge der Anweisungen eines Jobs nach dem Attribut <predelay> ausgeführt! Das definieren einer Wartezeit vor dem Beenden einer Anwendung wird erreicht, indem ein separator Job (der ein <postdelay> enthält) zum Beenden der Anwendung vor dem eigentlichen Job definiert wird.

Mindestens eins der folgenden (bezeichnenden) Attribute für <closeapp> muss definiert sein um eine zu beendende Anwendung ausfindig zu machen, sind aber mehrere Attribut definiert so muss jedes Einzelne davon zutreffen.
    • <class>
JA Definiert die Klassenbezeichnung der zu beendenden Anwendung.
    • <window>
JA Definiert die Fensterbezeichnung der zu beendenden Anwendung.
    • <failjob>
JA Kann das Fortführen eines Jobs (Je nach Konfiguration dieses Parameters) abbrechen.
<condition> JA Definiert eine Bedingung zur Ausführung eines oder mehrerer bestimmter Jobs (Die Anzahl zu definierender Bedingungen ist beliebig). Durch Bedingungen werden bestimmte Zustände von beliebigen Dateien kontrolliert. Vom Resultat abhängig können Jobs ausgeführt oder übersprungen werden.
  • <name>
Vergibt den Namen einer Bedingung. Die Verwendung eines gleichen Namens für mehrere Bedingungen ist zulässig. Somit setzt das Ausführen eines Jobs, der so an mehrere Bedingungen geknüpft ist, eine erfolgreiche Prüfung all dieser Bedingungen voraus.
  • <file>
Definiert die zu prüfende Datei an. Pfade dürfen relativ angewendet werden.
  • <block>
Definiert das zu prüfende Kriterium (Block genannt) der Datei.
  • <method>
JA Definiert den zu anzuwendenden Vergleichsalgorithmus.
  • <operator>
JA Definiert den zu anzuwendenden Vergleichsoperator.

Verglichen wird immer der Referenzwert mit dem Wert des definierten Blocks - nicht umgekehrt:
Durch einen Vergleich des Referenzwertes 100 mit dem Blockwert 99 ergibt sich 1, womit der Referenzwert größer ist. Der Oparator ist dementsprechend an das zu erwartende Resultat anzupassen.
  • <reference>
Definiert einen Referenzwert, der mit dem definierten Blockwert unter berücksichtigung der anzuwendenden Methode und des Operators verglichen wird.

Parameter von Attributen:

Attribut Parameter Beschreibung
<action> copy Kopiert ein Objekt von der Quelle zum Ziel. Dieser Vorgang wird automatisch angewendet, falls der Parameter nicht definiert ist.
delete Löscht ein Objekt. Das zu löschende Objekt wird durch das Attribut <source> definiert, das Attribut <target> hat in diesem Ausführungstyp keine Funktion.
move Verschiebt ein Objekt von der Quelle zum Ziel. Bereits existierende Dateien werden überschrieben.
unzip Öffnet die Quelle (Diese muss ein gültiges Zip-Archiv sein) und entpackt den Inhalt (Inklusive möglichen Unterverzeichnissen) in das Zielverzeichnis. Bereits existierende Dateien werden überschrieben.
<block> companyname Führt den Vergleich zwischen Firmenname und Referenzwert durch.
filedescription Führt den Vergleich zwischen Dateibeschreibung und Referenzwert durch.
fileversion Führt den Vergleich zwischen Dateiversion und Referenzwert durch.
internalname Führt den Vergleich zwischen Codenamen und Referenzwert durch.
legalcopyright Führt den Vergleich zwischen Copyright und Referenzwert durch.
originalfilename Führt den Vergleich zwischen Originaldateiname und Referenzwert durch.
productname Führt den Vergleich zwischen Produktname und Referenzwert durch.
productversion Führt den Vergleich zwischen Produktversion und Referenzwert durch.
comments Führt den Vergleich zwischen Kommentar und Referenzwert durch.
legaltrademarks Führt den Vergleich zwischen Handelsmarke und Referenzwert durch.
privatebuild Führt den Vergleich zwischen Privat-Build und Referenzwert durch.
specialbuild Führt den Vergleich zwischen Spezial-Build und Referenzwert durch.
<method> valence Prüft einzelne Zeichen der Vergleichswerte der Reihe nach auf deren Wertigkeit. Es wird nicht zwischen Zahlen, Buchstaben und Symbolen unterschieden, maßgeblich ist der Wert eines Zeichens.
numeric Prüft den Zahlenwert der Vergleichswerte. Möglicherweise enthaltene Buchstaben oder Symbole (auch Kommas) bleiben bei der Operation unberücksichtigt.
Der Wert 0x0900,5 würde dem Zahlenwert 9005 entsprechen.
logical Prüft einzelne Symbole und Buchstaben der Vergleichswerte der Reihe nach auf deren Wertigkeit. Zahlen bilden einen zusammenhängenen Zahlenwert welcher numerisch verglichen wird. Dieser Parameter ist somit eine Mischung aus valence, und numeric.

Ein vergleich zwischen den Zeichenfolgen Hausnummer 55a und Hausnummer 200b würde aus folgenden Vergleichen bestehen:
  • "Hausnummer " vergleichen mit "Hausnummer " (Methode valcence)
  • "55" vergleichen mit "200" (Methode numeric)
  • "a" vergleichen mit "b" (Methode valcence)

Diese Methode wird automatisch angewendet, falls der Parameter nicht definiert ist.
<operator> higher Bestimmt einen Vergleich als erfolgreich, wenn der Referenzwert größer als der Blockwert ist.
higherequal Bestimmt einen Vergleich als erfolgreich, wenn der Referenzwert größer oder gleich dem Blockwert ist.
equal Bestimmt einen Vergleich als erfolgreich, wenn der Referenzwert gleich dem Blockwert ist.
unequal Bestimmt einen Vergleich als erfolgreich, wenn der Referenzwert ungleich dem Blockwert ist.
lowerequal Bestimmt einen Vergleich als erfolgreich, wenn der Referenzwert kleiner oder gleich dem Blockwert ist.
lower Bestimmt einen Vergleich als erfolgreich, wenn der Referenzwert kleiner als der Blockwert ist.
<failjob> yes Verhindert die weitere Ausführung eines Jobs im Fehlerfall. Dieses Verhalten wird automatisch angewendet, falls der Parameter nicht definiert ist.
no Ermöglicht die weitere Ausführung eines Jobs im Fehlerfall.

In der XML-Syntax wird auf groß- und kleinschreibung der Befehle geachtet - daher müssen alle Attribute klein geschrieben werden! Das bedeutet nicht dass Werte keine Großbuchstaben (oder auch Sonderzeichen) enthalten dürfen.

JobFiles dürfen Kommentare in XML-Syntax enthalten:

<!-- [KOMMENTAR] !-->

Strukturaufbau der JobFile

Die JobFile ist nach dem folgendem Muster aufgebaut:

<!-- DATEIANFANG !-->
    <updatejob>
      <condition>
        <name>[NAME DER BEDINGUNG]</name>
        <file>[DATEINAME]</file>
        <block>[BLOCKNAME]</block>
        <method>[METHODE]</method>
        <operator>[OPERATOR]</operator>
        <reference>[REFERENZWERT]</reference>
      </condition>
      <!-- [WEITERE BEDINGUNGEN] !-->

      <job>
        <name>[NAME DES JOBS]</name>
        <conditioned>[NAME DER BEDINGUNG]</conditioned>
        <balloon>
          <title>[TITEL]</title>
          <description>[BESCHREIBUNG]</description>
          <timeout>[TIMEOUT]</timeout>
        </balloon>
        <object>
          <source>[QUELLE]</source>
          <target>[ZIEL]</target>
          <action>[ANWENDUNGSMODUS]</action>
        </object>
        <predelay>[VERZÖGERUNG]</predelay>
        <postdelay>[VERZÖGERUNG]</postdelay>
        <execute>[DATEI]</execute>
        <!-- [WEITERE OBJEKTE] !-->
      </job>
      <!-- [WEITERE JOBS] !-->
    </updatejob>
<!-- DATEIENDE !-->

Beispiel einer JobFile

Das folgende Beispiel aktualisiert eine Anwendung mit folgenden Schritten:

<!-- JobFile für Update einer Anwendung (FALLS erforderlich) !-->

<updatejob>
    <!-- Notwendigkeit des Updates feststellen !-->
    <!-- Die aktuelle Build-Version ist 50 !-->
    <condition>
      <name>CheckVersion</name>
      <file>.\Tool.exe</file>
      <block>privatebuild</block>
      <method>numeric</method>
      <operator>higher</operator>
      <reference>50</reference>
    </condition>

    <!-- Kopieren der zu aktualisierenden Dateien in ein temporäres Verzeichnis !-->
    <!-- nach einer Wartezeit von 10 Sekunden !-->
    <job>
      <name>copy temporary files</name>
      <conditioned>CheckVersion</conditioned>
      <balloon>
        <title>Update</title>
        <description>Benötigte Dateien werden in temporäres Verzeichnis kopiert...</description>
        <timeout>20000</timeout>
      </balloon>
      <predelay>10000</predelay>
      <object>
        <source>\\Server\Update</source>
        <target>.\Temp</target>
      </object>
      <object>
        <source>\\Server\Languages\german.ini</source>
        <target>.\Temp\german.ini</target>
      </object>
      <object>
        <source>\\Server\Languages\english.ini</source>
        <target>.\Temp\english.ini</target>
      </object>
    </job>

    <!-- Möglicherweise aktive Anwendung beenden !-->
    <!-- (Anschließend zur Vorsicht 10 Sekunden warten) !-->
    <job>
      <name>close running application</name>
      <conditioned>CheckVersion</conditioned>
      <closeapp>
        <class>ToolWndClass</class>
        <window>Tool</window>
      </closeapp>
      <postdelay>10000</postdelay>
    </job>

    <!-- Alte Konfigurationsdatei löschen !-->
    <job>
      <name>remove outdated config file</name>
      <conditioned>CheckVersion</conditioned>
      <object>
        <source>.\settings.cfg</source>
        <action>delete</action>
      </object>
    </job>

    <!-- Nach dem Kopieren, Dateien aus dem temporären Verzeichnis verschieben !-->
    <job>
      <name>move updated files</name>
      <conditioned>CheckVersion</conditioned>
      <balloon>
        <title>Update</title>
        <description>Programmdaten werden aktualisiert...</description>
        <timeout>20000</timeout>
      </balloon>
      <execute>.\ReleaseNotes.txt</execute>
      <object>
        <source>.\Temp</source>
        <target>.\</target>
        <action>move</action>
      </object>
    </job>
</updatejob>

Nützliche Informationen