Schreiben an hkey_local_maachine von .NET wird in Vista oder Windows 7 nicht virtualisiert?

StackOverflow https://stackoverflow.com/questions/4777228

  •  23-10-2019
  •  | 
  •  

Frage

Ich habe Probleme, die VirtualStore -Virtualisierung von Registrierungsoperationen in Vista und/oder Windows 7 zu verstehen. Ich dachte, ich versuchte, etwas in die zu schreiben HKEY_LOCAL_MACHINE Root beim Ausführen als Standardbenutzer fordert Windows auf, den Vorgang zu virtualisieren und an zu schreiben Hkey_current_user/classes/virtualstore/machine stattdessen. Ich habe gesehen, dass sich mehrere ältere Anwendungen genau so verhalten.

Wenn Sie jedoch versuchen, dieses Verhalten in C# und .NET4 zu replizieren Unbefugte Accessexception stattdessen. Gibt es eine Möglichkeit, Virtualisierung zu erzwingen?

Um der Frage einen Kontext zu geben: Ich versuche, Registrierungsschlüssel zu lesen und zu manipulieren, die ursprünglich von einer anderen Legacy -App erstellt wurden. In Vista oder Windows 7 befinden sich diese im VirtualStore. Ich würde gerne die gleiche Registrierungszugriffslogik sowohl für WinXP als auch für oben verwenden und der Meinung, dass meine Registrierungsoperationen genauso wie die Operationen aus der Legacy -App virtualisiert würden (und deshalb mit den gleichen Schlüssel arbeiten würden). Dies funktioniert nicht wie erwartet und die einzige Problemumgehung, die ich kenne Wenn der Benutzer Vista oder 7 ausführt und UAC aktiviert hat... scheint jedoch hässlich zu sein, insbesondere wenn Microsoft beschließt, das Virtualisierungsverhalten in zukünftigen Windows -Versionen zu ändern.

War es hilfreich?

Lösung

Der MSDN -Artikel Registrierungsvirtualisierung in Windows Vista erklärt, dass bestimmte Prozesseklassen Virtualisierung deaktiviert sind:

  • 64-Bit-Prozesse
  • Ausführbare Säle, die eine im Manifest festgelegte angeforderte Ausführungen haben
  • und einige andere; Überprüfen Sie den Artikel für Details

Eine oder beide der ersten beiden sind in der Regel für eine .NET-Anwendung zutreffend (aufgrund des von Compiler unterstützten Standardmanifests). Sie müssten das Manifest entfernen (damit Ihre Anwendung wie eine Legacy -App aussieht), um die Virtualisierung zu ermöglichen, wäre dies jedoch eine schlechte Idee (für die Überkompatibilität für die Weiterleitungen mit Windows). Nehmen wir stattdessen einfach an, dass Ihre App nicht auf Vista (und später) virtualisiert wird und entsprechend fortfahren wird.

Darüber hinaus warnt der Artikel, dass "Microsoft beabsichtigt, diese Form der Virtualisierung aus zukünftigen Versionen des Windows -Betriebssystems zu entfernen ... es ist unbedingt erforderlich, dass Ihre Anwendung nicht harte Abhängigkeit von der Vorhandensein von Virtualisierung im System ist." Welcher Code, den Sie schreiben, erwarten, dass der VirtualStore -Schlüssel in einer zukünftigen Version von Windows möglicherweise nicht vorhanden ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top