Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Datei Handling nach Autostart (https://www.delphipraxis.net/150583-datei-handling-nach-autostart.html)

APieroth 21. Apr 2010 10:26


Datei Handling nach Autostart
 
Hallo da draussen,

ich habe ein merkwürdiges Problem, für das ich einfach keine Lösung finde:

Ich habe ein Programm geschrieben, das das Vorhandensein einer Datei überprüfen aoll. Ausserdem soll es diverse Informationen in eine Logdatei schreiben.

Mit folgendem Code überprüfe ich das Vorhandensein der Datei:

Delphi-Quellcode:
function AliveFileAvailable (filename: string): boolean;
var F: file;
begin
  AddLogEntry('Checking File Availability ...');
  AssignFile (F, filename);
  {$I-}
  Reset (F);
  {$I+}
  Result:= (IOResult=0);
  if Result then
    begin
      AddLogEntry('-> File Available, closing ...');
      CloseFile (F);
    end
  else
    begin
    AddLogEntry('-> File NOT Available!!! ...');
    end;
end;
Und das ist die Funktion, die das Log schreibt:

Delphi-Quellcode:
function AddLogEntry(inhalt: string): boolean;
var F: text;
    s1, s2, ausgabe: string;
    datum, zeit: TDateTime;
begin
  datum:= date();
  zeit:= time();
  s1:= DateTimeToStr(datum);
  s2:= TimeToStr(zeit);
  ausgabe:= s1+'-'+s2+': '+inhalt;
  AssignFile(F, logdateiname);
  {$I-}
  Append (F);
  {$I+}
  if IOResult<>0 then
    begin
       Rewrite(F);
    end;
  WriteLn(F, ausgabe);
  CloseFile(F);
end;
Das klappt so weit auch gut, so lange ich mein Programm manuell starte (also Doppelklick auf das Icon auf meinem Desktop).
Packe ich jedoch einen Link in den Autostartordner, damit das Programm beim Systemstart ausgeführt wird, so erfolgt kein Logging und die überprüfte Datei wird trotz Vorhandensein nie gefunden.
Mein Programm, die gesuchte Datei und das Log liegen alle in einem Verzeichnis (C:\IP-Symcon).

Woran liegt das?

Als Workaround, so dachte ich, bastle ich mir einfach einen Loader für mein Programm und lege ihn ins selbe Verzeichnis, wie mein Programm. Mein Programm wird dann durch ShellExecute ausgeführt.
Doch auch hier das Problem: starte ich den Loader per Dopperlklick vom Desktop, so geht alles gut. Liegt er im Autostartordner und wird beim Computerstart ausgeführt, so passiert nichts.

Warum?


Nebenbei bemerkt: Ich habe mit Delphi 2010 prorammiert und das Programm läuft unter WindowsXP Pro.


Kann mir jemand helfen?

Grüße,

Andreas

Luckie 21. Apr 2010 10:31

Re: Datei Handling nach Autostart
 
Und wie sehen die Pfadangaben aus?

APieroth 21. Apr 2010 10:38

Re: Datei Handling nach Autostart
 
Hm, ich glaube, ich bin dem Fehler auf der Spur.
Nach Autostart (mein Programm liegt übrigens nicht als Link im Autostartordner, sondern ich habe es in der Registry unter Aktueller Benutzer\Run eingetragen), schreibt mein Programm doch ein Log. Jedoch nicht in das Verzeichnis, in dem es liegt, sondern in mein Benutzerverzeichnis (C:\Dokumente und Einstellungen\Andreas). Folglich wird es auch dort nach der zu überwachenden Datei suchen und sie entsprechend nicht finden. Blöd!

Wie kann ich unter Delphi feststellen, in welchem Verzeichnis ein Programm liegt?


Grüße,

Andreas


@Luckie
Ich habe keine Pfadangaben gemacht. Das ist wohl das Problem :wall:

Luckie 21. Apr 2010 10:43

Re: Datei Handling nach Autostart
 
Zitat:

Zitat von APieroth
Ich habe keine Pfadangaben gemacht. Das ist wohl das Problem :wall:

Ich glaube, seit Bestehen dieses Forum, wird gepredigt, dass man keine relativen Pfade verwendet, weil dann nämlich genau das passiert.

DeddyH 21. Apr 2010 10:48

Re: Datei Handling nach Autostart
 
Und nebenbei prüft der Code nicht, ob die Datei vorhanden ist, sondern ob sie zum Lesen geöffnet werden kann, das ist ein Unterschied. Was spricht denn gegen FileExists?

APieroth 21. Apr 2010 10:53

Re: Datei Handling nach Autostart
 
@Luckie
Tja, ist wohl richtig.
Da das Programm jedoch universell einsetzbar sein soll, brauche ich eine Möglichkeit, den Pfad, in dem es liegt herauszufinden. Wie?

@DeddyH
Ach herrjeh. Auf die einfachsten Dinge kommt man nicht :oops:

Luckie 21. Apr 2010 10:58

Re: Datei Handling nach Autostart
 
Zitat:

Zitat von APieroth
Da das Programm jedoch universell einsetzbar sein soll, brauche ich eine Möglichkeit, den Pfad, in dem es liegt herauszufinden. Wie?

Auch diese Frage wurde in diesem Zusammenhang schon zur Genüge beantwortet: ParamStr(0).

Allerdings ist es keine gute Idee, Dateien im Programmverzeichnis abzuspeichern, da eventuell die nötigen Rechte fehlen.

p80286 21. Apr 2010 11:04

Re: Datei Handling nach Autostart
 
ExtractFileDir(paramstr(0))

@Luckie
Da er sich augenscheinlich abseits der üblichen Windows-Pfade bewegt, darf er es wohl doch.

Gruß
K-H

Luckie 21. Apr 2010 11:08

Re: Datei Handling nach Autostart
 
Zitat:

Zitat von p80286
Da er sich augenscheinlich abseits der üblichen Windows-Pfade bewegt, darf er es wohl doch.

Bis zu dem Zeitpunkt, wo ein Benutzer auf die Idee kommt das Programm, dahin zu installieren, wo es hingehört. Und dann geht hier wieder die große Fehlersuche los. Warum also nicht gleich richtig machen?

p80286 21. Apr 2010 11:23

Re: Datei Handling nach Autostart
 
Zitat:

Zitat von Luckie
Zitat:

Zitat von p80286
Da er sich augenscheinlich abseits der üblichen Windows-Pfade bewegt, darf er es wohl doch.

Bis zu dem Zeitpunkt, wo ein Benutzer auf die Idee kommt das Programm, dahin zu installieren, wo es hingehört. Und dann geht hier wieder die große Fehlersuche los. Warum also nicht gleich richtig machen?

Entschuldige, ob dies so ganz "richtig" ist liegt wohl eher im Auge des Betrachters. Aber davon abgesehen "richtig" wäre, bei der Programminitialisierung, die benötigten Rechte zu überprüfen, und den Benutzer ggf. auf den falschen Installationsort hinzuweisen, und vielleicht zu dokumentieren wohin das Log geschrieben wurde.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz