2010-10-24 6 views
0

J'ai écrit une application qui stocke plusieurs choses dans le registre. Quand j'ai commencé, je les ai ajoutés à HKEY_LOCAL_MACHINE, mais j'ai continué à recevoir des erreurs d'écriture en écrivant à. Donc, il a été suggéré que j'utilise HKEY_CURRENT_USER, cela a fonctionné jusqu'à ce que je me rende compte que je ne suis pas en mesure d'y accéder à partir d'un autre compte. Comment puis-je écrire dans le registre mais autoriser tous les comptes à y accéder en lecture et en écriture?Entrées de Registre pour tous les utilisateurs en Python

J'ai utilisé le module Python _winreg.

Répondre

2

HKEY_LOCAL_MACHINE/Software/YourSoftware, a besoin d'autorisations d'administration et est pour les données install-temps, ou HKEY_CURRENT_USER/Software/YourSoftware, qui est pour les données pertinentes à cet environnement que (cet utilisateur, ce profil etc.)

EDIT: Une alternative serait stocker un fichier de configuration et définir les autorisations appropriées au moment de l'installation.

2ème EDIT: J'ai lu dans un autre commentaire que vous voulez être sûr que seule votre application a modifié un fichier, donc vous stockez les temps de modification. Contournements:

  • Crypter le fichier-non-à-être-Modified, le mieux est avec une clé générée par l'utilisateur
  • faire un service, installer avec un utilisateur spécial dans lequel il fonctionne, et faire les autorisations afin , que seul ce service peut accéder au fichier

Mon intuition dit que votre exigence de modifier un fichier que par votre application, mais sous un compte est très mal mais les solutions plus ou moins correctes ont d'imposer supplémentaires complexité. Votre décision: passez en revue vos besoins et éventuellement votre design, ou ajoutez une couche de complexité et peut-être de vilain.

3ème EDIT: Diviser votre application, avoir une application d'administration, qui peut avec les droits d'administrateur écrire à HKLM et définir les paramètres. Les droits d'utilisateur normaux devraient suffire à lire HKLM

+0

Comment obtenir l'autorisation d'administrateur pour mon programme? –

+0

Comment l'avez-vous installé? – knitti

+0

Mon assistant d'installation télécharge les fichiers et les extrait à l'endroit approprié. J'ai besoin de l'application pour avoir des privilèges d'administration à chaque lancement. –

0

Vous aurez besoin d'autorisations d'administration pour écrire dans HKLM ou vous contenter de clés reg non globales. Le comportement va varier quelque peu entre les différentes versions de Windows.

0

Si vous voulez écrire dans le registre pour que tous les utilisateurs puissent le lire, vous devrez exécuter votre programme avec des privilèges d'administrateur.

Vous préférerez peut-être stocker vos informations dans un fichier, ce qui sera plus facile à gérer.

+0

j'aurais si je pensais à ce sujet, mais l'application est déjà écrit.4 mois de développement et de codage, est allé le tester sur un deuxième compte et il n'a pas pu lire les données dont il avait besoin! –

+0

Vous constaterez peut-être que modifier le stockage des paramètres n'est pas un changement aussi important que vous le pensez. Cela ressemble à une bonne opportunité pour une abstraction propre, alors vous pouvez changer l'implémentation sous-jacente sans trop de problème. –

+0

Les données stockées dans le registre correspondent aux heures de modification des fichiers. Ils sont utilisés comme mesure de sécurité pour s'assurer que les fichiers ne sont pas modifiés par autre chose que mon logiciel. Serait-il possible de créer un profil Admin et d'exécuter l'application sous ce profil? De cette façon, l'application a des privilèges d'administrateur, mais ne nécessite pas de mot de passe d'administrateur pour entrer. L'application créerait le profil avec un mot de passe, puis ranas ce profil. –

0

Une autre possibilité serait de changer la sécurité de vos clés HKLM en R/W pour n'importe qui. Bien que l'idée que ce soit en quelque sorte la sécurité contre la modification semble un peu exagéré. Regedt32 a la possibilité de définir les clés, donc l'API sous-jacente doit l'avoir aussi. Tout cela étant dit, c'est une fausse manoeuvre d'exécuter une application et montre un manque de compréhension sévère des modèles de sécurité et de sécurité. (En d'autres termes, le développement des fenêtres typiques.)

Comment ai-je si cynique .....

Questions connexes