Color scheme: Light
You are here: start » de » Dokumentation » Werkzeuge für Microsoft Access » WKL Bootstrapper » Referenz » Was der Starter schreibt und meldet

Was der Starter schreibt und meldet

Diese Seite beschreibt den Weg von 1.0: Dateien im Format 1, deren Komponenten keine registration.json mitbringen. Den Installer von 2.0 (Format 2 oder Komponenten mit registration.json), der deregistriert und entfernt, was er installiert hat, beschreibt Der Installer.

Was Wkl.Bootstrapper.exe auf einem PC hinterlässt, wie ein Aufruf endet und was /diagnose meldet. Nutzen Sie die Seite, um eine Ablage nachträglich zu prüfen, um eine Anwendung zu entfernen (siehe Anwendung von einem PC entfernen) und um Skripte oder Tickets auf die Diagnose zu stützen.

Wie ein Aufruf endet

Der Starter wartet nicht auf Access. Er prüft den PC, registriert bei Bedarf die Komponenten, setzt den vertrauenswürdigen Speicherort, legt die Version ab, startet MSACCESS.EXE und beobachtet den neuen Prozess zwei Sekunden lang. Dann endet er:

ExitcodeBedeutung
0Access wurde mit der Kopie des Benutzers gestartet und lief zwei Sekunden später noch. Das bedeutet nicht, dass die Anwendung ihr erstes Formular geöffnet hat: Ein Fehler im eigenen Startcode der Anwendung zeigt sich in Access, nachdem der Starter beendet ist.
60Access konnte nicht gestartet werden oder endete innerhalb der zwei Sekunden (eine abgelehnte Datei, ein fehlender Verweis, eine Richtlinie).
jeder andereDas erste fehlende Teil, mit seinem Code; siehe Fehlercodes des Starters. Es wurde nichts gestartet.

Der Exitcode ist dieselbe Zahl, die das Fehlerfenster zeigt, und die erste Zahl von /diagnose. Mit Fenster (ohne Schalter) kehrt der Starter zurück, nachdem die Person das Fehlerfenster geschlossen hat; mit /quiet zeigt er nichts an und kehrt sofort zurück. Während das läuft, erscheint das Startfenster als Begrüßungsbildschirm (start.splash.duration; mit 0 erscheint ein Fortschrittsfenster nur, wenn Ablegen oder Registrieren länger als 0,8 Sekunden dauert).

Versionen

Der Starter legt immer die Version ab und startet sie, die app-manifest.json in der Quelle nennt. Ohne deliveryKey vergleicht er diese Version nie mit den Kopien im Profil: Eine Quelle mit einer niedrigeren Version als zuvor wird ebenfalls abgelegt und gestartet – so kehrt eine Auslieferung zu einer früheren Version zurück. Mit deliveryKey (ab 2.2.4) wird eine niedrigere Version als je installiert nur abgelegt, wenn die signierte Auslieferung die höhere zurückzieht; sonst startet die installierte Version (Code 52, siehe Signierte Auslieferungen).

Regel
Form von versionZwei bis vier durch Punkte getrennte Zahlen, jede mit ein bis fünf Ziffern: 1.4, 1.4.0, 0.1.123.4. Buchstaben, ein Zusatz wie 0.1.0-demo sowie vor- oder nachgestellter Text werden mit Code 11 abgelehnt (Die Einstellungen der Anwendung können nicht gelesen werden); deploy.version des Build-Werkzeugs wird zu diesem Wert.
ReihenfolgeNumerisch, Teil für Teil: 0.1.10 ist neuer als 0.1.9. Verwenden Sie in jeder Version dieselbe Anzahl von Teilen: 1.4 und 1.4.0 sind verschiedene Versionen, und 1.4 gilt als die ältere.
Aufbewahrte VersionenDie neuesten keepVersions nach dieser Reihenfolge und immer die Version, die gerade gestartet wird, sowie lastWorkingVersion – die Version, die zuletzt gestartet wurde (nicht die höchste), verzeichnet in State\provisioning.json nach jedem erfolgreichen Start. Ein Ordner, dessen Kopie in Access geöffnet ist (ihre .laccdb existiert), wird nie entfernt.
Gleiche Version, andere DateiEin neuer SHA-256 für eine bereits abgelegte Version gilt als neue Auslieferung: Die Kopie wird im selben Ordner Frontends\<version> erneut abgelegt, und was die Kopie des Benutzers enthielt, wird ersetzt. Solange diese Kopie in Access geöffnet ist, lässt sich der alte Ordner nicht beiseiteschieben: Der Start endet mit Code 41 (Die Anwendung konnte nicht in das Benutzerprofil kopiert werden), die geöffnete Kopie bleibt unberührt, und der nächste Start, nachdem Access geschlossen wurde, legt die neue Datei ab (Windows verweigert das Verschieben eines Ordners, der eine geöffnete Datei enthält). Geben Sie jedem Build eine eigene Version, um das zu vermeiden.

Ordner im Benutzerprofil

Alles zu einer Anwendung liegt unterhalb von %LOCALAPPDATA%\WKL\<product>, wobei <product> der Wert von product in bootstrapper.json ist:

OrdnerInhalt
Frontends\<version>\Die Kopie des Benutzers für jede Version, mit der INI-Datei von ini, wenn eine gesetzt ist. Die neuesten keepVersions Versionen bleiben, immer die laufende und die zuletzt gestartete; eine verwendete Version wird nie entfernt.
State\provisioning.jsonWas abgelegt wurde: version, file, sha256 und size der Auslieferung, gegen die die Kopie geprüft wurde, writeTicks, lastWorkingVersion.
Logs\bootstrapper.logDas Protokoll (siehe unten).

Die WKL-Komponenten, die die Anwendung ausliefert, werden einmal je Release und Bitbreite nach %LOCALAPPDATA%\WKL\Components\<release>\<x86|x64>\ kopiert und von dort registriert. Diesen Ordner teilen sich alle Anwendungen des Benutzers, die Komponenten ausliefern.

Das Protokoll

%LOCALAPPDATA%\WKL\<product>\Logs\bootstrapper.log, UTF-8, eine Zeile je Schritt: Uhrzeit, Prozess-ID, Schritt, Text. Bei 1 MB wird es nach bootstrapper.1.log verschoben (fünf ältere Dateien bleiben erhalten). Es enthält nie INI-Werte, Kennwörter oder Verbindungszeichenfolgen. /diagnose schreibt kein Protokoll.

SchrittText
startProdukt und Version des Bootstrappers
manifestProdukt, Version, Datei, Ziel, Bitbreite und runtime aus app-manifest.json
environmentAccess, WKL-Registrierung, .NET Desktop Runtime
componentsder registrierte DLL-Pfad (nur wenn die Anwendung WKL-Komponenten braucht)
trustder vertrauenswürdige Ordner
placementNur auf dem Weg von 1.0: placed <path>, wenn die Kopie jetzt abgelegt wurde, in place <path>, wenn eine frühere Kopie übernommen wurde
installInstaller von 2.0: install <version> <copy> components <release> je installierter Version (siehe Wann 2.0 installiert und wann 1.0 läuft)
endCode, Name und Detail des Ergebnisses
settingsAktionen des Einstellungsfensters: Komponenten einrichten, eine Version verwerfen oder starten, aufräumen

Eine Installation nachweisen (Installer von 2.0). Welche Auslieferungen der Installer von 2.0 übernimmt, steht unter Wann 2.0 installiert und wann 1.0 läuft; für sie ist der Nachweis die Protokollzeile install <version> <copy> ... zusammen mit /list /json (die installierten Versionen und ihre Komponenten aus der Installer-Datenbank). State\provisioning.json wird nicht geschrieben, und die Zeile placement erscheint nicht. Ein Test, der eine Installation von Hand entfernt, lässt ihren Eintrag unter „Apps“ und ihren Nachweis in der Installer-Datenbank zurück; entfernen Sie sie stattdessen mit /uninstall /quiet.

Eine Ablage nachweisen (Weg von 1.0). Die Kopie wird geprüft, bevor sie abgelegt wird: Der Starter kopiert die Auslieferung in einen temporären Ordner, vergleicht ihre Größe und ihren SHA-256 mit app-manifest.json und benennt den Ordner erst dann in Frontends\<version> um. Eine Zeile placed <path> bedeutet daher, dass die Kopie in diesem Moment dem Manifest entsprach; eine Abweichung endet mit Code 42 und hinterlässt keine Ablage. State\provisioning.json verzeichnet sha256 und size des Manifests für diese Ablage. Größe und SHA-256 der Kopie selbst werden nicht protokolliert: Access ändert die Datei, wenn es sie öffnet (auch eine mit /runtime geöffnete ACCDE), sodass sie nach dem ersten Start ohnehin nicht mehr zum Manifest passen würden.

Der vertrauenswürdige Speicherort

Der Starter macht Frontends zu einem vertrauenswürdigen Speicherort von Access für den Benutzer, mit Unterordnern, damit sich die Kopien ohne Sicherheitswarnung öffnen:

SchlüsselHKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Access\Security\Trusted Locations\WKL.<product>
Path%LOCALAPPDATA%\WKL\<product>\Frontends\ (erweitert, mit abschließendem umgekehrtem Schrägstrich)
AllowSubfolders1 (DWORD)
DescriptionWKL <product>: Anwendung des Benutzers (Wkl.Bootstrapper)

Er wird bei jedem Start geprüft und nur geschrieben, wenn Path oder AllowSubfolders abweichen. Der Starter entfernt ihn nie. Eine Gruppenrichtlinie, die vertrauenswürdige Speicherorte abschaltet oder nur die der Richtlinie zulässt, beendet den Start mit Code 50.

Die Registrierung der Komponenten

Liefert die Anwendung WKL-Komponenten aus (components in bootstrapper.json) und fehlt die Registrierung des Benutzers oder ist sie älter, als die Anwendung braucht, führt der Starter regsvr32 /s /n /i:user in der Bitbreite von Access für die Kopie in %LOCALAPPDATA%\WKL\Components\... aus. Das schreibt unter HKEY_CURRENT_USER\Software\Classes dieselben Schlüssel wie die eigene Registrierung des Release-Pakets. Eine ausreichend neue Registrierung bleibt unangetastet. Der Starter deregistriert nie. Auch eine Registrierung einer anderen Hauptversion derselben Typbibliothek, die eine andere Anwendung noch benötigt, wird nicht ersetzt; der Start hält mit Code 37 an. Registriert wird die DLL, die in der registration.json des Ordners components steht (Pakete vor Release 1.57 der WKL Forms Object Library haben keine solche Datei; dort ist es Wkl.Access.Components.dll). Ab WKL Bootstrapper 3.2 erkennt der Starter die vorhandene Registrierung an der LIBID der Typbibliothek und an ihrer Version (HKEY_CURRENT_USER\Software\Classes\TypeLib\{LIBID}), nicht an Dateinamen oder ProgIDs: Ein neues Release einer Bibliothek, auch eines mit umbenannten Dateien, braucht deshalb keinen neuen Starter. WKL Office JSON, auf das manche Anwendungen ebenfalls verweisen, liefert der Starter mit einer Projektdatei im Format 1 nicht aus und prüft es auch nicht; eine Projektdatei im Format 2 registriert es mit einem Eintrag registerCom. Welche Schlüssel die Registrierung schreibt und entfernt, beschreibt die Dokumentation der WKL Forms Object Library (Was die Registrierung pro Benutzer schreibt).

/diagnose und /diagnose /json

/diagnose führt jede Prüfung eines Starts aus, ohne etwas zu ändern (keine Registrierung, kein vertrauenswürdiger Speicherort, keine Kopie, kein Protokoll), und gibt das Ergebnis aus; /json gibt es als ein JSON-Objekt aus. Der Exitcode ist code.

FeldTypInhalt
codeZahlDas Ergebnis: 0, wenn ein Start gelingen würde, sonst der Fehlercode.
nameZeichenfolgeDer Name des Ergebnisses, zum Beispiel Ok, OdbcDriverMissing.
detailZeichenfolgeTechnisches Detail; bei 0 „<product> <version> can start.“
bootstrapperZeichenfolgeVersion und Build des Starters, zum Beispiel 1.0.1+2f46abe....
productZeichenfolgeproduct aus bootstrapper.json.
versionZeichenfolgeVersion in der app-manifest.json der Quelle.
fileZeichenfolge<file>, <target>, <bitness> des Manifests.
sourceZeichenfolgeDer Quellordner als vollständiger Pfad.
placedZeichenfolgeVersionsordner im Benutzerprofil, durch Kommas getrennt; nothing yet, wenn keiner existiert.
windowsZeichenfolgeBitbreite von Windows.
accessZeichenfolgeEdition, Bitbreite, Version und Pfad von Access und wie es gefunden wurde; not found.
componentsZeichenfolgeRegistriertes WKL-Release (Version der Typbibliothek), für den Benutzer oder den Computer, und der DLL-Pfad; not registered.
desktopRuntimeZeichenfolgeHöchste .NET 10 Desktop Runtime in der Bitbreite von Access oder no .NET 10 Desktop Runtime.
odbcDriversArray von Zeichenfolgen<name>: installed oder <name>: missing je Eintrag von odbcDrivers.
odbcDataSourcesArray von ZeichenfolgenAb 1.0.1: <name>: present oder <name>: missing or other bitness je Eintrag von odbcDataSources.
pathsArray von ZeichenfolgenDie Ordner Frontends und Logs des Produkts.
planArray von ZeichenfolgenAb 2.0, für eine Projektdatei im Format 2, die starten kann: was ein Start wohin installieren würde – der Versionsordner, jeder Eintrag mit seinen Dateien (<source> -> <target>, eingerückt), Schlüssel der Registrierungsdatenbank, die INI-Datei, Verknüpfungen und das Startziel. Sonst leer.

/whatif <file> stellt dieselbe Diagnose für eine beliebige Projektdatei (relative Pfade werden gegen den Ordner dieser Datei aufgelöst), sodass sich ein Projekt ausprobieren lässt, bevor es ausgeliefert wird; mit /json wird jedes Zeichen außerhalb von ASCII maskiert (\uXXXX), sodass die Ausgabe in jeder Codepage gleich lesbar ist.

Die Diagnose hält bei der ersten fehlschlagenden Prüfung an, daher können die Felder danach leer sein: Bei Code 10 oder 11 sind nur code, name, detail, bootstrapper und windows gefüllt. Felder kommen nur hinzu; ein Skript sollte Felder ignorieren, die es nicht kennt.

Mehrere Starter gleichzeitig

Starter mit verschiedenen Werten für product sind unabhängig: Jeder hat eigene Ordner, ein eigenes Protokoll, einen eigenen Zustand und einen eigenen vertrauenswürdigen Speicherort, und beide Anwendungen können gleichzeitig geöffnet sein. Ein Start wartet auf einen anderen Start desselben Produkts desselben Benutzers, solange dieser eine Version ablegt (ein Mutex je Produkt und Windows-Sitzung, bis zu zwei Minuten, dann Code 41). Gemeinsam sind den Produkten der Komponentenordner und die Registrierung der WKL-Komponenten für den Benutzer: Registriert eine Anwendung ein neueres Release, verwendet die andere es ebenfalls (eine ältere Anwendung läuft auf einem neueren Release weiter; siehe die Dokumentation der WKL Forms Object Library, Anwendung mit WKL-Steuerelementen auf Benutzer-PCs verteilen).

Verwandte Themen

de/wiki/msaccess/bootstrapper/reference/what-the-starter-writes.txt · Last modified: by Wolfgang van der Stille