2012-11-09 13 views
5

Ho un'applicazione C# che chiama:Perché l'applicazione a 32 bit non accede all'hive del Registro di sistema a 32 bit?

Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\MyApp")     

Si trova a bersaglio 86, e quando l'eseguo mi può vedere da Task Manager che si tratta di un processo a 32 bit. Tuttavia, quella riga di codice è stranamente destinata all'hive a 64 bit di HKCU \ Software \ MyApp, invece dell'hive a 32 bit in HKCU \ Software \ Wow6432Node \ MyApp. Qualche idea?

Ho anche avviato due istanze di Powershell, una a 32 bit e una a 64 bit, e ho eseguito il sotto ma entrambe restituiscono i valori anche nell'hive a 64 bit.

get-itemproperty -Path Registry::HKEY_CURRENT_USER\Software\MyApp 

Qualche idea di cosa potrebbe essere andato storto qui? Ho verificato a tre volte che le impostazioni del registro degli hive a 32 e 64 bit sono diverse anche da regedit.

+0

Potrebbe essere che il CRL rileva che si sta utilizzando un comptuer a 64 bit e passa quell'alveare. Solo un'ipotesi !! – FrostyFire

risposta

4

Poiché si accede a una chiave (HKCU \ Software) condivisa, non reindirizzata. Vedere http://msdn.microsoft.com/en-us/library/windows/desktop/ms724072(v=vs.85).aspx e (più precisamente) http://msdn.microsoft.com/en-us/library/windows/desktop/aa384253(v=vs.85).aspx

Dal primo link (sottolineatura mia):

a 64 bit di Windows, porzioni delle voci di registro sono memorizzati separatamente per applicazione a 32 bit e Applicazioni a 64 bit e mappate in viste logiche separate del registro utilizzando il redirector del registro di sistema e il riflesso del registro , poiché la versione a 64 bit di un'applicazione può utilizzare diverse chiavi e valori del Registro di sistema rispetto alla versione a 32 bit. Lì sono anche chiavi di registro condivise che non vengono reindirizzate o riflesse.

Problemi correlati