Welche Alternativen zu RegistryKey.OpenBaseKey gibt es in .NET 3.5?

8

Ich habe an einem Installationspaket gearbeitet und RegistryKey.OpenBaseKey , um mit benutzerdefinierten Aktionen zu arbeiten, die die 64-Bit-Registrierung oder die 32-Bit-Registrierung eines MSI-Pakets öffnen und Schlüssel hinzufügen / entfernen, aber dazu muss ich .NET installieren Framework 4 auf dem Zielcomputer vor dem Ausführen meines Installationsprogramms mit einem Bootstrapper oder etwas anderem, weil OpenBaseKey nur in .NET Framework 4 eingeführt wurde. Im Idealfall möchte ich nur .NET Framework 3.5 und noch immer als Ziel verwenden in der Lage sein, entweder die 64-Bit- oder die 32-Bit-Registrierungsstruktur wie in OpenBaseKey zu ändern; dann würde ich .NET 4 und den Overhead der Installation nicht brauchen.

Gibt es Alternativen zu OpenBaseKey für diejenigen von uns, die .NET 4 nicht als Voraussetzung sehen wollen? So etwas wie P / Aufrufen einer bestimmten WinAPI-Methode, um das vielleicht abzustoßen? Ich bin nicht sicher, was es dauern würde.

    
Alexandru 06.10.2014, 13:24
quelle

2 Antworten

13

Für alle, die an einer C # -Lösung für einige der vorherigen Versionen von .NET interessiert sind, um nicht zu viel Code umgestalten zu müssen, ist es nicht schön, aber hier ist es völlig möglich, Reflektionen zu verwenden. Ich habe diesen Trick im XSharper-Quellcode .

%Vor%

Beispielverwendung:

%Vor%     
Alexandru 04.03.2015, 22:21
quelle
2

Für .NET-Versionen vor Version 4 gibt es keine Framework-API, die den Zugriff auf alternative Registrierungsansichten ermöglicht. Um auf alternative Sichten zuzugreifen, müssen Sie die native API RegOpenKeyEx aufrufen, indem Sie eines der Flags KEY_WOW64_32KEY oder KEY_WOW64_64KEY entsprechend übergeben.

Die gängigsten Methoden hierfür sind C ++ / CLI-Mixed-Mode-Assemblys oder P / Invoke . Das macht aber überhaupt nicht viel Spaß. Die Registrierung APIs sind einige der schwieriger zu verwenden, da sie mehrere Datentypen für Werte unterstützen.

    
David Heffernan 06.10.2014 13:44
quelle