![]() |
Adminrechte nur verlangen, wenn benötigt.
Hi,
ich habe folgendes Problem: Mein Updater soll erkennen, ob er zum Schreiben in den eigenen Ordner Adminrechte benötigt (z.B. wenn er in C:\Programme liegt). Ich dachte mir am Anfang, dass ich es so realisieren könnte, dass das Programm versucht eine Testdatei im Hauptordner zu erstellen und dann prüft, ob diese denn auch vorhanden ist. Nur leider schiebt Vista/7 diese Datei ohne Adminrechte in einen virtuellen Ordner und das Programm gibt immer aus, dass die Datei existiert - egal ob es nun im echten Ordner liegt oder nicht.
Delphi-Quellcode:
Deswegen meine Frage an euch: Wie kann ich überprüfen lassen, ob das Programm Schreibrechte für den Ordner xy benötigt, sodass es ggf nach Adminrechten fordert.
needuac:=true;
copyfile(pchar(application.exename),pchar(application.exename+'.bak'),false); showmessage(application.exename+'.bak'); if fileexists(application.exename+'.bak') then begin deletefile(application.exename+'.bak'); needuac:=false; end; Danke für eure Hilfe MfG Dimholz |
Re: Adminrechte nur verlangen, wenn benötigt.
Hai Dimholz,
erst einmal: "Herzlich Willkommen in der Delphi-PRAXiS". Ich würde anders an die Sache gehen. Prüfe ob der angemeldete Benutzer Adminrechte hat oder nicht. Wenn nicht gib eine Meldung aus das Updates nur von einem Administrator eingespielt werden können. |
Re: Adminrechte nur verlangen, wenn benötigt.
Zitat:
Im Grunde genommen soll mein Updater auch ohne Adminrechte funktionieren, wenn er z.B. nur in einem nicht geschützten Bereich (wie Desktop oder andere Partitionen) schreiben muss. Allein wenn Adminrechte zwingend benötigt werden, soll eine UAC-Abfrage kommen. Bis jetzt hatte ich das Programm so eingestellt, dass es immer einen UAC-Dialog anzeigte. Dies möchte ich aber nun ändern. MfG Dimholz |
Re: Adminrechte nur verlangen, wenn benötigt.
Ich denke eher, dass du die Dateisystemvirtualisierung abschalten solltest - dann dürfte CopyFile nämlich einen Fehler liefern. Wie du das erreichst, sollte in diversen anderen Threads stehen.
|
Re: Adminrechte nur verlangen, wenn benötigt.
Mittels einen einfachen API-Calls kannst Du herausfinden, ob die Applikation gerade Admin-Rechte hat oder nicht: http://msdn.microsoft.com/en-us/library/bb776463(VS.85).aspx
Du kannst für eine laufende Anwendung nicht einfach nachträglich Adminrechte abrufen, aber mittels der Restart & Recovery API kannst Du Deine Applikation selber beenden und dann mit Adminrechten (UAC) vom Betriebssystem neu starten lassen. Der Taskmanager unter Windows macht das z.B. wenn Du ihn startest und dann unten auf den Button drückst um die Prozesse aller User anzeigen zu lassen. Ist eigentlich relativ einfach. |
Re: Adminrechte nur verlangen, wenn benötigt.
Zitat:
|
Re: Adminrechte nur verlangen, wenn benötigt.
Zitat:
Nein, man sollte keinen Berechtigungs-Fehler provizieren um zu prüfen ob eine Berechtigung da ist oder nicht. Dazu gibt es (wie von mir verlinkt) IsUserAdmin. Das funktioniert auch mit Elevation richtig: Ist man zwar in der Admingruppe, der Prozess hat aber keine Adminrechte liefert das false, ist der Prozess mit erhöhten Berechtigungen aktiv true. Das ist imho um längen sauberer und umgeht das geterze mit der Virtualisierung ganz sauber. |
Re: Adminrechte nur verlangen, wenn benötigt.
Sicher, so sollte man nicht prüfen, ob man Admin ist. Aber der Threadersteller will ja eigentlich nur in ein bestimmtes Verzeichnis schreiben - und insbesondere nicht Administratorrechte anfordern, wenn er in ein privates Verzeichnis schreiben will. Da hilft dann IsUserAnAdmin nicht. Nebenbei bemerkt sollte auch IsUserAdmin nicht verwendet werden - es ist nicht sicher, dass die Funktion in späteren Windows-Versionen auch existiert.
|
Re: Adminrechte nur verlangen, wenn benötigt.
Zitat:
Selbst wenn der User Admin ist, kann er die nwendung ja unter einem Gastkono laufen lassen oder ein Benutzer läßt die Anwendung mit Adminrechten lausführen. Und dan gibt es ja seit Vista (?) irgendwie 2 Tokens, wonach ein Programm (wenn es von einem Admin einfach so) gestartet wird und nicht explizit Adminrechte verlangt, dann läuft es da mit eingeschränkten Adminrechten .... oder irgendwie so |
Re: Adminrechte nur verlangen, wenn benötigt.
Ui, schon so viele Antworten ^^
Wie Apollonius und Bernhard schon schrieben, suche ich einen Weg die Schreibrechte zu testen, also schon nach der "Ich fahre jetzt gegen einen Baum, nur um meinen Airbag zu testen."-Methode. Überprüfen ob der Benutzer oder das Programm Adminrechte hat, hilft mir weniger weiter. Was muss denn in der Manifest stehen, damit die Dateisystemvirtualisierung abgeschaltet wird? Oder reicht es einfach, wenn man irgendein Vista Manifest benutzt? Danke! MfG Dimholz |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz