2009-08-12 10 views
27

を返します。それはローカルマシンのハイブの下でそれを見つけることはありませんか?Registry.LocalMachine.OpenSubKeyは()私は戻ってWindowsレジストリにアクセスするには、この試みからヌルを得るヌル

+1

あなたが適切キーパスをエスケープしていますか? "SOFTWARE \ TestKey"ではなく "SOFTWARE \ TestKey"ですか? – Michael

+0

はい、私は間違って投稿しました。これは実際には\\ – PositiveGuy

+1

を使用するようにセットアップされているので、これは私の上司のPCでうまくいきました。それがここではいけない理由はありません。 VS Webサーバーを実行していて、nullを返すので、asp.netアカウントへのアクセス権を与えました。 – PositiveGuy

答えて

2

あなたのコメントでは、あなたはASP.NETアカウントへのアクセス権を与えたと言いました。しかし、サイトが実行中のアカウントであることを確認しましたか?偽装と匿名アクセスユーザーは簡単に見落とすことができます。

テストされていないCODE:

Response.Clear(); 
Response.Write(Environment.UserDomainName + "\\" + Environment.UserName); 
Response.End(); 
+0

公開するコードを記述しなくても、サイトが実行されているアカウントを特定するにはどうすればよいですか? – PositiveGuy

+0

上記は一般的にどのように私はアカウントの問題をトラブルシューティングしていますが、私は誰もが見ることができないように自分のIPアドレスから来ているという点でチェックを追加しています。 –

57

あなたは64ビットマシン上にある場合、それが起こることができます。第1のヘルパークラスを作成します(.NET 4.0以降が必要):

public class RegistryHelpers 
{ 

    public static RegistryKey GetRegistryKey() 
    { 
     return GetRegistryKey(null); 
    } 

    public static RegistryKey GetRegistryKey(string keyPath) 
    { 
     RegistryKey localMachineRegistry 
      = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, 
             Environment.Is64BitOperatingSystem 
              ? RegistryView.Registry64 
              : RegistryView.Registry32); 

     return string.IsNullOrEmpty(keyPath) 
      ? localMachineRegistry 
      : localMachineRegistry.OpenSubKey(keyPath); 
    } 

    public static object GetRegistryValue(string keyPath, string keyName) 
    { 
     RegistryKey registry = GetRegistryKey(keyPath); 
     return registry.GetValue(keyName); 
    } 
} 

使用法:

string keyPath = @"SOFTWARE\MyApp\Settings"; 
string keyName = "MyAppConnectionStringKey"; 

object connectionString = RegistryHelpers.GetRegistryValue(keyPath, keyName); 

Console.WriteLine(connectionString); 
Console.ReadLine(); 
+9

この回答には.NET 4.0以降が必要です。 – ganders

+1

+1これは私を大いに助けました、ありがとう。 –

+1

ありがとう!あなたは私の一日を救った! – raven

関連する問題