Accès au registre des non-mode admin
J'ai plusieurs de longue date apps écrit en Delphi qui persistent leurs paramètres dans le registre. J'ai utilisé HKEY_LOCAL_MACHINE pour les "durs" des paramètres tels que les préférences de configuration et HKEY_CURRENT_USER pour "soft" des informations telles que la position des fenêtres, listes MRU etc.
Maintenant mes utilisateurs me disent que non administrateur (utilisateur standard) mode les applications ne fonctionnent pas. En regardant, je vois que je ne suis pas capable de lire un paramètre mis en HKEY_LOCAL_MACHINE lorsque l'application est en mode admin.
Quelles sont mes options pour cela? Je sais peu de choses sur le mode standard et comment cela affecte l'accès au registre à tous. Aucune info apprécié.
- Astuce: Vous pouvez essayer en développement en vertu d'un non-pouvoir-compte d'utilisateur. Oui, il peut être un peu gênant parfois, mais de cette façon, vous vous assurez de "surprises" comme vous venez de le rencontré de ne pas vous frapper dans le visage. C'est la politique de l'entreprise à un grand nombre d'ateliers de développement pour une bonne raison.
- Comment votre application se comporte sous Windows 2000 ou Windows XP en tant qu'utilisateur standard? Qui vous expliquera comment il doit se comporter sous Windows Vista ou Windows 7 en tant qu'utilisateur standard.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez lire HKLM comme un utilisateur non-administrateur; vous ne pouvez pas y écrire.
Utilisation TRegistry.Créer(KEY_READ) lors de la construction, et la RootKey pour HKLM.
Vous pouvez également utiliser TRegistry.OpenKeyReadOnly() lors de l'ouverture d'une clé de registre spécifique; ce qui contribue à la non-admin accès à des zones du registre.
Veuillez consulter la section "Où stocker les paramètres de programme au lieu de HKEY_LOCAL_MACHINE?"
La haut-voté répondre est particulièrement utile.
L'autre chose, que personne n'a mentionné ici est la question de la greffe de la virtualisation sur Vista & Win7 (au moins).
Il peut ne pas être un problème dans votre scénario, mais j'ai pensé que je le mentionne tout de même dans les cas où il est pertinent.
Même si votre utilisateur a les droits d'admin, si votre application n'est PAS en cours d'exécution "élevé" sous Vista/Win7, votre application ne serez pas en mesure d'écrire dans le "réel" de la clé HKLM que vous pensez qu'il est. Il va être lues et écrites dans un virtualisé copie de la clé HKLM que seul l'utilisateur voit.
Par "élevé", je veux dire que vous avez été invité à une invite UAC sous Vista/Win7. Exécuter Regedit.exe par exemple sur Vista/Win7, et vous serez invité à une invite UAC.
Si vous êtes sous Vista/Win7, il est possible que ce soit le problème que vous décrivez quand vous dites qu'il n'est pas possible de lire une clé/valeur qui a été écrit dans le mode admin. Si oui, ce serait parce que votre application a un certain stade, écrit ce qui est maintenant un virtualisé clé/valeur; votre application ne jamais voir que la clé/valeur, même si un administrateur modifie la valeur "réelle".
Comme d'autres l'ont dit, votre application ne doit pas essayer d'écrire pour HKLM. Si vous vous sentez qu'il a besoin d'écrire pour HKLM, puis sur Vista/Win7 sont vos options (et de ces options peut être fait pour fonctionner sur XP aussi):
Icis'autre, de SORTE question qui aborde certaines de ces questions.
Une seule option, je ne suis pas favorable, mais les mentionner, est de donner à tout le monde (ou d'un groupe défini, etc) la permission d'accéder à votre clé. Il y a différentes façons de le faire, et il est le code dans le JCL qui va le faire, ou vous pouvez utiliser Regedit. Mais si vous donnez la permission (à cette branche spécifique de la HKLM) ensuite, il sera comme vous le souhaitez.
À partir d'un point de vue développeur Windows du contrôle de compte d'utilisateur peut être problématique pour certaines parties de votre application Delphi, si l'application n'est pas en cours d'exécution par l administrateur. Une telle opération est écrit à la base de données du Registre.
Vous avez de "demander des droits d'admin" par la création d'un fichier de manifeste d'application....
Windows Vista/7 - Contrôle De Compte D'Utilisateur
Contrôle de Compte d'utilisateur est un composant de sécurité dans Windows Vista. Contrôle de compte d'utilisateur permet aux utilisateurs d'effectuer des tâches courantes comme les non-administrateurs, appelé utilisateurs standard dans Windows Vista, et que les administrateurs sans avoir à changer d'utilisateur, fermer la session, ou utiliser l'option Exécuter en tant Que.
Pour empêcher les logiciels malveillants d'installer silencieusement et provoquant l'échelle de l'ordinateur de l'infection, Microsoft a développé la fonction UAC.
À partir d'un point de vue développeur de la suite de l'UAC caractéristiques importantes:
Tous les processus sont lancés en tant que Norme de l'Utilisateur par défaut
Un Utilisateur Standard ne peut pas:
Modifier des fichiers dans les dossiers Program Files
Modifier des fichiers de Windows ou System32 dossiers
Changement de registre en vertu de l'HKLM\Software
Modifier le local des machines de la date et de l'heure
...et la liste continue...
Par programmation Éditer la base de registres pour s'Exécuter Votre Application Delphi sur le Démarrage de Windows
Par programmation, la modification du Registre Windows, à l'aide de la TRegistry objet, vous pouvez "automagiquement" démarrer des programmes à chaque fois que Windows démarre.
La procédure que vous pouvez utiliser à la force "auto-run-sur-Windows-démarrage" pour votre application peut ressembler à:
Sur Vista/7, si l'utilisateur exécutant l'application ne dispose pas des droits d'administrateur le code ci-dessus serait un échec, en raison de l'UAC!
Semblant de l'UAC des Droits de l' - Comment l'Exécution de la Requête de Niveau
Même si l'utilisateur qui exécute le code ci-dessus n'est pas un administrateur, vous pouvez, en tant que développeur bras de votre application avec un type particulier de ressource incorporée: fichier de manifeste d'application.
Avoir le fichier de manifeste de s'assurer de Vista, l'UAC permettra à votre code à exécuter.
Voici les étapes:
Créer fichier XML avec le contenu suivant:
Nom de ce fichier XML, comme Nom_application.manifeste
Créer un fichier texte avec le contenu suivant:
1 24 "Nom_application.manifeste"
Nom de ce fichier texte en tant que Nom_application.RC
à l'aide de la ligne de commande, exécutez la commande suivante:
brcc32 Nom_application.RC -foYourApplicationName.REC
Cela va créer un nouveau fichier de ressources appelé Nom_application.REC
Copier ce Nom_application.REC fichier dans le chemin d'accès aux ressources de votre application.
Inclure ce fichier de ressources dans le RMR de l'application, comme:
{$R YourApplicationName.REC}
Enfin construire votre application - il est maintenant prêt à obtenir des droits d'administrateur sur Windows Vista.
Note 1: dans les étapes ci-dessus, remplacer "YourApplicationExeName" avec votre nom réel de l'application.
Note 2: les étapes ci-Dessus créer un fichier de ressources pour être stocké dans le fichier exécutable de votre application. Plus sur les Ressources dans les applications Delphi.
lire la suite dans http://delphi.about.com/od/delphitips2009/qt/delphi-vista-registry-run-on-startup.htm
Vos options comprennent (a) l'utilisation d'un fichier INI/fichier de configuration XML dans un endroit qui n'a pas besoin des droits d'admin à l'accès, ou (b) de modifier la sécurité sur votre propre sous-clé HKLM à l'aide d'un outil comme SetACL (domaine public).
Le problème avec l'option a est le changement dans le dossier des arrangements entre XP et Vista/W7. Je crois que Vista durcissement de l'accès à CSIDL COMMUNE APPDATA - standard, les utilisateurs n'ont pas d'accès en écriture si ma mémoire est bonne. Vous pourriez avoir à les stocker dans votre propre dossier et d'organiser les droits d'accès vous-même. Ennuyeux.
Un problème intéressant avec l'option b, il y a désormais officieux peu d'outils en usage dans les environnements d'entreprise que l'analyse du registre et de "corriger" les droits d'accès qu'ils pensent mal. Nous n'avons pas rencontré de problème avec les clients à l'aide de ces encore, mais nous sommes conscients qu'ils existent. Compte tenu de la performance de la base de registre, nous préférons encore la modification HKLM approche et continuera de le faire dans un avenir prévisible.