Hallo zusammen
gibt es eine Möglichkeit zu prüfen, ob die Windows UAC (Benutzerkntensteuerung) aktiv ist.
Im Internet habe ich verschiedene Varianten gefunden die jedoch die Registry verwenden. Ich gehe aber davon aus dass wenn die UAC aktiv ist, ich ggf. kein Zugriff auf die Registry von meinem Programm her habe.
Danke für die Hilfe.
Da fällt mir doch glatt nen Bookmark ein: C# code to detect UAC elevation on Vista
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hi Abt
diese Seite habe ich auch gefunden, jedoch zeigt diese nicht immer die richtigen Werte an.
Wenn Sie z.B. auch der zweituntersten Stufe steht, gibt das Programm an, dass die UAC nicht aktiv ist.
Dann ist sie allem Anschein nach laut MS Definition ab der zweitem Stufe aus.
Der Code nutzt die Windows API - ich bezweifel, dass es hier unterschiedliche Schnittstellen bzw. Funktionen innerhalb der Schnittstelle gibt, die das auslesen.
Du scheinst also eine andere Definition von "AUS" als MS hier zu haben; unendlich viele Lösungen wirds hier nicht geben. Wenn Dir das nicht ausreicht und Du keinen Zugriff auf die Registry hast..
Wozu musst Du denn überhaupt wissen, ob UAC aus ist?
Wieso forderst Du nicht einfach von UAC die Rechte an, wenn Du sie brauchst?
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Ich möchte den Kunden so wenig wie möglich "stören". D.h. ich möchte eigentlich prüfen ob sie aktiv ist. Wenn ja dann speichere ich die Programmeinstellungen und Logbücher etc. in ProgramData\xxx, weil das Programm mit aktiver UAC ja keinen Schreibzugriff auf z.B. Program Files\xxx hat.
Ist die UAC nicht aktiv, dann speichere ich alles in den Installationspfad welcher meistens Program Files\xxx ist.
Die UAC hat vier Stufen: Standardeinstellung ist ja Stufe drei.
Wenn ich die UAC jetzt aber auf Stufe zwei setze, sagt mir das Programm, dass die UAC nicht aktiv ist. Somit gibt sie mir eine falsche Information, oder die Kriterien sind irgendwie anderst definiert.
Wenn es nach mir gehen würde, könnte ich das problemlos aus der Registry auslesen. Nur gibt es da ja auch Einschränkungen wenn die UAC aktiv ist, oder nicht?
Kann ich immer aus der Registry Werte auslesen wenn die UAC aktiv ist?
Stellt sich noch die Frage, in wieweit das da Sinn macht.
Warum nicht gleich in den richtigen (ProgrammData) Ordner schreiben?
Dazu auch folgendes Szenario
Der User stellt UAC aus installiert dein Programm und stellt UAC wieder an.
Hallo Pioneer17,
du befindet sich auf einem Irrweg.
Du solltest die Dateien immer im richtigen (also dafür vorgesehenen) Pfad speichern und nicht nur wenn die UAC ausgeschaltet ist. Dateien, die vom Programm geändert werden, gehören jedenfalls weder ins Programmverzeichnis noch in ein Unterverzeichnis davon. Der Wunsch, dass Programm und alle Daten an einem Ort liegen, ist zwar nachvollziehbar, hat aber verschiedene Nachteile und verkennt die Arbeitsweise von und die Realitäten unter Windows (Stichworte: Multiuserfähigkeit, Roaming, ...)
Mal abgesehen davon, dass selbst wenn du bei der Installation zutreffend ermitteln könntest, ob der Benutzer die UAC ein oder ausgeschaltet hat, das ja nichts darüber aussagt, ob die UAC zum Zeitpunkt der Ausführung des Programms ein- oder ausgeschaltet sein wird. Vielleicht hatte der Benutzer die UAC gerade deshalb temporär ausgeschaltet, weil er mehrere Programme installieren wollte.
herbivore
Ok, danke an Alle.
Werde es wohl oder übel umbauen 😉
Wie sieht es aber Grundsätzlich mit Zugriffen auf die Registry aus?
Davon ausgehend, dass der Benutzer welcher das Programm benutzt Admin Rechte hat, kann ich dann mit aktivierter UAC die Registry lesen und schreiben?
Wie sieht das mit Benutzer aus welche keine Admin Rechte haben?
Sollte ich Grundsätzlich davon absehen mit gewisse Infos in die Registry zu schreiben? Sollte ich besser eine "konfig-Datei" verwenden welche ebenfalls im ProgramData\xxx abgelegt ist?
Hallo Pioneer17,
die Frage, wie und wo du die Konfiguration speicherst, hat mit UAC und Adminrechten nichts mehr zu tun. Der übliche Weg ist [Tutorial] Konfigurationsmodell im .NET Framework. Die Registry sollte eher nicht mehr genutzt werden.
herbivore
Mal generell: Ob UAC aktiviert ist oder nicht, oder ob du Administrator bist oder nicht - das ganze sagt überhaupt nichts darüber aus, ob du z.B. bestimmte Schreibrechte hast.
Auch mit deaktivierten UAC und als Admin kann dir der Schreibzugriff im Programmverzeichnis (oder Registry, etc.) verwehrt bleiben.