Accès au Registre avec Visual Basic .NET
Cat Francis
L'équipe Visual Studio
Microsoft Corporation
Résumé : cet article explique comment accéder au Registre en utilisant les fonctions intégrées de Visual Basic® .NET, DeleteSetting, GetAllSettings, GetSetting et SaveSetting, et en utilisant les classes Registry et RegistryKey du CLR (Common Language Runtime). Il décrit en détail les autorisations nécessaires, explique quand utiliser l'Éditeur du Registre, et montre comment, par programmation, lire à partir du Registre et écrire dans celui-ci.
Cet article contient des liens vers des pages en anglais.
Sommaire
Introduction
Conditions
requises
Accès
au Registre avec les fonctions de Visual
Basic .NET
Accès
au Registre avec .NET Framework
Autorisations
Accès
au Registre avec l'Éditeur du Registre
Conclusion
Introduction
Lorsque vous programmez dans Visual Basic .NET, vous pouvez choisir d'accéder au Registre par l'intermédiaire des fonctions de Visual Basic .NET ou des classes de Registre de .NET Framework. Si les fonctions de Visual Basic se révèlent suffisantes dans la plupart des cas, certaines situations peuvent nécessiter l'utilisation de .NET Framework.
Le Registre contient des informations concernant le système d'exploitation et les applications hébergées sur l'ordinateur. L'utilisation du Registre est susceptible de compromettre la sécurité du système. C'est la raison pour laquelle vous devez examiner très attentivement le code qui accède au Registre afin de vous assurer qu'il ne menace en rien la sécurité de l'ordinateur sur lequel il doit être exécuté.
Les entrées de Registre contiennent deux parties : le nom de la valeur et la valeur proprement dite. Les entrées sont stockées sous des clés et des sous-clés dans un système analogue au système de fichiers, dans lequel les fichiers sont stockés dans des répertoires et des sous-répertoires.
Conditions requises
Pour tirer le meilleur parti de cet article, les conditions suivantes doivent être remplies :
- connaissance des versions précédentes de Visual Basic ;
- connaissance de la conception et de l'objectif du Registre ;
- compréhension des implications de sécurité liées à l'accès au Registre.
Accès au Registre avec les fonctions de Visual Basic .NET
Visual Basic .NET fournit quatre fonctions qui
permettent d'accéder au Registre. Pour les utiliser, vous
devez disposer des autorisations de lecture et
d'écriture dans l'énumération
RegistryPermissionAccess. Tout code exécuté
avec la confiance totale (dans la stratégie de
sécurité par défaut, il s'agit de n'importe quel
code installé sur le disque dur de l'ordinateur de
l'utilisateur) dispose des autorisations nécessaires pour
accéder au Registre. Pour plus d'informations,
reportez-vous à
RegistryPermission Class.
| Fonction de Visual Basic .NET | Description |
|---|---|
DeleteSetting | Supprime un paramètre de section ou de clé d'une entrée de l'application dans le Registre. |
GetSetting | Renvoie une valeur de paramètre de clé à partir d'une entrée de l'application dans le Registre. |
GetAllSettings | Renvoie une liste des paramètres de clé et de leurs valeurs à partir d'une entrée de l'application dans le Registre. |
SaveSetting | Crée ou enregistre une entrée de l'application dans le Registre. |
Remarque Les noms de section ne peuvent pas être renvoyés par la fonction GetSetting.
Si le paramètre de clé ne peut pas être
enregistré, un objet ArgumentException est
levé. Pour plus d'informations sur cette exception,
reportez-vous à
ArgumentException
.
L'exemple qui suit crée une clé de Registre et deux sous-clés. Il imprime la valeur de la première clé, puis les valeurs de la première clé et de ses sous-clés. Il supprime ensuite la seconde sous-clé et imprime les valeurs de la première clé et de ses sous-clés pour confirmer la suppression de la seconde sous-clé.
' Crée la première clé.
SaveSetting("TestApp","Startup","FirstKey","First")
' Crée la première sous-clé.
SaveSetting("TestApp","FirstKey","FirstSubKey","FirstSub")
' Crée la seconde sous-clé.
SaveSetting("TestApp","FirstKey","SecondSubKey","SecondSub")
Try
' Écrit la valeur de la première clé.
Console.WriteLine ((GetSetting("TestApp","Startup","FirstKey"))
' Écrit la première clé et ses deux sous-clés.
Console.WriteLine (GetAllSettings("TestApp","Startup"))
Catch e As ArgumentException
Catch e As Exception
Console.WriteLine (e.GetType.ToString)
Finally
End Try
DeleteSetting("TestApp","FirstKey","SecondSubKey")
Try
Console.WriteLine (GetSetting("TestApp","Startup","FirstKey"))
Console.WriteLine (GetAllSettings("TestApp","Startup"))
Catch e As ArgumentException
Catch e As Exception
Console.WriteLine (e.GetType.ToString)
Finally
End Try
Il existe une limitation à l'utilisation des fonctions intégrées d'accès au Registre : vous ne pouvez accéder qu'aux clés de Registre sous HKEY_CURRENT_USER\Software\VB et VBA Paramètres de programme. Pour ce faire, vous devez ouvrir une session pour que la clé de Registre HKEY_CURRENT_USER soit active.
Les paramètres du Registre accessibles à partir d'un processus non interactif (tel que mtx.exe) doivent être stockés sous les clés de Registre HKEY_LOCAL_MACHINE\Software\ ou HKEY_USER\DEFAULT\Software.
Accès au Registre avec .NET Framework
Comme vous ne pouvez utiliser les fonctions
GetSetting et SaveSetting pour accéder aux
clés que sous HKEY_CURRENT_USER\Software\VB et
VBA Paramètres de programme, vous pouvez les
trouver contraignantes. Le cas échéant, vous pouvez
utiliser les classes Registry et RegistryKey dans
l'espace de noms Microsoft.Win32 de .NET Framework. Pour plus
d'informations, reportez-vous à
Registry
et http://msdn.microsoft.com/library/en-us/cpref/html/frlrfMicrosoftWin32RegistryKeyClassTopic.asp
RegistryKey
La classe Registry fournit les clés de Registre de base qui peuvent être utilisées pour accéder aux sous-clés et à leurs valeurs. Les clés de base proprement dites sont en lecture seule. Le tableau suivant répertorie et décrit les sept clés de la classe Registry :
| Clé | Description |
|---|---|
| ClassesRoot | Définit les types de documents et les propriétés qui leur sont associées. |
| CurrentConfig | Contient des informations sur la configuration matérielle qui sont indépendantes de l'utilisateur. |
| CurrentUser | Contient des informations sur les préférences de l'utilisateur, telles que les variables d'environnement. |
| DynData | Contient les données de Registre dynamiques, telles que celles utilisées par les pilotes de périphériques virtuels. |
| LocalMachine | Contient cinq sous-clés (Matériel, SAM, Sécurité, Logiciels et Système) répertoriant les données de configuration de l'ordinateur local. |
| PerformanceData | Contient des informations sur les performances des composants logiciels. |
| Users | Contient des informations sur les préférences par défaut de l'utilisateur. |
L'exemple suivant montre comment lire une valeur DWORD à partir de HKEY_CURRENT_USER :
Imports Microsoft.Win32
Dim regVersion As RegistryKey
Dim keyValue As String
keyValue = Software\\Microsoft\\TestApp\\1.0
regVersion = Registry.CurrentUser.OpenSubKey(keyValue, False)
Dim intVersion As Integer = 0
If (Not regVersion Is Nothing) Then
intVersion = regVersion.GetValue("Version", 0)
regVersion.Close()
End If
L'exemple suivant lit, incrémente, puis écrit une valeur DWORD vers HKEY_CURRENT_USER :
Imports Microsoft.Win32
Dim regVersion As RegistryKey
regVersion =
Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\TestApp\\1.0", True)
If regVersion Is Nothing Then
' La clé n'existe pas ; crée la clé.
regVersion =
Registry.CurrentUser.CreateSubKey("SOFTWARE\\Microsoft\\TestApp\\1.0")
End If
Dim intVersion As Integer = 0
If (Not regVersion Is Nothing) Then
intVersion = regVersion.GetValue("Version", 0)
intVersion = intVersion + 1
regVersion.SetValue("Version", intVersion)
regVersion.Close()
End If
Autorisations
La classe RegistryPermission, qui se trouve dans
l'espace de noms System.Security.Permission,
contrôle la capacité à accéder aux
variables du Registre. Les variables du Registre ne doivent pas
être stockées dans les emplacements de la
mémoire auxquels le code sans RegistryPermission
peut accéder. De même, lorsque vous accordez des
autorisations, accordez le privilège le moins
élevé permettant d'effectuer une tâche
donnée. Pour plus d'informations, reportez-vous à
RegistryPermission
et http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemSecurityPermissions.asp
System.Security.Permissions
.
Les valeurs d'autorisation d'accès au Registre sont
définies par l'énumération
RegistryPermissionAccess. Pour plus d'informations,
reportez-vous à
RegistryPermissionAccess
. Le tableau suivant présente ses
membres en détail :
| Valeur | Description |
|---|---|
| AllAccess | Accès en création, lecture et écriture aux variables du Registre. |
| Create | Accès en création aux variables du Registre. |
| NoAccess | Pas d'accès aux variables du Registre. |
| Read | Accès en lecture aux variables du Registre. |
| Write | Accès en écriture aux variables du Registre. |
Remarque Si vous souhaitez combiner des autorisations, par exemple en lecture et en écriture, tout en refusant l'accès en création, vous pouvez le faire avec une opération Or au niveau du bit, comme dans l'exemple qui suit.
RegistryPermissionAccess.Write Or
RegistryPermissionAccess.Read _ "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\TestApp" Accès au Registre avec l'Éditeur du Registre
Si vous travaillez sur des projets de déploiement, vous
avez également la possibilité d'utiliser
l'Éditeur du Registre pour spécifier les clés de
Registre et les valeurs à ajouter au Registre de
l'ordinateur cible. Pour plus d'informations, reportez-vous
à
Registry Editor
.
- Ouvrez un projet de déploiement.
-
Dans le menu Vue, pointez sur Éditeur,
puis cliquez sur Registre.
Pour plus d'informations sur l'utilisation de l'Éditeur du Registre dans des projets de déploiement, reportez-vous à Registry Settings Management in Deployment
.
Conclusion
Le Registre constitue l'emplacement idéal pour enregistrer les informations concernant votre application et les paramètres d'utilisateurs individuels. Vous pouvez également y consulter des informations sur le matériel ou les applications que vous utilisez.
Pour la plupart des projets, l'accès au Registre par l'intermédiaire des fonctions runtime de Visual Basic est suffisant. Cependant, il se peut que vous ayez parfois besoin d'utiliser les classes Registry et RegistryKey de .NET Framework. Dans les deux cas, cette tâche est relativement simple, mais du fait des implications de sécurité liées à ce type d'accès, vous devez veiller à ne pas créer de faille de sécurité, en incluant par exemple dans une clé un mot de passe en texte clair ou d'autres informations sensibles.
Dernière mise à jour le lundi 15 juillet 2002