2012-01-03 4 views
1

J'ai c application # qui comprennent le code pour récupérer les valeurs de registre et vérifiez qu'il est values.registry valeurs stockées de manière suivante:Lire la valeur du Registre dans C#

MainKey:

Name:user123 
Isregistered:no 

si retourne isRegistered "non", il affichera le message approprié.
Je reçois erreur comme ce

Référence d'objet non définie à une instance d'un objet.

code C#:

RegistryKey reg = Registry.LocalMachine.OpenSubKey(@"HKEY_CURRENT_USER\\MainKey", true); 
string currentKey; 
currentKey = reg.GetValue("Isregistered", true).ToString(); 
if (currentKey == "yes") 
{ 
    Console.WriteLine("availble"); 
} 
else 
{ 
    Console.WriteLine("Not availble"); 
} 


Je reçois erreur sur
"currentKey = reg.GetValue (" isRegistered "true) .ToString();"

+1

Sur quelle ligne vous obtenez l'erreur? –

+1

Pas vraiment lié mais vous n'avez pas besoin du caractère d'échappement '@' si vous échappez à votre backlash avec le double backslash de toute façon –

+0

Soit 'reg' ou le résultat de' reg.GetValue' est nul. Lequel est-ce? – ChrisF

Répondre

3

Je vois deux problèmes dans votre code:

1)

// You're searching for HKEY_CURRENT_USER in HKEY_LOCAL_MACHINE 
// Use Registry.CurrentUser instead. 
RegistryKey reg = Registry.LocalMachine.OpenSubKey(@"HKEY_CURRENT_USER\\MainKey", true); 
string currentKey; 
currentKey = reg.GetValue("Isregistered", true).ToString(); 

En savoir plus sur le terrain CurrentUser here

2) L'autre aspect est que soit l'utilisation @ ou \\ non les deux dans le chemin du registre. à savoir

OpenSubKey(@"HKEY_CURRENT_USER\MainKey", true); 

ou

OpenSubKey("HKEY_CURRENT_USER\\MainKey", true); 

En savoir plus sur les chaînes littérales in extenso here

0

Vous essayez d'ouvrir HKEY_CURRENT_USER en utilisant le registre LocalMachine. Utilisez Registry.CurrentUser.OpenSubKey (@ "MainKey", true) à la place.

Questions connexes