Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Programm hängt sich bei Druck via Word 2007 auf (https://www.delphipraxis.net/176860-delphi-programm-haengt-sich-bei-druck-via-word-2007-auf.html)

TomF9 1. Okt 2013 09:12

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

Mokus 1. Okt 2013 09:16

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:

nahpets 1. Okt 2013 09:37

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:
procedure TfmSHSKonfiguration.WordAnzeigen;
begin
  WordApplication.Visible := True;
  WordApplication.ShowMe;
  WordApplication.Activate;
  Application.ProcessMessages;
end;
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.

TomF9 1. Okt 2013 09:42

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:
 
  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;
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):

Delphi-Quellcode:
    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;
3)
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.

Mokus 1. Okt 2013 10:08

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 ?!

TomF9 1. Okt 2013 10:14

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.

nahpets 1. Okt 2013 10:27

AW: Delphi Programm hängt sich bei Druck via Word 2007 auf
 
Zitat:

Zitat von TomF9 (Beitrag 1230430)
@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.

D. h.: Du kannst den Fehler nicht reproduzieren, da er nur bei bestimmten Kunden und bestimmten Kombinationen gelegentlich auftritt?

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?

TomF9 1. Okt 2013 11:24

AW: Delphi Programm hängt sich bei Druck via Word 2007 auf
 
Zitat:

Zitat von nahpets (Beitrag 1230439)
Zitat:

Zitat von TomF9 (Beitrag 1230430)
@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.

D. h.: Du kannst den Fehler nicht reproduzieren, da er nur bei bestimmten Kunden und bestimmten Kombinationen gelegentlich auftritt?

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?

Richtig ich kann denn Fehler nicht nachstellen da er auftritt oder eben nicht.

Mein Programm erstellt sich eine eigene Wordinstanz d.h.
Delphi-Quellcode:
      WordApp.ConnectKind := ckNewInstance;
      WordApp.AutoConnect := False;

nahpets 1. Okt 2013 11:59

AW: Delphi Programm hängt sich bei Druck via Word 2007 auf
 
Ist absolut sichergestellt, dass das Problem beim Quit entsteht?
Delphi-Quellcode:
       WordApp.Quit; //HIER BLEIBT ER HÄNGEN
        WordApp.Disconnect;
        WordAppConnected := False;
Wie hast Du das überprüft?

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:
  ovParam  := wdDoNotSaveChanges;
  WordApp.Quit(ovParam);
  WordApp.Disconnect;
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.

TomF9 1. Okt 2013 13:25

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 14:33 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz