AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Delphi-PRAXiS - Lounge Betriebssysteme Adminrechte nur verlangen, wenn benötigt.
Thema durchsuchen
Ansicht
Themen-Optionen

Adminrechte nur verlangen, wenn benötigt.

Ein Thema von dimholz · begonnen am 18. Jul 2009 · letzter Beitrag vom 22. Jul 2009
Antwort Antwort
Seite 1 von 2  1 2      
dimholz

Registriert seit: 2. Jun 2009
9 Beiträge
 
#1

Adminrechte nur verlangen, wenn benötigt.

  Alt 18. Jul 2009, 16:04
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:
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;
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.

Danke für eure Hilfe

MfG
Dimholz
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Adminrechte nur verlangen, wenn benötigt.

  Alt 18. Jul 2009, 16:16
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.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
dimholz

Registriert seit: 2. Jun 2009
9 Beiträge
 
#3

Re: Adminrechte nur verlangen, wenn benötigt.

  Alt 18. Jul 2009, 16:31
Zitat:
erst einmal: "Herzlich Willkommen in der Delphi-PRAXiS".
Danke, danke :)

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
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Adminrechte nur verlangen, wenn benötigt.

  Alt 18. Jul 2009, 16:33
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#5

Re: Adminrechte nur verlangen, wenn benötigt.

  Alt 18. Jul 2009, 16:59
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.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Adminrechte nur verlangen, wenn benötigt.

  Alt 18. Jul 2009, 17:05
Zitat von dimholz:
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.
Geschieht nur wenn du der Exe keine passende Manifestinformationen mitgiebst. Hierrüber wird die Virtualisierung abgeschalten.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#7

Re: Adminrechte nur verlangen, wenn benötigt.

  Alt 18. Jul 2009, 17:08
Zitat von Apollonius:
Ich denke eher, dass du die Dateisystemvirtualisierung abschalten solltest - dann dürfte CopyFile nämlich einen Fehler liefern.
Hrm. Das ist irgendwie wie: "Ich fahre jetzt gegen einen Baum, nur um meinen Airbag zu testen.".
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.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Adminrechte nur verlangen, wenn benötigt.

  Alt 18. Jul 2009, 17:16
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#9

Re: Adminrechte nur verlangen, wenn benötigt.

  Alt 18. Jul 2009, 17:22
Zitat von Phoenix:
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
Nur besagt das nicht, ob die Anwendung auch Adminrechte hat.

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
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
dimholz

Registriert seit: 2. Jun 2009
9 Beiträge
 
#10

Re: Adminrechte nur verlangen, wenn benötigt.

  Alt 18. Jul 2009, 19:22
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz