2012-11-23 5 views
-1

Je lis la valeur d'une clé de Registre:Lire clé de Registre en C#

Microsoft.Win32.RegistryKey key; 
key = *someLongPathHere*; 

et d'afficher la valeur à une étiquette:

string a = (string)key.GetValue("");//a default value 
label1.Text = a; 

Il affiche:

{F241C880-6982-4CE5-8CF7-7085BA96DA5A} 

qui est la plupart du temps correct, à l'exception du premier trait de soulignement, qui existe dans la valeur d'origine:

{_F241C880-6982-4CE5-8CF7-7085BA96DA5A} 

Pourquoi cela se produit-il? c'est le soulignement manquant?

De plus, après avoir lu la clé, dois-je fermer la clé ou quoi que ce soit? Comment puis-je le faire?

+0

oh désolé j'ai oublié de les ajouter – Chin

Répondre

2

Il est assez facile de tester s'il existe ou non un problème systématique avec les valeurs de chaîne contenant des traits de soulignement. Vous pouvez simplement créer une telle valeur dans l'éditeur de registre, puis le lire dans votre programme C# avec GetValue(). Lorsque vous le faites, vous découvrirez que le code de registre C# ne perd pas de soulignement. Donc, il doit y avoir une autre explication pour votre problème.

Ma meilleure estimation est que votre composant d'étiquette n'affiche pas le trait de soulignement. Je ne suis pas très familier avec les frameworks C# UI mais cela semble plausible. Essayez de regarder la valeur de a sous le débogueur plutôt que dans une légende d'étiquette sur votre interface utilisateur. L'autre chose qui vient à l'esprit est que vous avez une redirection de registre parce que vous avez un processus x86 fonctionnant sous x64, et votre clé est sous une clé redirigée, HKLM \ Software, par exemple. Peut-être que si vous regardez sous le Wow6432Node, vous verrez la différence de soulignement. En ce qui concerne la gestion de la durée de vie de la clé, celle-ci est soutenue par une ressource non-démontée. À savoir un Windows HKEY. La classe RegistryKey implémente IDisposable et vous devez donc placer vos clés dans une instruction using.

+0

la valeur de 'a' est également sans le trait de soulignement – Chin

+0

Lorsque je mets' {_F241C880-6982-4CE5-8CF7-7085BA96DA5A} 'dans une étiquette WPF, le trait de soulignement n'est pas visible. Quel cadre utilisez-vous? –

+0

J'ai essayé 'label1.Text =" {_F241C880-6982-4CE5-8CF7-7085BA96DA5A} ";' et cela a fonctionné, donc je pense que ce n'est pas le problème. Probablement à cause du casting 'string'? – Chin