SORU
10 HAZİRAN 2009, ÇARŞAMBA


Okuma 64 bit 32 bit bir uygulama Kayıt Defteri

Bir c# birim test AnyCPU için derlenmiş bir proje. Yapı sunucumuz 64 bit bir makine, ve örnek SQL Express yüklü bir 64-bit vardır.

Test proje için kod yolunu belirlemek için aşağıdaki gibi kullanır .MDF dosyalar:

    private string GetExpressPath()
    {
        RegistryKey sqlServerKey = Registry.LocalMachine.OpenSubKey( @"SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL" );
        string sqlExpressKeyName = (string) sqlServerKey.GetValue( "SQLEXPRESS" );
        RegistryKey sqlInstanceSetupKey = sqlServerKey.OpenSubKey( sqlExpressKeyName   @"\Setup" );
        return sqlInstanceSetupKey.GetValue( "SQLDataRoot" ).ToString();
    }

Bu kod 32 bit bizim iş istasyonları üzerinde çalışıyor, ve ben son zamanlarda NCover ile kod kapsama analizi etkin kadar Tamam yapı sunucu üzerinde çalışma yaptı. NCover 32 bit bir COM bileşeni kullanır, çünkü, test runner (Gallio) 32 bit işlem olarak çalışır.

Kayıt kontrol "Örnek İsim" kilit altında

SOFTWARE\\Wow6432Node\Microsoft\Microsoft SQL Server

Kayıt dışında Wow6432Node erişmek için bir uygulama, 32-bit modunda çalıştırmak için bir yolu var mı?

CEVAP
5 Kasım 2012, PAZARTESİ


Hala 64 bit Windows kullanarak altında kayıt defteri erişim için yerel destek var.NET Çerçeve 4.x. Aşağıdaki kod Windows 7 64 bit ile test edilmiştir. Erişim için64 bit kayıt defterikullanabilirsiniz:

string value64 = string.Empty; 
RegistryKey localKey = 
    RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, 
        RegistryView.Registry64); 
localKey = localKey.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion"); 
if (localKey != null) 
{ 
    value64 = localKey.GetValue("RegisteredOrganization").ToString(); 
} 
Console.WriteLine(String.Format("RegisteredOrganization [value64]: {0}",value64));

Bu erişmek istiyorsanız32 bit kayıt defterikullanın:

string value32 = string.Empty; 
RegistryKey localKey32 = 
    RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, 
        RegistryView.Registry32); 
localKey32 = localKey32.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion"); 
if (localKey32 != null) 
{ 
    value32 = localKey32.GetValue("RegisteredOrganization").ToString(); 
} 
Console.WriteLine(String.Format("RegisteredOrganization [value32]: {0}",value32));

Kafanız karışmasın, her iki sürümü ilk parametre olarak Microsoft.Win32.RegistryHive.LocalMachine kullanarak, kullanılıp ayrım yapmak64 bitya32 bitBu tarafından2 parametre(RegistryView.Registry32 karşıRegistryView.Registry64).

Notbu

  • Bir 64-bit Windows, HKEY_LOCAL_MACHINE\Software\Wow6432Node değerleri 32 bit uygulamaları 64 bit sistemde çalışan tarafından kullanılan içerir. 64 bit sadece gerçek uygulamalar HKEY_LOCAL_MACHINE\Software doğrudan kendi değerlerini depolamak. Alt Wow6432Node 32 bit uygulamaları bit uygulamalar hala bekledikleri gibi HKEY_LOCAL_MACHINE\Software (yeniden yönlendirme bir tür) için tamamen şeffaftır. Windows'un eski sürümlerinin yanı sıra, 32 bit Windows 7 (ve Vista 32 bit) alt Wow6432Node belli kideğilvar.

  • Bir hata yüzünden Windows 7 (64 bit), 32 bit kaynak kodu sürüm her zaman döndürür "Microsoft" ne olursa olsun, hangi kuruluş var kayıtlı ise 64 bit kaynak kodu sürümü döndürür doğru organizasyon.

Verdiğiniz örneğe dönecek olursak; bu şu şekilde 64 bit şubesine erişim için:

RegistryKey localKey = 
    RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, 
        RegistryView.Registry64); 
RegistryKey sqlServerKey = localKey.OpenSubKey(
    @"SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL");
string sqlExpressKeyName = (string) sqlServerKey.GetValue("SQLEXPRESS");

İpucu:Linqpad Windows 7 altında tüm örnekler test etmek için kullanabilirsiniz. Bir kurulum gerektirmez.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FILIPeeeK

    FILIPeeeK

    22 Mayıs 2006
  • pain975

    pain975

    27 NİSAN 2008
  • TechnoBuffalo

    TechnoBuffal

    8 HAZİRAN 2007