2012-02-29 27 views
13

Ho la seguente chiave nel mio registro:Registry.GetValue tornare sempre nullo

sotto: HKEY_LOCAL_MACHINE\SOFTWARE\RSA ho valore dell'oggetto chiamata - WebExControlManagerPath e il suo valore è c:\

che sto cercando di fare questo:

var r = Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\RSA", "WebExControlManagerPth",null); 

if(r!=null) 
    ProcessAsUser.Launch(ToString()); 

Ma il valore r è sempre nullo.

enter image description here

Tutte le idee?

+0

provo questo e ritorno anche Null – MoShe

risposta

18

Non si accede all'hive HKEY_LOCAL_MACHINE nello stesso modo in cui si fa in C# come si farebbe nello script batch. Si chiama Registry.LocalMachine, come ad esempio:

 RegistryKey myKey = Registry.LocalMachine.OpenSubKey(@"Software\RSA", false); 
     String value = (String)myKey.GetValue("WebExControlManagerPth"); 

     if (!String.IsNullOrEmpty(value)) 
     { 
      ProcessAsUser.Launch(ToString()); 
     } 

Aggiornamento:

Se si restituisce un valore nullo, impostare la vostra architettura costruire per Qualsiasi CPU. Il sistema operativo può virtualizzare i registri a 32 e 64 bit in modo diverso. Vedere: http://msdn.microsoft.com/en-us/library/windows/desktop/aa965884%28v=vs.85%29.aspx, Reading 64bit Registry from a 32bit application e http://msdn.microsoft.com/en-us/library/windows/desktop/ms724072%28v=vs.85%29.aspx.

+0

Try it - getting null .... – MoShe

+0

I just upload screenshot – MoShe

+1

Hai privilegi amministrativi? L'hive Machine locale richiede i privilegi di amministratore per scrivere. Non sono sicuro che i privilegi amministrativi siano necessari per la lettura, ma potrebbero essere la causa della stringa nulla. JK, nullo anche per me. – Jason

1

esaminare le autorizzazioni di sicurezza della chiave di registro con regedt32.exe; controlla se stai eseguendo come amministratore e hai disattivato il controllo dell'account utente. Secondo la documentazione di opensubkey deve essere aperto prima di accedere a qualsiasi tasto; http://msdn.microsoft.com/en-us/library/z9f66s0a.aspx

1

Avevo extra "\" all'inizio del mio percorso, assicurati che sia impostato correttamente.

29

Il statement di Jason ha ragione, il sistema operativo è il problema, il codice riportato di seguito vi aiuterà a risolvere.

RegistryKey localKey; 
if(Environment.Is64BitOperatingSystem) 
    localKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64); 
else 
    localKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32); 

string value = localKey.OpenSubKey("RSA").GetValue("WebExControlManagerPth").ToString(); 
+1

Ottima correzione senza la necessità di compilare "Qualsiasi CPU" .. questa dovrebbe essere la risposta migliore. –

+0

FYI, funziona solo in .NET 4.0 e versioni successive .. – Ignatius

+1

@Ignatius, non ho controllato con .NET 4.0 di seguito. Grazie per le informazioni :) –

2

se si utilizza un sistema operativo a 64 bit, quando si sta cercando di ottenere HKEY_LOCAL_MACHINE\SOFTWARE\RSA in realtà è alla ricerca di HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\RSA che è il motivo per cui si ottiene nulla

+2

Sarebbe una risposta migliore, se si fornisce anche una soluzione insieme a questo. In caso contrario, includi questo come commento alla domanda. –

Problemi correlati