![]() |
Delphi Programm hängt sich bei Druck via Word 2007 auf
Hallo liebe Delphifreunde,
Vorab, ich bin neu hier also es sei mir verziehen wenn ich im falschen Thread des Forums bin :) Ich habe seit geraumer Zeit Probleme mit einer Delphianwendung die in Delphi 2006 entwickelt ist (sagt mir jetzt nicht ihr helft mir nicht weil das Teil so alt ist :-D). Diese Anwendung erstellt abhängig von gewissen Einstellungen einen angepassten Wordbrief, und druckt diesen anschließend aus (oder zeigt ihn an/verschickt ihn per Mail). Allerdings habe ich seit einigen Monaten immer wieder das Problem das das Programm nach dem Drucken hängen bleibt, d.h. der Ausdruck kommt noch aus dem Drucker aber das Programm bleibt hängen, und zwar soweit ich das per Log-File nachvollzogen habe genau an der Stelle wo Word geschlossen werden soll. Ich habe nun schon einige Tipps der Microsoft Support Seite befolgt, die alle ohne Ergebniss blieben, daher hoffe ich das einer von euch dieses Problem schon mal hatte, bzw eine Idee hat wie man das ganze lösen kann da ich inzwischen ziemlich ratlos bin. Falls noch irgendwelche Fragen auftauchen, raus damit :-D mfg TomF9 |
AW: Delphi Programm hängt sich bei Druck via Word 2007 auf
a)
Hat das Programm schonmal gelaufen ( ohne aufhänger ? ;-) ) sry für diese komische frage, :p b) Wie wärs mal mit bisschen code ? c) hattest du nachdem es abstürze kamen an dem Program was verändert ? da has du weitere Frage. PS. Willkommen bei DP :) :dp: |
AW: Delphi Programm hängt sich bei Druck via Word 2007 auf
Hallo,
hätte da mal eine Frage: Hängt deine Applikation oder hängt Word? Wird Word während des Druckes angezeigt? Wenn nein, versuche es mal hiermit:
Delphi-Quellcode:
Diese Routine (oder die erforderlichen Teile daraus) vor dem Start des Ausdruckes aufrufen, dann sollte Word sichtbar werden. Nun kannst Du Word bei der Arbeit zuschauen und eventuell von Word ausgegebene Fehlermeldungen sehen. Eventuell hilft es ja weiter.
procedure TfmSHSKonfiguration.WordAnzeigen;
begin WordApplication.Visible := True; WordApplication.ShowMe; WordApplication.Activate; Application.ProcessMessages; end; |
AW: Delphi Programm hängt sich bei Druck via Word 2007 auf
@mokus
1) Das ist auch ein sehr interessantes Verhalten, es funktioniert wenn man am tag 15 mal ausdruckt 14 mal und beim 15 mal schmiert das ganze ab. Man kann eigentlich keinen Zusammenhang feststellen. 2)
Delphi-Quellcode:
Und in der Funktion CloseWordApplication passiert folgendes (natürlich ist das ganze in dem try/except Block aber das poste ich hier jetzt nicht :-D):Result := False; // ResetError; // ResetWarning; try InitializeWordApplication; //Hier wird Word gestartet try ovCurPrinterName := WordApp.ActivePrinter; try OpenDocument(fname); // UpdateFieldsAtPrint für das Aktualisieren der Seitennummern. WordApp.Options.UpdateFieldsAtPrint := ovTrue; SetWordPrinter(ovPrinterName,ovPaperTray); //Hier der Drucker gesetzt WordDoc.PrintOut(ovFalse{Background}); WordDoc.Close; //Das geöffnete Dokument geschlossen Result := true; finally SetWordPrinter(ovCurPrinterName,ovPaperTray); end; finally //HIER TRITT DER FEHLER AUF CloseWordApplication; //Eine Unterfunktion aufgerufen die Word schließt und abhängig vom Brief und davon ob etwas geändert //wird denn Brief speichert end; except on E: Exception do begin SetError(E); end; end;
Delphi-Quellcode:
3)
if assigned(WordDoc) then
begin if WordDocConnected then begin if WordAppConnected then begin // Evtl. offenes Dokument speichern und schliessen ovSaveChanges := wdSaveChanges; WordDoc.Close(ovSaveChanges{SaveChanges}, ovEmpty{OriginalFormat}, ovEmpty{RouteDocument}); end; WordDoc.Disconnect; WordDocConnected := False; end; WordDoc.Free; WordDoc := nil; end; if assigned(WordApp) then begin if WordAppConnected then begin // WordApp Objekt disconnecten und freigeben WordApp.Quit; //HIER BLEIBT ER HÄNGEN WordApp.Disconnect; WordAppConnected := False; end; WordApp.Free; WordApp := nil; end; Nein habe noch nicht wirklich was verändert außer das ich Log-Funktionen eingebaut habe um die genaue Stelle des Fehlers (WordApp.Quit) rauszufinden. Da ich nicht weiß wie ich diese Funktion zum laufen Bringen soll stehe ich hier vor nem Problem @nahpets Nein Word läuft im Hintergrund und ich vermute das ich das unserem Kunden nicht erklären kann das er vorübergehen Word sieht Es kann natürlich auch ein Fehler von Word sein (Fehler tritt nur mit Word 2007 in Kombination mit Win7 auf). Aber auch hier kann mir die Microsoft Seite nicht weiterhelfen :( Wie gesagt ich such schon seit 2-3 Monaten nach dem Fehler und weiß nicht mehr weiter. |
AW: Delphi Programm hängt sich bei Druck via Word 2007 auf
" (Fehler tritt nur mit Word 2007 in Kombination mit Win7 auf) "
mit word 2010 & word 03 geht es ?! |
AW: Delphi Programm hängt sich bei Druck via Word 2007 auf
Word 2010 ist nicht in verwendung allerdings habe ich keine Probleme wenn 2003 verwendet wird.
|
AW: Delphi Programm hängt sich bei Druck via Word 2007 auf
Zitat:
Wie geht Dein Programm mit einer bereits laufenden Wordinstanz um? Nutzt Du ein bereits laufendes Word oder machst Du für Dein Programm immer eine neue Wordinstanz? Welche Werte hast Du bei Deiner Wordinstanz für AutoConnect, ConnectKind und AutoQuit? |
AW: Delphi Programm hängt sich bei Druck via Word 2007 auf
Zitat:
Mein Programm erstellt sich eine eigene Wordinstanz d.h.
Delphi-Quellcode:
WordApp.ConnectKind := ckNewInstance;
WordApp.AutoConnect := False; |
AW: Delphi Programm hängt sich bei Druck via Word 2007 auf
Ist absolut sichergestellt, dass das Problem beim Quit entsteht?
Delphi-Quellcode:
Wie hast Du das überprüft?
WordApp.Quit; //HIER BLEIBT ER HÄNGEN
WordApp.Disconnect; WordAppConnected := False; Bei einem "Hänger" beim Quit liegt die Vermutung nahe, dass Word hier eine Frage stellt und auf eine Antwort wartet. Wenn Word aber unsichtbar ist, wird der Anwender dies nicht erfahren. Momentan habe ich keine (sinnvolle) Idee, wie Du hier herausbekommen kannst, was die Ursache sein könnte. Besteht die Möglichkeit, dass während des Ausdruckes aus einem anderen Grund (vom Anwender?) Word gestartet wird und sich die von Deinem Programm erstellte Instanz "krallt" und mitverwendet? Ausgehend vom Quelltext müssten vor dem Quit alle Dokumente geschlossen sein. Könntest Du das im Programm prüfen, wenn dort noch (mindestens) ein Dokument offen ist, müsste hier eigentlich irgendwo ein Problem vorliegen. In dem Fall könntest Du Word sichtbar machen und den Anwender weiter aggieren lassen. Dies wäre sicherlich nur eine temporäre Lösung, aber der Kunde hätte damit die Möglichkeit, Dich über den Zustand von Word in dieser Situation zu informieren. (unschöne) Alternative: Ist noch ein Dokument offen, dann machst Du weder Quit noch sonst was, sondern trennst nur Dein Programm von der Wordinstanz und lässt diese "weitergammeln". Damit kann man dann den Rechner aber mit "herrenlosen" Wordinstanzen zumüllen, ist also äußerst unschön. Quit kann auch mit Parameter aufgerufen werden.
Delphi-Quellcode:
Damit (sollte) Word geschlossen werden, ohne Änderungen zu speichern und ohne weitere Nachfragen seitens Word. Da Du Dein Dokument ja bereits vorher gespeichert und geschlossen hast, sollte das aus Sicht Deines Programmes unkritisch sein. Wenn aber die Wordinstanz anderweitig genutzt wird, so gehen dort eventuell vorgenommene Änderungen verloren und die Wordinstanz wird beendet. Das muss dann so auch nicht unbedingt erwünscht sein.
ovParam := wdDoNotSaveChanges;
WordApp.Quit(ovParam); WordApp.Disconnect; |
AW: Delphi Programm hängt sich bei Druck via Word 2007 auf
Hab das ganze mit Logmeldungen gefüllt nach jeder Zeile und der letzte Eintrag ins Logfile war jener der Vor "Word.Quit" geschrieben wurde, der danach nicht mehr.
(Habe die Befehle zum Loging allerdings in meinem Post aufgrund besserer leserlichkeit entfernt). Normalerweiße müsste sich doch eine neue Instanz von Word starten wenn ich Word manuell Starte oder? Außerdem hab ich das ganze schon mehrmals gesehen und nie hatte einer der Kunden Word geöffnet, daher gehe ich nicht davon aus das sich jemand meine Instanz "klaut". Auf das schließen aller Dokumente habe ich auch schon gedacht, allerdings währe dies dann so das der Fehler immer auftreten würde und nicht nur ab un zu oder? Ich bin hier echt am verzweifeln. Ich werde mal das mit dem Paramter umsetzen und zu einem Kunden zum Testen spielen, mal sehen was passiert. |
AW: Delphi Programm hängt sich bei Druck via Word 2007 auf
Zitat:
Zitat:
Zitat:
Zitat:
Ist sichergestellt, dass der Ausdruck zum Zeitpunkt des Quit bereits fertig ist? Da Du ja beim Ausdruck auch Felder aktuallisieren lässt, könnte es sein, dass die daraus resultierenden Änderungen beim Speichern des Dokumentes noch nicht vollständig erfolgt sind und daher beim Quit erneut nachgefragt wird, ob Änderungen gespeichert werden sollen. Ist sichergestellt, dass sich die einzelnen Operationen, die von Word gemacht werden sollen, nicht "überholen"? Sprich: Die Steuerung von Word durch das Programm wird von Word genau in der Reihenfolge abgearbeitet, wobei jeder an Word geschickte Befehl von Word verarbeitet wurde, bevor der nächste Befehl geschickt wird. Bin mir nicht sicher, ob Word da zwar die Aufträge alle annimmt, für die Verarbeitung aber länger benötigt, als für die Auftragsannahme. Wie groß sind die Dokumente? Sind die automatische Rechtschreib-/Grammatikprüfung und die Silbentrennung aktiviert? Bei großen Dokumenten kann die Rechtschreibprüfung zu Problemen führen, wenn die Zahl der (vermeintlichen) Rechtschreibfehler zu groß wird, dann kommt eine Meldung, die nachfragt, ob weiter geprüft werden soll oder nicht. Funktioniert hier z. B. die automatische Erkennung der Dokumentensprache durch Word nicht korrekt, so wird ggfls. in einer Sprache geprüft, die im Dokument nicht (wirklich) vorhanden ist, das kann dann sehr schnell zu sehr vielen Rechtschreibfehlern führen und damit zu der o. g. Meldung durch Word. Wie machst Du genau den Ausdruck, führt diese Routine eventuell zu einem anderen Verhalten?
Delphi-Quellcode:
procedure TfmSHSKonfiguration.Drucken;
begin WordDocument.PrintOut; while WordApplication.BackgroundprintingStatus > 0 do begin statusbar.SimpleText := Format('%d Datei(en) zu drucken.',[WordApplication.BackgroundprintingStatus]); Application.ProcessMessages; Sleep(250); end; statusbar.SimpleText := 'Ausdruck ist erledigt.'; Application.ProcessMessages; end; |
AW: Delphi Programm hängt sich bei Druck via Word 2007 auf
Zitat:
Zitat:
Zitat:
Zitat:
|
AW: Delphi Programm hängt sich bei Druck via Word 2007 auf
Zitat:
Zitat:
Wenn Du Dein Programm in der Fehlersituation beendest, wird dann die Wordinstanz auch beendet (verschwindet aus dem Taskmanager) oder bleibt sie eventuell bestehen? Läßt sich Dein Programm regulär beenden oder musst Du es per Taskmanager beenden? Sind alle Arbeitsplätze mit Word 2007 betroffen oder nur einige. Wenn nur einige, so prüfe mal die Konfiguration aller Word, auch die der Arbeitsplätze ohne dieses Problem, um eventuelle Konfigurationsunterschiede festzustellen. Habe auf meinem Rechner COMODO-Firewall und Avira Free Antivirus. Hier tritt ab und an der Phänomen auf, dass die Kommunikation zwischen Programmen oder der Start einzelner Programme scheitern. Ein zweiter Start der Programme bzw. der Kommunikation funktioniert dann. Hier wird wohl irgendwie im Hintergrund von den beiden noch eine Überprüfung durchgeführt, die (eventuell?) einige Resouren bis zur Beendigung der Prüfung belegt/blockiert. Sind beide deaktiviert tritt das Problem nicht auf. Könnte es eventuell auch eine ähnliche (Mit)Ursache Deines Problemes geben? |
AW: Delphi Programm hängt sich bei Druck via Word 2007 auf
Zitat:
Mein Programm ist nach dem Fehler total am Ende, wenn man es minimieren will dauert das ganze 2 Minuten wenn man es wieder maximiert dauert es ewig bis die ganze GUI geladen ist. Beenden kann man es nur noch über denn Taskmanager da sich der "schöne" blaue Kreis dreht und dreht und dreht. Zitat:
kann mir auch nicht vorstellen das es welche gibt da die Word-Einstellungen für alle Benutzer meines Programms von Zentraler stelle aus gewartet werden. Zitat:
Interessant ist auch das eine Neuinstallation von Word das Problem für ein paar Wochen (zwischen 5-8 ca.) löst danach hat man wieder die selben Probleme |
AW: Delphi Programm hängt sich bei Druck via Word 2007 auf
Zitat:
|
AW: Delphi Programm hängt sich bei Druck via Word 2007 auf
Zitat:
1. Der Ordner in dem Ich die .doc Datei ablege und von wo auch ich sie öffne bzw ausdrucke 2. Ein Ordner Namens "msohtmlclip1" der einen Weiteren Ordner "01" und in diesem dann 2 Datein Namens "clip_colorschememapping.xml" und "clip_themedata.thmx". Lösche ich diesen wird er beim nächsten mal automatisch wieder angelegt. P.S. Wird ein zweites mal Ausgedruckt so wird zuerst der Ordner wo zuletzt das Dokument gespeichert wurde gelöscht. Edit : Weiß jemand für was diese beiden Datein gut sind? Hat soweit ich das verstehe was mit Theme-Vorlagen was zu tun aber wozu Word diese Datein braucht weiß ich nicht |
AW: Delphi Programm hängt sich bei Druck via Word 2007 auf
Bei einem Kunden der das Problem regelmäßig hatte, wurde vor 2 Wochen Word neuinstalliert seither hat er keine Probleme mehr.
Gibt es evt. irgendwelche bekannten Probleme bei der Fernsteuerung von Word 2007? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:09 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