Seite 1 von 1

Fehler: ".EXE reagiert nicht"

Verfasst: Fr, 14. Nov 2014 13:43
von Werner
HI!

Bei einem Kunden, der mit Windows 7 arbeitet, tritt öfters das Phänomen auf, dass unser Programm plötzlich ohne Vorwarnung (d.h. ohne Fehlermeldung) stehenbleibt; wenn man versucht das Programm abzubrechen, kommt die Meldung: "VP.EXE reagiert nicht".

Die VP.EXE ist ein xBase++-Programm von ca. 30 MB. Beim Start wird aus einer Datei ein Datensatz gelesen; dieser wird dann durchgerechnet, gedruckt und wieder zurückgespeichert. Interessanterweise tritt das oben beschriebene Phänomen nicht beim 1. Durchlauf, sondern erst beim 2. Programmdurchlauf auf. Zusätzlich zu der vorgenannten Meldung sieht man dann auch noch einen schwarzen DOS-Bildschirm mit der der Überschrift: VP.EXE.

In der Vergangenheit habe ich diesen DOS-Bildschirm öfters bekommen, als ich noch die APPsys bzw. die APPquick in die Programmierung eingebunden hatte. Meines Wissens und meiner Nachforschung nach ist die APPsys jedoch nicht mehr in die VP.EXE eingebunden.

Zusätzlich ist mir aufgefallen, dass bei dem speziellen Kunden neben unserem Programm im Hintergrund immer noch andere Programme parallel laufen. Kann dies etwas mit dem o.g. Programmstillstand zu tun haben?

Vielleicht kann mir jemand einen Tipp geben! Vielen Dank im Voraus!

Gruß Werner

Re: Fehler: ".EXE reagiert nicht"

Verfasst: Fr, 14. Nov 2014 13:57
von Tom
Kann im einfachsten Fall ein simpler Deadlock sein - das Programm versucht, einen Datensatz zu sperren, von dem es glaubt, dass er in jedem Fall gesperrt werden kann (DO WHILE !RLock();ENDDO), aber das geht nicht, weil er oder die Tabelle das nicht zulassen. "Keine Rückmeldung" bedeutet ja "lediglich", dass das Eventmanagement der jeweiligen Software nicht der 100-Millisekunden-Regel folgt, also nicht alle 100 Millisekunden die Eventqueue ausliest. Wenn es mit etwas anderem beschäftigt ist, geht das manchmal eben nicht, weshalb sich diese Situation auch hin und wieder von selbst auflöst (was dann aber trotzdem auf schlechte Programmierung hinweisen würde).

Ist das eine GUI-Software? Oder Hybrid? Das "schwarze DOS-Fenster" ist nur entweder dann möglich, wenn in einer /PM:PM-gelinkten Software kein "PROC AppSys();RETURN" enthalten ist (in diesem Fall müsste man das Fenster aber bei jedem Programmstart sehen) oder es sich um eine Hybridsoftware handelt, die dann z.B. per ? irgendwas irgendwo anzeigen will.

Re: Fehler: ".EXE reagiert nicht"

Verfasst: Fr, 14. Nov 2014 15:23
von brandelh
Ein RUN / RunShell() würde auch eine schwarze Box zusätzlich öffnen.

Re: Fehler: ".EXE reagiert nicht"

Verfasst: Fr, 14. Nov 2014 15:29
von brandelh

Code: Alles auswählen

Meines Wissens und meiner Nachforschung nach ist die APPsys jedoch nicht mehr in die VP.EXE eingebunden.
die Datei AppSys.PRG ist grundsätzlich im Projekt enthalten (wohl in einer Laufzeit DLL) und kann nur mit dem Einbinden der
PRG / Funktion ins eigene Programm geändert werden. Wie Tom schon schrieb, überschreiben die beiden Zeilen die automatisch eingebundene Version

Code: Alles auswählen

PROC AppSys()
RETURN
Dann muss man aber natürlich auch selbst für die Fenster sorgen (XbpDialog()) ... in der normalen AppSys wird für die Clipper Kompatibilität ein CRT (PM) oder Consolen (VIO) Fenster geöffnet.

Re: Fehler: ".EXE reagiert nicht"

Verfasst: Fr, 14. Nov 2014 16:18
von DelUser01
Hallo Werner

wenn Dein VP.EXE kein eigenes Window aufmacht, aber wenn es stehen bleibt ein schwarzes Fenster geöffnet wird mit dem Titel Deiner EXE (VP.EXE) würde folgendes vermuten:
Deine VP.EXE produziert eine Ausgabe mit ? / ?? (oder @ x,y Say/Get...), wegen einem Fehler im Programmablauf oder sonst einem Hinweis.
In diesem Moment wird zur Anzeige von Xbase++ das CRT geöffnet. Das war es dann.

Solche Fehler habe ich ab und zu wenn ich beim WAA Programmteile aufrufe die von mir für Hybrid gemacht wurden. Kommt es dann zu einem Problem (z.B. Datei nicht gefunden) taucht genau so ein schwarzes Fenster auf und das Programm bleibt stehen.
(Den Fehler habe ich zwar abgefangen, die Fehlermeldung ist aber für Hybrid gemacht und damit Ende des Programms...).

Um den Fehler sichtbar zu machen hilft nur, das CRT-/Hybrid-Fenster bereits beim Programmstart zu erstellen und zu öffnen.