EXE funktioniert nicht mehr - MS-Fehlermeldung

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: EXE funktioniert nicht mehr - MS-Fehlermeldung

Beitrag von AUGE_OHR »

Roland Gentner hat geschrieben:Zum Schluss liegt es am Virenscanner - der ist auch bei allen gleich :-)
von welchem Virenscanner reden wir ?

was mich, nachdem ja alle Threads terminiert sind, wundert das es immer noch "am Ende" passiert.
für mich klingt das so als wenn immer noch was "offen" ist ... aber was ...

nun hast du BAP, ot4xb und scheinbar ActiveX geladen ... man müsste mal sehen wo/was verwendet wird.

disable doch mal BAP.LIB sowie OT4XB.LIB in deinem *.XPJ. Dann starten mit

Code: Alles auswählen

   PBuild.EXE Project.XPJ >> waslos.
der Compiler sollte /W haben damit die fehlenden LIB aufrufe in "waslos." landen

da du wohl auch eigene DLLs hast muss man evtl. bei ALINK noch die Option

Code: Alles auswählen

/FORCE:MULTIPLE /FORCE:UNRESOLVED 
setzten damit der nicht im XPJ Script bei einem Fehler aufhört.

---

es gibt beim Linker ja die Option /MAP:name

Code: Alles auswählen

    LINK_FLAGS    = /MAP:MYMAP.MAP
beim Blinker konnte ich mit Hilfe des MAP Files nachsehen "wo" es geknallt hat.

man müsste Alaska mal fragen was man mit eine ALINK MAP anstellen kann ... :?:
gruss by OHR
Jimmy
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: EXE funktioniert nicht mehr - MS-Fehlermeldung

Beitrag von ramses »

Eine fehlende Funktion kann es ja nicht sein, da würde der Linker schon "Alarm" schlagen, und das Programm würde auch nicht Tage problemlos laufen.

Nachdem sich die Anti-Virus und Anti-irgendwas ja in jeden Prozess einhängen vermute ich jetzt mal dass so ein Anti-... irgendetwas einen Prozess nicht frei gibt und deshalb das Programm auf die freigabe wartet bis es "ausgezählt ist" und obige Meldung "funktioniert nicht mehr" erscheint.

Z.B. ein Automatisches Datenbanbk Update des Anti-X Programms im Hintergrund bringt diese oft aus dem Tritt.......

Es würde sich mit eigenen Erfahrungen decken, zu den Zeiten, als wir wegen X Problem noch Anti-X gegen Anti-Y getauscht haben, bis wir hingegangen sind und auf Servern grundsätzlich bis auf Windows-Defender kein Anti-XYZ mehr installiert haben. Der Effekt ist umwerfend, es läuft seitdem einfach alles ohne Sorgen.

Gruss Carlo
Valar Morghulis

Gruss Carlo
DelUser01

Re: EXE funktioniert nicht mehr - MS-Fehlermeldung

Beitrag von DelUser01 »

AUGE_OHR hat geschrieben:von welchem Virenscanner reden wir ?
Von Trend Micro - Worry-Free Business Security (Office Scan).
Sonst ist kein weiteres Sicherheitstool installiert. Der Defender ist deaktiviert.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: EXE funktioniert nicht mehr - MS-Fehlermeldung

Beitrag von ramses »

Oje,oje,oje .....
Valar Morghulis

Gruss Carlo
DelUser01

Re: EXE funktioniert nicht mehr - MS-Fehlermeldung

Beitrag von DelUser01 »

Den Virenscanner ausschalten ist halt so eine Sache.
Da es völlig unklar ist, wann der Fehler wieder auftritt und auf welchem PC müsste der Virenscanner auf allen Arbeitsplätzen der Firma abgeschaltet werden. Zuminidest so lange bis der Fehler wieder auftritt. Da will ich eigentlich nicht so rivhtig drangehen.

Alternativ könnte ich den jetzigen VirenScanner (Trend Micro) abschalten und den MS Defender aktivieren. Dann abwarten was passiert.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: EXE funktioniert nicht mehr - MS-Fehlermeldung

Beitrag von ramses »

Hallo Roland

wenn du so einen Test machten willst: Musst du TM komplett deinstallieren (auch auf dem Server wenn du Dateien da beziehst) ausschalten alleine ist nicht zuerlässig.

Gruss Carlo

PS: MS Defender ist besser als sein Ruf .......
Valar Morghulis

Gruss Carlo
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: EXE funktioniert nicht mehr - MS-Fehlermeldung

Beitrag von AUGE_OHR »

ramses hat geschrieben:Eine fehlende Funktion kann es ja nicht sein, da würde der Linker schon "Alarm" schlagen, und das Programm würde auch nicht Tage problemlos laufen.
ich will es ja gar nicht starten ... es geht nur um das Logfile.
"ich" würde nachsehen welche API Function "wo" verwendet werden um dann zu beurteilen "ob" das ein Problem machen "könnte".
ich vermute das durch einen API Aufruf etwas durcheinander kommt was sich dann insgesamt auch auf Windows auswirkt.

Antiviren Programme sind IMHO nur notwendig wenn der PC mit dem Internet verbunden ist.
in einem geschlossenen Intranet, wo auch USB gesperrt ist, kann im Prinzip kein Virus gelangen.
zumindest sollte man testweise den TM deinstallieren und eine andere AV App versuchen.
gruss by OHR
Jimmy
DelUser01

Re: EXE funktioniert nicht mehr - MS-Fehlermeldung

Beitrag von DelUser01 »

Zwischenstands-Meldung zur Fehlersuche:

Der Absturz kommt nach einigen Änderungen nur noch sehr selten vor (oder hoffentlich gar nicht mehr).
Nach Kontrolle umfangreicher Logs welche beim PRogrammende geschrieben werden habe ich einiges festgestellt und darauf hin AppExit() erweitert, z.B.:
- alle Buttons werden zerstört.
- Alle Menü-Objekte werden zerstört.
- eventuell noch bestehenden Dialog-Objekte werden zerstört.
- in allen Threads werden vor dem Ende die DBFs geschlossen und ADS disconnected.
- Das Programm wartet bis alle Threads beendet sind. Hatte darüber schon geschrieben.
- im Thread 1 wird nochmals überprüft ob alle DBFs geschlossen sind und der ADS diskonnected.
- Das XbpCrt wird zerstört -> Ende.

Da manchmal der Fehler "EXE funktioniert nicht mehr" gleich mehrmals angezeigt wurde brachte es mich darauf, dass möglicher Weise Threads hängen die für mich erst einmal nicht sichtbar sind - z.B. das Menü.

UND... das Programm wird jetzt merklich schneller beendet!
Benutzeravatar
mikehoffmann
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 133
Registriert: Mo, 21. Sep 2015 16:22
Hat sich bedankt: 1 Mal
Danksagung erhalten: 18 Mal

Re: EXE funktioniert nicht mehr - MS-Fehlermeldung

Beitrag von mikehoffmann »

Hallo Roland,
mit der API-Funktion "ExitProcess" kannst Du Deine Applikation terminieren, ohne dass alle Threads sauber beendet werden.
In Notfällen habe ich diese Funktion verwendet, aber später immer rausgefunden, was das Problem war. Xbase war nie wirklich schuld. Ich aber auch nicht immer. Callbacks sind in diesem Zusammenhang kritisch, falls Du welche benutzt. Wenn Du irgendwelche Subsystem nutzt (TAPI?), stell sicher, dass die alle beendet werden. Auch diese Kameraden können Threads starten, ohne dass Du etwas mitbekommst.
Viele Grüße
Michael
DelUser01

Re: EXE funktioniert nicht mehr - MS-Fehlermeldung

Beitrag von DelUser01 »

Hallo Michael,

Du hattest also auch schon so etwas ähnliches beim Programmende?

Das mit den Threads sehe ich inzwischen auch so - irgend welche weiteren Threads bremsen meine aus.
Hatte inzwischen Fehlermeldungen vom verdeckten Thread #2 (Menü+Buttons?).
Set ich die Kommunikation der Threads mit dem Hauptthread verbessert habe scheint es um einiges besser zu sein.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: EXE funktioniert nicht mehr - MS-Fehlermeldung

Beitrag von ramses »

Roland

an welcher stelle rufts du den QUIT auf? Im Hauptthread bezw. in der function main() oder in einem später gestarteten Thread (Child) ?

Gruss Carlo
Valar Morghulis

Gruss Carlo
DelUser01

Re: EXE funktioniert nicht mehr - MS-Fehlermeldung

Beitrag von DelUser01 »

Hallo Carlo

QUIT rufe ich im Haupthread auf wenn "eigentlich" alle Abschluss-Aktionen durchgeführt worden sind (DbCloseAll() usw.).
Den Threads wurde zuvor signalisiert, dass sie sich selbst terminieren sollen. Habe aber nie umfangreich kontrolliert ob die das dann wirklich auch tun. Inzwischen schon.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: EXE funktioniert nicht mehr - MS-Fehlermeldung

Beitrag von ramses »

Hallo Roland

seit einiger Zeit habe ich auf meinem Test-PC ab und zu die selbe Erscheinung. Allerdings auf Winows 7.
Es sind jeweils alle der Fenster der App nicht mehr vorhanden, in der Taskliste ist das Symbol der Anwendung noch vorhanden und im Taskmanager wird die EXE noch geführt.
Nach dem Wegklicken der Meldung "Programm funktioniert nicht mehr" erscheint jeweils noch eine Meldung "Runtime Error 217 at XXXXX"

Bis jetzt habe ich die Sache ignoriert. Auch hat noch niemand der Kunden danach gefragt.

Rausgefunden habe bislang nur dass das ganze nur Auftritt wenn ich Threads benutze und dies auch auch wenn diese schon längst beendet sind.

Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
mikehoffmann
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 133
Registriert: Mo, 21. Sep 2015 16:22
Hat sich bedankt: 1 Mal
Danksagung erhalten: 18 Mal

Re: EXE funktioniert nicht mehr - MS-Fehlermeldung

Beitrag von mikehoffmann »

Hallo Roland,
ein Prozess endet dann, wenn alle Threads zuende gelaufen sind oder eben ExitProcess aufgerufen wird. Das kling einfach, isses aber nicht. Zum Beispiel recyclen die Alaskaner die O/S-Threads, wenn ich mich recht erinnere. Deswegen verwende ich die Xbase Therad()-Objekte nur immer zum Start() und lasse dann die Finger davon. Irgendwann vergreift sich dann der GC an den Xbase-Threads und die zugeordneten O/S-Threads werden auch wirklich beendet. Dieses Recyclen ist hochgradig gefährlich, weil Windows sogenannten Thread Local Storage bietet. Das kann die Verwender des TLS schon mal aus dem Tritt bringen, wenn darin plötzlich alte Daten vorgefunden werden.
Wenn Du Dein Programm mit CANCEL/QUIT beendest, dann versucht Xbase, die anderen Threads auch zu beenden. Geht natürlich nicht, wenn die gerade im Betriebssystem rumfuhrwerken.
Mit Process Explorer kann man von außen in einen Prozess gucken und nachsehen, was da für Threads ticken. Wenn Dein Progrämmsche dann mal den Suizid verweigert, kannst Du nachsehen, welche Threads noch am laufen sind.
Viele Grüße
Michael
DelUser01

Re: EXE funktioniert nicht mehr - MS-Fehlermeldung

Beitrag von DelUser01 »

Hallo Michael

das war ein guter Tip mit dem Process Explorer!
Habe mir gleich die aktuelle Version heruntergeladen. Ist ja völlig in Vergessenheit geraten dass es so etwas gibt.

War gleich erstaunt als das Tool nach dem Start meines Programms bereits 17 Threads anzeigte.
Und nach Aktivierung verschiedener Info-Fenster waren es bereita 30...
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: EXE funktioniert nicht mehr - MS-Fehlermeldung

Beitrag von ramses »

Hallo Roland

hast du mal versucht nach dem beenden aller threads noch eine Pause von ca.5Sek. einzubauen bevor du den letzten Befehl quit aufrufts?

.....
inkey(5)
quit

So wäre für den GC noch Zeit um fertig zu werden.

Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
mikehoffmann
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 133
Registriert: Mo, 21. Sep 2015 16:22
Hat sich bedankt: 1 Mal
Danksagung erhalten: 18 Mal

Re: EXE funktioniert nicht mehr - MS-Fehlermeldung

Beitrag von mikehoffmann »

Hallo Carlo,
warum sollte man 5 Sekunden warten? Entweder das Laufzeitsystem funktioniert und es geht weiter, wenn dies möglich ist, oder man kommt sowieso nicht sauber aus der Anwendung raus.
Viele Grüße
Michael
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: EXE funktioniert nicht mehr - MS-Fehlermeldung

Beitrag von ramses »

Hallo Michael

dass das Laufzeitsystem ein wenig eigene Wege geht wissen wir ja alle. Es dient ja auch dazu uns Arbeit abzunehmen z.B. durch das reservieren / freigabe / aufräumen von Speicherplatz bei der Arbeit mit Variablen. Dies funktioniert ja meist nicht schlecht. Leider müssen wir aber auch oft improvisieren. Das Inkey() am ende des Programm habe ich in einem übernomenem Programm gefunden, dieses arbeitet mit vielen Threads hat aber nie ein Problem beim beenden.

Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
mikehoffmann
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 133
Registriert: Mo, 21. Sep 2015 16:22
Hat sich bedankt: 1 Mal
Danksagung erhalten: 18 Mal

Re: EXE funktioniert nicht mehr - MS-Fehlermeldung

Beitrag von mikehoffmann »

Hallo Carlo,
Du vertraust einem Laufzeitsystem Deine Daten an, dem Du nicht vertraust, dass es einen Prozess alleine sauber beendet, ohne dass Du Inkey(5) hinschreibst?
Viele Grüße
Michael
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: EXE funktioniert nicht mehr - MS-Fehlermeldung

Beitrag von ramses »

Hallo Michael

Ja. Genau so ist es. ... Und du?

Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
mikehoffmann
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 133
Registriert: Mo, 21. Sep 2015 16:22
Hat sich bedankt: 1 Mal
Danksagung erhalten: 18 Mal

Re: EXE funktioniert nicht mehr - MS-Fehlermeldung

Beitrag von mikehoffmann »

Hallo Carlo,
ich finde, dass Magie derzeit erheblich überbewertet wird, vertraue dem Laufzeitsystem nach eingehender Prüfung mit irdischen Mitteln an dieser Stelle zu 100% und lasse Inkey(5) weg. Ich würde mich aber umstimmen lassen, wenn jemand ein Prgrämmchen zu Wege brächte, bei dem Inkey(5), Inkey(7) oder Inkey(13) den angepriesenen Nutzen nachweislich erbringt.
Viele Grüße
Michael
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: EXE funktioniert nicht mehr - MS-Fehlermeldung

Beitrag von ramses »

Hallo Michael
Deiner Meinung das Thema "Magie" gehört nicht hier hin. Wenn ich Magie beherrschen würde hätte ich eine Show im MGM Grand in Las Vegas ......

zurück zum Thema "EXE funktioniert nicht mehr"

In den Fällen die ich bei mir nachvollziehen kann steht zum Zeitpunkt der Meldung "Programm funktioniert nicht mehr"
im Prozess-Explorer unter Properties des Programm noch ein Thread drin, folgender:

XPPRT1.dll!?initExeHeap_Fv+0x26bp
State: Wait:UserRequest

Gruss Carlo
Valar Morghulis

Gruss Carlo
DelUser01

Re: EXE funktioniert nicht mehr - MS-Fehlermeldung

Beitrag von DelUser01 »

Hallo Carlo

beim nächsten Auftreten des Fehlers versuche ich über den Process Explorer weitere Details herauszubekommen.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: EXE funktioniert nicht mehr - MS-Fehlermeldung

Beitrag von AUGE_OHR »

hi,

ein SLEEP(x) ist IMHO nicht das Problem ...
es fängt doch schon damit an "wie" man einen Thread aufruft den man "kontrollieren" will.

ich speichere Informationen in einem (externen) Array wenn ich einen Thread aufrufe

Code: Alles auswählen

FUNCTION WinThread(cAppName,cMaske,cFile)
LOCAL bBlock
LOCAL oWinThread
LOCAL aWin     := SP_Thread()
LOCAL nLen     := LEN( aWin )
LOCAL nPosi    := 0

   nPosi := ASCAN( aWin, { | x | x[ ID_APP  ] == cAppName .AND. ;
                                 x[ ID_MASK ] == cMaske } )
   IF nPosi > 0
      // Thread Windows already run, switch o:toFront()
      SETAPPWINDOW( aWin[ nPosi ] [ ID_OBJ ] )
      aWin[ nPosi ] [ ID_OBJ ] :toFront()
      SETAPPFOCUS(  aWin[ nPosi ] [ ID_OBJ ] )
      RETURN .F.
   ENDIF

   bBlock := { || FormWin( cAppName,cMaske,cFile ), ;
                           cAppName,cMaske,cFile  }

   oWinThread := Thread() :new()
   oWinThread:start( bBlock )

   // 4th Element fill later with oDlg in Thread
   SP_ThreadAdd( { cAppName,cMaske,cFile, "" , oWinThread } )

RETURN .T.
das 4th Element wird "im" Thread mit oDlg (oder anderem Parent) gefüllt.

zu beenden von allen Threads gehe ich dann so vor

Code: Alles auswählen

// close all Thread Windows
//
FUNCTION AppEnd()
LOCAL aWin     := SP_Thread()
LOCAL nLen     := LEN(aWin)
LOCAL nPosi    := 0
LOCAL i        := 0
LOCAL oObj
LOCAL oThread

   FOR nPosi := nLen TO 1 STEP -1
      oObj     := aWin[nPosi][ID_OBJ   ]
      oThread  := aWin[nPosi][ID_THREAD]

      // send close Event to Windows
      PostAppEvent(xbeP_Close,,,oObj)

      // wait until Thread terminate
      i := 0
      DO WHILE oThread:active
         SLEEP(10)
         i++
         IF i > 3
            Msgbox("Problem Thread","AppEnd()")
            EXIT
         ENDIF
      ENDDO
   NEXT
RETURN .T.
klar müsste, bei xbeP_Close, der o:Close Callback Slot "bestückt" sein sonst funktioniert das nicht.
wenn der Parent kein o:Close hat muss man eben mit UserDEF Events arbeiten.
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: EXE funktioniert nicht mehr - MS-Fehlermeldung

Beitrag von brandelh »

AUGE_OHR hat geschrieben: ein SLEEP(x) ist IMHO nicht das Problem ...
nun so pauschal würde ich das nicht stehen lassen, es kommt schon darauf an wie groß x ist ;-)

Ein Sleep() kann nicht unterbrochen werden (laut Doku) !

Sicherlich sind Werte von 0 (CPU springt nur zu nächstem Thread) bis 50 (0,5 Sekunden) meist problemlos.
Aber sicherer ist es solche sleep() in Schleifen zu legen, die z.B. 100 mal sleep(10) aufrufen, als sleep(1000) zu verwenden.
Gruß
Hubert
Antworten