2010-07-29 8 views
1

J'ai un programme qui a été écrit sous XP. Ce que j'ai découvert, c'est que cela ne fonctionne pas correctement sur Win7 parce que HLKM n'est plus accessible en écriture par les non-administrateurs. Essentiellement, lorsque vous enregistrez le programme, les informations de licence sont censées entrer dans le registre. Cette information est valable pour tout le monde sur l'ordinateur, pas seulement pour un utilisateur, donc je ne veux pas le mettre dans HKCU. Mais toute copie du programme doit être capable de modifier ce registre (même si c'est un non-administrateur qui l'exécute), car il y a certaines situations où il va obtenir des informations de licence à jour de mon serveur web (par exemple, si le les données du registre sont perdues ou endommagées, ou si votre licence actuelle a expiré et qu'elle doit voir si nous avons appliqué une extension). Ce n'est pas horrible si elle sort sur le serveur web pour chaque utilisateur unique qui démarre le programme, mais cela cause des problèmes ennuyeux, donc je préfère continuer à travailler comme dans XP. Existe-t-il un moyen de stocker des données dans le registre et de les partager avec Win7, ou vais-je commencer à chercher à stocker un fichier INI sur le disque?Partage de données entre utilisateurs avec le registre Windows 7

Répondre

0

Pourriez-vous faire en sorte que le programme d'installation rende votre zone de registre particulière accessible à tous? L'installateur devra être exécuté avec des privilèges élevés de toute façon, je m'attendrais - donc cela semble une approche idéale.

+0

Cela devrait fonctionner, mais je ne dirais pas que c'est une approche idéale. Il laisse les informations de licence sous HKLM vulnérables aux modifications apportées par les utilisateurs non privilégiés. Idéalement, vous souhaitez protéger les informations de licence tout aussi fortement que les fichiers EXE et DLL installés dans votre application. L'approche proposée par Kate Gregory permettra d'atteindre cet objectif. –

+0

En fait, cela fonctionnerait bien pour l'un des problèmes auxquels je suis confronté. Comment peut-on dire à l'installateur de rendre une partie de HKLM accessible en écriture? – Escher

1

Voici comment je l'architecturerais: votre configuration est élevée et configure la clé. Ensuite, si leur licence est corrompue ou non, vous activez un bouton ou un élément de menu qui a un texte tel que "fixer la licence" ou "mettre à jour la licence". Vous mettez un bouclier sur ce bouton ou élément de menu. Quand ils cliquent dessus, vous lancez un exe séparé en utilisant ShellExecute. Cet exe a un manifeste qui nécessite une élévation. Il peut alors écrire dans la zone protégée du registre. Le reste de l'application peut avoir un manifeste avec asInvoker. Si vous voulez qu'il soit complètement invisible, soit l'application entière doit toujours être élevée (ennuyeuse) ou parfois l'application lancera juste un autre exe qui demande l'élévation sans avertissement - dans ce cas les utilisateurs intelligents diront non. Un peu moins d'invisibilité est une bonne chose.

+1

Il s'agit de la meilleure option, car elle utilise le mécanisme UAC pour conserver vos informations de licence sous HKLM aussi sûres que les exécutables réellement installés à partir des modifications apportées par les utilisateurs non-navigués (ou programmes voyous). –

Questions connexes