Anwendung für die Produktion ausliefern
Bauen Sie die Kopien, in denen eine Anwendung ausgeliefert wird – eine ACCDE für die Access Runtime, eine ACCDE für Administratoren –, jede bereits für ihre Betriebsart eingerichtet und mit einem Manifest, das ein Setupprogramm prüfen kann.
Voraussetzungen: WKL Forms Object Library 1.51 oder höher und das Build-Werkzeug des Release-Pakets (tools\build).
Lösungsüberblick
Das Build-Werkzeug baut die Anwendung aus ihren Textquellen (Access-Anwendung aus ihren Textquellen bauen). Zwei Einträge in
access-app.json ergänzen die Auslieferung: appModel nennt das Modell des WKL Application Designers (Titel, Symbol,
Startformular, Menüband, die Benutzeroberfläche jeder Betriebsart), deploy die Version und die Ziele. Für jedes Ziel
kopiert das Werkzeug die ACCDB (Entwicklung) oder die ACCDE, schreibt die Starteigenschaften der Betriebsart des Ziels
mit DAO in die Kopie – die Kopie wird nie geöffnet, ihr Startformular läuft während des Builds also nicht – und legt
app-manifest.json und INSTALL.txt daneben. INSTALL.txt (Englisch und Deutsch) richtet sich an den Administrator
des Kunden: den Ordner in einen lokalen Ordner des Benutzers kopieren (nie als E-Mail-Anlage oder heruntergeladenes
Archiv), ihn mit tools\deploy\Set-AccessTrustedLocation.ps1 zu einem vertrauenswürdigen Speicherort machen und mit
tools\deploy\Test-AccessTrust.ps1 prüfen.
Umsetzung
- Speichern Sie das Modell als Datei neben den Quellen, zum Beispiel mit dem Anwendungsdesigner und anschließend
Export-AccessApp.ps1, das es zusammen mit der Symboldatei so schreibt, wieappModeles nennt. Nennen Sie Modell und Auslieferung in
access-app.json:{ "name": "Kunden", "references": [ { "library": "WklForms", "major": 2, "minor": 0 } ], "forms": "src/forms", "modules": "src/modules", "appModel": "src/app/app-model.json", "deploy": { "version": "1.4.0", "targets": ["Administration", "Production"] } }- Bauen Sie:
.\tools\build\Build-AccessApp.ps1 -Project .\access-app.json. Die Ausgabe nennt die ACCDB, die ACCDE und die ausgelieferten Dateien, zum Beispieldeploy\production\Kunden.accde. Mit-Target Productionwird nur der Produktionsordner gebaut. Rufen Sie im Startformular
EnsureApplicationauf, damit sich eine Kopie, die in einer anderen Betriebsart geöffnet wird, selbst korrigiert (siehe Tutorial):Private Sub Form_Load() Dim findings As String findings = CreateObject("WklForms.Application").EnsureApplication() If Len(findings) > 0 Then Debug.Print findings End Sub- Übergeben Sie
deploy\productionan das Setup, das die Anwendung auf die Computer der Benutzer bringt; es prüft die Datei anhand vonsha256ausapp-manifest.json. Prüfen Sie die Kopie, bevor Access sie öffnet: Access schreibt beim Öffnen in eine ACCDE, auch mit/runtime, und danach stimmt die Prüfsumme nicht mehr. Die Prüfsumme zeigt eine beschädigte Kopie an, nicht die Herkunft der Datei: Das Manifest liegt neben der Datei und kann mit ihr ersetzt werden.
Hinweise
- Nur an einem vertrauenswürdigen Speicherort. Die Starteigenschaften wirken nur, wenn Access die Datei mit vertrauenswürdigem Code öffnet. Mit einer strengeren Makroeinstellung öffnet Access eine ausgelieferte ACCDE außerhalb eines vertrauenswürdigen Speicherorts überhaupt nicht; dort schützen die Eigenschaften also weder, noch spielen sie eine Rolle (siehe Die Anwendung öffnet sich, aber ihr Code läuft nicht). Liefern Sie an einen vertrauenswürdigen Speicherort aus, und prüfen Sie einen PC mit
tools\deploy\Test-AccessTrust.ps1. - Schon beim ersten Öffnen richtig. Die Starteigenschaften der Betriebsart stehen in der ausgelieferten Datei. Ohne
deployträgt eine aus der ACCDB erstellte ACCDE die Entwicklungseigenschaften, bisEnsureApplicationeinmal gelaufen ist und die Datenbank erneut geöffnet wurde. Die ausgelieferte Kopie ohne Runtime prüfen. Die Starteigenschaften lassen sich aus der ausgelieferten Datei lesen, ohne sie in Access zu öffnen. So kann auch ein Rechner ohne Access Runtime feststellen, ob die Produktionskopie abgesichert ist. In einer 32-Bit-PowerShell mit DAO:
$engine = New-Object -ComObject DAO.DBEngine.120 $db = $engine.OpenDatabase("$PWD\deploy\production\Kunden.accde", $false, $true) foreach ($n in 'StartUpShowDBWindow', 'AllowFullMenus', 'AllowShortcutMenus', 'AllowSpecialKeys', 'AllowBypassKey') { try { '{0} = {1}' -f $n, $db.Properties.Item($n).Value } catch { "$n missing" } } $db.Close()
Mit den Standardwerten der Produktion sind alle fünf False. Damit ist geklärt, ob die Auslieferung abgesichert ist; einen Start in der Runtime, der auch Startformular und Menüband zeigt, ersetzt das nicht.
- Das Symbol wird in der Datenbank gespeichert.
AppIconwird aus der ausgelieferten Kopie entfernt – es würde eine Datei des Build-Rechners nennen –, undEnsureApplicationschreibt das Symbol beim ersten Start als Datei auf den Computer des Benutzers; das Symbol wirkt sofort. - Eine ACCDE läuft nur in einem Access ihrer Bitversion;
bitnessim Manifest gibt an, in welchem. Eine Datenbank braucht das registrierte WKL-Release ihrerrequires-Version oder ein neueres (Anwendung mit WKL-Steuerelementen auf Benutzer-PCs verteilen). - Was
deploynicht tut: Es installiert nichts, registriert nichts und richtet keinen vertrauenswürdigen Speicherort ein (tools\deploy\Set-AccessTrustedLocation.ps1). - Kein Schutz. Die gesperrten Optionen halten Benutzer davon ab, versehentlich in den Entwurf zu gelangen; schützen Sie die Daten mit den Rechten des Servers.