Exe muss beendet werden - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +---- Forum: Application Builder (/Forum-Application-Builder) +---- Thema: Exe muss beendet werden (/Thread-Exe-muss-beendet-werden) |
Exe muss beendet werden - Marquardt - 22.04.2010 07:38 Hallo zusammen! Ich habe folgendes Problem mit einer .exe-Datei: Die Datei wird nach unbestimmter Zeit mit dem Hinweis, daß LabVIEW aufgrund eines Fehlers beendet werden muss, abgebrochen. Nach Bestätigen mit OK wird die exe logischerweise geschlossen. Schaue ich mir die log-Datei der Fehler an, so stelle ich fest, daß darin sämtliche dll-Dateien enthalten sind, welche beim Erstellen der exe-Datei hinzugelinkt wurden. (plus zusätzlich eine Datei kernel32.dll) Und zwar wird beim Erstellen der exe-Datei automatisch ein neuer Ordner "data" als Hilfsdateiverzeichnis angelegt. Und eben darin sind diese dll-Dateien abgelegt. Meine Fragen: Kennt jemand dieses Problem? Muss ich besagte dll´s bei der Erstellung der exe unter Quelldateien in "Immer enthalten" reinziehen? Exe muss beendet werden - IchSelbst - 22.04.2010 09:07 ' schrieb:Die Datei wird nach unbestimmter Zeit mit dem Hinweis, daß LabVIEW aufgrund eines Fehlers beendet werden muss, abgebrochen.Wenn der Absturz nach unbestimmter Zeit geschieht (also undefiniert und nicht vorhersehbar), dann gehe ich davon aus, dass du alles richtig gemacht hast. Zumindest das mit dem Einbinden der DLLs. Kannst du genauere Aussagen machen, in welchem Modul der Absturz aufgetreten ist? Welche EXE stürzt denn ab: Die LabVIEW-Entwicklungsumgebung? Mir fallen mehrere Möglichkeiten ein: Du hast eine DLL doppelt eingebunden. Die Datei kernel32.dll darfst du nicht explizit einbinden (genauso wie alle anderen betriebssystemspezifischen DLLs auch) (Wahrscheilichkeit 1%). Du hast einen Programmierfehler gemacht auf LabVIEW-Ebene, d.h. dein Soucecode hat einen Fehler (Wahrscheilichkeit 0,01%). Du hast einen Programmierfehler im einer DLL gemacht ((Wahrscheilichkeit 19%). Du hast eine DLL falsch aufgerufen (Wahrscheilichkeit 80%). Verwendest du die aktuelle Version von 82? Also 821? Ich tippe auf eine Inkonsistenz im Speichermanager, in deren Folge dann der Absturz geschieht. Derartige Inkonsistenzen können durch die oben erwähnten Fälle eintreten. Exe muss beendet werden - Marquardt - 22.04.2010 10:21 Um meinem Status "Grünschnabel" gerecht zu werden, muss ich nachfragen: Kannst du genauere Aussagen machen, in welchem Modul der Absturz aufgetreten ist? Welche EXE stürzt denn ab: Die LabVIEW-Entwicklungsumgebung? Ich habe aus dem Blockdiagramm heraus über die Werkzeugleiste die exe erzeugt. Diese stürzt bei der Ausführung ab. Du hast eine DLL doppelt eingebunden. Die Datei kernel32.dll darfst du nicht explizit einbinden (genauso wie alle anderen betriebssystemspezifischen DLLs auch) (Wahrscheilichkeit 1%). Im Ordner data ist jeweils nur eine dll von jedem Typ abgelegt. Und falls es sich um eine doppelte dll handeln sollte, weshalb kommen dann in der log-Datei alle dll des data-Ordners? Du hast einen Programmierfehler im einer DLL gemacht ((Wahrscheilichkeit 19%). Ich habe keine der dll´s selbst programmiert. Du hast eine DLL falsch aufgerufen (Wahrscheilichkeit 80%). Wie kann eine dll falsch aufgerufen werden? Verwendest du die aktuelle Version von 82? Also 821? Version von welcher Datei? Exe muss beendet werden - Marquardt - 22.04.2010 10:41 Verwendest du die aktuelle Version von 82? Also 821? Version von welcher Datei? Sorry, LV-Version steht noch falsch. Aktuell nutze ich LV 2009. Exe muss beendet werden - IchSelbst - 22.04.2010 11:15 ' schrieb:Ich habe aus dem Blockdiagramm heraus über die Werkzeugleiste die exe erzeugt. Diese stürzt bei der Ausführung ab.Wenn du das Programm in der LV-IDE ausführen lässt (Pfeil "Ausführen"), stürzt dann auch was ab? Es stürzt aber schon erst nach einer (undefinierten) Zeit ab? Es geht alles für sag ich mal 10min gut, dann folgt der Absturz. Hinweis: Zum Erstellen von EXE-Files solltest du ein Projekt erstellen und von dort aus eine EXE erstellen. Dann kannst du so Sachen wie mit explizit einbinden genau festlegen. Zitat:Im Ordner data ist jeweils nur eine dll von jedem Typ abgelegt.Ich gehe mal davon aus, dass diese DLL irgendwie produktspezifisch sind, also nichts mit dem Betriebssystem zu tun haben. Und in diesem Ordner befindet sich auch eine DLL kernel32.dll? Auch eine user32.dll? Zitat:Und falls es sich um eine doppelte dll handeln sollte, weshalb kommen dann in der log-Datei alle dll des data-Ordners?Erscheinen da alle DLLs, die sich im Ordner DATA befinden, oder steht da, dass die DLL "C:...datakernel32.dll" heißt? Zitat:Wie kann eine dll falsch aufgerufen werden?Indem z.B. ein String oder ein Array falsch übergeben wird. Ist das so, so sollte der Absturz auch in der IDE auftreten. Exe muss beendet werden - rolfk - 22.04.2010 19:22 ' schrieb:Und in diesem Ordner befindet sich auch eine DLL kernel32.dll? Auch eine user32.dll? Ja bitte angeben welche DLLs Du da im data Ordner hast. Wenns dort irgendwelche DLLs hat die Standard auch im Windows System Ordner vorkommen, dann sind Probleme absolut vorprogrammiert. Zitat:Indem z.B. ein String oder ein Array falsch übergeben wird. Also wenn die Parameter echt falsch konfiguriert sind dann würde es tatsächlich auch in der IDE garantiert abstürzen. Ein viel gemeinerer Fehler ist aber wenn man beim Call Library Aufruf für C Array und String Pointern in denen die DLL Informationen hineinschreiben soll einen zu kleinen Buffer angelegt hat, bis hin zu gar keinem. Das kann manchmal sehr lange scheinbar gut gehen. Die DLL schreibt dann frisch fröhlich in Speicherbereiche die eigentlich für etwas anderes benützt werden. Das kann in der IDE eine ganze Weile ohne sichtbare Probleme bleiben und dann im EXE plötzlich brutal abstürzen. Zu beachten ist auch, dass die Wahrscheinlichkeit eines Crashes auch vom Blutdruck des Operators, der Mondphase und der aktuellen Sonnenaktivität abhängt. Dieser letzte Satz ist nur halb scherzhaft gemeint! |