Nicht entladene Static DLL's nach Programmende
Moderator: Moderatoren
Nicht entladene Static DLL's nach Programmende
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
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
- brandelh
- 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
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.
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
Hubert
Re: Nicht entladene Static DLL's nach Programmende
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
danke, gute Idee!
Das ein Ansatz der gehen kann! Ich werde das mal testen
Wobei ich die Ursache noch nicht verstanden habe
Gruß Manni
- brandelh
- 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
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 abgehtmanni1729 hat geschrieben:Wobei ich die Ursache noch nicht verstanden habe
Gruß
Hubert
Hubert
- Tom
- 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
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
Tom
- brandelh
- 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
Bei GUI Anwendungen sieht man ja nur das MAIN-Fenster, dieses kann geschlossen werden ohne die EXE zu schließen.Tom hat geschrieben:Allerdings ist die EXE als Prozess (! - nicht als Applikation) auch noch im Task-Manager zu sehen.
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
Gruß
Hubert
Hubert
Re: Nicht entladene Static DLL's nach Programmende
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
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