Ja proponuję rozwiązanie na chama, każdy żeby włączyć program będzie musiał mieć chwilowe połączenie z internetem i poczekać na autoryzacje.
I wyobrażam sobie to tak:
program jeżeli nie ma na komputerze zapisanego swojego klucza (np w rejestrze) to łączy się z serwerem i podaje mu swój numer seryjny dysku, np MAC karty sieciowej i wszystko co się da, skrypcik na serwerze zapisuje dane do bazy danych i idzie zapytanie do admina (ciebie) czy się zgadzasz na takiego usera, ty albo zatwierdzasz albo nie, jeśli zatwierdzisz to user dostaje wygenerowany przez serwer klucz który jest generowany unikalnym algorytmem umieszczonym w jakimś skrypcie na podstawie podanych numerów seryjnych dysku etc., program ten klucz sobie zapisuje gdzieś i już nie chce połączenia z netem ale przy każdym uruchomieniu programu sobie sprawdza lokalnie wygenerowany klucz w/g tych seriali z tym co się pobrało z netu - jeśli się zgadza to uruchamia program, jeżeli nie to trzeba znowu mieć połączenie z netem i czekać na autoryzacje
// dop.
jak sie nie zgadza to Application.ProcessMessages; :)
a czy to nie zbyt brutalne rozwiązanie ? :D