Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Schreibrechte auf Ordner unter Win7 ermitteln (https://www.delphipraxis.net/169118-schreibrechte-auf-ordner-unter-win7-ermitteln.html)

Poolspieler 29. Jun 2012 17:34


Schreibrechte auf Ordner unter Win7 ermitteln
 
Hallo zusammen,
unter folgendem Thread http://www.delphipraxis.net/102745-h...utz-hat-2.html wurde das Thema besprochen - aber nicht geklärt.

Iststand:
Mein Programm hat eine Datei "settings.ini" im Programmverzeichnis (ja, im Programmverzeichnis).
Diese wird beim Start in ein TMemInifile geladen.
Bei Programmende (oder auch bei einem expliziten Flush während der Programmlaufteit) wird mittelse MemIniFile.update auf Platte geschrieben.

Mein Problem:
Mein Programm soll nun auch direkt von CD startbar sein OHNE dass Dateien auf dem PC angelegt/geschrieben werden.
Ich hätte nun gern abgefragt, ob der Ordner, in dem das Inifile liegt Schreibzugriff hat - oder nicht. Das Attribut "Schreibgeschützt" hilft hier nicht, weil bei schreibgeschützten (readonly eingehängten) SD-Karten das Schreibschutz-Flag NICHT unbedingt gesetzt ist.

Ich hatte bereits versucht, eine temporäre Datei im betroffenen Ordner (mit und ohne try except ausprobiert) mit FileCreate zu erzeugen.
Wenn ich die Datei erzeugen konnte, dann hätte ich sie wieder geschlossen und gelöscht --> also Schreibzugriff=JA
ansonsten
Schreibzugriff=NEIN

-->ABER:
Win7 (Ultimate) ist mal wieder schneller. Da bekomme ich TROTZ Try-Except-Block die Meldung
Zitat:

Der Datenträger ist schreibgeschützt und kann nicht beschrieben werden. Entfernen Sie den Schreibschutz vom Datenträger in Laufwerk J:.
Mir gehen langsam die Ideen aus. Die einzige sehr sehr unschöne wäre, beim Start des Programms z.B. über die Inidatei das Verhalten des Programms auf Readonly = True/False zu setzen. --> also KEIN MemIniFile.update ausführen...
Mir wäre allerdings schon lieber, wenn dies automatisch ginge...

Hat jemand eine Idee?

Viele Grüße,

Poolspieler

Bummi 29. Jun 2012 18:01

AW: Schreibrechte auf Ordner unter Win7 ermitteln
 
Ich habe leider keinen derartigen Datenträger zu Hand, was liefert den DiskFree?

himitsu 29. Jun 2012 19:55

AW: Schreibrechte auf Ordner unter Win7 ermitteln
 
Da ist nichst schneller.

Es gibt einige "Fehlermeldungen" bezüglich Datenträger, die werden nicht als Exception/Fehlercode behandelt, sondern es wird einfach nur eine MessageBox angezeigt und dagegen kann man nichts mit Try-Except ausrichten.
Sowas kenn ich noch von Disketten und teilweise auch von CDs, welche grade nicht eingelegt sind.

Ich weiß jetzt zwar nichts Genaues, aber irgendwie kann man diese Fehlerbehandlung beinflussen.
SetErrorMode oder sowas.
Damit würde man dann Windows sagen es soll selber keine Fehler behandeln und es unserem Programm überlassen.

Poolspieler 29. Jun 2012 20:40

AW: Schreibrechte auf Ordner unter Win7 ermitteln
 
Hallo Zusammen,
vielen Dank für Eure Antworten.

Diskfree liefert das exakt selbe, wie "rechte Maustaste/Eigenschaften im Explorer": 1971585024 Bytes frei --> egal, ob schreibgeschützt oder nicht.

Zu Testzwecken habe ich eine SD-Karte verwendet, deren Schreibschutz ich über den kleinen Lock-Schalter aktivieren und deaktivieren kann. Sonst müßte ich ja jedes Mal eine CD Brennen...
Gut, vielleicht ist diese Idee nicht sooooo schlau gewesen, weil sich unter dem "magischen" Win7 eine SD-Karte etwas anders verhält... keine Ahnung! :?:
Und bei einer CD sind die Schreibschutz-Flags ja immer gesetzt...

Eine weitere Seltsamkeit:
Wenn ich das Programm von D:\ (nicht schreibgeschützt) ausführe und einen Button mit
Code:
...
var
  _f: integer;
begin
  _f := FileCreate('J:\test.txt'); // J:\ ist schreibgeschützt
  ShowMessage(IntToStr(_f));
end;
hinterlege, dann bekomme ich KEINE Meldung.
Führe ich die selbe EXE aber von J:\, dann BEKOMME ich die Meldung von Windows! :shock:

Hat das in irgend einer Form mit dem Virtualstore zu tun?


--> Kann ich mir zwar eigentlich nicht vorstellen, weil das Programm in einem Unterordner von J:\ liegt - und auch bei FileCreate('J:\test.txt') kommt die Fehlermeldung...

Ich bin kurz davor, meinen Workaround über die INI-Datei zu machen :(

Auf der anderen Seite kann es doch nicht so schwer sein, zu überprüfen, ob geschrieben werden kann...

Viele Grüße,

Poolspieler

p80286 29. Jun 2012 22:06

AW: Schreibrechte auf Ordner unter Win7 ermitteln
 
Der Schreibschutz einer Datei und eines Mediums/Laufwerks hat nichts miteinander zu tun.
Die Meldung
"Der Datenträger...." bezieht sich auf das Medium (Diskette,USB,.....) das einen Phys. Schreibschutz hat. Davon unabhängig ist der Schreibschutz einzelner Dateien.

Wenn Du also diese Meldung erhälst, dann leitet Windows nur eine Meldung des Controlers weiter.

(es könnte z.B. eine SCSI-Meldung sein, aber da bin ich nicht mehr so fit)

Gruß
K-h

himitsu 29. Jun 2012 22:34

AW: Schreibrechte auf Ordner unter Win7 ermitteln
 
Warum liest eigentlich keiner das durch, was Andere schreiben?

MSDN-Library durchsuchenSetErrorMode

(meine Erinnerung/Vermutung klingt doch garnicht so schlecht)

jaenicke 30. Jun 2012 07:18

AW: Schreibrechte auf Ordner unter Win7 ermitteln
 
Um genau zu sein:
Delphi-Quellcode:
var
  OldErrorMode: Cardinal;
vegin
  OldErrorMode := SetErrorMode(SEM_FAILCRITICALERRORS);
  try
    // do something
  finally
    SetErrorMode(OldErrorMode);
  end;

Poolspieler 2. Jul 2012 10:57

AW: Schreibrechte auf Ordner unter Win7 ermitteln
 
Hallo Ihr zwei,
vielen Dank für Eure Antworten!

So hat es perfekt funktioniert! :P

Viele Grüße

Poolspieler


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf