2009-08-12 9 views
27

Ben Windows Kayıt erişmek için bu girişiminden geri bir null almak döndürür:Registry.LocalMachine.OpenSubKey() boş

using (RegistryKey registry = Registry.LocalMachine.OpenSubKey(keyPath)) 

ana yol SOFTWARE\\TestKey

anahtar kayıt defterinde olduğu, neden olduğu Yerel Makine kovanı altında bulamıyor mu?

+1

düzgün Ana yol kaçan mı? "YAZILIM \\ TestKey" ve "YAZILIM \ TestKey" değil mi? – Michael

+0

evet, yanlış yazdım. Bu aslında \\ – PositiveGuy

+1

kullanmak için kurulum Yani bu benim patronun PC üzerinde çalıştı sadece iyi. Burada olmamasının bir sebebi yok. VS web sunucusunu çalıştırdığımdan ve hala null döndürdüğünden asp.net hesap erişimini verdim. – PositiveGuy

cevap

2

Dana ile yaptığınız görüşmede, ASP.NET hesabına erişim verdiğinizi söylediniz. Ancak, bunun sitenin altında çalıştığı hesap olduğunu doğruladınız mı? Taklit ve anonim erişim kullanıcısı gözden kaçırmak kolay olabilir.

denenmemiş KODU: Eğer 64-bit makinede ise

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

Sitenin hangi hesapta çalışacağını kod yazmak zorunda kalmadan nasıl çözebilirim? – PositiveGuy

+0

iyi, genellikle ben sadece herkesin göremez, böylece benim ip adresinden geliyor bir kontrol eklese de hesap sorunları nasıl genellikle ben sorunları gidermek olduğunu. –

57

O gerçekleşebilir. (Daha sonra .NET 4.0 veya gerektirir) ilk olarak bir yardımcı sınıf oluşturun:

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); 
    } 
} 

Kullanımı:

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

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

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

Bu cevabın .NET 4.0 veya daha yüksek bir sürüm gerektirdiği unutulmamalıdır. – ganders

+1

+1 Bu bana çok yardımcı oldu, teşekkürler. –

+1

Teşekkürler! Sadece günümü kurtardın! – raven

İlgili konular