Registry als eingeschränkter Benutzer auslesen

Meldur

Erfahrenes Mitglied
Hallo,

kann man aus dem Schlüssel "LocalMachine\Software" als eingeschränkter Nutzer Daten auslesen? Als Admin geht das ohne Probleme, aber wenn eben dieser eingeschränkte Nutzer folgenden Code aufruft:


Code:
Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.LocalMachine;
Microsoft.Win32.RegistryKey pathKey = regKey.OpenSubKey("Software\\MyApplication", true);
bekomme ich eine Exception die mit "Requested registry access is not allowed." am Ende. Wie kann ich also als eingeschränkter Nutzer auf Schlüssel unter Software zugreifen, um sie zu verändern?

Danke,
Meldur
 
Das dachte ich mir dann auch als Plan B. Ist CurrentUser trotz seines Names denn für alle User im System geltend, sprich sind die Werte die ich dort setze für alle Benutzer die Gleichen? Das wäre nämlich Bedingung.
 
Hallo CurrentUser ist nur für den aktuell angemeldeten User. Wenn du LocalMachine nur auslesen willst, dann solltest du den Key auch nur zum Lesen, aber nicht zum Lesen und Schreiben öffnen.

Also statt
C#:
... = regKey.OpenSubKey("Software\\MyApplication", true);
nur
C#:
... = regKey.OpenSubKey("Software\\MyApplication"); // Öffnet den Key read-only
verwenden.

Ich bin mir nicht sicher, glaube aber, dass das auch mit eingeschränkten Benutzerrechten funktioniert.

Gruß
MCoder
 
Generell für die Anwendung gültige Einstellungen sollten - wenn schon unbedingt notwendig - bei der Installation geschrieben werden. Sobald eine benutzerspezifische Überschreibung notwendig wird, dann diese auch nur für den aktuellen Benutzer. D.h. Für die Installation wären dann Admin-Rechte notwendig. Danach wird nur mehr gelesen. D.h. auch den Key nur im Lesemodus öffnen.

Gegebenenfalls müssen trotzdem noch Rechte auf dem Eintrag gesetzt werden.
 
Also ich beschreibe mal das Szenario, vielleicht sieht ja jemand eine andere Lösung dafür. Ich starte einen lokalen Weberver. Dieser sucht sich einen freien Port auf dem er arbeiten kann und schreibt ihn für alle anderen Anwendungen, die darauf zugreifen wollen, in die Registry, da der Port auf jedem System eine anderer sein kann (da evtl. schon belegt). Deshalb brauche ich zur Laufzeit Schreibrechte. @MCoder - dass ich zum Lesen eines Schlüssels den "Writeable"-Flag auf false setze, war mir schon klar :) - aber wie ich geschrieben habe, funktioniert true nicht bei eingeschränkten Benutzerkonten. Ich werde also immer im CurrentUser schreiben, da sowieso jedes Mal neu geschreiben wird. Hatte nur gehofft, dass die Anwendungen, welche bereits auf diesen festen Registryeintrag gepolt sind nicht nochmal umgeschreiben werden müssen.
Aber danke dennoch!
 
D.h. der Webserver läuft bei jedem Start auf einem anderen Port?

Fährst du da zufällig über den ASP.NET Development Server? Wenn ja, setze doch IIS ein, dann hast du dieses Problem schon mal nicht.
 
Ich hab das Ding jetzt schon mit dem kleinen Cassini bestückt und das geht soweit ganz gut und ich kann nicht bei jedem Rechner davon ausgehen, dass der IIS aktiv ist.
Aber ich habe es jetzt über den CURRENT_USER gelöst.
 

Neue Beiträge

Zurück