2016-02-27 2 views
0

Le chemin de Registre suivante existe bel et bien à ma machine, mais je reçois une exception de pointeur null:Une clé de Registre existe, mais je reçois une exception de pointeur null

var myKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Android Studio", false); 
    var value = (String)myKey.GetValue("JdkPath"); // myKey is null 
    if (!String.IsNullOrEmpty(value)) { 
    //... 
    } 

Pourquoi?

+0

@kennyzx, quoi? –

+0

Quel est le chemin complet de la clé? Est-ce que c'est 'HKEY_LOCAL_MACHINE \ SOFTWARE \ Android Studio'? Si vous compilez votre programme pour cibler x86, votre programme recherchera 'HKEY_LOCAL_MACHINE \ SOFTWARE \ WOW6432Node \ Android Studio'. – kennyzx

+0

@kennyzx, c'est le chemin complet. –

Répondre

1

Je n'ai pas de studio Android, donc j'ai essayé avec 7-Zip. Il est une bonne idée de vérifier la version 32/64 bits du logiciel avec RegistryView enumeration:

string path = @"SOFTWARE\7-Zip"; 

RegistryKey keys32 = RegistryKey.OpenBaseKey (RegistryHive.LocalMachine, RegistryView.Registry32); 

RegistryKey rkPath = null; 
rkPath = keys32.OpenSubKey (path); 

if (rkPath == null) 
{ 
    Console.WriteLine ("32 bit version is null. Let's try 64 bit version"); 
    RegistryKey keys64 = RegistryKey.OpenBaseKey (RegistryHive.LocalMachine, RegistryView.Registry64); 
    rkPath = keys64.OpenSubKey (path); 
} 
string result = rkPath.GetValue ("Path").ToString ();