Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   CreateDir('c:\temp'); -> external exception (https://www.delphipraxis.net/166358-createdir-c-%5Ctemp-%3B-external-exception.html)

hoika 9. Feb 2012 14:03

CreateDir('c:\temp'); -> external exception
 
Hallo,

in meinem Code steht so was drin

try
CreateDir('C:\temp');
except
end;

Jetzt kommt auf einigen Rechnern ohne Laufwerk C (genauer C ist ein Wechselmedium)

Exception Processing Message c0000013 Parameters 75b6bf9c 4 75b6bf9c 75b6bf9c

Das habe ich mal nachgestellt.
Ich bekomme die Meldung nicht.

Also den Process Monitor angeworfen.
Den Aufruf CreateFile C:\temp kann ich bei mir schön mitloggen,
ABER
Auf dem Test-Rechner ist der Befehl nicht da !

Ist das CreateDir (intern CreateDirectory) wirklich so clever ???

Aber warum kommt die Exception auf dem anderen Rechner ???

Das mit dem CreateDir ändere ich noch,
da die Exception aber auch noch an einer anderen Stelle im Code kommt
(dort gibt es kein CreateDir) habe ich etwas anderes Unbekanntes im Verdacht.

Was nun ?


Heiko

Luckie 9. Feb 2012 14:16

AW: CreateDir('c:\temp'); -> external exception
 
Warum der try-except-Block, wenn du die Exception eh in die Tonne kloppst?

DeddyH 9. Feb 2012 14:21

AW: CreateDir('c:\temp'); -> external exception
 
Vielleicht bringt SetErrorMode Besserung?
Delphi-Quellcode:
ErrMode := SetErrorMode(SEM_FAILCRITICALERRORS);
try
  //Code
finally
  SetErrorMode(ErrMode);
end;

hoika 9. Feb 2012 14:26

AW: CreateDir('c:\temp'); -> external exception
 
Hallo,

ich bekomme die Meldung ja nicht,
auch auf dem Testrechner ohne Laufwerk C.

Waber.
Weit interessanter ist, dass der ProcessMonitor
auf dem Testrechner ohne Laufwerk C das C:\Temp gar nicht anzeigt !
Das ist das, was mich so wundert.

Im Code (ist nicht meiner) steht auch noch sowas wie
"muss angelegt werden, weil sonst das SQL (damals noch per BDE) nicht funktioniert ???)
Das hat wohl was mit dem SQL-Links zu tun gehabt, der bei Queries
das Query-Ergebnis im Temp zwischengepuffert hat.

Alles sehhhhr merkwürdig.


Heiko


Heiko

Luckie 9. Feb 2012 14:34

AW: CreateDir('c:\temp'); -> external exception
 
Mach doch mal eine gescheite Ausnahmefehlerbehandlung, damit du eine aussagekräftige Fehlermeldung bekommst. Dann kann man gucken, was man macht. Aber ohne das Problem wirklich zu kennen, ist das etwas schwer.

jaenicke 9. Feb 2012 15:20

AW: CreateDir('c:\temp'); -> external exception
 
Zuerst wird das Laufwerk zu dem angegebenen Pfad ermittelt (sprich sowas wie \Device\Harddisk6\DR6). Das existiert schon gar nicht, also kommt Windows gar nicht mehr an die Stelle, an der der konkrete Pfad geprüft wird. Die Abfragen auf der Ebene fängt der Process Monitor aber gar nicht ab, deshalb siehst du dort auch nix.

Deshalb siehst du im Process Monitor auch nichts, wenn Windows meldet, dass \Device\Harddisk6\DR6 nicht gefunden wird. Da wird dann auf ein Laufwerk zugegriffen, das existiert, aber nicht zugreifbar ist (DVD-Laufwerk ohne DVD, Kartenleser ohne Karte, ...).

Aber davon mal ganz abgesehen:
Eigentlich solltest du nur bei Konfigurationsproblemen überhaupt auf ein nicht existentes Laufwerk zuzugreifen versuchen. Denn normalerweise weißt du ja das korrekte Laufwerk.
Wozu willst du denn ein Verzeichnis c:\temp anlegen?!? Das ist doch Schwachsinn. Oder sollte das nur ein Beispiel sein?

hoika 9. Feb 2012 15:32

AW: CreateDir('c:\temp'); -> external exception
 
Hallo,

Zitat:

Eigentlich solltest du nur bei Konfigurationsproblemen überhaupt auf ein nicht existentes Laufwerk zuzugreifen versuchen.
Ich mache gar nichts, ich muss nur uralten Code verwalten ...

Meine Frage zielte auch darauf ab, ob jemand schon mal so eine Exception hatte,
und die auf eine CreateDir zurückzuführen war.
Das man sowas überhaupt nicht macht, ist mir klar.

Danke erst mal.
Muss jetzt erst mal warten, bis der Kunde mich auf seine Kiste läßt.


Heiko

Luckie 9. Feb 2012 16:19

AW: CreateDir('c:\temp'); -> external exception
 
Dann mach es gleich richtig und nutze das temporäre Verzeichnis des Benutzers.

jaenicke 9. Feb 2012 16:58

AW: CreateDir('c:\temp'); -> external exception
 
Zitat:

Zitat von hoika (Beitrag 1150146)
Ich mache gar nichts, ich muss nur uralten Code verwalten ...

Das kann ich seehr gut nachvollziehen. :zwinker:
Ich versuche die Leichen, die ich finde, dann aber auch gleich zu ermorden. :mrgreen:

Dezipaitor 9. Feb 2012 18:13

AW: CreateDir('c:\temp'); -> external exception
 
Diese Exception wird von der Win32 API geworfen. Ja auch die Win32 API kann Exceptions werfen, statt GetLastError oder Rückgabewerte zu verwenden. MS hat dazu "Structured Exception Handling" eingeführt.

Unter Delphi, soweit ich weiß, wird dazu die EExternalException ausgelöst. Die Nummer "C0000013" ist ein HRESULT (siehe MSDN oder Wikipedia) und du erkennst den Fehlerwert 13hex, welcher "Das Medium ist schreibgeschützt" bedeutet.


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