Heim > Backend-Entwicklung > C++ > Wie greife ich von einer 32-Bit-.NET-Anwendung aus auf 64-Bit-Registrierungsschlüssel zu?

Wie greife ich von einer 32-Bit-.NET-Anwendung aus auf 64-Bit-Registrierungsschlüssel zu?

Mary-Kate Olsen
Freigeben: 2025-01-16 19:16:10
Original
902 Leute haben es durchsucht

How to Access 64-bit Registry Keys from a 32-bit .NET Application?

Zugriff auf 64-Bit-Registrierungseinträge aus einer 32-Bit-.NET-Anwendung

Der Zugriff auf die 64-Bit-Registrierung von einer 32-Bit-Anwendung, die auf einem 64-Bit-Windows-System ausgeführt wird, erfordert einen bestimmten Ansatz. Glücklicherweise bieten .NET Framework 4.x und spätere Versionen dafür integrierte Unterstützung.

Nutzung von RegistryView für den 64-Bit-Registrierungszugriff

Die Aufzählung RegistryView ist der Schlüssel zur Unterscheidung zwischen 32-Bit- und 64-Bit-Registrierungszugriff. So verwenden Sie es:

1

2

3

4

5

6

7

8

9

// Access the 64-bit registry

using Microsoft.Win32;

 

RegistryKey localKey64 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);

RegistryKey sqlServerKey64 = localKey64.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL");

 

// Access the 32-bit registry

RegistryKey localKey32 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);

RegistryKey sqlServerKey32 = localKey32.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL");

Nach dem Login kopieren

Bestimmte Registrierungswerte abrufen

Um einen bestimmten Wert wie „SQLEXPRESS“ unter dem Schlüssel „Instance NamesSQL“ abzurufen, verwenden Sie:

1

string sqlExpressKeyName = (string)sqlServerKey64.GetValue("SQLEXPRESS");

Nach dem Login kopieren

Umfassender Schlüsselabruf: Kombination von 32-Bit- und 64-Bit-Ergebnissen

In Situationen, in denen Daten sowohl von 32-Bit- als auch von 64-Bit-Registrierungsspeicherorten benötigt werden, ist eine kombinierte Abfrage von Vorteil:

1

2

3

4

5

6

7

8

9

using System.Linq;

 

IEnumerable<string> GetAllRegValueNames(string regPath)

{

    var reg64 = GetRegValueNames(RegistryView.Registry64, regPath);

    var reg32 = GetRegValueNames(RegistryView.Registry32, regPath);

    var result = (reg64 != null && reg32 != null) ? reg64.Union(reg32) : (reg64 ?? reg32);

    return (result ?? new List<string>().AsEnumerable()).OrderBy(x => x);

}

Nach dem Login kopieren

Wobei GetRegValueNames eine Hilfsfunktion ist (nicht gezeigt, aber leicht zu implementieren), die Wertnamen unter einem bestimmten Schlüssel abruft. regPath gibt den Registrierungspfad an.

Beispielverwendung:

1

2

3

4

5

6

var sqlRegPath = @"SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL";

foreach (var keyName in GetAllRegValueNames(sqlRegPath))

{

    Console.WriteLine(keyName);

}

```  This iterates through all found keys, regardless of whether they reside in the 32-bit or 64-bit registry hive.

Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie greife ich von einer 32-Bit-.NET-Anwendung aus auf 64-Bit-Registrierungsschlüssel zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage