AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Schreib-/Leserechte auf CSIDL_COMMON_APPDATA
Thema durchsuchen
Ansicht
Themen-Optionen

Schreib-/Leserechte auf CSIDL_COMMON_APPDATA

Ein Thema von dominikkv · begonnen am 8. Dez 2007 · letzter Beitrag vom 8. Dez 2007
Antwort Antwort
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#1

Schreib-/Leserechte auf CSIDL_COMMON_APPDATA

  Alt 8. Dez 2007, 16:08
Hi

habe ich Lese/Schreibrechte auf dem Common Appdata Ordner (CSIDL_COMMON_APPDATA)?
Der ist ja eigendlich dazu da um von jedem Benutzer zugreifbar zu sein... nur ich bekomme Probleme bei folgendem Code:
Delphi-Quellcode:
if FileExists(Source) then
  try
    assignFile(f, Source);
    reset(f);
    read(f, a); // Nur lesen!
  finally
    closeFile(f);
  end;
Wenn die Stelle ausgeführt wird gibts keine Probleme, erst wenn das Programm beendet wird (und dabei wird diese Stelle nicht ausgeführt) gibt es eine Fehlermeldung bei closeFile mit dem Fehler EInOutError: File access denied.

Das finde ich komisch, da
1) ich ja nur lese
2) ich eigendlich Schreibrechte auf CSIDL_COMMON_APPDATA habe... ich kann zumindest Bilder speichern!

Was sagt ihr dazu?

mfg.Dominik
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Schreib-/Leserechte auf CSIDL_COMMON_APPDATA

  Alt 8. Dez 2007, 17:16
Ja wenn beim Beenden die Stelle gar nicht augeführt wird, wo tritt dann der Fehler genau auf? Wird vielleicht CloseFile() für ein ungültiges "f" aufgerufen? Was sagt der CallStack?

Weil bei dem Ordner hat man auf jeden Fall normalerweise Lese und Schreibrechte!

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Schreib-/Leserechte auf CSIDL_COMMON_APPDATA

  Alt 8. Dez 2007, 17:51
Zitat von mirage228:
Ja wenn beim Beenden die Stelle gar nicht augeführt wird, wo tritt dann der Fehler genau auf?
Das frage ich mich ja auch...
Auf jedenfall kommt der Fehler nach Application.Terminate, aber vor MainForm.FormDestroy.

Zitat von mirage228:
Wird vielleicht CloseFile() für ein ungültiges "f" aufgerufen?
Was meinst du mit ungültig? F ist so deklariert:
Delphi-Quellcode:
type
  TString8 = String[8];
  TString100 = String[100];

  TVersion = record
    Name: TString100;
    Version: TString8;
    Datum: TDateTime;
  end;

// ...

function CheckUpdates: Boolean;
var F: File of TVersion;
    A: TVersion;
begin
  result := False;
  if FileExists(VerFile) then
    try
      assignFile(f, VerFile);
      reset(f);
      read(f, A);
    finally
      closeFile(f);
    end else
      A.Version := '0.0.0.0';
// usw...
Nach den CloseFile wird die Prozedure abgebrochen!, allerdings kommt keine Fehlermeldung... die kommt dann bei Programmende.

Zitat von mirage228:
Was sagt der CallStack?
Den Delphi-Debugger kann ich nicht benutzen da ich Delphi mit Adminrechten ausführe (und da kommt der Fehler nicht!), aber der CallStack von madExcept sagt dass ich bei genau dieser procedur bin (sogar mit Linienangabe, eben auf closeFile(f)
Code:
Main ($cfc):
005e8336 +0ba MyProg.exe    uStuff   152  +8 CheckUpdates
005e1bcc +4ec MyProg.exe    uOptionen 415 +79 LoadProgFromFile
005e88fc +1cc MyProg.exe    uStuff   238 +42 AfterCreate
005f9e07 +0ff MyProg.exe    MyProg    48 +15 initialization
762b19ef +00c kernel32.dll                  BaseThreadInitThunk
Zitat von mirage228:
Weil bei dem Ordner hat man auf jeden Fall normalerweise Lese und Schreibrechte!
Genau, eine andere Datei die ganau im gleichen Ordner liegt wird auch bei Programmstart mit AssignFile etc gelesen, ohne Fehler!

Achja: die Fehlermeldung heißt jetzt EInOutError: I/O error 103.

Danke schonmal für deine Hilfe
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
Achim Kalwa

Registriert seit: 2. Apr 2005
Ort: Lienen
110 Beiträge
 
Delphi 12 Athens
 
#4

Re: Schreib-/Leserechte auf CSIDL_COMMON_APPDATA

  Alt 8. Dez 2007, 18:28
Obwohl Du später nur "read" verwendest, wird die Datei trotzdem immer zum Lesen und Schreiben geöffnet!

Setze mal vor dem Öffnen den Filemode auf fmOpenRead:
Delphi-Quellcode:
if FileExists(Source) then
  try
    FileMode := fmOpenRead; // aus SysUtils
    assignFile(f, Source);
    reset(f);
    read(f, a); // Nur lesen!
  finally
    closeFile(f);
  end;
Der Standard-Wert für FileMode ist nämlich fmOpenReadWrite (=2)

Aber Achtung:
Wenn Du FileMode änderst, verwenden alle nachfolgenden Reset()-Aufrufe den neuen Filemode. Außerdem ist FileMode nicht Thread-sicher.

Du kannst diese Probleme umgehen, wenn Du statt der "veralteten" Aufrufe AssignFile(), Reset(), Read() das Streaming-System von Delphi verwendest:
Delphi-Quellcode:
if FileExists(VerFile) then
begin
  FS := TFileStream.Create(VerFile, fmOpenRead);
  try
    FS.ReadBuffer(aVersion, SizeOf(aVersion));
    // mach was mit dem gelesenen Datensatz
  finally
    FS.Free;
  end;
end
else
  ...
HTH
KalwaDOS
Achim
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Schreib-/Leserechte auf CSIDL_COMMON_APPDATA

  Alt 8. Dez 2007, 18:38
kann es sein daß madExcept wegen des Try-Finally auf CloseFile zeigt, obwohl der Fehler vielleicht vorher auftritt?

falls ja, dann kommentiere Try-Finally-End mal aus und schau nochmal mit madExcept nach wo jetzt der Fehler ist
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
8. Dez 2007, 18:58
Dieses Thema wurde von "Phoenix" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Es geht offensichtlich um Delphi.
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Schreib-/Leserechte auf CSIDL_COMMON_APPDATA

  Alt 8. Dez 2007, 19:10
pah...ich glaube ich weiß warum...
Ich hab grad gelesen dass nur der Besitzer der Datei Vollzugriff hat, "normale" Benutzer können nur Lesen! Da die datei im Setup (und damit als Admin) erstellt wurde habe ich als normaler Benutzer nur-lese-rechte...

Warum ich dann als normal Benutzer nicht lesen konnte ?!?

Egal... ich erteile dem Odner bei der Installation einfach schreib-rechte und dann gehts

An die 2 die gerade geantwortet haben:
Das mit dem try-finally-block hat sich ja jetzt geklärt, und das mit den Streams... ist ne Alternative, werde ich mir auf jedenfall mal anschauen

Danke an euch
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
Antwort Antwort


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 07:05 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