Seite 1 von 1

writer bleibt nach "oDoc.close" hängen

Verfasst: So, 04.11.2007 19:36
von egerlach
Warum beendet der folgende Code den writer (2.2.0) nicht? - OO von der Linux-Kommandozeile gestartet, dann dieser Code per Autostart (Extras -> Anpassen -> Ereignisse) ausgeführt beendet writer nicht vollständig, sondern writer bleibt in de Prozessliste hängen! Das Writer-Window ist wenigstens schon mal zu.

gerlach@rex3:~>soffice /home/linuxburg/technik/kurzfax/kurzfax.odt
[hier meldet sich der Linux-promt nicht wieder]

aus der Linux-Prozessliste:
6565 pts/3 Sl+ 0:06 /etc/openoffice.org2.2/program/soffice.bin /home/linuxburg/technik/kurzfax/kurzfax.odt

OpenOffice hängt also! Der Code:

Code: Alles auswählen

Sub Main
Dim DatabaseContext as Object, oDVerb as Object
Dim FileNo As Integer, CurrentLine As String, File As String, Msg as String
Dim DruckEigenschaften(0) As New com.sun.star.beans.PropertyValue

oDoc = ThisComponent
oDoc.close( True )
End Sub
Wer kann weiterhelfen?

BTW: oDok = Stardesktop.currentComponent anstelle oDoc = ThisComponent wurde auch schon getestet. Gleicher Misserfolg!

# strace -p 1973
Process 1973 attached - interrupt to quit
select(9, [6 8], NULL, [8], {0, 216000}) = 0 (Timeout)
gettimeofday({1194204713, 389100}, NULL) = 0
gettimeofday({1194204713, 389254}, NULL) = 0
gettimeofday({1194204713, 389398}, NULL) = 0
gettimeofday({1194204713, 389532}, NULL) = 0
gettimeofday({1194204713, 389676}, NULL) = 0
select(9, [6 8], NULL, [8], {0, 249424}) = 0 (Timeout)
gettimeofday({1194204713, 640375}, NULL) = 0
gettimeofday({1194204713, 640411}, NULL) = 0
gettimeofday({1194204713, 640443}, NULL) = 0
gettimeofday({1194204713, 640510}, NULL) = 0
gettimeofday({1194204713, 640545}, NULL) = 0
select(9, [6 8], NULL, [8], {0, 249830}) = 0 (Timeout)
gettimeofday({1194204713, 891902}, NULL) = 0
gettimeofday({1194204713, 892050}, NULL) = 0
gettimeofday({1194204713, 892193}, NULL) = 0
gettimeofday({1194204713, 892329}, NULL) = 0
gettimeofday({1194204713, 892475}, NULL) = 0
select(9, [6 8], NULL, [8], {0, 249427}) = 0 (Timeout)
gettimeofday({1194204714, 183174}, NULL) = 0
gettimeofday({1194204714, 205427}, NULL) = 0
gettimeofday({1194204714, 205807}, NULL) = 0
gettimeofday({1194204714, 206119}, NULL) = 0
gettimeofday({1194204714, 206278}, NULL) = 0
select(9, [6 8], NULL, [8], {0, 226896}) = 0 (Timeout)
gettimeofday({1194204714, 431491}, NULL) = 0
gettimeofday({1194204714, 431665}, NULL) = 0
select(9, [6 8], NULL, [8], {0, 10000}) = 0 (Timeout)
gettimeofday({1194204714, 446023}, NULL) = 0
gettimeofday({1194204714, 446058}, NULL) = 0
gettimeofday({1194204714, 446084}, NULL) = 0
gettimeofday({1194204714, 446106}, NULL) = 0
write(7, "\0", 1) = 1
gettimeofday({1194204714, 446206}, NULL) = 0
select(9, [6 8], NULL, [8], {0, 10000}) = 1 (in [6], left {0, 10000})
gettimeofday({1194204714, 447358}, NULL) = 0
read(6, "\0", 4) = 1
read(6, 0xbfce05a8, 4) = -1 EAGAIN (Resource temporarily unavailable)
gettimeofday({1194204714, 447816}, NULL) = 0
select(9, [6 8], NULL, [8], {0, 10000}) = 0 (Timeout)
gettimeofday({1194204714, 462299}, NULL) = 0

Hintergrund:
Warum ich unbedingt einen wiederkehrenden Prompt brauche: es wird das pdf auf Linux-Seite weiterverarbeitet! (Hinweis: der gezeigte code ist schon gekürzt (aber genauso fehlerhaft)!

Gruss
Eckard

Re: writer bleibt nach "oDoc.close" hängen

Verfasst: So, 04.11.2007 20:34
von komma4
[untested]...vielleicht, weil Du das Dokument änderst, als PDF exportierst und dann nicht speicherst.

Probiere mal ein

Code: Alles auswählen

oDoc.setModified(FALSE)
vor dem .close()

Re: writer bleibt nach "oDoc.close" hängen

Verfasst: So, 04.11.2007 20:41
von egerlach
Nein, geht so leider nicht:

Code: Alles auswählen

Sub Main
Dim DatabaseContext as Object, oDVerb as Object
Dim FileNo As Integer, CurrentLine As String, File As String, Msg as String
Dim DruckEigenschaften(0) As New com.sun.star.beans.PropertyValue

oDoc = ThisComponent
oDoc.setModified(FALSE)
oDoc.close( True )
End Sub
genau der gleiche Fehler!

strace -p 4845
Process 4845 attached - interrupt to quit
select(9, [6 8], NULL, [8], {0, 36000}) = 0 (Timeout)
gettimeofday({1194205182, 923502}, NULL) = 0
gettimeofday({1194205182, 923648}, NULL) = 0
gettimeofday({1194205182, 923794}, NULL) = 0
gettimeofday({1194205182, 923931}, NULL) = 0
gettimeofday({1194205182, 924079}, NULL) = 0
select(9, [6 8], NULL, [8], {0, 249423}) = 0 (Timeout)
gettimeofday({1194205183, 174970}, NULL) = 0
gettimeofday({1194205183, 175118}, NULL) = 0
gettimeofday({1194205183, 175264}, NULL) = 0
gettimeofday({1194205183, 175400}, NULL) = 0
gettimeofday({1194205183, 175548}, NULL) = 0
select(9, [6 8], NULL, [8], {0, 249422}) = 0 (Timeout)
gettimeofday({1194205183, 426405}, NULL) = 0
gettimeofday({1194205183, 426554}, NULL) = 0
gettimeofday({1194205183, 426697}, NULL) = 0
gettimeofday({1194205183, 426833}, NULL) = 0
gettimeofday({1194205183, 426984}, NULL) = 0
select(9, [6 8], NULL, [8], {0, 249421}) = 0 (Timeout)
gettimeofday({1194205183, 677803}, NULL) = 0
gettimeofday({1194205183, 677953}, NULL) = 0
gettimeofday({1194205183, 678098}, NULL) = 0
gettimeofday({1194205183, 678233}, NULL) = 0
gettimeofday({1194205183, 678380}, NULL) = 0
select(9, [6 8], NULL, [8], {0, 249423}) = 0 (Timeout)
gettimeofday({1194205183, 929121}, NULL) = 0
gettimeofday({1194205183, 929270}, NULL) = 0
gettimeofday({1194205183, 929414}, NULL) = 0
gettimeofday({1194205183, 929550}, NULL) = 0
gettimeofday({1194205183, 929698}, NULL) = 0
select(9, [6 8], NULL, [8], {0, 249423} <unfinished ...>
Process 4845 detached

Re: writer bleibt nach "oDoc.close" hängen

Verfasst: So, 04.11.2007 22:17
von hol.sten
egerlach hat geschrieben:writer bleibt in de Prozessliste hängen!
Vielleicht hilft dir dies hier weiter: http://www.oooforum.org/forum/viewtopic ... nate+basic

Regards
hol.sten

Re: writer bleibt nach "oDoc.close" hängen

Verfasst: So, 04.11.2007 23:12
von egerlach
Danke! Ich es geht unter Unix/Linux nicht. Mist!
Gemäß der Iden in dem von Dir verzeigerten thread könnte mit viel Aufwand unter OO-BASIC eine Datei "killme" z.B. unter /tmp/ erzeugt werden, die einen ständig unter Unix laufenden Prozess dazu anleitet, ein soffice, das mit bestimmten Parametern (z.B. invisible) gestartet ist, abzuschiessen. Oder das markante "Sl+" in der Prozessliste immer abschiessen, wenn es mit soffice auftritt, "Sl" scheint das normale zu sein, Sl+ das im "hängenden" Zustand.
Der letzte Beitrag in dem verzeigerten thread macht ein Shell("pkill soffice.bin") in BASIC selbst. Das ist okay, wenn OO sonst nicht geöffnet ist. Bei mir ist OO mehrfach geöffnet, es soll nicht pauschal OO abgeschossen werden. Natürlich könnte das kill noch verfeinert werden auf das eine bestimmte writer Dokument, das (absichtlich) mit besonders markanten Parametern gestartet wird. Aber dann fragt OO bei jedem erneuten Start (auch von der Kommandozeile im Skript!!) ob das letzte abgeschossene Dokument wiederhergestellt werden soll!! So ein shit! Das ist alles schmuddelig ..

Aber vielleicht hat hier jmd. noch eine gute Lösung.

Gruss
Eckard

Nachtrag: mit
oDoc.storeToURL(sUrl,DruckEigenschaften())
wait 1000
oDoc.close( True )
Shell("pkill soffice.bin")
gehts als Würgaround bei mir! Einem close des Dokumentes, was ja auch OO beendet wird noch ein kill hinterhergeschossen.

Besser noch ist: pkill myfax, dann wird nur der Prozess mit myfax im Argument abgeschossen und nicht alle geöffneten soffice-Dokumente.