Il modo più rapido ed economico è fare qualcosa di simile a quello che hai suggerito: ogni volta che l'utente esegue una funzione principale del tuo programma, diciamo che è "Pack Widgets on Warehouse Floor", registra quella funzione, con un ID dell'individuo installazione del programma, nome utente e forse anche il nome della macchina. Genera l'ID univoco all'installazione, magari un GUID generato durante il processo di installazione.
La ragione per cui dico una funzione principale (o più / tutte le funzioni principali) del programma è che potrebbero avviare il programma una sola volta e si avrà solo una voce per la fatturazione. In questo modo puoi evitare questo scenario e avere anche l'ulteriore vantaggio di vedere quali funzioni del tuo programma quali utenti effettivamente usano di più. Ciò può aiutare il tuo team di vendita e anche il tuo team di sviluppo a scegliere le aree corrette.
Assicurati di dire al cliente che li fatturerai in base all'utilizzo e che il programma deve connettersi a server esterni per funzionare. Tuttavia, è necessario assicurarsi che l'attività del cliente possa continuare a funzionare quando la sua connessione Internet non funziona. Memorizza in cache questi log di utilizzo localmente in una cache crittografata (in modo che i clienti esperti di tecnologia non riescano a sfruttare il tuo sistema facilmente) e poi abbiano un periodo massimo in cui il programma può funzionare senza una connessione Internet, ad esempio una o due settimane. Dopo questo periodo, il programma si rifiuterà di funzionare a meno che non si connetta al tuo server.
Diciamo che il client non può connettersi perché un uragano ha bloccato le comunicazioni per due settimane. In quella situazione davvero brutta, il client digita un codice che gli dai al telefono che viene valutato nel tuo programma ( NON qualcosa come "dammi più tempo", ma un codice corretto che viene controllato da un algoritmo relativamente semplice) e ottengono un periodo di grazia di un'altra settimana. Tuttavia, scoraggio questo in quanto aggiunge complessità inutile. Se sei preoccupato per questo tipo di scenario e hai un ciclo di fatturazione mensile, considera piuttosto di impostare il periodo di cache tre o quattro settimane.