8. Lizenz und Demomodus #
← FAQ und Fehlerbehebung · Inhalt
PBToolboxAI ist eine kommerzielle Bibliothek. Die Lizenzprüfung erfolgt vollständig offline: keine Verbindung, keine Aktivierung, kein Serveraufruf. Ein signierter Schlüssel wird beim Start gesetzt, die DLL prüft ihn lokal.
8.1 Die drei Schlüsseltypen #
Die Schlüssel sind kumulierbar: Rufen Sie PBT_SetLicense so oft wie nötig auf, die Bibliothek behält einen Schlüssel je Typ.
| Typ | Inhaber | Schaltet frei |
|---|---|---|
dev | Namentlich, ein Entwickler | Nur in der PowerBuilder-IDE |
runtime | Ihr Unternehmen, eingebettet in die ausgelieferte Anwendung | Nur in einer kompilierten ausführbaren Datei |
demo | Mit der Demoanwendung geliefert | Die Demoanwendung, in der IDE, bis zum Ablauf |
Ein Projekt benötigt also beide: einen dev-Platz je Entwickler und einen runtime-Schlüssel für die Anwendung, die Sie an Ihre Kunden ausliefern.
- Ein
dev-Schlüssel, der in einer ausführbaren Datei landet, schaltet nichts frei. - Ein
runtime-Schlüssel gewährt keinen Entwicklungsplatz. - Ihre Endkunden müssen nichts eingeben und nichts aktivieren: Der
runtime-Schlüssel steckt in Ihrem Code.
Die Erkennung „IDE oder ausführbare Datei“ wird von der DLL selbst vorgenommen (Prozessname, geladene Design-Time-Module), nicht von PowerBuilder-Code — sie lässt sich aus Ihren Quellen nicht umgehen.
8.2 Den Schlüssel setzen #
Nur eines ist zu tun, vor dem Öffnen des ersten Fensters:
// Deklaration - Anwendungsobjekt, "Local External Functions"
Function long PBT_SetLicense (string as_client, string as_key) Library "pbtoolboxai.dll"
// Event open des Anwendungsobjekts
long ll_rc
string ls_cle_dev
// Der RUNTIME-Schluessel gehoert in den Code : er MUSS in die EXE.
ll_rc = PBT_SetLicense(gs_titulaire, gs_cle_runtime)
// Der DEV-Schluessel wird vom Rechner gelesen : er schaltet nur die IDE frei,
// im Code wuerde er in jede Kopie wandern, ohne dort etwas zu nuetzen.
ls_cle_dev = ProfileString("pbtoolboxai.ini", "license", "dev", "")
if ls_cle_dev <> "" then ll_rc = PBT_SetLicense(gs_titulaire, ls_cle_dev)
Open(w_principale)
Der Schlüssel wird über die DLL-Funktion gesetzt, nie über eine Komponentenmethode: Er gilt für den gesamten Prozess und muss gesetzt werden, bevor irgendeine Komponente existiert. Aus demselben Grund verlangt
PBT_LicenseStatuskein Handle.
Der Inhaber wird im Klartext als erstes Argument übergeben: der Name (oder die E-Mail-Adresse), auf den die Lizenz ausgestellt wurde, und er muss mit dem im signierten Schlüssel übereinstimmen. Ein Schlüssel kann also nicht weitergegeben werden, ohne den Namen des Käufers mitzugeben.
| Rückgabe | Bedeutung |
|---|---|
0 | Schlüssel gültig und übernommen |
-1 | Ungültiges Schlüsselformat |
-2 | Ungültige Signatur (Schlüssel verändert oder fremd) |
-3 | Wartung abgelaufen für diese Version der Bibliothek (siehe 8.5) |
-4 | demo-Schlüssel abgelaufen |
-5 | Der übergebene Inhaber stimmt nicht mit dem des Schlüssels überein |
💡 Welcher Schlüssel gehört wohin. Der
runtime-Schlüssel gehört in den Code: er muss in der ausgelieferten ausführbaren Datei landen. Derdev-Schlüssel nicht — er schaltet nur die IDE frei, in einer EXE ist er also nutzlos und reist trotzdem mit, samt Ihrem Firmennamen. Sein Platz ist eine Dateipbtoolboxai.inineben der IDE oder ein Registry-Wert.
Den Schlüssel nach der Erstellung einer Komponente zu setzen, funktioniert ebenfalls: Bereits geöffnete Komponenten werden sofort freigeschaltet. Am einfachsten bleibt jedoch das Event open der Anwendung.
💡 Bewahren Sie den Schlüssel in einer Konstanten oder einer Ressource Ihrer Anwendung auf. Er ist signiert: Er enthält kein verwertbares Geheimnis und kann nicht verändert werden, ohne seine Signatur ungültig zu machen.
8.3 Den Lizenzzustand prüfen #
// Deklaration
Function long PBT_LicenseStatus (ref string as_json, long al_len) Library "pbtoolboxai.dll"
string ls_statut
ls_statut = Space(1024)
PBT_LicenseStatus(ls_statut, 1024)
// -> {"licensed":true,"ide":false,"keys":{...},"reason":""}
Nützlich in der Integrationsphase, um zu prüfen, ob ein Schlüssel berücksichtigt wird, oder um einen Start in Ihrem Anwendungsprotokoll festzuhalten.
8.4 Der Demomodus #
Ohne gültigen Schlüssel — oder mit einem Schlüssel, der nicht zum Kontext passt (etwa ein dev-Schlüssel in einer Exe) — läuft die Bibliothek im Demomodus: Alles ist nutzbar, alles ist sichtbar, aber mit Grenzen — außer den vier Komponenten der Community-Edition, die gleich darunter beschrieben sind und nie eingeschränkt werden.
Vier Komponenten bleiben kostenlos #
Die Community-Edition muss nicht eingerichtet werden: ganz ohne Schlüssel laufen vier Komponenten ohne Abzeichen und ohne Grenze, zeitlich unbegrenzt.
| Komponente | Was sie bringt |
|---|---|
| statictext | Beschriftung mit Auszeichnung: fett, Farben, Links, Aufzählungen, klappbare Blöcke |
| messagebox | Thematisierter modaler Dialog mit frei wählbaren Schaltflächen |
| toaster | Benachrichtigungen in der Bildschirmecke, mit Titel, Bild und Aktionen |
| webbrowser | WebView2-Browser, eingebettet in ein PowerBuilder-Fenster |
Die Wahl ist bewusst: Es sind die vier, denen man zuerst begegnet, sie tragen kein eigenes Datenmodell, und sie genügen, um auf einem gesperrten Rechner zu beweisen, dass die Laufzeitumgebung sich verteilen lässt — das eigentliche Hindernis vor jedem Kauf.
Die Liste lebt in der DLL. PBT_LicenseStatus gibt sie unverändert unter "free" zurück: Ihre Anwendung kann also ansagen, worauf sie ohne Schlüssel Anspruch hat, statt es Komponente für Komponente zu entdecken.
Ein gültiger Schlüssel hat immer Vorrang: bei diesen vier Komponenten wie bei allen anderen stellt er Ihren Namen und Ihre Edition wieder her.
Das Abzeichen #
Jede Komponente zeigt ein Abzeichen „PBToolboxAI — DEMO“, das nicht ausgeblendet werden kann.
Die funktionalen Grenzen #
| Komponente | Grenze im Demomodus |
|---|---|
| tab | Höchstens 3 Seiten |
| ribbon | Höchstens 2 Registerkarten |
| toolbar | 6 angezeigte Items über alle Leisten hinweg |
| tilesbox | 8 angezeigte Kacheln |
| Alle anderen | Nur das Abzeichen — keine funktionale Grenze |
Diese Grenzen gelten für die Darstellung: Nichts schlägt fehl, die Anzeige wird abgeschnitten. Sie können daher jede Komponente wirklich bewerten, mit Ihren eigenen Daten, bevor Sie kaufen.
Das Setzen eines gültigen Schlüssels hebt alle diese Grenzen sofort auf und entfernt das Abzeichen, ohne die Anwendung neu zu starten.
8.5 Unbefristet + Wartung #
Die Lizenz ist unbefristet: Die von Ihrem Wartungszeitraum abgedeckten Versionen funktionieren für immer, auch nach dessen Ablauf.
Konkret trägt der Schlüssel ein Wartungsenddatum, das mit dem Erstellungsdatum der DLL verglichen wird:
- eine Version der Bibliothek, die während Ihrer Wartung veröffentlicht wurde, ist dauerhaft freigeschaltet;
- eine nach dem Ablauf veröffentlichte Version liefert
-3zurück: Erneuern Sie die Wartung, um darauf zuzugreifen; - Ihre bereits ausgelieferten Anwendungen sind niemals betroffen: Sie enthalten die Version, die sie immer verwendet haben.
8.6 Häufige Fragen #
Wird mein Schlüssel online geprüft? Nein. Kein Netzwerk, niemals. Die Prüfung ist eine RSA-Signatur, die lokal von Windows validiert wird.
Brauchen meine Kunden einen Schlüssel? Nein. Ihr runtime-Schlüssel steckt in Ihrer Anwendung; sie bekommen von der Lizenz nie etwas zu sehen.
Was passiert, wenn ich PBT_SetLicense in der Produktion vergesse? Die Anwendung funktioniert, aber jede Komponente zeigt das Demo-Abzeichen und die Grenzen aus der obigen Tabelle gelten. Das ist der erste Punkt, den Sie prüfen sollten, wenn bei einem Kunden ein Abzeichen erscheint.
Kann ich einen dev-Schlüssel und einen runtime-Schlüssel im selben Code setzen? Ja — das ist sogar der Regelfall: Der dev-Schlüssel greift, wenn Sie aus der IDE ausführen, der runtime-Schlüssel, wenn Sie die Exe ausführen. Jeder wird im jeweils anderen Kontext ignoriert.
Das Abzeichen erscheint, obwohl der Schlüssel gesetzt ist. Drei Ursachen, nach Häufigkeit geordnet: (1) ein dev-Schlüssel, während Sie eine kompilierte Exe ausführen, oder umgekehrt; (2) der Rückgabewert von PBT_SetLicense wurde nicht geprüft — vergewissern Sie sich, dass er 0 lautet; (3) Wartung abgelaufen für die installierte DLL-Version (Rückgabe -3). PBT_LicenseStatus klärt das in einer Zeile.
Ein Schlüssel ist personengebunden. Ein dev-Schlüssel ist an einen Entwickler gebunden, ein runtime-Schlüssel an Ihr Unternehmen. Geben Sie sie nicht außerhalb Ihres Teams weiter.