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
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
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
.
Pour accéder à
l'Éditeur du Registre
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.