2012-02-29 10 views
13

I持って私のレジストリで次のキーRegistry.GetValueは常に返すnullを

:私は、値オブジェクトの呼び出し持っHKEY_LOCAL_MACHINE\SOFTWARE\RSA - WebExControlManagerPathをし、その値が、私はこれを行うにしようとしていますc:\

です:

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

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

ただし、rの値は常にnullです。

enter image description here

任意のアイデア?

+0

私はこれを試してみて、それはまた、ヌル – MoShe

答えて

18

HKEY_LOCAL_MACHINEハイブにアクセスするのは、バッチスクリプトと同じようにC#で行うのと同じです。あなたのような、Registry.LocalMachine呼び出し:

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

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

更新:

それがnullを返した場合は、どれCPUにビルドアーキテクチャを設定します。オペレーティングシステムは、32ビットと64ビットのレジストリを異なる方法で仮想化する場合があります。参照:http://msdn.microsoft.com/en-us/library/windows/desktop/aa965884%28v=vs.85%29.aspx,Reading 64bit Registry from a 32bit applicationおよびhttp://msdn.microsoft.com/en-us/library/windows/desktop/ms724072%28v=vs.85%29.aspxを参照してください。

+0

トライを返しますそれは - ヌルを得る.... – MoShe

+0

私はただスクリーンショットをアップロードします – MoShe

+1

あなたは管理特権を持っていますか?ローカルマシンハイブには、書き込みには管理者特権が必要です。私は管理権限が読み込みに必要かどうか分からないが、あなたのヌル文字列の原因かもしれない。 JK、私のためのnullも。 – Jason

1

レジストリキーのセキュリティ権限をregedt32.exeで調べます。管理者として実行していて、UACをオフにしているかどうかを確認してください。 opensubkeyのドキュメントによれば、キーにアクセスする前にまずopenする必要があります。 http://msdn.microsoft.com/en-us/library/z9f66s0a.aspx

1

私のパスの先頭に余分な "\"があったので、正しく設定されていることを確認してください。

29

statementJasonが正しいです、オペレーティングシステムが問題です。以下のコードは解決に役立ちます。

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

"Any CPU"用にコンパイルする必要のない優れた修正。これが最上位の回答になるはずです。 –

+0

FYI、これは.NET 4.0以上でしか動作しません。 – Ignatius

+1

@Ignatius、私は以下の.NET 4.0でチェックしませんでした。あなたの情報ありがとう:) –

2

あなたはそれが実際にあなたがnullの取得理由ですHKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\RSA を探している HKEY_LOCAL_MACHINE\SOFTWARE\RSAを取得しようとしているときに、64ビットのオペレーティングシステムを使用している場合

+2

これに加えていくつかの解決方法を提供すると、より良い答えになります。そうでない場合は、質問にコメントとして含めてください。 –

関連する問題