Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Exceptions/Rückmeldung bei TFilestream (https://www.delphipraxis.net/170680-exceptions-rueckmeldung-bei-tfilestream.html)

mentaltec 28. Sep 2012 11:47

Exceptions/Rückmeldung bei TFilestream
 
Hallo,

ich steh ein wenig im Walde:

eigentlich will ich nur ne Datei schreiben - geht auch ;-)
aber ich will auch ne Notitz, wenns nich geklappt hat und das möglichst ohne die Datei wieder zurückzulesen

wenn ich Filestore für eine Datei aufrufe, für die ich Adminrechte brauche, bekomm ich keine Fehlermedung bein FileStraem.create, auch nicht beim .Writebuffer, selbst fs.size liefert die korrekte Anzahl bytes zurück; aber die Datei selbst wird natürlich nicht angelegt


hier das Fragment:

Delphi-Quellcode:
function FileStore(name, content : String) : Boolean;
var
  fs : TFileStream;
  s : string;
begin
  Result := false;
  try
    fs := TFileStream.Create(name, fmCreate or fmShareExclusive);
    try
      fs.WriteBuffer(PChar(content)^, Length(content));
      if fs.size <> Length(content) then
        raise exception.Create(' nicht genug Rechte/Platz, um Datei '+ name +' zu schreiben');
    finally
      freeAndNil(fs);
    end;
    Result := true;
...
  except
    Fehlermeldung
  end;
ich hab das Gleiche nochmal mit FileCreate und Filewrite nachgebaut, auch da wird mir die korrekte Anzahl von Bytes als geschrieben zurückgemeldet, obwohl die Datei natürlich nicht angelegt wird;
da kann doch was nicht stimmen

achso : verwendete IDE Borland® Delphi® für Microsoft® Windows™ Version 10.0.2288.42451; Win 7 Home Premium


mfg

himitsu 28. Sep 2012 11:53

AW: Exceptions/Rückmeldung bei TFilestream
 
In welches Verzeichnis willst'e denn reinschreiben.

Ich vermute mal, daß dein Schreiben "erfolgreich" ist, aber da dein Programm nicht sagt, daß es kompatibel mit Win7 ist, schlägt hier die Virtualisierung zu und dein Schreibzugriff wird in den Bei Google suchenVirtualStore umgeleitet.


PS: Für viele sind die Versionsnamen verständlicher, als die interen Versionsnummern.
Du meinst do bestimmt Delphi 2006 oder Turbo Delphi?

Tipp: Mit [DELPHI]dein Code[/DELPHI]-Tags drumrum, ließe sich dein Code besser lesen.


Ach ja, WriteBuffer wirft von sich aus eine Exception, wenn nicht alles geschrieben werden konnte.

nuclearping 28. Sep 2012 11:53

AW: Exceptions/Rückmeldung bei TFilestream
 
Das liegt daran, dass die Datei virtualisiert wird.

Schau mal unter C:\Users\<...>\AppData\Local\VirtualStore\...

Da wirst du mit Sicherheit die Datei irgendwo finden.

Ob eine Datei Adminrechte zum schreiben braucht, musst du anders feststellen.

mentaltec 28. Sep 2012 12:04

AW: Exceptions/Rückmeldung bei TFilestream
 
Ihr habt ja alle Recht - das Ding ist neu für mich

merci

himitsu 28. Sep 2012 12:14

AW: Exceptions/Rückmeldung bei TFilestream
 
Das wurde von Microsoft eingeführt, für alte "inkompible" Programme, welche z.B. immernoch, ohne die nötigen Rechte, in Verzeichnissen rumschreiben wollen, wo sie es nicht dürfen.
(dabei gibt es diese Rechte eigentlich schon seit über 10 Jahren, nur das bis XP fast alle ständig mit vollen Adminrechten rumgerannt sind und keiner was davon merkte)
Microsoft wollte damit dafür sorgen, daß alte/schrottige Programme immernoch funktionieren können, selbst wenn sie sich nicht an die Regeln halten.

Man kann die Virtualisierung irgendwie per WinAPI deaktivieren (bei jedem Start des eigenen Programms) oder man fügt seinem Programm ein entsprechendes Manifest mit, welches das Programm als "kompatibel" kennzeichnet und somit auch diese Virtualisierungen los.

nuclearping 28. Sep 2012 16:55

AW: Exceptions/Rückmeldung bei TFilestream
 
Zitat:

Zitat von himitsu (Beitrag 1184832)
[...] oder man fügt seinem Programm ein entsprechendes Manifest mit, welches das Programm als "kompatibel" kennzeichnet und somit auch diese Virtualisierungen los.

Das Manifest sorgt aber auch nur dafür, dass du beim Start des Programms jedesmal gefragt wirst, ob du dies mit Admin-Rechten ausführen willst. Ist ja auch nicht Sinn der Sache. Und wenn es nicht unbedingt zwingend notwendig ist, sollte man sich sicher sein, dass man seine Daten wirklich in ein restriktives Verzeichnis schreiben will und wieso man das macht. Und so wie mentaltec anhört, ist er sich da nicht so sicher ... :mrgreen:

himitsu 29. Sep 2012 06:53

AW: Exceptions/Rückmeldung bei TFilestream
 
Nein, denn ich hab nichts von Adminmanifest gesagt.

Mit einem Manifest kann man die GUI steuern (neuen Style ala XP)
und/oder
die Kontrolle des UAC (Admin oder nicht)
und/oder
die Kompatibilitätsangaben (seit Vista)
und/oder
Side-by-Side (SxS)
...

OK, wenn er wirklich unbedingt da reinschreiben will, dann kommt er um die höheren Rechte (Admin) eh nicht drumrum.

nuclearping 29. Sep 2012 16:50

AW: Exceptions/Rückmeldung bei TFilestream
 
Zitat:

Zitat von himitsu (Beitrag 1184926)
Nein, denn ich hab nichts von Adminmanifest gesagt.

Mit einem Manifest kann man die GUI steuern (neuen Style ala XP)
und/oder
die Kontrolle des UAC (Admin oder nicht)
und/oder
die Kompatibilitätsangaben (seit Vista)
und/oder
Side-by-Side (SxS)
...

Ja. Nur wird dich dann Windows (zumindest bei UAC / Kompatibilität) trotzdem nach erhöhten Rechten fragen. :stupid:

himitsu 29. Sep 2012 17:22

AW: Exceptions/Rückmeldung bei TFilestream
 
Oder es verwehrt einfach den Zugriff und schon hat der TE seine gewünschte Exception. :angle2:


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