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.
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
Beispielverwendung:
%Vor% 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.
Tags und Links .net c# winapi registry .net-framework-version