Best Practice Nicht-permanente Links auf Dateien

uwacm

Neues Mitglied
Hallo,

eine (PC) Anwendung auf Windows liest/lädt .jar und .dll Dateien aus einem Serververzeichnis,
dabei bleiben FileLinks wohl offen solange eine Instanz der Anwendung irgendwo läuft.

Gibt es keine Möglichkeit diese Links zu lösen und nur "bei Bedarf" wieder neu zu verknüpfen?
Oder wären dadurch größere Nachteile zu erwarten (Programmier- oder Laufzeit-Probleme)?

Hintergrund der Frage: Bei vielen Anwendern in einer komplexen Umgebung sind Wartungsarbeiten
wie z.B. schnelle Patcheinspielungen praktisch nicht durchführbar (erschwert durch ein Excel Add-in).

Danke im voraus!
 
Was meinst du mit FileLinks? Klingt erstmal nach irgendeinem (File)InputStream oder so, der nicht richtig geschlossen wurde. Eine DLL, die mit loadLibrary o.ä. geladen wurde, bekommt man unter Windows aber praktisch nicht mehr weg: Die VM krallt sich diese DLL, und läßt sie ums verrecken nicht mehr los (irgendwelche Workarounds gibt's da vielleicht, aber ich hatte AFAIR sogar mal einen ShutdownHook ausprobiert und selbst der hat's nicht geschafft...)
 
Moin,

ich habe das Anliegen des OT nicht nachvollziehen können, daher vielleicht OT, vielleicht aber auch nicht:

[ot]
Eine DLL, die mit loadLibrary o.ä. geladen wurde, bekommt man unter Windows aber praktisch nicht mehr weg: Die VM krallt sich diese DLL, und läßt sie ums verrecken nicht mehr los (irgendwelche Workarounds gibt's da vielleicht, aber ich hatte AFAIR sogar mal einen ShutdownHook ausprobiert und selbst der hat's nicht geschafft...)

Hast Du das mal ausprobiert? Bei mir löscht der die so.
[/ot]

Viele Grüße
Fancy
 
[ot]
Moin,
Hast Du das mal ausprobiert? Bei mir löscht der die so.

Genau so noch nicht. Ist auch nicht direkt nahe liegend: finalize an sich ist ja schon eine Krankheit, die manuell per Reflection aufzurufen sieht schon sehr "verzweifelt" aus 😉 aber solche Sachen sind wohl offenbar notwendig, und wenn es geht, ist es wohl einen Versuch wert. Bei JOCL hatte ich natürlich auch mit einer temporären Datei und file.deleteOnExit() rumgespielt, bis mir mal jemand gesagt hat, dass in seinem temp-Verzeichnis hunderte ungelöschte JOCL-DLLs liegen 😳 Das hatte ich dann so gelöst, dass eine Datei (mit Versionsnummer im Namen) im temp-Ordner angelegt wird, die dann nicht wieder gelöscht wird, und das schien mir zumindest vertretbar...
[/ot]
 
[ot]Ja, diese semipermanente Variante ist imho auch ganz günstig. Die obrige Variante funktioniert ja eh nur, wenn die Anwendung sauber durchläuft. Wenn aber jemand eine Anwendung entwickelt ist das aber wohl nicht immer der Fall. 😉[/ot]

Viele Grüße
Fancy
 
[ot]Da hätte ich spontan nicht direkt dran gedacht, aber eine andere Lösung, als ein explizites "cleanup" von der main aus aufrufen zu müssen, müßte man sich für eine Lib ohnehin ausdenken. Ich denke, die aktuelle Lösung ist OK, aber fand die fehlende Möglichkeit, "hinter sich aufzuräumen" schon irritierend (wenn man nicht schon die fehlende Möglichkeit, eine DLL direkt aus einer JAR zu laden, irritierend finden sollte... :reflect: )[/ot]
 

Zurück
Oben