2010-09-06 8 views
1

J'ai une petite application qui lit les valeurs de chaîne de clé de registre. Il fonctionne bien, mais pour une raison quelconque, il échoue sur cette clé: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductId En dépit de travailler sur d'autres valeurs de HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Impossible de lire certaines clés de registre par programme

Il échoue également sur `HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Cryptography \ MachineGuid »

Je courais comme un administrateur, est-ce un facteur? Je cours W7 64bit, une autre machine W7 et la machine de Vista fonctionnent bien. Mes seules suppositions sont un problème d'autorisation, ou lié à moi en cours d'exécution 64 bits.

Des idées?

mise à jour: Il semble y avoir quelque chose à voir avec mon système exécutant Windows 64 bits et \Software\Wow6432Node\. Je ne sais pas ce que est cependant. Je possède \Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\ et \Software\Microsoft\Windows NT\CurrentVersion\ mais seulement celui-ci contient une valeur ProductId ... pour une raison quelconque quand je demande la touche Windows est apparemment à la recherche dans le Wow6432Node

Nous utilisons wxWidgets, mais pouvez probablement utiliser un code win32 directement si nécessaire ... notre application est une application 32 bits mais les PC cibles pourraient exécuter des versions 32 ou 64 bits de Windows

+1

Si vous n'avez pas affiché le code, nous ne pouvons pas vous aider. Avez-vous regardé l'ACL? Il n'accorde pas nécessairement à l'utilisateur admin particulier que vous utilisez. Quel code d'erreur obtenez-vous? – bmargulies

+0

C'est le code wrapper dans wxWindows ... vous venez de passer dans le chemin de la clé et pour tout le reste cela fonctionne. –

+0

Pouvez-vous développer «ça échoue»? Sûrement, il y a un code d'erreur retourné, pouvez-vous nous dire ce que c'est? – James

Répondre

0

Je viens de regarder mon registre et il n'y a pas de clé à HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProductId ou MachineGuid, c'est sur Win7 64 bits

+0

Lorsque je lance regedit, je vois ProductId dans 'SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \' mais pas 'SOFTWARE \ Wow6432Node \ Microsoft \ Windows NT \ CurrentVersion \'. Puis-je forcer regedit à fonctionner en mode 32/64 bits? –

+1

Ceci est un commentaire follement tardif, mais vous pouvez. Utilisez "regedit" pour l'accès au registre 64 bits, et "regedt32" pour l'accès au registre 32 bits. S'applique uniquement aux fenêtres 64 bits. – Wug

0

J'ai obtenu le code suivant pour travailler sur une boîte XP 32 bits et une boîte Win 7 64 bits. Je pense que cela devrait couvrir la plupart des bases.

// start out trying to read machine guid on 32 bit machine 
object value = Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography", @"MachineGuid", (object) "defaultValue"); 

if (value != null && value.ToString() != "defaultValue") 
{ 
    return value.ToString(); 
} 

// read machine guid on 64 bit machine 
RegistryKey regKeyBase = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64); 
RegistryKey regKey = regKeyBase.OpenSubKey(@"SOFTWARE\Microsoft\Cryptography", RegistryKeyPermissionCheck.ReadSubTree); 
value = regKey.GetValue("MachineGuid", (object) "defaultValue"); 

regKeyBase.Close(); 
regKey.Close(); 

if (value != null && value.ToString() != "defaultValue") 
{ 
    return value.ToString(); 
} 

return string.Empty; 
Questions connexes