Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Runtime error 217 bei FreeLibrary (https://www.delphipraxis.net/206621-runtime-error-217-bei-freelibrary.html)

JohannesK 13. Jan 2021 09:30

Delphi-Version: 10.3 Rio

Runtime error 217 bei FreeLibrary
 
Guten Morgen alle,

ich bekomme bei einem Kunden einen bisher nicht eingrenzbaren Fehler beim Aufruf von FreeLibrary (und nur bei diesem Kunden).

Kurze Beschreibung:
Meine Anwendung ruft eine DLL auf in der die Schnittstellen zu unterschiedlichen ERP-Systemen enthalten sind. Der Aufruf und die Aufgaben werden richtig ausgeführt. Beim Aufruf von FreeLibrary kommt es zu einem Laufzeitfehler.
Das Problem dabei ist, dass der Fehler benutzerabhängig ist. Er tritt auf bei bestimmten Windows-Nutzern. bei anderen nicht (gleicher Rechner, nur anderer User). Der Admin des Kunden versichert, dass die Userprofile identisch sind - gleiche Rechte auf Windows-Ebene. Es gab auch schon die Situation, dass es nach Neuaufbau des Userprofils für ein paar Stunden fehlerfrei funktioniert hat.
Eine Vermutung von mir ist daher, dass vielleicht irgendein Schutzprogramm die DLL nach mehreren Aufrufen auf eine "schwarze Liste" setzt und den Zugriff verhindert.

Hat jemand eine Idee - ich bin für jeden Hinweis dankbar.

jaenicke 13. Jan 2021 09:37

AW: Runtime error 217 bei FreeLibrary
 
Die DLL ist nicht von dir?

Ich würde als erstes einmal mit dem Process Monitor schauen was vor dem Fehler alles passiert. Rechteprobleme würde man da z.B. ganz gut sehen.

Klar ist jedenfalls, dass in der DLL eine unbehandelte Exception auftritt. Insofern kann man da von außen ohne Quelltext nicht allzu viel sehen, es sei denn man kann genug Assembler um sich das auch ohne Quelltext anzuschauen.

JohannesK 13. Jan 2021 09:44

AW: Runtime error 217 bei FreeLibrary
 
Die Schnittstellen-DLL ist auch von mir, dort sind sämtliche Aufrufe in einen try ..except drin. Alle Funktionen werden ja auch ordnungsgemäss und vollständig ausgeführt.
Hatte ich vergessen zu erwähnen: in der Regel tritt der Fehler erst beim zweiten Aufruf innerhalb einer Buchungsliste auf, obwohl jede Buchung für sich einen abgeschlossenen Vorgang darstellt.
Von der Protokollierung her ist ersichtlich dass es erst bei der Freigabe kracht.

Der schöne Günther 13. Jan 2021 09:51

AW: Runtime error 217 bei FreeLibrary
 
Ist die DLL mit Delphi gemacht? Enthält sie auch VCL-Bestandteile?

JohannesK 13. Jan 2021 09:57

AW: Runtime error 217 bei FreeLibrary
 
Die DLL ist mit Delphi gemacht, genau wie die exe.
Der Aufruf enthält auch keine Strings. Durch verwendete units können schon VCL-Komponenten mitkompiliert werden, aber es gibt keine Formulare die geöffnet werden.

dummzeuch 13. Jan 2021 09:58

AW: Runtime error 217 bei FreeLibrary
 
Ist das Problem wirklich User-abhängig? Also:

User A meldet sich an, startet das Programm, macht etwas und beendet es. -> Fehler tritt auf

User B meldet sich an, startet das Programm, macht dasselbe und beendet es. -> Fehler tritt nicht auf

Falls sich das so nicht reproduzieren lässt, würde ich eher darauf tippen, dass der Fehler durch ein anderes Programm ausgelöst wird, das User A vorher / gleichtzeitig verwendet und User B nicht.

JohannesK 13. Jan 2021 10:10

AW: Runtime error 217 bei FreeLibrary
 
Der Fehler ist genau in der Art userabhängig und reproduzierbar

Zitat:


User A meldet sich an, startet das Programm, macht etwas und beendet es. -> Fehler tritt auf
User B meldet sich an, startet das Programm, macht dasselbe und beendet es. -> Fehler tritt nicht auf


Sinspin 13. Jan 2021 10:18

AW: Runtime error 217 bei FreeLibrary
 
Wir hatten solche Fehler auch schon.
Fehlergründe waren bisher:
* Nutzer hat, warum auch immer, einer falsche Version vom Pogramm installiert und die neue lässt sich nicht installieren.
* Nutzerprofil Quota Einstellungen für den Plattenplatz lokal und im Storage, Also Speicher reichte nicht aus. Fiel erst nicht auf weil die DBs für Outlook versteckt ist und nicht überall als verbrauchter Speicher angezeigt wurden.

JohannesK 13. Jan 2021 10:29

AW: Runtime error 217 bei FreeLibrary
 
Zitat:

Nutzer hat, warum auch immer, einer falsche Version vom Pogramm installiert und die neue lässt sich nicht installieren.
Kann man ausschliessen, es ist die gleiche Maschine, einziger Unterschied ist der Windows-User

Zitat:

* Nutzerprofil Quota Einstellungen für den Plattenplatz lokal und im Storage, Also Speicher reichte nicht aus. Fiel erst nicht auf weil die DBs für Outlook versteckt ist und nicht überall als verbrauchter Speicher angezeigt wurden.
Muss ich mit dem Admin des Kunden prüfen

jaenicke 13. Jan 2021 10:39

AW: Runtime error 217 bei FreeLibrary
 
Zitat:

Zitat von JohannesK (Beitrag 1480900)
Zitat:

* Nutzerprofil Quota Einstellungen für den Plattenplatz lokal und im Storage, Also Speicher reichte nicht aus. Fiel erst nicht auf weil die DBs für Outlook versteckt ist und nicht überall als verbrauchter Speicher angezeigt wurden.
Muss ich mit dem Admin des Kunden prüfen

So etwas sieht man auch sofort im bereits erwähnten Process Monitor.

Vielleicht wird auch etwas beim ersten Durchlauf freigegeben, das nicht wieder erzeugt wird, so dass es beim zweiten Mal durch die doppelte Freigabe knallt. Auch dann kommt der Fehler, aber es gibt eben sehr viele Möglichkeiten.

Wird der Fehler denn irgendwo abgefangen, z.B. hinterher im Hauptprogramm? Gibt es dazu Logs mit Stacktrace (ggf. auch mit Tools wie MadExcept oder Eurekalog)? Ansonsten wird der Fehler vielleicht von Windows geloggt, dann wären Debuginformationen im .dbg Format von Windows hilfreich, die man mitliefern kann.

Gremlin 13. Jan 2021 10:56

AW: Runtime error 217 bei FreeLibrary
 
Ist es möglich, dass eine verwendeten Funktion der DLL für einen PChar zu große Rückgabewerte liefert?

jziersch 13. Jan 2021 11:01

AW: Runtime error 217 bei FreeLibrary
 
Verwendet die DLL interfaces?

Falls ja würde ich mal suchen ob evtl. diese explizit freigegeben werden oder z.b. in einem Record überschrieben.

Ansonsten kann man die finalization durchgehen und schauen was so passiert.
Ein paar logging Aufrufe vor dem Aufruf der Destruktoren könnte helfen den Fehler einzugrenzen.

Gestern habe ich einen Fehler in einer utility unit behoben bei der ein TDictionary für <Interfaces> verwendet wurde.
Der Fehler beim Beenden war weg, als ich dies auf Pointer geändert habe.

JohannesK 13. Jan 2021 11:19

AW: Runtime error 217 bei FreeLibrary
 
Zitat:

Zitat von Gremlin (Beitrag 1480903)
Ist es möglich, dass eine verwendeten Funktion der DLL für einen PChar zu große Rückgabewerte liefert?

Eigentlich nicht, der Wert ist bei einer fehlerfreien Ausführung der Dll leer.
Ausserdem erklärt es nicht das unterschiedliche Verhalten bei Nutzerwechsel.

JohannesK 13. Jan 2021 11:20

AW: Runtime error 217 bei FreeLibrary
 
Zitat:

Zitat von jziersch (Beitrag 1480905)
Verwendet die DLL interfaces?

Falls ja würde ich mal suchen ob evtl. diese explizit freigegeben werden oder z.b. in einem Record überschrieben.

Ansonsten kann man die finalization durchgehen und schauen was so passiert.
Ein paar logging Aufrufe vor dem Aufruf der Destruktoren könnte helfen den Fehler einzugrenzen.

Gestern habe ich einen Fehler in einer utility unit behoben bei der ein TDictionary für <Interfaces> verwendet wurde.
Der Fehler beim Beenden war weg, als ich dies auf Pointer geändert habe.

Interfaces werden nicht verwendet in dieser unit. Der Fehler müsste dann ja auch benutzerunabhängig auftreten.

JohannesK 20. Jan 2021 15:09

AW: Runtime error 217 bei FreeLibrary
 
Wir haben aus Zeitgründen die Funktion von den Clients auf den Server verlagert und arbeiten jetzt die Buchungen über einen Dienst ab, ohne jedes Problem.
Eine wirkliche Ursache für das Verhalten konnten wir bisher nicht finden, der Kunde arbeitet nach Aussage des Systemverantwortlichen z.B. auch nicht mit Quota-Regeln für seine User.

Trotzdem Danke für alle Tipps in diesem Zusammenhang. :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz