Erkennen der Registrierungsvirtualisierung

Ich habe eine Reihe von C # (v2) -Anwendungen und habe Probleme mit der Registrierungsvirtualisierung in Win7 (und in geringerem Maße in Vista).

Ich habe einen gemeinsam genutzten Konfigurationsbereich für die Registrierung, auf den meine Anwendungen in HKLM \ Software \ Company zugreifen müssen ... Vor Vista wurde alles nur an diesen Speicherort geschrieben und von dort gelesen, falls erforderlich.

Der Code hat Fehler beim Schreiben in diesen Registrierungsschlüssel entsprechend erkannt und ist entsprechend zurückgefallen (Schreiben in HKCU und Benachrichtigung des Benutzers darüber, dass die von ihm vorgenommenen Einstellungen nur den aktuellen Benutzer betreffen würden).

In Vista hat die Virtualisierung der Registrierung all dies verhindert, da die von uns für den HKLM-Schreibvorgang verwendete Zugriffsprüfung im Hintergrund "erfolgreich" war und stattdessen in HKCR \ VirtualStore \ Machine ... virtualisiert wurde. In diesem Fall würde der Benutzer denken, dass er die maschinenweite Konfiguration gespeichert, sondern nur in den virtuellen Speicher geschrieben hat.

Leider gibt selbst der Versuch, die Berechtigungen für den HKLM-Registrierungsschlüssel aufzulisten, explizit Ergebnisse zurück, die angeben, dass der Benutzer Zugriff darauf hat, ob dies der Fall ist oder nicht.

Als wir die Vista-Unterstützung hinzugefügt haben, haben wir einen Test durchgeführt, der in HKLM geschrieben wurde. Überprüfen Sie dann in HKCR \ VirtualStore \ Machine ... den gleichen Wert und stellen Sie fest, dass eine Virtualisierung stattgefunden hat, wenn der Wert gefunden wurde.

Win7 scheint dies (erneut) gestört zu haben, da Abfragen des expliziten virtuellen Speicherorts (HKCR) jetzt zusammengeführte Ergebnisse des HKLM-Speicherorts anzeigen, auch wenn der Schreibvorgang nicht virtualisiert wurde.

Hat jemand Vorschläge zur Umgehung dieses Problems?

Einschränkungen: - Ich benötige eine Lösung, die ohne Erhöhung funktioniert (wenn ich keine Administratorrechte habe, greife ich auf eine Benutzerkonfiguration in HKCU zurück, muss diesen Fall jedoch zuverlässig erkennen können).

Es muss mit einer C # -Anwendung der Version 2 funktionieren (Eine Option, die ich für C ++ - Code gesehen habe, ist das Einbetten eines Manifests, mit dem die Virtualisierung für die EXE-Datei deaktiviert wird, dies konnte ich jedoch in C # V2 nicht sehenDeaktivieren Sie die Ordnervirtualisierung in Windows).

Es muss ohne ein "Installationsprogramm" funktionieren (dies schließt die Möglichkeit aus, die Virtualisierung für den Registrierungsschlüssel zu deaktivieren, den wir ala den Befehl REG FLAGS ... benötigen).

Antworten auf die Frage(4)

Ihre Antwort auf die Frage