Die Installer-Einstellungen (<name>.msi.json)
Die Installer-Einstellungen beschreiben das Windows-Installer-Paket (MSI), das die IT einmal installiert und das den Starter auf einem Computer ablegt: die Daten des Pakets, ob es je Computer und/oder je Benutzer installiert, die Dialoge, die die installierende Person sieht, und deren Texte je Sprache. Sie liegen neben der Projektdatei und werden nur beim Bau des MSI gelesen; der Starter liest sie nie, wenn er startet, und sie gelangen nie über eine Auslieferung auf die PCs der Benutzer.
Voraussetzungen: WKL Bootstrapper 2.3.0 oder höher.
/checkprüft die Datei,/msi-sourcesschreibt daraus die WiX-Quellen, undtools/New-StarterMsi.ps1baut die Pakete.
Wo die Datei liegt
Die Datei ist nach der Projektdatei benannt und liegt im selben Ordner:
| Projektdatei | Installer-Einstellungen |
|---|---|
demo.bootstrapper.json (die nach demo.exe benannte Projektdatei) | demo.msi.json |
bootstrapper.json | bootstrapper.msi.json |
kasse.json (mit /RUNCFG genannt) | kasse.msi.json |
Pfade in der Datei (Symbol, Lizenz, Banner, Dialogbild, Fragmente) sind relativ zum Ordner der Datei und dürfen ihn nicht
verlassen (..).
Was gebaut wird
tools\New-StarterMsi.ps1 -Project <project file> baut ein Paket je Bereich und Sprache:
| Einstellungen | Pakete |
|---|---|
Keine <name>.msi.json | <product>-<version>.msi: je Computer, Englisch, ohne Dialoge – das Paket der Releases vor 2.3.0 |
| Ein Bereich, eine Sprache | <product>-<version>.msi |
| Mehrere Bereiche oder Sprachen | <product>-<version>-<scope>-<culture>.msi, zum Beispiel Demo-1.2.0-user-de-DE.msi |
Die WiX-Quellen bleiben in <output folder>\<product>.wix (machine.wxs, user.wxs, ui.wxs, eine .wxl je Kultur),
wo sie sich lesen oder von Hand bauen lassen; -SourcesOnly schreibt nur sie. Das Paket je Computer behält den
Upgradecode der vor 2.3.0 gebauten Pakete, sodass ein neues Paket ein altes ersetzt; das Paket je Benutzer hat einen
eigenen Code, sodass sich die beiden nie gegenseitig ersetzen.
Was das Paket tut und was nicht
Das Paket legt den Starter, seine Projektdatei, die INI-Datei der Dialogwerte und das Logo ab und erstellt die Verknüpfungen. Alles je Benutzer – die Anwendung kopieren, Komponenten, vertrauenswürdiger Speicherort, Start – bleibt Aufgabe des Starters bei jedem Start (siehe Der Installer). Werte, die auf einer eigenen Seite eingegeben werden, werden in die INI-Datei neben dem Starter geschrieben, wo die Anwendung sie liest; der Starter selbst wertet sie nicht aus.
Beispiel
{
"format": 1,
"package": { "name": "Demo", "manufacturer": "Contoso", "license": "installer\\license.rtf", "banner": "installer\\banner.png" },
"scopes": [ "machine", "user" ],
"shortcuts": { "startMenu": true, "desktop": true },
"languages": [ "de-DE", "en-US" ],
"texts": { "de-DE": { "WelcomeDlgTitle": "Willkommen bei Demo" } },
"dialogs": { "install": [ "welcome", "license", "folder", "page:server", "verify" ], "exit": { "launch": true } },
"pages": [
{ "id": "server", "title": { "de-DE": "Datendienst", "en-US": "Data service" }, "description": "URL",
"controls": [
{ "type": "text", "label": "Where the application finds its data." },
{ "type": "edit", "property": "SERVER", "label": "URL", "default": "https://", "required": true, "maxLength": 200 },
{ "type": "radio", "property": "MODE", "label": "Mode", "default": "live",
"options": [ { "value": "live", "text": "Live" }, { "value": "test", "text": "Test" } ] }
] }
],
// The values go to demo.ini beside demo.exe, section [Settings].
"ini": { "section": "Settings" },
"fragments": [ "installer\\extra.wxs" ]
}
Kommentare (//) und nachgestellte Kommas sind erlaubt. Unbekannte Schlüssel werden abgelehnt, damit ein falsch
geschriebener Schlüssel nie ein Paket baut, dem stillschweigend ein Dialog fehlt.
Wie die Werte zur Anwendung gelangen
- Jeder Wert einer eigenen Seite wird in die INI-Datei neben dem Starter geschrieben (
demo.ininebendemo.exe, Abschnitt[Settings]):KEY=value, ein Kontrollkästchen als1oder0. Die Anwendung liest die Datei, der Starter nicht. Damit die Anwendung weiß, wo die Datei liegt, übergeben Sie ihren Pfad instart.environmentdes Projekts, zum Beispiel"WKL_SETTINGS": "[StarterDir]\[StarterName].ini"(siehe Die Projektdatei); die Anwendung liestEnviron("WKL_SETTINGS"). - Die IT kann jeden Wert ohne Dialoge in der Befehlszeile setzen, mit dem Namen der Eigenschaft:
msiexec /i Demo-1.2.0-machine-de-DE.msi /qn SERVER=https://data.company.com MODE=test LOGGING=0.0leert ein Kontrollkästchen. - Die Werte werden gespeichert (
HKEY_LOCAL_MACHINEje Computer,HKEY_CURRENT_USERje Benutzer, SchlüsselSoftware\WKL\Starter\<product>\Settings). Ein späteres „Ändern“ aus dem Wartungsdialog oder aus „Apps“ geht von ihnen aus und schreibt die INI-Datei neu; eine Reparatur behält sie. - Reihenfolge: Ein Wert aus der Befehlszeile hat Vorrang vor dem gespeicherten, der gespeicherte vor dem Standardwert.
Texte in mehreren Sprachen
Jeder Text, den die installierende Person liest (title, description, label, hint, text einer Option,
launchText), wird entweder als eine Zeichenfolge geschrieben, die für jede Sprache gilt, oder als Objekt mit einer
Zeichenfolge je Kultur:
"title": "Server"
"title": { "de-DE": "Datendienst", "en-US": "Data service" }
Eine Kultur ohne eigenen Text erhält die Zeichenfolge für jede Sprache, sonst bleibt sie leer.
Schlüssel
| Schlüssel | Standard | Bedeutung |
|---|---|---|
format | - | Immer 1. |
package.name | display.name der Projektdatei | Der Name unter „Apps“ und in den Dialogen. |
package.manufacturer | display.publisher der Projektdatei | Der Herausgeber. |
package.version | Produktversion des Starters | Zwei oder drei Zahlen; Windows Installer vergleicht nur die ersten drei. |
package.upgradeCode | eine Namens-GUID aus Produkt und Bereich | Der Upgradecode; der Standard bleibt über Builds hinweg gleich. Setzen Sie ihn nur, um ein früher gebautes Paket zu übernehmen. |
package.icon | keines | Eine .ico-Datei für den Eintrag unter „Apps“. |
package.license | keine | Eine .rtf-Datei, die der Dialog license zeigt. |
package.banner | das WiX-Banner | .bmp oder .png, 493 × 58 Pixel, oben in den Dialogen. |
package.dialogImage | das WiX-Bild | .bmp oder .png, 493 × 312 Pixel, im Willkommens- und im Abschlussdialog. |
scopes | [ "machine" ] | machine (je Computer, die IT installiert mit Administratorrechten) und/oder user (je Benutzer, ohne). Ein Paket je Bereich, jedes mit eigenem Upgradecode. |
installFolder.machine | [ProgramFilesFolder]WKL\<product> | Der Installationsordner je Computer: [ProgramFilesFolder] oder [CommonAppDataFolder], dann der Pfad darunter. Im Dialog folder kann die installierende Person einen anderen wählen. |
installFolder.user | [LocalAppDataFolder]Programs\WKL\<product> | Der Installationsordner je Benutzer: [LocalAppDataFolder] oder [AppDataFolder], dann der Pfad darunter. |
shortcuts.startMenu | true | Eine Verknüpfung im Startmenü (für alle Benutzer bei je Computer, für den Benutzer bei je Benutzer). |
shortcuts.desktop | false | Eine Verknüpfung auf dem Desktop. |
shortcuts.name | package.name | Der Name der Verknüpfungen. |
languages | [ "en-US" ] | Die Kulturen, für die das Paket gebaut wird: en-US, de-DE, sl-SI, hr-HR, it-IT. Die erste ist der Standard. |
texts | keine | Zu ersetzende Texte der Standarddialoge, je Kultur: die WiX-Lokalisierungs-ID (zum Beispiel WelcomeDlgTitle) und der Text, geschrieben, wie WiX ihn schreibt: [Name] ist eine Eigenschaft, {\WixUI_Font_Title} eine Schriftart. Nur Kulturen aus languages. |
dialogs.install | [ "welcome", "verify" ] | Die Dialoge einer Installation in ihrer Reihenfolge: welcome zuerst, dann license, folder und page:<id> in beliebiger Reihenfolge und verify zuletzt. Fortschritt und Abschlussdialog folgen immer. |
dialogs.changeShowsPages | true | „Ändern“ im Wartungsdialog führt erneut durch die eigenen Seiten, sodass sich deren Werte später ändern lassen. |
dialogs.exit.launch | false | Ein Kontrollkästchen im Abschlussdialog, das nach einer neuen Installation den Starter startet. |
dialogs.exit.launchText | „<name> jetzt starten“ in einem deutschen Paket, sonst „Start <name>“ | Der Text dieses Kontrollkästchens. |
pages | keine | Die eigenen Seiten (siehe unten). |
ini.file | <starter name>.ini | Der Dateiname der INI-Datei neben dem Starter (demo.ini neben demo.exe). |
ini.section | Settings | Der Abschnitt, in den die Werte geschrieben werden. |
fragments | keine | WiX-Quelldateien (.wxs) des Herausgebers, die in den Build einbezogen werden. Jede Komponente, Komponentengruppe, Eigenschaft, UI und benutzerdefinierte Aktion, die ein Fragment direkt in einem <Fragment> definiert, wird referenziert, daher genügt es, die Datei zu nennen. |
Eigene Seiten
Eine eigene Seite erscheint im Rahmen der Standarddialoge (Banner mit Titel und Beschreibung, Zurück/Weiter/Abbrechen) und enthält Steuerelemente von oben nach unten.
| Schlüssel einer Seite | Bedeutung |
|---|---|
id | Buchstaben und Ziffern, beginnend mit einem Buchstaben, eindeutig; angezeigt mit page:<id> in dialogs.install. |
title | Der Titel im Banner (erforderlich). |
description | Die Zeile unter dem Titel. |
controls | Die Steuerelemente (mindestens eines). |
| Schlüssel eines Steuerelements | Bedeutung |
|---|---|
type | text (ein Absatz), edit, checkbox, radio, combo oder folder (ein Pfad, der in ein Eingabefeld getippt wird; der Durchsuchen-Dialog von Windows Installer dient nur dem Installationsordner). |
property | Die öffentliche Eigenschaft, die den Wert enthält: Großbuchstaben, Ziffern und _, beginnend mit einem Buchstaben. Die IT kann sie in der Befehlszeile setzen (msiexec /i demo.msi SERVER=https://...). Nicht für text. |
label | Die Beschriftung über dem Steuerelement; bei text der Absatz selbst; bei checkbox der Text neben dem Kästchen. Klammern werden so angezeigt, wie sie geschrieben sind. |
hint | Ein Hinweis unter dem Steuerelement in kleinerer Schrift. |
default | Der Wert, bevor die installierende Person ihn ändert; bei checkbox 1 oder leer, bei radio und combo eine der Optionen. |
required | true lässt „Weiter“ deaktiviert, solange der Wert leer ist. |
maxLength | Der längste Wert eines edit; 0 für keine Grenze. |
options | Die Auswahlmöglichkeiten von radio und combo: value (gespeichert) und text (angezeigt). |
iniKey | Der Schlüssel in der INI-Datei; leer für den Namen der Eigenschaft. |
Regeln
Der Starter prüft diese Regeln mit /check <name>.msi.json (Exitcode 0 gültig, 11 Probleme; /json listet jedes Problem
für den Bootstrapper Manager auf). Die erste verletzte Regel wird mit dem genannt, was sie verletzt:
scopesnenntmachineund/oderuser, jedes einmal.dialogs.installbeginnt mitwelcomeund endet mitverify, jedes einmal, und zeigt keinen Standarddialog zweimal: Die installierende Person bestätigt, bevor sich etwas ändert.installFolderbeginnt mit einem Standardordner seines Bereichs (siehe die Schlüssel) und hat einen Pfad darunter.- Jede Seite aus
pageswird indialogs.installangezeigt, und jedespage:<id>nennt eine Seite. licenseindialogs.installerfordertpackage.license.- Eigenschaften sind in Großbuchstaben geschrieben und werden einmal verwendet.
- Eine Eigenschaft oder ein INI-Schlüssel, der wie ein Kennwort aussieht (
pass,pwd,secret,token,kennwort), wird abgelehnt: Die INI-Datei neben dem Starter ist für jeden Benutzer des Computers lesbar. Geheimnisse gehören in die eigene Anmeldung der Anwendung. - Der Standard von
radioundcomboist eine der Optionen; der Standard voncheckboxist1oder leer. maxLengthgilt nur füredit.languagesnennt nur Kulturen aus der Liste;textsnur Kulturen auslanguages.package.versionbesteht aus zwei oder drei Zahlen,package.upgradeCodeist eine GUID.- Dateien haben die richtige Endung (
.ico,.rtf,.bmp/.png,.wxs), sind relativ und ohne..; ist die Datei gültig, nennt/checkaußerdem jede Datei, die daneben fehlt. ini.fileist ein bloßer Dateiname, der auf.iniendet;ini.sectionhat keine Klammern.- Unbekannte Schlüssel werden abgelehnt.
- Der Bau der Quellen (
/msi-sources) lehnt eine eigene Seite ab, deren Steuerelemente nicht in jeder Sprache in den Dialog passen; er nennt, wie viele Dialogeinheiten die Seite braucht. Teilen Sie sie auf zwei Seiten auf oder kürzen Sie die Texte.
Verwandte Themen
- Die Projektdatei: die Datei, nach der die Installer-Einstellungen benannt sind.
- Der Installer: was der Starter je Benutzer tut, nachdem das Paket ihn abgelegt hat.
- Starter per MSI verteilen: die Pakete bauen und übergeben.