Pas facile ça, il faut que ton application puisse s'auto modifier pour qu'elle sache que le programme à déjà été installer avant, une solution c'est d'avoir à l'installation de ton soft la création d'un fichier sur un serveur avec une clé unique.
Il faut ensuite que l'utilisateur ai internet pour aller chercher l'information dans le fichier directement sur le serveur pour être lancer mais à chaque utilisation par contre.
Tu peux prendre l'adresse mac de la carte réseau, elle est unique à chaque pc. Il faut par contre ne récupérer que les chiffre, mais ça c'est facile à faire.
Donc je résume :
Je lance l'installation de ton soft :
1- il récupère l'adresse mac de ma carte réseau.
2- avec le mot de passe que tu donnes tu fais un algorithme quelconque, par exemple mot de passe X adresse mac.
3- le soft envoi ce résultat sur un serveur avec en plus le mot de passe pour savoir qui est le client quand même

Tu peux faire une base de données par exemple.
Quand l'utilisateur va vouloir re-lancer le soft,
1- il va aller lire dans la B de D le résultat du calcul.
2- reprendre l'adresse mac du pc.
3- refaire le calcul.
4- si c'est le bon résultat il se lance, sinon il demande une activation.
Inconvenant il faut absolument le net.

Je n'ai jamais vu de logiciel sachant s'être installer après une réinstallation de Windows.
Même les shareware après une période d'évaluation gratuite, quand tu réinstalles Windows il se relance et c'est reparti, sauf si le soft à une date de validation, la il suffit juste de changer la date du pc pour qu'il re-fonctionne.