Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Anwendung starten von USB Stick (https://www.delphipraxis.net/28796-anwendung-starten-von-usb-stick.html)

Michaela_ 30. Aug 2004 13:34


Anwendung starten von USB Stick
 
Hallo,

mein Projekt sollte von USB Stick zum Starten sein. Soweit funktioniert alles ganz gut. Wird allerdings der Stick entfernt und danach wieder angesteckt, während die Anwendung läuft, dann gibts Probleme. Eingebette Ressourcen, die vor dem ausstecken noch nie geladen wurden, erzeugen eine EExternalException Fehlermeldung beim Laden.
Die Bilder lade ich mit LoadFromResourceName. Kann es sein, dass sich die Variable hInstance ändert wenn der Datenträger entfernt wird?
Sollte das Programm nicht nach ausführen komplett im Speicher sein? Da dürfte doch das entfernen und nochmaliges einfügen des Sticks kein Problem sein?


lg, micheala

alcaeus 30. Aug 2004 13:37

Re: Anwendung starten von USB Stick
 
Hi Michaela!

Ich weiß nicht genau wieso solche Probleme entstehen. Als WorkAround könntest du aber prüfen, ob das Programm vom USB-Stick geladen wurde. Wenn ja, dann kopierst du es in die temporären Dateien, führst die exe aus und beendest dein Programm. Somit ist das Entfernen des Sticks kein Problem mehr, da du ja eine lokale Kopie des Programms ausführst und das Programm nicht vom USB-Stick ausgeführt wird.

Greetz
alcaeus

Luckie 30. Aug 2004 13:39

Re: Anwendung starten von USB Stick
 
Windows läd nur die Ressourcen in den Arbeitsspeicher, die auch momnentan gebraucht werden. Eine Anwendung muss ich also nicht immer komplett im Arbeitsspeicher befinden.

Und wer eine programm von einen externen Datenträger startet und selbigen dann entfernt sollte sich nicht wundern, wenn dann die Anwendung nicht mehr funktioniert.

Robert Marquardt 30. Aug 2004 13:40

Re: Anwendung starten von USB Stick
 
Es ist nicht erlaubt den Stick abzuziehen waehrend die Applikation laeuft.
Das EXE ist natuerlich die ganze Zeit geoeffnet, waehrend das Programm lauft.

Michaela_ 30. Aug 2004 13:47

Re: Anwendung starten von USB Stick
 
@lucky: klar dass die Anwendung nicht mehr korrekt arbeitet wenn der Stick entfernt wurde. Aber ist ja so dass er wieder angesteckt wurde und mit dem selben Laufwerksbuchstaben auch wieder zur Verfügung steht. Andere Dateien werden auch braf wieder geladen, nur Ressourcen funktionieren einfach nicht mehr.
Eventuell werde ich das Programm sowieso ggf. beenden aber es interessiert mich trotzdem warums nicht mehr geht.

@robert: Bei eine CD kann man das entfernen ja verhindern. Gibts nicht eine Art USB Stick mit elektroschock die den User vor dem entfernen zurückhält :-D (Marktlücke)


lg, michaela

Robert Marquardt 30. Aug 2004 14:04

Re: Anwendung starten von USB Stick
 
Wenn der Stick entfernt und neu angesteckt wird, dann wird er letztlich als neues Geraet behandelt.
Der offene File-Handle aber weist noch auf das nicht mehr existente alte Geraet.
Die Verbindung des File-Handles zur Datei reisst also ab.

Es ist auch nicht garantiert das geaenderte Dateien auf dem Stick gsichert wurden.
Der Treiber darf naemlich sein eigenes Caching betreiben und wenn man den Stick ohne "Safe removal" einfach abzieht
dann ist auch noch meoeglicherweise das Filesystem hinueber.

Michaela_ 30. Aug 2004 14:14

Re: Anwendung starten von USB Stick
 
Danke Robert. Ich versuche gerade das Programm beim entfernen zu beenden, allerdings klappt das auch nicht so ganz. Kommen recht unschöne Fehlermeldungen. Unter anderem auch "Runtime Error 216" und "Das Programm muss Aufgrund blablabla beendet werden".

Gibt es einen bestimmten Befehl mit dem ich aus dem Programm springen kann ohne dass Fehlermeldungen angezeigt werden? Application.Terminate und ExitCode:=0; helfen nicht.

lg, michaela

alcaeus 30. Aug 2004 15:14

Re: Anwendung starten von USB Stick
 
Hi Michaela!

Du könntest alles abspeichern und den eigenen Prozess mit MSDN-Library durchsuchenTerminateProcess abschießen, so als ob er über den Taskmanager beendet wurde.

Greetz
alcaeus

Robert Marquardt 30. Aug 2004 16:46

Re: Anwendung starten von USB Stick
 
Wenn der Stick abgezogen wurde, dann ist es schon zu spaet. Da laesst sich einfach nichts mehr machen.
Die Applikation muesste namelich das Ausstecken mitbekommen und zu diesem Zeitpunkt ist sie ja schon kaputt.

Man kann nur das Ausstecken einfach nicht behandeln. Wer den Stick abzieht ist selber schuld.

Michaela_ 30. Aug 2004 19:36

Re: Anwendung starten von USB Stick
 
Hi Robert,

mit der WM_DEVICECHANGE message kann man das schon feststellen, das ist kein Problem.

Einziges Problem ist nur das Beenden. Nachdem die Anwendung laut Debugger fertig ist kommen erst die Zugriffsverletzungen. Runtime Error 216 meint ja auch irgendeinen Dateifehler hin (eigentlich ist nie eine Datei offen, was kann windows da wohl meinen)
Ich hab jetzt mal einfach den Prozess gekillt. Keine schöne Lösung aber es funktioniert. Keine Fehlermeldungen :thumb: :mrgreen: (eh klar)

Bei einer CD-Rom funktioniert das ganze einwandfrei. CD raus und wieder rein, alles geht normal weiter.

[OT]
Nur so nebenbei:
Erklähr mal einem DAU dass er selber schuld ist wenn er den Stick rauszieht :gruebel:
[/OT]


lg, michaela


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:58 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-2025 by Thomas Breitkreuz