Kein Datenträger
Verfasst am: Mittwoch, 20. Okt. 2010 um 22:13Schon in der Version 1.x des BVASystems ärgerte ich mich über einen Fehler, den ich nicht wirklich nachvollziehen bzw. beheben konnte. Gestern trat dieser dann auch bei der neuen Software auf.
Beim Einlesen des Verzeichnisbaumes wird überprüft, ob sich auf den Laufwerken des Computers Unterverzeichnisse befinden. Auch auf Wechseldatenträgern muss der Versuch gestartet werden, die Unterverzeichnisse einzulesen, da es keine andere Möglichkeit gibt, herrauszufinden ob sich ein Datenträger im Laufwerk befindet. Die Funktion ist seit der ersten Version des BVASystems 2.0 unverändert in der Software enthalten. Gestern zeigte sich ein Fehlerdialog mit der Aufschrift: „Es befindet sich kein Datenträger im Laufwerk. Legen Sie einen Datenträger in Laufwerk … ein.“
Auf meinem Testrechner machte sich der Fehler durch einen anderen Fehlerdialog bemerkbar. Dort kam es zu einer „Exception Processing Message c0000013“. Ohne die Überschrift hätte ich nicht verstanden, was die Fehlermeldung mir sagen will.
Ich stellte fest, das die Fehlermeldung aufgetreten war, nachdem ich am Entwicklungsrechner den Kartenleser genutzt hatte, um die Bilder meine Digitalkamera auf den Rechner zu spielen. Nach einem Neustart des Rechners und einer anschließenden Neuübersetzung der Bilddatenbank war der Fehler wieder weg. Da ich meinen Kartenleser gerne weiterbenutzen will, ohne ständig den Rechner neu zu starten, suchte ich weiter.
Durch die weitere Recherche kam ich dann auf die Windowsfunktion „SetErrorMode“. Mit ihr kann eingestellt werden, wie das Betriebssystem auf bestimmte Fehler reagieren soll. Meine Vermutung ist, das der Treiber meines Kartenlesers diesen „ErrorMode“ verstellt hat und daher die Fehlermeldungen angezeigt wurden.
Unterbinden lassen sich die Fehlermeldungen nun ganz einfach dadurch, das der „ErrorMode“ auf SEM_FAILCRITICALERRORS setzt. Die Problemlösung sieht also wie folgt aus:
var OldErrorMode: Integer; begin OldErrorMode := SetErrorMode(SEM_FAILCRITICALERRORS); try ReadDirectorys(); finally SetErrorMode(OldErrorMode); end; end;