Nicht entladene Static DLL's nach Programmende

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
manni1729
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 30
Registriert: Mi, 04. Jun 2008 14:18
Wohnort: Nordhessen

Nicht entladene Static DLL's nach Programmende

Beitrag von manni1729 »

Hallo,
wird haben bei verschiedenen Kunden das Problem, das nach Programmende noch Dll's im Speicher sind.
Alle Dll's sind statisch an die Exe gebunden.
Jetzt kommt es bei einzelnen Kunden vor das die Dll's nach Programmende nicht freigegeben werden. Wenn die betroffenen Dll's durch ein Update überschrieben werden sollen, geht das nicht.
Erst nach einen Neustart des Rechners können die Dll' überschrieben werden. Das Problem taucht aber nicht auf jeden Rechner auf!

Leider kann ich es in meiner Testumgebung nicht nachvollziehen.
Kennt jemand so ein Problem ?

Gruß Manni
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: Nicht entladene Static DLL's nach Programmende

Beitrag von brandelh »

Hi,

du kannst die alten DLL umbenennen, das geht auch wenn sie offen sind.
Die neuen installieren und bei Gelegenheit die alten löschen, eilt ja nicht ;-)

cNameDerDll := "MyDll.DLL"
DELETE FILE ("ALT"+cNameDerDll) // kann auch fehlschlagen, daher
RENAME (cNameDerDll) TO ("ALT"+cNameDerDll) // nun ist auf jeden Fall der Name frei !
neue DLL installieren ...
Im Programm selbst dann ...
DELETE FILE ("ALT"+cNameDerDll) // löscht die alte DLL sobald möglich.
Gruß
Hubert
manni1729
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 30
Registriert: Mi, 04. Jun 2008 14:18
Wohnort: Nordhessen

Re: Nicht entladene Static DLL's nach Programmende

Beitrag von manni1729 »

Hallo Hubert,
danke, gute Idee!
Das ein Ansatz der gehen kann! Ich werde das mal testen

Wobei ich die Ursache noch nicht verstanden habe

Gruß Manni
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: Nicht entladene Static DLL's nach Programmende

Beitrag von brandelh »

manni1729 hat geschrieben:Wobei ich die Ursache noch nicht verstanden habe
es könnte der Virenscanner sein oder der Prozess hängt noch an einer Resource die das tatsächliche Ende der EXE hinauszögert ... wer weiß schon noch was da alles abgeht ;-)
Gruß
Hubert
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Nicht entladene Static DLL's nach Programmende

Beitrag von Tom »

Das Verhalten ist erklärbar - jedenfalls konnte ich das für mich erklären. Wir laden die DLLs des Reportgenerators (List&Label) und holen uns Handles dafür, die wir dann für die Jobsteuerung und die DllCalls benötigen. Wird die App jetzt "gekillt", also nicht über die vorgesehene, ziemlich umfangreiche, Exit-Routine beendet, kann es zum Abbruch des Entladens der DLLs kommen, wenn dies beispielsweise inmitten eines Druckjobs geschieht. Die L&L-DLLs verweigern sich der Entladung, und von unserer App bleiben auch ein oder zwei "hängen". Allerdings ist die EXE als Prozess (! - nicht als Applikation) auch noch im Task-Manager zu sehen. Durch ein paar Ergänzungen konnten wir das Verhalten abstellen.
Herzlich,
Tom
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: Nicht entladene Static DLL's nach Programmende

Beitrag von brandelh »

Tom hat geschrieben:Allerdings ist die EXE als Prozess (! - nicht als Applikation) auch noch im Task-Manager zu sehen.
Bei GUI Anwendungen sieht man ja nur das MAIN-Fenster, dieses kann geschlossen werden ohne die EXE zu schließen.

Code: Alles auswählen

Proc Main
    ... 
    oDlg:show() ... // Fenster anzeigen und auf CLOSE warten ...
    ...
    nun ist das Fenster weg, nichts mehr zu sehen, weder in der Taskleiste noch als Anwendung (=Fenster) im Taskmanager. Die EXE ist aber noch da.
    ...
    CleanUp() // eine Funktion ist noch tätig in der EXE, statische DLLs bleiben aktiv, dynamische ? .

return ... das ist noch NICHT DAS ENDE !

EXIT Procedure ... die kommen auch noch 
Falls nun die CleanUp() oder EXIT Procedure / Funktionen in eine Endlosschleife laufen (dead lock) oder einfach länger brauchen ... bleiben die DLLs im Zugriff (offene Handles).
Gruß
Hubert
manni1729
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 30
Registriert: Mi, 04. Jun 2008 14:18
Wohnort: Nordhessen

Re: Nicht entladene Static DLL's nach Programmende

Beitrag von manni1729 »

Danke für die Antworten!

Ich werde jetzt erstmal unsere Dll's durchforsten nach dynamisch Dllaufrufen. Wir verwenden in einer Dll auch List&Label.
Wenn da alles in Ordnung ist, werde ich es mit umkopieren probieren.

Gruß Manni
Antworten