Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Schreibrechte abfragen? (https://www.delphipraxis.net/128116-schreibrechte-abfragen.html)

AlexII 24. Jan 2009 13:49


Schreibrechte abfragen?
 
Hallo,

ich benutze folgenden Code um die exe-Datei zu löschen, die exe löscht sich also selbst (wird eine .bat-Datei erzeugt). Das funktioniert aber nur wenn der User bzw. exe Schreibrechte hat. Meine Frage jetzt, wie kann ich abfragen, ob Schreibrechte vorhanden sind oder nicht? Wenn ja dann werde ich denn Button-"exe lösche dich selbst" aktivieren, wenn nicht - deaktivieren.

Oder muss ich Schreibrechte für den Ordner prüfen, in dem die .bat Datei erstellt wird? :gruebel:

little_budda 24. Jan 2009 13:55

Re: Schreibrechte abfragen?
 
Hallo,

schau dir mal die "UserRights1_0.zip" von Luckie an
Findest du hier.

Gruß Holger.

AlexII 24. Jan 2009 14:01

Re: Schreibrechte abfragen?
 
Hm... kann damit leider nix anfangen :gruebel: Hat jemand vllt was anderes?

toms 24. Jan 2009 14:05

Re: Schreibrechte abfragen?
 
CheckAccessToFile von Nico

AlexII 24. Jan 2009 14:27

Re: Schreibrechte abfragen?
 
Oder muss ich Schreibrechte für den Ordner prüfen, in dem die .bat Datei erstellt wird? Grübelnd...

himitsu 24. Jan 2009 14:35

Re: Schreibrechte abfragen?
 
am einfachsten du prüfst nur, ob die Datei gelöscht werden darf.

die .bat kannst du ja im Windows-Temp-Verzeichnis anlegen

AlexII 24. Jan 2009 14:59

Re: Schreibrechte abfragen?
 
Zitat:

Zitat von himitsu
Am einfachsten du prüfst nur, ob die Datei gelöscht werden darf.

Und wie prüfe ich das? Einfach ob man auf sie Schreibrechte hat und wenn ja ist sie auch löschbar?

Zitat:

Zitat von himitsu
die .bat kannst du ja im Windows-Temp-Verzeichnis anlegen

Man sagt es geht nicht, wieso nicht wird hier gesagt, Post #11 :warn:

himitsu 24. Jan 2009 15:26

Re: Schreibrechte abfragen?
 
nee, du mußt schon prüfen, ob du löschen darfst

unter NTFS kann man
- lesen
- schreiben (in bestehende Dateien)
- erstellen
- löschen
- ordnerinhalt auflisten
- uvm.
einzeln regeln

PS: wenn es sich um ein Setup handelt, könntest du diesem ein passendes Manifest mitgeben, damit es Adminrechte bekommt.

Zitat:

Zitat von AlexII
Zitat:

Zitat von himitsu
die .bat kannst du ja im Windows-Temp-Verzeichnis anlegen

Man sagt es geht nicht, wieso nicht wird hier gesagt, Post #11 :warn:

ich meinte nicht das "alte" Temp-Verzeichnis C:\Windows\Temp, sondern jenes, welches unter XP dort ist
C:\Dokumente und Einstellungen\User\Lokale Einstellungen\Temp
und dort solltest du alle nötigen Rechte für haben.

AlexII 24. Jan 2009 15:33

Re: Schreibrechte abfragen?
 
Wie ist das eigentlich mit Desktop und Eigene Dateien? Hat man da Schreib- u. Löschrechte, bestimmt, oder?

Luckie 24. Jan 2009 21:13

Re: Schreibrechte abfragen?
 
Auf seinem eigenen Desktop und in seinen eignen Dateien hat der Benutzer natürlich alle Rechte. Aber da möchte ich keine Dteien rumfliegen haben von irgendwelchen Programmen. Auf den Desktop gehören nur von mir erstellte Links (zusätzlich zu denen die das System dort ablege) und die eigenen Dateien gehören nur Dateien, die ich dort speichere.

Dezipaitor 24. Jan 2009 22:19

Re: Schreibrechte abfragen?
 
Also mit der Userrights Beispiel kommst du nicht weiter.
Der Quelltext von Nico funktioniert in Vista oder neuer nicht immer korrekt, da kein Integrity Label überprüft wird.

Was machen? Das mal ausprobieren.

Delphi-Quellcode:
var hFile : THandle;

hFile := CreateFile(PChar(filename), DELETE, 0, nil, OPEN_EXISTING, 0,0);

if (hFile = INVALID_HANDLE_VALUE) then
begin
  if GetLastError() = ERROR_ACCESS_DENIED then ...
  if GetLastError() = ERROR_FILE_NOT_FOUND then ...
end
else
  CloseHandle(hFile);

himitsu 24. Jan 2009 22:25

Re: Schreibrechte abfragen?
 
Code:
[s] if GetLastError() = ERROR_ACCESS_DENIED then ...
  if GetLastError() = ERROR_FILE_NOT_FOUND then ... [/s]
das geht aber nicht so ... GetLastError setzt den Fehlerwert zurück, wen es aufgerufn wird.

nicodex 24. Jan 2009 22:42

Re: Schreibrechte abfragen?
 
Zitat:

Zitat von himitsu
GetLastrror setz den Fehlerwert zurück, wen es aufgerufn wird.

Nein, mit Sicherheit nicht (es wird nur NtCurrentTeb().LastErrorValue ausgelesen).
Auch wenn der Hinweis auf ein case-of oder eine lokale Variable natürlich berechtigt ist, da der thread-bezogene Fehlercode durch nachfolgenden Code überschrieben werden könnte.

Dezipaitor 24. Jan 2009 22:49

Re: Schreibrechte abfragen?
 
Das "..." ruft zum Denken auf! :"Wie geht es hier weiter?" Bedenklich wäre es doch, wenn man nur Copy&Paste macht. Meine geposteten Codes haben daher gerne mal einen unabsichtlichen Fehler drin, der gefunden werden muss. Wir sind doch schließlich alle nur Menschen, nicht wahr? :thumb:

himitsu 24. Jan 2009 22:56

Re: Schreibrechte abfragen?
 
Ganz sicher?

Delphi-Quellcode:
SetLastError(123);
MessageDlg(IntToStr(GetLastError), mtInformation, [mbOK], 0);
MessageDlg(IntToStr(GetLastError), mtInformation, [mbOK], 0);
Zitat:

---------------------------
Informationen
---------------------------
123
---------------------------
OK
---------------------------
Zitat:

---------------------------
Informationen
---------------------------
0
---------------------------
OK
---------------------------

Dezipaitor 24. Jan 2009 23:09

Re: Schreibrechte abfragen?
 
MessageDlg ruft intern Windows API Funktionen auf. Davon wird die eine oder andere den Wert auf 0 setzen. Das sollte zwar so nicht sein, weil API Funktionen normalerweise bei Erfolg den Fehlercode einfach stehenlassen, das ist aber nicht immer so.
Vllt macht es die MessageDlg Fkt auch selbst.

himitsu 24. Jan 2009 23:25

Re: Schreibrechte abfragen?
 
ok, geb mich geschlagen ... schön das mal geändert zu wissen, es es dann die ganze Zeit falsch im Kopf :oops:

Delphi-Quellcode:
Var E1, E2: LongWord;
begin
  SetLastError(123);
  E1 := GetLastError;
  E2 := GetLastError;
  SetLastError(123);
  MessageDlg(Format('%d %d', [E1, E2]), mtInformation, [mbOK], 0);
  MessageDlg(IntToStr(GetLastError), mtInformation, [mbOK], 0);

Dezipaitor 24. Jan 2009 23:30

Re: Schreibrechte abfragen?
 
Wir sind doch schließlich alle nur Menschen, nicht wahr? :wall:

AlexII 25. Jan 2009 00:18

Re: Schreibrechte abfragen?
 
Jetzt verstehe ich überhaupt nix :gruebel: Kann mir jemand eine klare Antwort geben? :roteyes:

Dezipaitor 26. Jan 2009 09:08

Re: Schreibrechte abfragen?
 
passt schon:
http://www.delphipraxis.net/internal...dc82ea2#993059


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:49 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-2025 by Thomas Breitkreuz