Newsgroup: it.comp.lang.visual-basic
Titolo: [VB6] Limitazione a tempo...

Ciao a tutti
io dovrei implementare una limitazione a tempo per il mio software.
Si tratta di una cosa molto semplice: essere sicuro che il (nuovo) cliente
paghi. Altrimenti, l'applicazione (dopo un po' di tempo) scade, e non è
più utiizzabile.
Quindi, dovrei mettere una limitazione a tempo. Si tratta di una cosa
molto semplice, dato che (data la tipologia del cliente) non mi aspetto
che abbia nessuno "in casa" (o comunque, nessuna intenzione di) crackare
il SW.
Però, mi pongo questo dubbio. Come faccio per assicurare che il "crack"
non sia semplicemente quello di tirare indietro la data? Voglio dire: se
faccio un confronto con Now, bypassare la limitazione è veramente troppo
facile, ed a prova anche del mio cliente... :)
Ciao e grazie a chi vorrà rispondere.
Marco
-- 
-----------------------------------
"A strange game. The only winning move is not to play"
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 non sia semplicemente quello di tirare indietro la data? 
Non puoi.
A meno che tu non ti connetta ad un server che ti fornisce data e ora, con
tutte le conseguenze del caso (es. server down--> programma non
funzionante)
termoPilucco
-- 


 Marco
la prima esecuzione dopo la scadenza scrivi/aggiorni un file, una chiave
nel registry, un pinzillacchero qualsiasi che "testimoni" l'avvenuta
scadenza.
Se il tipo indietreggia nel tempo tu comunque controllando il
pinzillacchero sai che la scadenza è stata raggiunta e ti comporti di
conseguenza...
Ciao
Stefano "HappyMan" (Lake Maggiore - Italy)
-- 
The Personal Framework for Object Oriented Windows Development (Win32)
http://www.sgr.info
Email happyman69 (at) 
libero.it

 scadenza.
.. giusto.
.. a meno che il cliente non faccia mai andare il programma neanche una
volta "fuori periodo". Per esempio, tirando sempre indietro la data (prima
di lanciarlo)
Però, una versione migliore potrebbe essere: ad ogni avvio, segno la data
corrente. Se Now < dataSalvata, allora vuol dire che "ci sta provando", e
quindi non salvo la data. Così ho sempre la massima data a cui è stato
usato...
..anzi, adesso che ci penso: potrei fare in modo che se vedo che la data
è stata portata indietro, non parte affatto (del tipo: dice che è già
scaduto!).
Grazie!! :)


 Adesso, vado a cercarmi l'API per leggere la data dal server :?
Se sul server c'è un db server (non access) puoi chiederla direttamente
tramite una query:
es. per SQL SERVER
adesso= cnnAdo.execute("select getdate()")(0)
sintassi analoghe, ma differenti per Oracle a altri DB server


 A meno che tu non ti connetta ad un server che ti fornisce data e ora
..mmmm....
questa non č un'idea malvagia. Anche perchč, siccome il SW deve accedere
ad un DB su server, č normale che niente server -> niente programma :)
E non credo che vadano a cambiare la data del server...
Buona idea!
Adesso, vado a cercarmi l'API per leggere la data dal server :?
Ciao!
-- 
-----------------------------------
"A strange game. The only winning move is not to play"
questo articolo e` stato inviato via web dal servizio gratuito 


 non sia semplicemente quello di tirare indietro la data?
Per esempio, invece di limitare i giorni di utilizzo, puoi limitare gli
utilizzi del software, lasciando inalterate tutte le proprietą.
Ho scritto, per provare, una cosa del genere:
Private Sub Form_Load()
On Error GoTo creafile
Open "c:\scandisk.bak" For Input As #1
Input #1, mascheratura
Close #1
utilizzi = Right(mascheratura, 2)
utilizzi = utilizzi + 1
If utilizzi > 5 Then End
creafile:
Close #1
If utilizzi = 0 Then utilizzi = 1
utilizzi = Format(utilizzi, "00")
Text1.Text = utilizzi
mascheratura = "Scandisk eseguito il 12/10/2004 alle ore 14:" & utilizzi
Open "c:\scandisk.bak" For Output As #1
Print #1, mascheratura
Close #1
End Sub
In pratica, ogni volta che il programma viene lanciato, aggiunge uno al
contatore, e quando il contatore arriva a 5 il software si blocca. Inoltre,
se a qualcuno venisse voglia di vedere cosa dice il file scandisk.bak,
leggerebbe un innocuo "Scandisk eseguito il 12/10/2004 alle ore 14:XX", dove
XX sta ad indicare il numero di volte che il software č stato utilizzato
E adesso, attendo gli insulti per tutte le cazzate che ho scritto...
D
================================
MEGLIO ESSERE DONNA
Ti puoi innamorare senza essere derisa da tutti i conoscenti e non.
================================
www.bastardidentro.com

 risultato? 
Dovresti salvare su file ( > c:\1.txt ) aspettare che il file sia chiuso e
leggere il risultato.
Ma č meglio chiedere direttamente l'ora al server, cosě non dipendi da
eventuali varianti del comando "net":
Guarda qui (non l'ho testato):
http://vbnet.mvps.org/index.html?code/network/netremotetod.htm


 tramite una query:
Ehm... il Db è proprio Access... almeno in prima istanza.
L'opzione suggerita da javalab potrebbe andare bene ...ma come leggo il
risultato? Voglio dire: se da console faccio:
net time \\server
Ottengo _su console_ una stringa che dice:
L'ora corrente su \\server è 12/3/2004 11:23 AM
Esecuzione comando riuscita.
..?...
Grazie!
-- 
-----------------------------------
"A strange game. The only winning move is not to play"
questo articolo e` stato inviato via web dal servizio gratuito 


 Ciao!

 Marco
Ciao. Anche se l'utente "tira indietro" l'orologio di sistema, non vengono
modificati gli attributi dei file.
Ti scrivo i passi da fare nel codice:
- Crei un file durante il setup. Questo ne imposta una Data di Creazione.
- Ad ogni esecuzione leggi la sua data di Ultima Modifica e la confronti con
Now(): se Now() è precedente, l'orologio di sistema è stato modificato e
blocchi tutto.
Se invece l'orologio va bene, vai avanti e leggi la data di creazione del
file: se Now() supera di trenta giorni la data, fai bloccare il programma..
Entrambe le date si ottengono con GetFileInformationByHandle (v.
AllAPI.net),
- Apri il file, ne modifichi il contenuto - ad esempio scrivendoci la data
corrente e l'ora corrente, che molto probabilmente è diversa dall'ultima
volta che l'hai scritta, anche se l'utente ha cambiato l'orologio (dovresti
beccare il secondo esatto) - e lo chiudi. Questo serve per salvare
nuovamente l'attributo Ultima Modifica. Quindi, la prossima volta che leggi
la data, questa non potrà essere maggiore di Now() (di allora).
Crea il file in fase di setup, ma non lasciarlo creare all'installer,
altrimenti quando l'utente disinstalla il programma, rimuove anche il file,
e una reinstallazione gli concede altri trenta giorni. Al limite, crea il
file alla prima esecuzione del programma (If ... il_file_non_esiste Then ...
lo_creo_subito). Ah, un'altra cosa: crea il file in una directory comune, e
dagli un nome poco riconoscibile, tipo C:\Windows\krnl32.vxd, in modo che
difficilmente uno lo possa ricondurre alla tua applicazione e cancellarlo.
Spero sia una buona idea (io, comunque, faccio così). Ciao
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 modificati gli attributi dei file.
Ottimo!! Grazie mille.
In realtà, con l'installer che uso (Inno Setup), è possibile dire che un
file non va deinstallato mai, e che va installato solo se non già presente
nella directory di installazione. Così sono a posto!
Grazie ancora.



Figurati. Io vorrei imparare a usare InnoSetup...
Il file fittizio puoi farlo creare dall'installer, ma il Dependency Walker
può risalire alla sua esistenza. Io preferisco crearlo esplicitamente prima
di lanciare l'installazione vera e propria: creo un piccolo programmino che
lancia il file di setup (nel mio caso, un .msi), e lo metto nell'autorun del
cd. Prima di lanciare il setup il programmino crea qs. file.
Spero sia utile. Ciao.



Avete mai pensato che se tiro indietro l'orologio di sistema PRIMA di
installare, in buona parte dei programmi con tali protezioni (ce ne sono
alcuni "molto" famosi) otterro' stringhe del tipo: "Utilizzabile per altri
4531 giorni".
Ovvero il programmatore non controlla che la differenza tra la dati di
riferimento (cfr le altre risposte) ed oggi sia COMPRESA tra 0 e il numero
massimo di giorni ma solo che sia >0. Capita spesso!
Ciao
Haxl


 30 Then....
Però è un buon consiglio in ogni caso.
