2011-09-09 10 views
5

Così ho usato RegEdit per aggiungere il seguente al Registro di sistema sulla mia workstation:ho aggiunto una chiave di registro, ma non riesco a trovare a livello di codice

HKLM \ Software \ Foo \ Bar

Bar ha ak/v coppia di "wtf"/"idk". Ho verificato che questi cambiamenti "prendevano" chiudendo regedit e riaprendendolo. Ehi, sono ancora lì! Swell.

RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Foo\Bar"); 

if (key != null) 
{ 
    var = key.GetValue("wtf").ToString(); 
} 

Il problema è, la chiave è null.

Quando. . .

Registry.LocalMachine.OpenSubKey("Software").GetSubKeyNames() 

Viene chiamato, Foo non viene visualizzato tra i molti nomi di SubKey.

Quindi, ovviamente mi manca qualcosa di stupido. Cosa mi manca in particolare?

risposta

10

Se si esegue un processo a 32 bit su una versione a 64 bit di Windows, il processo a 32 bit (l'applicazione di test) non è sempre in grado di visualizzare le chiavi create con regedit a 64 bit.

Provare a eseguire l'applicazione come 64 bit o utilizzare regedit per aprire la chiave utilizzando il percorso HKLM\SOFTWARE\Wow6432Node\Foo\Bar.

Ulteriori informazioni su 32-bit and 64-bit application data in the registry sono disponibili su MSDN.

+0

Tu e Reizebosch siete corretti; è un sistema operativo x64 ma il programma è in esecuzione come un'app a 32 bit e stava leggendo da Wow6432Node. – peacedog

4

Potrebbe essere un problema x64? Durante la lettura dal registro in un processo x86 si viene reindirizzati al Software \ Wow6432node.

1

Provare ad aprirlo per leggere solo Registry.LocalMachine.OpenSubKey("Software", false).GetSubKeyNames() probabilmente si stanno ottenendo solo quelli in cui è possibile scrivere.

+0

Non l'ho menzionato nella domanda, ma le autorizzazioni erano 5x5; Potrei scrivere alla chiave. – peacedog