Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Programm darf nur n Mal Starten in n Stunden
wisher78
myCSharp.de - Member

Avatar #avatar-3332.jpg


Dabei seit:
Beiträge: 102
Herkunft: Taunus

Themenstarter:

Programm darf nur n Mal Starten in n Stunden

beantworten | zitieren | melden

Hallo Zusammen,

im Rahmen eines Lizensierungskonzepts muss es einem Programm ohne gültige Lizenz trotzdem möglich sein, dass es nach dem ersten Start noch 2 Mal innerhalb von 24 Stunden startbar ist.

Die Idee ist, Anzahl der bereits getätigten Start und den Zeitpunkt des ersten Starts verschlüsselt in der Registry abzulegen. Als Problem sehe ich jetzt, dass man für das Schreiben in HKLM Adminrechte benötigt. Und wenn ich die Informationen nach HKEY_CURRENT_USER lege, könnte durch mehrere User die Einschränkung "n Mal in n Stunden" umgangen werden.

Hat Jemand von Euch Ideen wie ich das am geschicktesten löse?

Bitte keine Philosophiedebatte über die Art der Restriktion. Das Konzept ist so zwischen der GF und dem Kunden vereinbart und muss umgesetzt werden. :-/

Vielen Dank
private Nachricht | Beiträge des Benutzers
UncleBens
myCSharp.de - Member



Dabei seit:
Beiträge: 138

beantworten | zitieren | melden

Dann wirst Du IMHO um einen zentralen Lizenzierungsserver nicht herumkommen, an den Du Deinen Lizenzschlüssel übermittelst, der die gewünschte Prüfung ("Ist eine gültige Lizenz vorhanden? Falls nein, wurde auf diesem Client die Software schon n mal in n Stunden gestartet") durchführt und ein "Du darfst" oder "Du darfst nicht" an den Client zurückliefert.

Wenn Du es lokal auf dem Client speichern willst, stehst Du immer vor dem Problem: entweder Du legst es userbezogen im Profil ab (egal ob Registry oder Dateisystem) - dann gibt es den von Dir beschriebenen Workaround, die Applikation als anderer User zu starten.
Oder Du schreibst es außerhalb des Profils - dann trifft Dich sehr wahrscheinlich die UAC bzw. die fehlenden Administratorrechte.

Beim Lizenzierungsserver musst Du Dir aber natürlich auch wieder eine hochverfügbare Lösung einfallen lassen - denn wenn der ausfällt, ist natürlich Schluss für ALLE ;-)

Ich persönlich würde die Infos wahrscheinlich trotzdem im Userprofile ablegen... den Aufwand, sich x Useraccounts einzurichten und die App immer wieder mit andren Accounts zu starten wird sich kaum einer machen. Das Risiko wäre zumindest für mich eher tragbarer, als versehentlich alle User auszusperren.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von UncleBens am .
private Nachricht | Beiträge des Benutzers
wisher78
myCSharp.de - Member

Avatar #avatar-3332.jpg


Dabei seit:
Beiträge: 102
Herkunft: Taunus

Themenstarter:

beantworten | zitieren | melden

Danke für die Antwort.

Die total sichere Highend Lösung ist nicht von Nöten. Nach dem Fahrradschlossprinzip wollen wir mit überschaubarem Aufwand verhindern, dass das Programm ohne Lizenz ohne Einschränkung frei verwendet werden kann.

Momentan geht die Idee dahin, dass wir die Informationen nicht in die Registry schreiben, sondern in eine verschlüsselte Datei und die im Programmdata Ordner ablegen. Die Datei wird mit Programminstallation dort initial abgelegt. Fehlt sie, startet das Programm nicht. Startet das Programm wird die Information aus der Datei gelesen bzw. geschrieben.
Beschreibbar sollte meines Wissens nach der Programmdata Ordner sein.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16110

beantworten | zitieren | melden

Dann kannst auch direkt das [Tutorial] Konfigurationsmodell im .NET Framework nehmen und die Werte verschlüsselt speichern.
Wäre genauso "sicher" wie eine Datei in ProgramData.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 10083

beantworten | zitieren | melden

Wäre eher noch sicherer, denn ProgramData ist recht einfach zu finden.

Der User-Settings Ordner jedoch etwas trickier.
private Nachricht | Beiträge des Benutzers
witte
myCSharp.de - Member



Dabei seit:
Beiträge: 966

beantworten | zitieren | melden

Weitere Möglichkeit ist das IsolatedStorage. Kann jedoch ebenfalls mit nativen Apps erreicht werden.
private Nachricht | Beiträge des Benutzers
wisher78
myCSharp.de - Member

Avatar #avatar-3332.jpg


Dabei seit:
Beiträge: 102
Herkunft: Taunus

Themenstarter:

beantworten | zitieren | melden

Das "Konfigurationsmodell im .NET Framework" ist dann aber wieder User gebunden und somit könnte ein anderer User das Programm wieder 3 Mal in 24 Stunden starten, so wie ich das sehe.

Ich mache es nun über verschlüsselte Serialisierung und lege die Datei in ProgramData ab. Der Anwender kann mit der Datei in verschlüsseltem Zustand nichts anfangen. Bleibt sowieso noch das Problem, dass er den Zeitstempel seines Rechners zurücksetzen könnte und dann wäre auch die Restriktion der 24h hinfällig. Aber wie gesagt, hier herrscht das Fahrradschlossprinzip. Ein bisschen Sicherheit schützt vor Gelgenheitsdieben. :-)
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von wisher78 am .
private Nachricht | Beiträge des Benutzers
ujr
myCSharp.de - Experte



Dabei seit:
Beiträge: 1770

beantworten | zitieren | melden

Zitat von wisher78
Der Anwender kann mit der Datei in verschlüsseltem Zustand nichts anfangen. Bleibt sowieso noch das Problem, dass er den Zeitstempel seines Rechners zurücksetzen könnte und dann wäre auch die Restriktion der 24h hinfällig.

Es reicht aus, einmalig eine Sicherheitskopie der Datei zu erstellen, und diese vor jedem Start per Batch wiederherzustellen.
private Nachricht | Beiträge des Benutzers
user8744
myCSharp.de - Member



Dabei seit:
Beiträge: 1201

beantworten | zitieren | melden

Unterm Strich benötigst du hier ein Systemwide-Singleton also ein nichts anderes als ein Singleton das nicht nur für die AppDomain gültig ist sondern für die gesamte Workstation. Der Rest ist Handarbeit(Anwendung prüft auf RunningIsLegal) Dafür bietet sich entweder die ROT(COM Running Object Table) oder IPC basiertes Remoting an. Beides hat den Nachteil das es nur im UserContext unterwegs ist. Ein Singleton unter "Run As Admin" wäre für ein Program mit niederen Rechten unerreichbar(vice versa). Das liesse sich mit einem netzwerkbasierten Remoting Protokoll über 127.0.01 allerdings umgehen.

(Es gäbe noch weitere Implementierungsmöglichkeiten wie Shared Memory oder Named Pipes, wie du das realisierst obliegt deiner Entscheidung. Vom Design-Aspekt her wäre besagter systemwide-Singleton aber sicher die sauberste Lösung. Jede gute Suchmaschine wird bei "C# systemwide Singleton" ein gutes Tutorial abliefern. )
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16110

beantworten | zitieren | melden

Zitat von wisher78
Das "Konfigurationsmodell im .NET Framework" ist dann aber wieder User gebunden und somit könnte ein anderer User das Programm wieder 3 Mal in 24 Stunden starten, so wie ich das sehe.
Nö.

How to share custom application configuration settings across projects in .NET
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
wisher78
myCSharp.de - Member

Avatar #avatar-3332.jpg


Dabei seit:
Beiträge: 102
Herkunft: Taunus

Themenstarter:

beantworten | zitieren | melden

Zitat
Es reicht aus, einmalig eine Sicherheitskopie der Datei zu erstellen, und diese vor jedem Start per Batch wiederherzustellen.

Wäre ich vermutlich früher oder später selbst drauf gekommen. (Hoffentlich)
Allerdings trifft dies auf die Konfigurationsdatei ebenfalls zu. Einfach kopieren vor Start und hinter her wieder ersetzen.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von wisher78 am .
private Nachricht | Beiträge des Benutzers