![]() |
Hook für openOffice
Hallo,
ein Problem lässt mich seit ewigen Zeiten nicht in Ruhe (nur auszugsweise: ![]() ![]() ![]() Ich habe eine Server-Client-Anwendung. Der Server sagt dem Client, welche Dateien (vornehmlich openOffice) er öffnen soll. Weiter ist ein langsames VPN gegeben. Mein Ziel ist es nachwievor, dass mein Programm die Datein vom Server auf den lokalen Rechner kopiert, was relativ schnell geht. Dass mein Programm diese openOffice öffnen lässt und nach dem Bearbeiten/Speichern wieder an Ort und Stelle zurückschreibt. Mein Problem war und ist insoweit festzustellen, ob openOffice fertig ist. Ich habe bereits mit Threads experimentiert und festgestellt, dass openOffice allein beim Laden die Datei mehrfach locked und wieder freigibt. Und über das Fensterhandle komme ich auch nicht weiter, weil openOffice als MDI konzipiert ist. Ich habe nie so recht verstanden was hooken eigentlich bedeutet, bis ich heute nun mal im web nachgelesen habe. Das wiederum bringt mich auf die Idee, die Dateisystemfunktionen zu hooken und so festzustellen, ob/wann openOffice eine Datei öffnet, schreibt etc., um evtl. so meine "Aufgabe" endlich sicher zu lösen. Ich habe nämlich zusätzlich das Problem, dass openOffice bzw. dessen DDEServer regelmäßig abstürzt und meine bisherigen Ansätze damit stest Probleme hatten... Hat jemand damit - insbesondere mit openOffice - schon Erfahrungen gemacht? Gruß, Alex |
AW: Hook für openOffice
Das Thema "Hook" - "Injecting" etc. ist wirklich schön, aber bedarf einer Menge vorarbeit. Debugging, Disassembly etc. pp.
Du musst das fertige Programm auseinander nehmen. IDA Pro Advance und OllyDbg kann ich dir empfehlen. |
AW: Hook für openOffice
Hi Alex,
ich weiß nicht inwieweit es dich weiter bringt, aber OpenOffice erstellt doch beim öffnen einer Datei im Dateisystem eine Lock-Datei. Wäre es nicht eine Möglichkeit, darauf zu "warten", dass diese wieder gelöscht wird - was üblicherweise der Fall ist, wenn das Dokument geschlossen wird. Gruß, Chris |
AW: Hook für openOffice
so wie ich das verstanden hab soll gewartet werden, bis openoffice die datei fertig geladen hat, sonst könnte man auch einfach schauen ob der prozess beendet wurde.
|
AW: Hook für openOffice
Tut OpenOffice nicht eine API bereitstellen?
Über diese API könnte man ein Plugin in OO einschleußen, welches einem die nötigen Infos mitteilt, indem es auf die entsprechenden Ereignisse (Datei öffnen/speichern/schließen und eventuell noch OO beenden) reagiert und diese weiterleitet. |
AW: Hook für openOffice
Danke für Eure Antworten!
Zitat:
Zitat:
Der Programmablauf nur nochmal zur Erklärung:
Delphi-Quellcode:
Das Problem sind die abartig langen Wartezeiten, wenn OOO eine Datei übers VPN laden muss. Auch wenn die nur 20 KB groß ist und das VPN einen Durchsatz in beide Richtungen von 100 KB/S (bereits netto) schaffte mit Ping-Zeiten um die 25 ms, dauert das Laden teilweise bis zu 1 min :( Und dann bricht manchmal auch die Verbindung ab -> defekte lock-Datei, nicht aktuelle Datei ...
1. Benutzer möchte Datei laden.
2. Server -> Client (hinter lahmem VPN!) lade Datei! 3. Client = kopiert Datei ins Temp-Verzeichnis 4. Client = lässt OOO-Datei öffnen 5. Client = wartet, bis Datei wieder geschlossen wurde //<- hier habe ich die meisten Probleme 6. Client = kopiert/verschiebt Datei wieder zurück auf den Server (hinter dem VPN) Deshalb der ganze Aufwand, um den Flaschenhals VPN zu entschärfen! Ich hatte es bereits über Prozesse, Prozess-ID, testen ob die Datei exklusiv zu öffnen geht etc. probiert. Aber so wirklich sicher klappte das nie. Das mit der Lock-Datei liegt sowas von auf der Hand, dass mir das nie aufgefallen ist (Wald vor lauter Bäumen und so). Gruß, Alex |
AW: Hook für openOffice
Nun:
Mal ein Einwurf. Wie wäre es wenn du einfach wartest bis OpenOffice nicht mehr als Prozess vorhanden ist? Unter Linux nutze ich folgendes Script dafür:
Code:
#!/bin/sh
SERVICE='soffice.bin' #start service: soffice $@ #wait for close: while ps ax | grep -v grep | grep $SERVICE > /dev/null do sleep 1 done |
AW: Hook für openOffice
Zitat:
Ich hatte auch das schon probiert. Das Problem ist aber, dass die Benutzer mehrere Dateien öffnen können sollen/müssen. Zumindest unter Windows ist es so, dass im Schnitt für jede Datei je ein Prozess für soffice.exe und soffice.bin existieren. Mag sein, dass ich mich irre, aber es ist ja auch schon spät. Ich nutze auch Linux, ob dies dort auch so ist mit den Prozessen, weiß ich aber nicht. Wie soll ich wissen, welcher Prozess meine Datei(en) geöffnet hält? Gruß, Alex |
AW: Hook für openOffice
anhand der PID, ich hab letztens ne funktion gemacht, die dir den prozess startet und die pid zurückgibt, und ne funktion die angibt, ob der prozess noch läuft oder beendet wurde. wenn du willst kann ich dir die zukommen lassen, aber erst nächste woche da ich gleich feierabend mach und morgen schule hab :)
|
AW: Hook für openOffice
Zitat:
Ich meine aber, dass ich das schon einmal probiert hatte. Soweit ich mich erinnern kann, gabe es aber das Problem, dass openOffice zwar mehrere Dateien geöffnet hatte, es aber letztlich nur eine PID (Heißt das unter Windows auch so?) gab. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz