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
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 uygulamalarHKEY_LOCAL_MACHINE\Software
doğrudan kendi değerlerini depolamak. AltWow6432Node
32 bit uygulamaları bit uygulamalar hala bekledikleri gibiHKEY_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) altWow6432Node
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.
okuma/Windows Kayıt Defteri Java kulla...
Okuma logcat Program aracılığıyla uygu...
Kayıt defteri Anahtarı '...'...
Nasıl ve ne zaman Ember kullanmak için...
Uygun bir uygulama kayıt bulundu...