Obtenir la valeur de la clé de registre C#
J'ai déjà regardé les sujets existants, de sorte s'il vous plaît essayer de s'abstenir de déplacer des liens ici.
Je veux récupérer la valeur d'une clé de registre de la plaine et simple. Voici ce que j'ai jusqu'à présent.
Registre:
1) Faites une clé sous
Current_User\Software\Custom_Subkey\Custom_Value\Custom_key\valeur_de_la_chaîne
Je suis en train d'essayer de trouver le valeur_de_la_chaîne
string reg_subKey = "Software\\Custom_Subkey\\Custom_Value";
RegistryKey root = Registry.CurrentUser.CreateSubKey(reg_subKey);
foreach (string keyname in root.GetValueNames())
{
textBox4.AppendText(keyname.ToString() + Environment.NewLine);
//Appends the following data to textBox4 once the foreach is completed:
//Header1
//Header2
//Header3
//Header4
//Header5
//Now I want to get the VALUES of each header:
using (RegistryKey key = root.OpenSubKey(keyname))
{
**//THIS LINE GETS HIGHLIGHTED WITH THE FOLLOWING ERROR:
"Object reference not set to an instance of an object.**"
MessageBox.Show(key.ValueCount.ToString());
}
}
J'espère que c'est une solution simple. J'ai hâte d'entendre vos réponses.
Merci,
Evan
root.OpenSubKey(keyname)
est de retourner la valeur null. C'est pourquoi vous obtenez ce message d'erreur.- N'est-ce pas le bon code alors? Je suis en supposant que ... Est-il un autre moyen de s'ouvrir à la clé?
- À partir de la documentation " Si la sous-clé spécifiée ne peut pas être trouvé, la valeur null est retournée."
- Oui, je suis d'accord avec le chemin d'accès est incorrect... (en quelque sorte), mais je suis confus au sujet de cette partie que la clé n'existe pas. Permettez-moi de triple check!
- Je suis allé dans la base de registre et ne "copier le nom de la clé" et il a renvoyé la même clé que j'utilise dans mon programme. J'ai aussi fait en sorte que la "keyname" existe - et il a une valeur. Donc, le chemin semble être correct ici.
Vous devez vous connecter pour publier un commentaire.
Je crois que vous voulez
root.GetSubKeyNames()
dans la boucle pasGetValueNames()
Tandis que les valeurs de travail pour obtenir les valeurs, je dirais que la boucle suivante:
La
OpenSubKey
méthode ne pas lever une exception si la sous-clé n'est pas trouvée. Au lieu de cela, il retourne simplementnull
. Il est de votre responsabilité en tant que programmeur de s'assurer que la clé appropriée a été trouvé et ouvert par la vérification de la valeur de retour de l'appel de méthode.Donc, ce que je soupçonne, c'est que la clé de registre que vous avez spécifié n'est pas valide. Ouvrir l'Éditeur du Registre (
regedt32.exe
), et vérifiez que vous pouvez trouver la clé dans le registre exactement comme écrit.Si vous trouvez que la clé de registre est en effet situé à exactement où vous avez pensé il était, le problème peut être lié à la sous-système WOW64, qui permet les versions 64 bits de Windows pour exécuter 64-bit applications. Si la valeur a été écrite dans le registre par un programme 32 bits, vous ne serez pas en mesure de le lire avec le code ci-dessus à partir d'un programme 64 bits (ou vice versa). La façon la plus simple de vérifier cela est de changer les paramètres de compilation de votre projet. Par exemple, si vous êtes en train de compiler pour les architectures x86, puis changer pour la compilation pour systèmes x64, ou vice versa. La redirection de registre est peut-être dans votre chemin; il s'agira de vérifier cela.
root
n'ont pas toutes les sous-clés! Il a un valeur, mais pas de sous-clés.Je voulais la même chose et votre code m'a aidé, mais comme vous l'avez dit, il ne fonctionne pas correctement. Alors, j'ai fait quelques modifications, et je pense que cela fonctionne bien maintenant! Essayez ceci: