Quizfrage: Wenn ein Programm das nicht in AppData oder im eigenen Programmordner speichert, wo denn dann?
Da da nur eine sinnvolle Möglichkeit übrig bleibt, wird der User wohl als nächstes in der Registry nachschauen und den angelegten Key auf 01.01.3456 umstellen...
Ob Datei oder Registry, ist ziemlich egal...
PS:
- Du hast das Ablaufdatum hardgecodet und fragst Date() ab.
- Damit prüfst du, ob abgelaufen oder nicht. -> Ergebnis in die Registry (2016 = true, alles andere = false)
- Dann liest du den Wert von dort wieder aus.
- If gelesener Wert = 2016 -> Abbruch
Der Registryeintrag hat hier überhaupt keinen Nutzen.
Wenn du einen Wert speicherst, dann das Ergebnis von Date() des ersten Programmstarts und nicht das momentane Datum, das du ohnehin per Date() zur Verfügung hast.
Wenn du die unformatierten Timestamps speicherst und abgleichst (ohne FormatDate() dazwischen), dann funktionieren auch die Abfragen richtig
Ungefähr so wäre es besser (ungetesteter Pseudo-Code)
Code: Alles auswählen
AktuellesDatum.i = Date()
AnfangsDatum.i = GetInitialLaunchDate() ;Testphasenbeginn abfragen
Abgelaufen.i = GetIsExpired() ;Wird bei einmalig erkanntem Ablauf auf True gesetzt, damit, wenn der User die Uhr ein stückchen zurückdreht, das Programm nicht wieder läuft
If AnfangsDatum = 0 ;Nichts da? -> erster Start!
AnfangsDatum = AktuellesDatum ;Jetzt beginnt die Testphase
SetInitialLaunchDate(AnfangsDatum) ;Testphasenbeginn speichern (registry oder so)
EndIf
If Abgelaufen = #True Or AktuellesDatum > Anfangsdatum + #Testzeit Or AktuellesDatum < Anfangsdatum
SetIsExpired(#True) ; "Dauerhaft" deaktivieren
If OpenWindow(0, 0, 0, 270, 120, "Hinweis", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) ;MessageRequester()?
TextGadget(0, 10, 40, 250, 20, "Die Testversion des Programms ist abgelaufen!", #PB_Text_Center)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Endif
End ;wichtig, dass das End hier nach dem IF steht! Sonst geht dein Programm trotzdem auf, sollte OpenWindow() versagen... :mrgreen:
Endif