vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Allgemein   |   VB-Versionen: VB5, VB615.03.04
Trial-Version der eigenen Anwendung erstellen

Wer ein Sharewareprogramm schreibt, möchte dafür in aller Regel auch die Registrierungsgebühr kassieren. Es stellt sich also die Überlegung, wie man das Programm nach dem Testzeitraum einschränken oder sogar "unbrauchbar" machen kann. Dieser Workshop zeigt eine der vielen Möglichkeiten, aus der eigenen Anwendung eine Trial-Version zu machen.

Autor:  Marcus WoidaBewertung:     [ Jetzt bewerten ]Views:  36.832 

Wer ein Sharewareprogramm schreibt, möchte dafür in aller Regel auch die Registrierungsgebühr kassieren. Es stellt sich also die Überlegung, wie man das Programm nach dem Testzeitraum einschränken oder sogar "unbrauchbar" machen kann. Dieser Workshop zeigt eine der vielen Möglichkeiten, aus der eigenen Anwendung eine Trial-Version zu machen.

Um ein Programm sharewaretauglich zu machen, sollte man folgende Punkte in seine Überlegungen einbeziehen:

  • Wann wurde das Programm installiert?
  • War es schon einmal installiert?
  • Ist es registriert?
  • Was passiert, wenn es als Shareware-Version läuft?

Dieser Workshop zeigt, wie man das Vorhaben realisieren kann. Und damit das Wissen, ob ein Programm als Sharewareversion läuft, auch einen Freund bekommt, wird gleich noch gezeigt, wie man sich einen Registrierungsschlüssel bastelt.

Start des Programms

Es bringt nichts, beim Start des Programms lediglich zu prüfen, ob der Testzeitraum abgelaufen ist. Wird das Programm nach dem Testzeitraum deinstalliert und wieder installiert, ist es wieder offen.

Um zu prüfen, ob das Programm bereits installiert war, hinterlegt man beim Start das Installationsdatum in verschlüsselter Form in der Registry.

Bevor wir uns aber den Umstand machen, jedes Mal zu prüfen, ob der Testzeitraum abgelaufen ist, bietet es sich an, erst einmal nachzuschauen, ob das Programm bereits registriert ist:

Option Explicit
Public bIsReg As Boolean
Private Sub Main()
  If GetSetting("MyApp", "Settings", "IsReg") = "" Then
    bIsReg = False
    Call Trial
  Else
    bIsReg = True
    frmMain.Show
  End If
End Sub
Private Sub Trial()
  Dim InstallDat As Long
 
  If GetSetting("MyApp", "Settings", "Install") = "" Then
    InstallDat = CLng(Now)
    SaveSetting "MyApp", "Settings", "Install", InstallDat
  End If
End Sub

Zwar kann man die Werte beliebig in der Registry ablegen. Allerdings bringt es nichts, die Werte unter "HKEY_CURRENT_USER\Software\MyApp" oder "HKEY_LOCAL_MACHINE\Software\MyApp" abzulegen. Wer die Registry kennt, sucht hier zuerst.

Was gebraucht wird, ist also ein ruhiges Eckchen, wo man die Werte versteckt. Der Einfachheit halber bietet sich SaveSetting und GetSetting an. Die Funktionen schreiben und lesen im Pfad "HKEY_CURRENT_USER\Software\VB and VBA Program Settings".

Stellt sich immer noch das Problem mit dem Anwendungsnamen. "MyApp" ist recht unpassend, weil über die Suchfunktion zu finden. Also folgen wir einer Microsoft Tradition: "Buxtehude" liest sich gut.

So, jetzt wissen wir zwar ob und wann das Programm installiert wurde. Aber was machen wir damit? Ganz einfach: Wir prüfen, ob der Testzeitraum abgelaufen ist.

Testzeitraum prüfen

Um den Testzeitraum zu prüfen, muss das Sub "Trial" noch modifiziert werden:

Private Sub Trial()
  Dim InstallDat As Long
 
  If GetSetting("MyApp", "Settings", "Install") = "" Then
    InstallDat = CLng(Now)
    SaveSetting "MyApp", "Settings", "Install", InstallDat
  End If
 
  If IsTrial = False Then
    MsgBox "Der Testzeitraum ist abgelaufen.", vbInformation Or vbOKOnly
    frmRegister.Show
  Else
    frmMain.Show
  End If
End Sub

Wie zu sehen ist, wird mit der Funktion IsTrial geprüft, ob das Programm innerhalb des Testzeitraums läuft.

Die Funktion IsTrial soll nun erklärt werden:

Private Function IsTrial() As Boolean
  Dim Install As Date, EndTrial As Date
 
  Install = GetSetting("MyApp", "Settings", "Install")
 
  EndTrial = DateAdd("d", 30, Install)
  If EndTrial > Now Then IsTrial = True
End Function

Wie zu sehen ist, wird Install dieses Mal als Date deklariert. Das bewirkt, dass der Wert beim Einlesen wieder in ein Datum entschlüsselt wird. Mit DateAdd wird dann der Testzeitraum (im Beispiel 30 Tage) zum Installationsdatum dazugezählt und in EndTrial gespeichert.

Jetzt wird mit If EndTrial > Now geprüft, ob das Ende des Testzeitraums in der Zukunft liegt. Ist das nicht der Fall, wird das Programm beendet.

Sicher ist Ihnen aufgefallen, dass EndTrial und Now nicht mit ">=" verglichen werden. Das hat folgenden Hintergrund: Install = GetSetting("MyApp", "Settings", "Install") liefert nicht das Installationsdatum, sondern das Installationsdatum + 1 Tag.

Beispiel:
Installationsdatum = 16.01.2004
Install = 17.01.2004

Wenn jetzt EndTrial = Now ist, wird False zurückgegeben. Damit gleicht das Problem die falsche Datumsberechnung wieder aus. Nachdem man nun weiß, dass das Programm in der Sharewareversion läuft, kann man auf Basis von bIsReg = False im Programm die eine oder andere Funktion deaktivieren.

Programm beenden

Ihnen ist sicher aufgefallen, dass frmRegister nur angezeigt wird, wenn der Testzeitraum abgelaufen ist.

Es bietet sich jedoch an, das Formular immer anzuzeigen, wenn das Programm beendet wird. Das erreicht man, wenn man im Form_Unload-Ergeignis des Hauptfensters folgenden Code notiert:

Private Sub Form_Unload(Cancel As Integer)
  If bIsReg = False Then frmRegister.Show
  Set frmMain = Nothing
End Sub

Registrierungsschlüssel erstellen

Wenn man sich viel Arbeit machen möchte, kompiliert man eine EXE, die die Shareware-Einschränkungen hat und eine ohne diese Einschränkungen, die man dann dem User schickt. Viel Spaß bei den Updates.

Einfacher ist, wenn man das Programm mittels Registrierungsschlüssel freigeben kann. Je weniger man auf schon vorhandene Komponenten zurückgreift und je mehr man seine Fantasie spielen lässt, um so schwerer ist es, den Code zu knacken. Spaßig wird's, wenn man für jedes Programm einen eigenen, jeweils von einander abweichenden Algorithmus schreibt.

Im folgenden Beispiel soll ein Registrierungsschlüssel basierend auf dem Produkt- und Usernamen generiert werden. Das setzt natürlich voraus, dass ein Produktname eingetragen ist. Dieser kann unter "Projekt / Eigenschaften von <Projekt>" auf der Karte "Erstellen" im Feld "Versionsinformationen / Typ" (in der ListBox ganz unten) eingetragen werden.

Eines vorab: Der Programmcode sollte dem Anwender nicht mitgeteilt werden.

Programm- und Usercode werden wie folgt ermittelt: Die ASCII-Werte jedes Buchstabens von App.Productname bzw. dem übergebenen Usernamen werden miteinander addiert und dann in einen HEX-Wert umgewandelt:

Public Function ProgCode() As String
  Dim lProgCode As Long, i As Integer
 
  For i = 1 To Len(App.ProductName)
    lProgCode = lProgCode + Asc(Mid$(App.ProductName, i, 1))
  Next
 
  ProgCode = Hex(lProgCode)
End Function
Public Function UserCode(UserName As String) As String
  Dim lNameCode As Long, i As Integer
 
  For i = 1 To Len(UserName)
    lNameCode = lNameCode + Asc(Mid$(UserName, i, 1))
  Next i
 
  UserCode = Hex(lNameCode)
End Function

Es bietet sich an, beide Werte in einem eigenen Modul über Funktionen zu ermitteln. So ist alles an einem Platz. Fehlt nur noch der eigentliche Registrierungsschlüssel:

RegKey = ProgCode & UserCode(txtUserName.Text)

KeyGenerator:
Den "KeyGenerator" finden Sie auf der CD im Verzeichnis \html\workshop\source\trial\KeyGen

Registrierungsschlüssel auswerten

Um den Schlüssel für den Anwender zu generieren, schreibt man sich ein kleines Programm, das mit den auf der vorigen Seite gezeigten Funktionen den Schlüssel erstellt. Allerdings muss man hier nicht nur den Usernamen, sondern der Funktion ProgCode auch den Produktnamen mitteilen. Heraus kommt der Registrierungsschlüssel, den man dem Kunden schickt.

Was macht man nun mit dem neu gewonnenen Wissen? Genau, man wertet es aus. Dazu erstellt man eine Form mit zwei Labels, zwei Textfeldern und einem CommandButton. Die Label dienen zur Beschriftung der Textfelder, z.B. "Name" und "Registrierungsschlüssel".

Mit einem Klick auf den CommandButton gleicht man die Eingabe des Users mit dem RegKey ab. Bei Erfolg ist das Programm registriert.

Private Sub cmdCheckReg_Click()
  If ProgCode & UserCode(txtUserName.Text) = txtRegKey.Text Then
    bIsReg = True
    SaveSetting "MyApp", "Settings", "IsReg", "yes"
    MsgBox "Programm wurde registriert", vbInformation Or vbOKOnly
  Else
    MsgBox "Programm wurde nicht registriert", vbExclamation Or vbOKOnly
  End If
 
  Unload Me
End Sub

Schlussbemerkung

Die hier vorgestellten Methoden sollen nur einen Anhaltspunkt liefern, wie man eine Shareware realisieren kann. Dem geübten Auge wird auffallen, dass die Beispiele nicht besonders sicher sind.

Generell gilt, dass man alles, was man abschließen kann, auch wieder aufschließen kann. Selbst PGP ist knackbar - wenn man genug Zeit investiert.

Noch eine persönliche Anmerkung zu Shareware: Einschränkungen in Shareware sind Glaubenssachen. Die einen sind strikt dagegen, weil für den Anwender wichtige Funktionen deaktiviert sind und ihn deshalb vom Kauf abhalten. Andere deaktivieren so viel, dass man gerade mal das Hauptfenster öffnen kann (hab ich tatsächlich schon erlebt). Wie Sie es halten, müssen Sie selbst entscheiden. Mit der Devise "Weniger ist mehr" liegt man aber in den seltensten Fällen daneben.

Dieser Workshop wurde bereits 36.832 mal aufgerufen.

Über diesen Workshop im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Workshop, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Workshops finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel