2009-03-30 4 views
1

Je veux que mon programme soit en mesure de modifier une valeur dans une clé de Registre qui se trouve dans « HKEY_LOCAL_MACHINE »Vista + VB.NET - Accès refusé lors de l'écriture à HKEY_LOCAL_MACHINE

My.Computer.Registry.SetValue("HKEY_LOCAL_MACHINE\SOFTWARE\XYZ", "MyValue", "MyData") 

Les travaux ci-dessus bien dans Windows XP , mais lève une exception UnauthorizedAccessException dans Vista.

+0

Classé sous: choses qui sont censées se produire. – belgariontheking

Répondre

8

Vous utilisez la fonction UAC de Vista. Il ne vous laissera pas écrire à des endroits arbitraires dans la ruche HKLM parce que vous ne courez pas avec des privilèges administratifs.

Il y a deux façons de contourner ce problème

  1. Exécutez le programme avec privilèges d'administration (différent de l'exécution d'un programme d'un compte qui a priviledges administratif)
  2. Choisir un autre endroit, HKCU peut-être, stocker les données

La deuxième option est beaucoup mieux car elle permet à votre application de fonctionner avec des privilèges non-Admin que vous ne pouvez pas toujours supposer que votre utilisateur a.

Voici un article assez détaillé sur l'UAC. Ce n'est pas du matériel de programmation à 100% mais il donne une bonne explication de ce que c'est exactement et vous pouvez relier cela à votre programme particulier: http://technet.microsoft.com/en-us/library/cc709691.aspx

+0

Comme il fonctionnait correctement sous XP, il s'exécutait avec les privilèges d'administrateur. Les utilisateurs, par défaut, ne peuvent pas écrire dans HKLM. Je pense que ce que vous pouvez vouloir dire, c'est que le processus fonctionne avec le jeton Admin supprimé. Le processus est donc en cours d'exécution avec les autorisations utilisateur. –

+0

@Rob, édité pour essayer de rendre le libellé un peu plus clair – JaredPar

+0

Pour compléter cette réponse, à propos de "l'exécution du programme en tant qu'administrateur", voir par exemple http://www.sevenforums.com/tutorials/11841-run-administrator .html –

-1

Vista a des restrictions plus strictes autour des comptes Adminstrator. Si vous n'êtes pas connecté en tant que compte administrateur, vous devez écrire dans HKEY_CURRENT_USER, par opposition à HKEY_LOCAL_MACHINE.

IMO, cela a plus de sens. Chaque utilisateur a ses propres paramètres/etc pour leurs programmes. Si vous voulez pour faire des paramètres globaux pour votre programme, vous devrez le faire avec un compte administrateur.

+0

Plus comme Vista a des restrictions plus strictes sur les comptes d'administrateur et vous fait exécuter spécifiquement une application en tant qu'administrateur pour avoir les droits d'accès administrateur. – crashmstr

+0

@crashmstr: oui. – belgariontheking

2

Étant donné que les modifications apportées à la ruche de la machine locale peuvent avoir des répercussions sur l'ensemble du système, vous constaterez que les modifications apportées à cette ruche sont réservées aux utilisateurs non administrateurs. Si vous essayez d'exécuter votre même code sur un ordinateur XP sur un compte non administrateur, vous obtiendrez la même erreur. Sur Vista puisque le processus est non-administrateur par défaut, vous obtenez cette erreur. Vous trouverez des informations à ce sujet dans les consignes de certification "Made for Windows 2000", "Made for Windows XP" et "Made for Windows Vista". Étant donné que j'ai peu d'informations sur ce que fait votre programme, plus d'informations peuvent être nécessaires pour vous donner des conseils spécifiques, donc je vais parler dans le cas général. Vous voulez que votre application laisse la ruche de la machine locale seule, sauf si vous en avez besoin. Lorsque votre programme est exécuté en mode non-administrateur, vous pouvez soit désactiver la fonctionnalité qui nécessite l'accès à ces clés d'administration, soit demander les privilèges d'administration.

Questions connexes