Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Auf Schreibrechte unter Win 7 prüfen (https://www.delphipraxis.net/148746-auf-schreibrechte-unter-win-7-pruefen.html)

AlexII 7. Mär 2010 17:41


Auf Schreibrechte unter Win 7 prüfen
 
Ich prüfe wie folgt auf Schreibrechte, unter Win XP klappt auch alles gut, aber unter Win 7 voll komisch. Im Verzeichnis C:\Programme wird mir gesagt, ja du kannst schreiben und bekommen die Meldung, dass test.txt erstellt wurde, aber in Wirklichkeit gibt's diese Datei nicht, sie wird nicht erstellt. Wie kann es sein das ich überall grünes licht habe? :roteyes: obwohl man in diesem Verzeichnis nicht schreiben kann. Bin auch nicht als Admin angemeldet.

Delphi-Quellcode:
function KannIchSchreiben(const FileName: String): Boolean;
var
  fileHandle: Integer;
begin
  fileHandle := FileOpen(FileName, fmOpenWrite);
  result := (fileHandle >= 0);
  if result then begin
    FileClose(fileHandle);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if KannIchSchreiben('test.txt') then showmessage('ja') else showmessage('nein');
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  Handle:Integer;
begin
  Handle:=filecreate('test.txt');
  if (Handle) > 0 then
  begin
    ShowMessage('Anlegen der Datei erfolgreich');
    FileClose(Handle);
  end
  else
  begin
    ShowMessage('Fehler beim Anlegen der Datei');
  end;
end;

DeddyH 7. Mär 2010 17:54

Re: Auf Schreibrechte unter Win 7 prüfen
 
Wie kommst Du darauf, dass die Datei unter C:\Programme angelegt wird? Du benutzt einen relativen Pfad.

AlexII 7. Mär 2010 17:57

Re: Auf Schreibrechte unter Win 7 prüfen
 
Weil die exe mit diesem Code auch da liegt, also in C:\Programme :mrgreen:

DeddyH 7. Mär 2010 17:58

Re: Auf Schreibrechte unter Win 7 prüfen
 
Das heißt aber immer noch nicht, dass das aktuelle Verzeichnis dort ist.

gsh 7. Mär 2010 18:01

Re: Auf Schreibrechte unter Win 7 prüfen
 
Bei Google suchenwindows 7 virtual store

AlexII 7. Mär 2010 18:04

Re: Auf Schreibrechte unter Win 7 prüfen
 
Hm... und wie prüfe ich dann ein Verzeichnis auf Schreibrechte, also ob ich in meinem Programmordner schreiben kann?

DeddyH 7. Mär 2010 18:05

Re: Auf Schreibrechte unter Win 7 prüfen
 
Wieso sparst Du Dir solche Verrenkungen nicht einfach und verwendest einen dafür vorgesehenen Ordner?

AlexII 7. Mär 2010 18:08

Re: Auf Schreibrechte unter Win 7 prüfen
 
Ne es geht nicht ums Speichern. Ich muss es prüfen, für ein Update.

DeddyH 7. Mär 2010 18:10

Re: Auf Schreibrechte unter Win 7 prüfen
 
Wenn Du sowieso ein Update machst, kannst Du ja den Ordner gleich mit umstellen ;)

Luckie 7. Mär 2010 18:31

Re: Auf Schreibrechte unter Win 7 prüfen
 
Wir haben uns doch darauf geeinigt, dass du das Update als Administrator machst. Und als Administrator hast du Schreibrechte in besagtem Ordner. Warum also jetzt noch mal diese Verrenkungen?

AlexII 7. Mär 2010 18:38

Re: Auf Schreibrechte unter Win 7 prüfen
 
Zitat:

Zitat von Luckie
Wir haben uns doch darauf geeinigt, dass du das Update als Administrator machst. Und als Administrator hast du Schreibrechte in besagtem Ordner. Warum also jetzt noch mal diese Verrenkungen?

Ja das habe ich auch vor, aber bis ich einen Updater (getrennt von der Prog.exe) geschrieben habe dauert es ein paar Wochen, und bis dahin will ich das so machen - falls ich schreiben kann (z.B. in XP) führe ich das Updaten wie immer durch, und falls ich nicht schreiben kann, weise ich den User auf die Downloadpage. Also das ist erst mal eine Zwischenlösung. :-D

DeddyH 7. Mär 2010 18:41

Re: Auf Schreibrechte unter Win 7 prüfen
 
Dann weise den Benutzer doch einfach per Messagebox o.ä. darauf hin, dass er für das Update Adminrechte braucht. Wenn er es trotzdem unter einem eingeschränkten Account durchführt, kannst Du nicht für die korrekte Funktion garantieren.

AlexII 7. Mär 2010 18:43

Re: Auf Schreibrechte unter Win 7 prüfen
 
Ne das keine elegante Lösung, wer weiß schon wie man sich als Admin anmelden soll, doch keine normaler User.

DeddyH 7. Mär 2010 18:45

Re: Auf Schreibrechte unter Win 7 prüfen
 
Und nicht zu wissen, ob Du im VirtualStore landest, erscheint Dir eleganter?

AlexII 7. Mär 2010 18:51

Re: Auf Schreibrechte unter Win 7 prüfen
 
Das will ich doch umgehen, deswegen Post #6

DeddyH 7. Mär 2010 18:53

Re: Auf Schreibrechte unter Win 7 prüfen
 
Meinst Du jetzt den Ordner, in dem Dein Programm liegt? Den bekommst Du mit ExtractFilePath(ParamStr(0)). Wenn Du versuchst, dort eine Datei anzulegen und bekommst einen Fehlercode 5, dann hast Du keine Rechte dazu.

AlexII 7. Mär 2010 19:00

Re: Auf Schreibrechte unter Win 7 prüfen
 
Ja genau... muss ich mal testen. :thumb:

Delphi-Quellcode:
ProgPath:=ExtractFilePath(ParamStr(0));

function KannIchSchreiben(const FileName: String): Boolean;
var
  fileHandle: Integer;
begin
  fileHandle := FileOpen(FileName, fmOpenWrite);
  result := (fileHandle >= 0);
  if result then begin
    FileClose(fileHandle);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if KannIchSchreiben(ProgPath + '\' + 'test.txt') then showmessage('ja') else showmessage('nein');
end;

Dezipaitor 7. Mär 2010 19:26

Re: Auf Schreibrechte unter Win 7 prüfen
 
Unter Windows 7 kannst du sogar auf C: eine Datei erzeugen. Die landet dann auch im Virtualstore. Dies ist neu in Win7, denn in Vista gab es noch den 5er Fehler.

Bau dir ein Vista Manifest rein, dass womöglich auch noch Adminrechte einfordert. So wird der Virtualstore für deine Anwendung ausgeschaltet und Adminrechte gibt es über UAC dazu.
Dein Code da oben, funkz sonst nicht.

Luckie 7. Mär 2010 19:28

Re: Auf Schreibrechte unter Win 7 prüfen
 
Dumm nur, dass ein Updater in der eigentlichen Anwendung integriert ist. Das heißt seine Anwendung fordert bei jedem Start Administratorenrechte an. Auch nicht sehr toll.

Bernhard Geyer 7. Mär 2010 19:33

Re: Auf Schreibrechte unter Win 7 prüfen
 
Nimm 2 Exes. Eine mit Vista-Manifest ohne Admin-Anforderung und eine mit Admin-Anforderung. Damit schaltest du in beiden fällen die Virtualisierung ab die eigentlich nur für veraltetet SW gedacht ist die noch vor Vista entwickelt wurde und munder Schreibrechte unter C:\Programme und C:\Windows vorrausgesetzt hat.

Luckie 7. Mär 2010 19:43

Re: Auf Schreibrechte unter Win 7 prüfen
 
Genau das haben wir schon in einem anderen Thread geklärt. Aber aus irgendeinem Grund will er das nicht.

AlexII 7. Mär 2010 21:01

Re: Auf Schreibrechte unter Win 7 prüfen
 
Zitat:

Zitat von Luckie
Genau das haben wir schon in einem anderen Thread geklärt. Aber aus irgendeinem Grund will er das nicht.

Ne das will ich, auf jeden Fall, siehe Post #11 :-D

Luckie 7. Mär 2010 21:03

Re: Auf Schreibrechte unter Win 7 prüfen
 
Dann mach das doch. In der Zeit, die du hier rumeierst und nach einer Krücke als Übergangslösung suchst, hättest du schon längst den vorhanden Code einfach in ein neues Projekt kopieren können und wärst damit schon halb fertig.

AlexII 7. Mär 2010 21:14

Re: Auf Schreibrechte unter Win 7 prüfen
 
Das Problem ist mein Updater (den ich gekauft habe, mit source code) ist so aufgebaut, dass er eine exe ersetzt und danach sich selbst löscht. (Deswegen habe ich ihn im Programm und nicht eigenständig) Außerdem kann ich mit ihm nur eine Datei aus dem Netzt laden.

Nach einem Update vernichtet er sich, was mache ich dann? Ihn aus dem Netz noch ma zu Laden kann ich nicht, da ich die Prog.exe laden muss.

Jetzt suche ich seit 3 Stunden die Zeile mit dem Befehl wo er sich löscht, aber kann nicht finden... hab nur Probleme :(

Luckie 7. Mär 2010 21:16

Re: Auf Schreibrechte unter Win 7 prüfen
 
Das wäre es eventuell auch mal wert gewesen zu erwähnen, dass du den Updater nicht selber geschrieben hast, sondern zu gekauft. hast du dich mal an den Hersteller gewendet?

Es ist immer echt aufbauend wenn man helfen will und so wichtige Informatienen erst auf der dritten oder vierten Seite gegeben werden. :?

AlexII 7. Mär 2010 21:19

Re: Auf Schreibrechte unter Win 7 prüfen
 
Was hätte das gebraucht, wenn jemand wüssten würde, dass der gekauft wurde? :gruebel:

Das ist eine Idee sie anzuschreiben, aber dumm nur ich kann kein Englisch. :pale: Da woher ich komme war Deutsch die Fremdsprache.

Ach man ich glaube ich werde Gärtner... :cry:

Luckie 7. Mär 2010 21:25

Re: Auf Schreibrechte unter Win 7 prüfen
 
Zitat:

Zitat von AlexII
Was hätte das gebraucht, wenn jemand wüssten würde, dass der gekauft wurde? :gruebel:

Dann hätten wir uns viele Vorschläge sparen können. Des Weiteren hättest du uns ruhig mal über die Funktionsweise aufklären können, damit man als Außenstehender überhaupt weiß, was da passiert.

AlexII 7. Mär 2010 21:34

Re: Auf Schreibrechte unter Win 7 prüfen
 
Die Frage war doch wie man auf Schreibrechte prüft... mit dem Updater hätte ich ein anderes Thema angefangen, wenn sein müsste. Na ja verzeih, man kann doch nicht alles wissen.

Bernhard Geyer 7. Mär 2010 21:45

Re: Auf Schreibrechte unter Win 7 prüfen
 
Bietet der Hersteller des Updater-Quellcodes evtl. eine neue Version seines Codes an? Diesem müsste doch mittlerweile auch klar sein das seine bisherige Lösung seit Windows Vista gewaltige Probleme bereitet.

AlexII 7. Mär 2010 21:48

Re: Auf Schreibrechte unter Win 7 prüfen
 
Ne da gibt's keine neue Version. Der Code ist seit 2001... Ich wusste das ganze mit dem Win 7 halt vor dem Kaufen nicht und was mich im Demo bisschen gestört hat dachte ich im Code zu ändern, aber da kann man nix ändern.... muss mir was anderes suchen.

hoika 8. Mär 2010 06:29

Re: Auf Schreibrechte unter Win 7 prüfen
 
Hallo,

im Quellcode suchen, hmmmm

-> Wingrep herunterladen
-> nach "DeleteFile" / "Delete" suchen


Heiko

Das der Code aus 2001 ist,
kannst du den eh vergessen.

Übrigens kann man per Manifest das "VirtualStore" ganz ausknipsen,
dann bekommt man garantiert einen Schreibfehler, wenn ins Programm-Verzeichnis geschrieben wird.
Das VirtualStore ist ja nur ein Hilfsmittel von MS,
damit "alte, böse" Programme auch laufen.

"böse" = "Ich schreib mal in mein eigenes Verzeichnis"



Heiko

Dezipaitor 8. Mär 2010 07:02

Re: Auf Schreibrechte unter Win 7 prüfen
 
Zitat:

Zitat von Luckie
Dumm nur, dass ein Updater in der eigentlichen Anwendung integriert ist. Das heißt seine Anwendung fordert bei jedem Start Administratorenrechte an. Auch nicht sehr toll.

Dann funktioniert der Rest auch in jedem Fall. :mrgreen:

Aber man kann über Parameter und ShellExecute auch intern die Anwendung sich selbst (als Admin) aufrufen lassen. Dann ist das Adminmanifest nicht nötig.

Luckie 8. Mär 2010 07:37

Re: Auf Schreibrechte unter Win 7 prüfen
 
Er könnte MSDN-Library durchsuchenImpersonteLoggenUser aufrufen.

Dezipaitor 8. Mär 2010 11:36

Re: Auf Schreibrechte unter Win 7 prüfen
 
Von ImpersonateLoggedOnUser kann ich nur immer abraten. Das muss man schon richtig verstehen, um damit umgehen zu können.

Da finde ich es schon einfacher mit ShellExecute und "runas"-Verb die Anwendung ein zweites Mal aufzurufen. Z.B. wenn ein Parameter "/update" angegeben wurde.

1. Anwender startet Programm
2. Programm prüft auf neue Updates
-> Wenn nicht vorhanden gehe zu 5.
3. Programm prüft, ob es Adminrechte hat
-> Wenn ja, dann gehe zu 3.
4. Startet sich selbst mit ShellExecute("runas") und beendet sich. Zweiter Prozess führt 4a aus.
4a. Prozess macht update.
Das Problem hier ist, dass du Anwendung und Installer in einer Datei hast, da es so nicht ohne weiteres möglich ist, die Anwendung ohne Adminrechte zu starten. Andernfalls hättest du im Punkt 4. einen Installer gestartet, der zwar sich selbst startet, aber den ersten Prozess nicht beendet. Dieser erste Prozess könnte die Anwendung ohne Adminrechte starten, wenn der Installer erfolgreich war. (Der Weg von Admin zu Nicht-Admin ist schwer in Windows)
5. Anwendung startet

AlexII 8. Mär 2010 11:43

Re: Auf Schreibrechte unter Win 7 prüfen
 
Ach du meine Güte, Leute ich danke euch, aber bitte nicht vergessen, ich bin Hobbyprogrammierer, hab nix studiert oder so... :roteyes:


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:27 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