2011-07-06 5 views
5

J'ai créé un programme avec une période d'essai de 30 jours dans VB.Net. Le programme enregistre le temps dans le registre que le programme a été lancé pour la première fois et que le temps a été utilisé en dernier. De cela je calcule si le procès est toujours valide.où stocker les informations d'enregistrement du programme

Le problème est que le seul endroit dans le Registre auquel un utilisateur non-administrateur peut accéder est la clé HKEY_LOCAL_USER. Je dois implémenter l'essai pour tous les utilisateurs, sinon un utilisateur peut simplement utiliser un nouveau compte et cela réinitialiserait l'essai.

Où puis-je sauvegarder ces informations afin qu'un utilisateur sans droits d'administrateur puisse lire et écrire à partir de cet emplacement? Je veux également l'enregistrer dans un endroit que l'utilisateur moyen ne peut pas trouver trop facilement et supprimer le fichier qui permettrait de réinitialiser le procès.

Merci

+0

Un utilisateur peut également simplement supprimer la valeur. C'est plus facile que d'utiliser un nouveau compte. – CodesInChaos

+1

que diriez-vous de stocker les données à la fois dans HKEY_LOCAL_USER et dans un fichier dans le répertoire de données d'application? Si c'est déjà dans le fichier, lorsque l'application a commencé à copier cela vers HKEY_LOCAL_USER. – kenny

+0

Je veux juste le sauvegarder dans un endroit que le gars moyen ne sera pas en mesure de trouver. Je sais qu'il est impossible d'empêcher un utilisateur d'utiliser le programme gratuitement s'il le veut vraiment. L'utilisateur moyen de mon programme ne sera pas en mesure de supprimer la clé du registre. Alors, que suggérez-vous est le meilleur endroit pour enregistrer ces données qui sont disponibles pour tous les utilisateurs (admin et non-admin), et pas si facile à trouver – Johan

Répondre

0

Mon problème était de savoir où sauvegarder les données auxquelles tous les utilisateurs peuvent accéder (lire et écrire).

Dans Win 7, cela peut être difficile. J'ai trouvé this article sur le projet de code qui explique comment cela peut être réalisé pour les dossiers. J'ai ensuite lu un fichier et enregistré des valeurs dans le registre comme suggéré par Kenny ci-dessus.

Si quelqu'un a une meilleure méthode, partagez-la.

1

Je ne suis pas sûr que quelqu'un a trouvé une réponse définitive à cette fin. Le seul moyen est de stocker les données avec vous et non avec le client - faites donc un appel Web lors de l'installation, et à chaque démarrage, et stockez les données sur votre serveur.

Ce qui, sauf si vous avez un problème particulièrement sérieux, est très OTT. En bref, cryptez et enregistrez les informations sur un fichier dans le répertoire d'installation. Le cryptage devrait s'assurer que la valeur ne peut pas être changée, et si le fichier n'existe pas, n'autorisez pas l'accès.

Mais tout dépend de l'importance de la période d'essai.

+0

Le répertoire d'installation est des fichiers de programme et si l'utilisateur n'a pas les droits d'administrateur, il ne serait pas en mesure d'enregistrer des données là. Comme je l'ai dit plus haut, j'ai besoin d'un endroit où un utilisateur non administrateur peut sauvegarder des fichiers auxquels tous les utilisateurs du PC peuvent accéder. Et oui, faire un appel Web n'est pas une option pour moi. – Johan

+0

@Johan - Il doit être capable d'écrire dans ce dossier, ou il ne serait pas en mesure d'installer votre programme en premier lieu. Tant que vous définissez la date dans le cadre du processus d'installation, tout va bien. –

+0

Un administrateur peut avoir installé l'application. Donc ce n'est pas une option. Pourriez-vous utiliser c: \? Ce n'est généralement pas une bonne idée, mais elle devrait être accessible, et il y a peu de choses que vous sachiez être accessibles. –

1

Enregistrez les données nécessaires en binaire (DateTime.Now.Ticks est System.Int64;)) et gonflez-le avec des données redondantes et créez un champ de somme de contrôle. Lors du chargement, vérifiez le champ de la somme de contrôle et, si ce n'est pas le cas, les données ont été falsifiées, donc tuez la période d'essai. Vous pouvez également enregistrer les données dans un fichier à côté de votre application pour éviter d'utiliser le registre (pour une compatibilité multiplateforme et pour éviter les privilèges d'administrateur requis). privilèges

Questions connexes