![]() |
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:24 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