Bonjour Je veux enregistrer la clé d'activation sur l'ordinateur client, chaque fois que nous démarrons notre application, elle devrait vérifier si cet ordinateur possède déjà une clé d'activation selon de votre expérience professionnelle, où puis-je stocker cette clé?Dans le registre, dans la base de données HFCS ou dans le fichier INI. Comment supprimer cette clé de l'ordinateur client, si nécessaire, par programmation? Merci pour votre aide
Bonjour, L'idéal, pour moi, serait d'enregistrer cette clé dans un fichier protégé par mot de passe. La supprimer équivaut à supprimer l'enregistrement ou le mettre à zéro. Sinon tu peux enregistrer ta clé dans la base de registre mais dans les deux cas tu dois accompagner ta clé d'une valeur d'identification propre à la machine sur laquelle est enregistré l'application. De cette façon, l'application ne fonctionnera que sur ce pc. Une piste... fouiller comment récupérer l'UUID du pc.
Merci Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens! pour ton retour L'enregistrement dans la BDD , tu dois lire le fichier contenant la clé et dans ce cas tu dois lancé l'application puis tu vérifié la clé Autre cas il faudrait redonner une clé d'activation si on venait à changer de base de données. n'est ce pas ? Pour le cas du registre, il y a des problèmes avec la version Windows. Cela signifie qu'à chaque nouvelle version, il y a un changement dans les chemins et les propriétés qui ont été supprimées.... A plus
Bonjour, Pour lire la clé que ce soit de la BDD ou de la BDR, il faut d'abord lancer l'application, cela va de soi. Pourquoi changer de BDD? Il me semble qu'une application "vendue" doit être finie (donc structure de BDD finalisée). Pour la BDR, il n'y pas de problèmes. Il faut juste choisir la position de la clé et WD gère bien les seules difficultés qui peuvent survenir entre une appli x86 ou 64bits.
Le fichier, qui contient la clé, est protégé contre la lecture mais n'est pas protégé contre la suppression C'est pour cela je cherche la fonction WD ou une méthode qui permet de cacher ce fichier ? Est ce possible ?
Je sais que tu as écrit : Je veux enregistrer la clé d'activation sur l'ordinateur client Mais bon... Un webservice ne pourrait pas fonctionner pour ton application ? La licence est associé au compte. Tu peux lui permettre de relâcher une licence pour la réinstaller sur un autre poste (ou d'avoir un nombre de poste maximum pour une licence, exemple qu'il installe sur son pc et sur son portable ou téléphone) Tu peux valider si le compte à lancer une application plus d'une fois et le déconnecter si ça arrive. Tu peux avoir un abonnement pour X licence lancer en même temps, ce qui peut être intéressant pour l'utilisateur (selon le type d'application bien sur) Tu peux gérer toute tes applications à partir du même webservice. Si l'utilisateur est pas connecter à internet tu lui permet d'ouvrir l'application X fois hors ligne avant de devoir revalider que ça licence est encore valide. Je sais que c'est un peu plus lourd à faire, mais je crois que ça en vaut la peine de le faire une fois pour toutes tes applications, tu en sera gagnant au bout de la ligne. Tant que tu gère la licence directement la licence sur le poste, tu devra toujours avoir un lien directe avec le client et un support en arrière de ça. Tu dois stocker une clé en quelque part qui est supprimable par l'utilisateur d'une manière ou d'une autre, que ce soit .ini, BDD ou registre, l'utilisateur pourra toujours faire quelque chose qui rendra sont application inutilisable. Si tu récupère un identifiant du poste en cours, il ne pourra pas transférer l'application de poste sans que tu n'intervienne non plus. Je n'ai pas encore trouvé de manière fiable de stocker une licence sur un poste client. Mais bon... je me suis pas trop attarder sur le sujet non plus.
Merci Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens! pour ton retour Oui j'utilise le WS J'ai utilisé également les BDR et .ini mais vu le changement de version de windows et 32bit vers 64 bits ça me pose des problèmes au niveau des chemins et autres Par exemple la position de la clé dans la base de registre (BDR) ne garde pas le même chemin entre les version windows 7,8,10,2012,2016,... Pour le fichier( ini ) on peut avoir des problèmes d'écritures si l'on est dans un répertoire protégé (program files par exemple). Pour l’identifiant de poste je vais baser sur les numéros de série(HDD, carte mère ou BIOS) même après le formatage il garde leurs anciens numéros. Alors j'ai choisi finalement d’utiliser la BDD. C'est pour ça je te demande est ce possible d'interdire la suppression d'un fichier depuis la BDD ?
Tu ne peux pas interdire la suppression de fichier car c'est Windows qui le gère. Par contre j'ai un ami qui réussi à modifier son exe pour qu'il ajoute à la fin de celui-ci un texte, il est aussi possible d'ajouter d'autres fichiers dans l'exe. Tout cela avec les fonctions de windev et les api de Windows. Il n'as bien sur pas voulu me donner son code. En tout cas c'est une piste.
Bonjour, Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens! , si le client supprime le fichier, il perd sa licence. Ce que j'ai fais pour protéger mes programmes: à la première exécution du programme, il cherche le fichier licence qui contient les infos du pc. Si c'est bon, il continue sinon une erreur est générée demandant au client d'envoyer un mail (ce qui est le plus simple) contenant un fichier contenant les infos du pc (cryptés). Je reçois le mail et je génère une clé que je lui envoie. A la prochaine utilisation du programme, il introduit la clé et ça fonctionne. A toi de gérer les clients et leur demandes de licences. Il y a aussi la solution de Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens! qui est moins contraignante pour ton client mais qui nécessite un serveur de ton côté.
Bonjour Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens! si tu utilise WS tu pourra construire un système d'activation online la base de donnée qui stockera les id de tes utilisateur et leurs codes d"activation avec la date sera sur ton serveur de ton webservice créer
Merci de vos retours Donc on ne peut même cacher ce fichier puisque la suppression est impossible ! Une autre question, après le formatage d'un PC est ce que le HDD ou la carte mère ne perdent pas leurs numéros de séries ?
Exactement il existe une classe dans un exemple de windev qui utilise WMI pour avoir tous ça (Serial Consutcteur de HDD, USB, ) carte mére, Carte réseau, ect... salutations
Voici un petit but de code qui reprend assez bien d'infos ... Je ne sais plus qui est l'auteur du code initial, tout ce que je peux vous dire c'est que j'y ai ajouté quelques infos En Espérant que cela puisse être utile au Forum STRUCT_Board_Infos est Structure NumSerieDisque est chaîne NumVolDisque est chaîne NumMacAdresse est chaîne NomManufacturier est chaîne NomCarteMere est chaîne NumSerieCarteMere est chaîne NumSerieBios est chaîne TypeProcesseur est chaîne NumSerieProcesseur est chaîne Erreur_WMI est booléen FIN FONCTION System_BoardInfos(p_Trace est booléen = Vrai) : STRUCT_Board_Infos LOCAL oLocator est objet Automation"WbemScripting.SWbemLocator" oService est objet Automation dynamique oBoard est objet Automation dynamique oBios est objet Automation dynamique stBoard_Infos est STRUCT_Board_Infos QUAND EXCEPTION DANS oService= oLocator>>ConnectServer(".","root\cimv2") oService>>Security_>>ImpersonationLevel = 3 // Récupération du numéro de série du 1er disque oBoard= oService>>ExecQuery("SELECT SerialNumber,Tag FROM Win32_PhysicalMedia WHERE Tag LIKE '%PHYSICALDRIVE0'") POUR x=0_À_ oBoard>>Count-1 stBoard_Infos.NumSérieDisque=oBoard>>ItemIndex(x)>>Properties_>>Item("SerialNumber")>>Value SI p_Trace ALORS Trace("NumSérieDisque : ",stBoard_Infos.NumSérieDisque) FIN // Récupération du numéro de volume du disque C: oBoard= oService>>ExecQuery("SELECT DeviceID,VolumeSerialNumber FROM Win32_LogicalDisk WHERE DeviceID='C:'") POUR x= 0 _À_ oBoard>>Count-1 stBoard_Infos.NumVolDisque= oBoard>>ItemIndex(x)>>Properties_>>Item("VolumeSerialNumber")>>Value SI p_Trace ALORS Trace("NumVolDisque : ",stBoard_Infos.NumVolDisque) FIN // Récupération de l'adresse MAC des adaptateurs réseau valides oBoard= oService>>ExecQuery("SELECT MACAddress,PhysicalAdapter FROM Win32_NetworkAdapter WHERE PhysicalAdapter=True") POUR x = 0 _À_ oBoard>>Count-1 stBoard_Infos.NumMacAdresse= oBoard>>ItemIndex(x)>>Properties_>>Item("MACAddress")>>Value SI p_Trace ALORS Trace("NumMacAdresse : ",stBoard_Infos.NumMacAdresse) FIN // Récupération du numéro de série et du nom de carte mère oBoard= oService>>ExecQuery("select * from Win32_BaseBoard") stBoard_Infos.NomManufacturier = oBoard>>ItemIndex(0)>>Properties_>>Item("Manufacturer")>>Value SI p_Trace ALORS Trace("NomManufacturier : ",stBoard_Infos.NomManufacturier) oBoard= oService>>ExecQuery("SELECT SerialNumber,Product FROM Win32_BaseBoard") POUR x= 0 _À_ oBoard>>Count-1 stBoard_Infos.NomCarteMere = oBoard>>ItemIndex(x)>>Properties_>>Item("Product")>>Value stBoard_Infos.NumSérieCarteMère = oBoard>>ItemIndex(x)>>Properties_>>Item("SerialNumber")>>Value SI p_Trace ALORS Trace("NomCarteMère : ",stBoard_Infos.NomCarteMere) Trace("NumSérieCarteMère : ",stBoard_Infos.NumSérieCarteMère) FIN FIN // Récupération du numéro de série du BIOS // oBoard= oService>>ExecQuery("SELECT SerialNumber FROM Win32_BIOS") // POUR x= 0 _A_ oBoard>>Count-1 // stBoard_Infos.NumSérieBios= oBoard>>ItemIndex(x)>>Properties_>>Item("SerialNumber")>>Value // SI p_Trace ALORS Trace("NumSérieBios : ",stBoard_Infos.NumSérieBios) // FIN oBios = oService>>ExecQuery("select * from Win32_BIOS") SI oBios>>Count > 0 ALORS stBoard_Infos.NumSérieBios= oBios>>ItemIndex(0)>>Properties_>>Item("SerialNumber")>>Value SI p_Trace ALORS Trace("NumSérieBios : ",stBoard_Infos.NumSérieBios) FIN // Récupération Type de processeur stBoard_Infos.TypeProcesseur = SansEspace(RegistreLit("HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0","Identifier")) SI p_Trace ALORS Trace("TypeProcesseur : ",stBoard_Infos.TypeProcesseur) // Récupération SN du processeur oBoard= oService>>ExecQuery("SELECT ProcessorID FROM Win32_Processor") SI oBoard>>Count > 0 ALORS stBoard_Infos.NumSerieProcesseur = oBoard>>ItemIndex(0)>>Properties_>>Item("ProcessorID")>>Value SI p_Trace ALORS Trace("NSerProcesseur : ",stBoard_Infos.NumSerieProcesseur) FIN FAIRE SI p_Trace ALORS Erreur("Erreur exécution WMI",ExceptionInfo(errInfo)) ExceptionActive() VariableRAZ(stBoard_Infos) stBoard_Infos.Erreur_WMI = Vrai Trace("Erreur WMI ") FIN FIN libérer(oBios) libérer(oBoard) libérer(oService) RENVOYER(stBoard_Infos) Bon développement Gemini