Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   SW lizenzieren: Lizenzkey in Registry eintragen (https://www.delphipraxis.net/100601-sw-lizenzieren-lizenzkey-registry-eintragen.html)

Mike_on_Tour 1. Okt 2007 11:09


SW lizenzieren: Lizenzkey in Registry eintragen
 
Hallo zusammen,

es gibt folgendes Problem:

Während der Installation eines Programms (als Admin) wird die Seriennummer der Festplatte in die Registry unter HKLM eingetragen. Danach ist das Programm als Demoversion nutzbar. Für die Lizenzierung der Software wird aus dem Namen des Anwenders und der Festplatten-Nr. ein Lizenzkey berechnet. Wird die Lizenzierung von einem Benutzer ohne Adminrechten ausgeführt, kommt es zur Fehlermeldung, die besagt, daß nicht auf die Registry (HKLM) zugegriffen werden kann. Ursache ist das Speichern des Lizenzkeys durch die verwendete Fremdkomponente "TmxProtector". Den Registryzugriff auf HKCU zu ändern beseitigt zwar den Fehler, hat aber zur Folge, daß ein anderer Benutzer wieder mit einer Demoversion arbeiten und neu lizenzieren müßte. Wie läßt sich der Lizenzkey nur einmal, für alle Benutzer, ohne Admin-Zugriffsrechte in die Registry eintragen ? Kann man dafür in der Registry den Key HKEY_USERS\.DEFAULT nutzen ?

Mike

Bernhard Geyer 1. Okt 2007 11:17

Re: SW lizenzieren: Lizenzkey in Registry eintragen
 
Das was du willst geht einfach nicht!

Entweder Adminrechte unter HKLM oder mit "normalen" Rechten unter HKCU. KEY_USERS\.DEFAULT wird AFAIK auch Admin-Rechte benötigen.

OldGrumpy 1. Okt 2007 11:53

Re: SW lizenzieren: Lizenzkey in Registry eintragen
 
Jep, auch dort sind standardmässig Adminrechte notwendig. Wir haben das damals so gelöst dass in beiden Zweigen gecheckt wird. Wenn der Admin installiert, dann ists für alle User zugänglich, ansonsten muss jeder User halt selber nochmal ran. Das ist wohl mit die bequemste Variante. Alternative wäre natürlich auch ein Regfile statt eines Registryeintrags möglich, das könnte dann unter AllUsers liegen worauf alle User Zugriff haben.

blackdrake 1. Okt 2007 12:02

Re: SW lizenzieren: Lizenzkey in Registry eintragen
 
Hallo.

Wieso HKEY_USERS/.DEFAULT? Bei HKEY_CURRENT_USER (HKCU) hast du imho vollen Schreibzugriff für dein Programm.

Gruß
blackdrake

Mike_on_Tour 1. Okt 2007 12:35

Re: SW lizenzieren: Lizenzkey in Registry eintragen
 
Danke erst mal für die ehrlichen Antworten.
Zitat:

Zitat von Bernhard Geyer
Das was du willst geht einfach nicht!
Entweder Adminrechte unter HKLM oder mit "normalen" Rechten unter HKCU. KEY_USERS\.DEFAULT wird AFAIK auch Admin-Rechte benötigen.

Das das nicht so einfach geht, ist mir schon klar. Vielleicht muß doch zwingend der Admin die Lizenzierung machen. Dann könnte ich doch Einträge in HKEY_USERS\.DEFAULT machen und jeder Benutzer kann damit arbeiten.

Zitat:

Zitat von OldGrumpy
... Alternative wäre natürlich auch ein Regfile statt eines Registryeintrags möglich, das könnte dann unter AllUsers liegen worauf alle User Zugriff haben.

So ein Regfile wäre eine Überlegung. Gibts dazu (hier im DP) ein paar Infos dazu ? Habe kurzfristig nichts gefunden.

Zitat:

Zitat von blackdrake
Wieso HKEY_USERS/.DEFAULT? Bei HKEY_CURRENT_USER (HKCU) hast du imho vollen Schreibzugriff für dein Programm.

HKEY_USERS/.DEFAULT deshalb, weil diese Einträge bei einem neuen (bisher nicht vorhandenen) Nutzer nach HKCU kopiert werden (so die Theorie).

Mike

Christian Seehase 1. Okt 2007 12:47

Re: SW lizenzieren: Lizenzkey in Registry eintragen
 
Moin Mike,

Zitat:

Zitat von Mike_on_Tour
Dann könnte ich doch Einträge in HKEY_USERS\.DEFAULT machen und jeder Benutzer kann damit arbeiten.

Nein, das betrifft nur die, die sich neu anmelden, bei denen, die schon ein Profil auf dem Rechner haben, wird das Default-Profil nicht verarbeitet.

Was mir bei der ganzen Sache ein Rätsel ist:
Wozu benötigt eine Demo-Version eine Lizensierung?

Mike_on_Tour 1. Okt 2007 13:12

Re: SW lizenzieren: Lizenzkey in Registry eintragen
 
Zitat:

Zitat von Christian Seehase
Nein, das betrifft nur die, die sich neu anmelden, ...

Ja, da habe ich wohl das Kleingedruckte übersehen.

Zitat:

Zitat von Christian Seehase
Wozu benötigt eine Demo-Version eine Lizensierung?

Nach der Lizenzierung wird aus der Demoversion eine Vollversion mit oder ohne Freischaltung zusätzlicher Module. Ich habe das nicht direkt angegeben, da das primär nichts mit dem Problem zu tun hat und ich ich es auch logisch fand.

Wenn ich die bisherigen Antworten so nehme, könnte die Lösung so aussehen:
  • Installation durch Admin
  • Speichern der Festplattennummer in Registry HKLM
  • Lizenzierung nach Programmstart nur durch Admin
  • Lizenzkey entweder in Registry unter HKLM speichern (Benutzer können hier ja lesend zugreifen) oder als Regfile unter "AllUsers" speichern
Oder ?

Mike

blackdrake 1. Okt 2007 15:56

Re: SW lizenzieren: Lizenzkey in Registry eintragen
 
Hallo.

Ich würde dir ein Regfile innerhalb des Programmverzeichnisses empfehlen. Da müsste dein Programm Schreibzugriff haben (ob das bei Vista auch so ist, weiß ich nicht). Eine Freischaltung des Programmes sollte auf jeden Fall auch von einem normalen Benutzer durchführbar sein. Du könntest die Lizenzdatei auch bei "C:\Dokumente und Einstellungen\(Benutzername)\" speichern, also unter Anwendungsdaten oder direkt unter "Dokumente und Einstellungen", möglichst aber nicht in "Eigene Dateien".

Wie du diese Datei mit deiner Lizenz-VCL oder deiner eigenen Funktion anlegst/strukturierst, weiß ich nicht. Es ist recht schwer, einen einigermaßen sicheren Mechanismus zu entwickeln. Was ist z.B. wenn die Registrierungsdatei oder der Registry-Schlüssel kopiert werden? Sind diese zumindestens mit einem verschlüsselten Benutzernamen oder einem Hardware-Schlüssel versehen? Wenn du bereits eine sichere VCL hast, müsstest du dort nur die Lizenzinfo in einer Textdatei schreiben und lesen.

Gruß
blackdrake

Mike_on_Tour 1. Okt 2007 16:55

Re: SW lizenzieren: Lizenzkey in Registry eintragen
 
Zitat:

Zitat von blackdrake"
Ich würde dir ein Regfile innerhalb des Programmverzeichnisses empfehlen. Da müsste dein Programm Schreibzugriff haben (ob das bei Vista auch so ist, weiß ich nicht).

Bisher waren ja die Programmdaten im Programmverzeichnis gespeichert. Das Problem ist nur nicht gleich aufgetreten, weil die meisten Nutzer als Admin gearbeitet haben. Als Nicht-Admin gibt es keine Schreibzugriffe auf die Registry (HKLM) wie bisher und auch das Programmverzeichnis ist "plötzlich" gesperrt. Unter Vista wird das Problem sicher noch deutlicher werden.

Zitat:

Zitat von blackdrake
Eine Freischaltung des Programmes sollte auf jeden Fall auch von einem normalen Benutzer durchführbar sein. Du könntest die Lizenzdatei auch bei "C:\Dokumente und Einstellungen\(Benutzername)\" speichern, also unter Anwendungsdaten oder direkt unter "Dokumente und Einstellungen", möglichst aber nicht in "Eigene Dateien".

Genau da ist ja der Haken. Alles unter dem Benutzeraccount zu speichern, also Registry HKCU und "Dokumente und Einstellungen ...". Das führt aber dazu, daß jeder Benutzer eine Lizenzierung machen müßte. Das ist natürlich nicht so toll. Es gibt auch keine benutzerdefinierten Einstellungen, sondern einfach nur ein paar Werte für Timer und Importverzeichnisse. Prinzipiell müßte es ja funktionieren, alle Einstellungen unter "Dokumente und Einstellungen\AllUsers..." zu speichern. Als Nicht-Admin kann man die Daten zwar lesen, aber nicht schreiben (Dateibesitzrechte liegen beim Admin). Also geht das auch nicht. Wenn es schon wegen einer kleinen Datei (Ini, Regfile) soviel "Stress" gibt, was soll dann erst mit der Datenbank werden.

Ich überlege jetzt, alles unter "C:\Programme\Gemeinsame Dateien" zu speichern. Der Ordner sollte ja frei zugänglich sein für alle Nutzer, also auch für Nicht-Admins. Oder ?

Zitat:

Zitat von blackdrake
... Was ist z.B. wenn die Registrierungsdatei oder der Registry-Schlüssel kopiert werden? Sind diese zumindestens mit einem verschlüsselten Benutzernamen oder einem Hardware-Schlüssel versehen?

Ja, es ist alles verschlüsselt.

Mike

Christian Seehase 1. Okt 2007 19:30

Re: SW lizenzieren: Lizenzkey in Registry eintragen
 
Moin Mike,

Zitat:

Zitat von Mike_on_Tour
Wenn ich die bisherigen Antworten so nehme, könnte die Lösung so aussehen:
  • Installation durch Admin
  • Speichern der Festplattennummer in Registry HKLM
  • Lizenzierung nach Programmstart nur durch Admin
  • Lizenzkey entweder in Registry unter HKLM speichern (Benutzer können hier ja lesend zugreifen) oder als Regfile unter "AllUsers" speichern
Oder ?

Grundsätzlich: Ja.
Wobei eine Demo-(Test-)Version wohl meist auf Testrechnern installiert werden würde.
Soll die Software in Unternehmen eingesetzt werden, und das womöglich in grösserer Stückzahl, kann ich Dir aber auch sagen, das Du Dir mit einer Hardwareverdongelung keine Freunde machen wirst, da das manuelle Eingriffe je Installation bedeutet. So etwas wie eine Enterprise-Lizense solltest Du auf jeden Fall auch ermöglichen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz