2008-08-13 8 views

Antwort

2

Lassen Sie mich zu Beginn sagen, dass ich nicht empfehle, dies in einem Dienst auf einem Server zu tun, aber ich werde mein Bestes tun, um die Fragen zu beantworten.

Das Ausführen als Dienst macht das Säubern schwierig. Zum Beispiel mit dem, was Sie als Dienst ausgeführt haben, überleben Sie ein aufgehängtes Wort zu töten oder zu übertreffen. Sie können in der Lage sein, den Dienst zu töten. Wird Ihr Service stoppen, wenn Word oder Excel in diesem Zustand ist?

Ein Problem mit dem Versuch zu testen, ob es hängt, ist, dass Ihr Test eine neue Instanz von Word zum Starten und Arbeiten verursachen konnte, während die, die der Dienst ausgeführt wird, immer noch hängen würde.

Der beste Weg, festzustellen, ob es hängt, ist, es zu tun, was es tun soll, und nach den Ergebnissen zu suchen. Ich müsste mehr darüber wissen, was es eigentlich macht.

Hier sind einige Befehle zur Reinigung in einer Batch-Datei zu verwenden (beide im Weg sein sollte):

  • sc stop service - stoppt Dienst namens service
  • sc service starten - benannt startet Service service
  • sc query service - Fragt den Status des Servicenamen

  • taskkill/F/IM excel.exe - beendet alle Instanzen von excel.exe

0

Ich kann die zweite Hälfte beantworten; wenn Sie einen Verweis auf das Anwendungsobjekt in Ihrem Code haben, können Sie rufen Sie einfach an „Quit“ auf sie:

private Microsoft.Office.Interop.Excel.Application _excel; 
// ... do some stuff ... 
_excel.Quit(); 

Für einen Prozess hängt Überprüfung, würde ich glaube, Sie würden wollen versuchen, einige zu bekommen Daten aus der Anwendung und sehen, ob Sie Ergebnisse in einem angemessenen Zeitrahmen erhalten (Einchecken eines Timers oder eines anderen Threads oder etwas). Es gibt wahrscheinlich einen besseren Weg.

1

ich tun dies vor einigen Jahren erinnern - so ich rede Office XP oder 2003 Tage, nicht 2007.

Offensichtlich eine bessere Lösung in diesen Tagen für die Automatisierung ist das neue XML-Format zu verwenden, die docx etc beschreibt Verwenden des System.IO.Packaging-Namespace.

Damals bemerkte ich, dass, wenn MSWord den Eimer getreten hatte und genug hatte, ein Prozess namens "Dr. Watson" auf der Maschine lief. Das war mein erster Hinweis darauf, dass Word gestolpert und hingefallen war. Manchmal sehe ich mehr als eine WINWORD.EXE, aber mein Code nur zum Scannen für den guten Arzt verwendet. Einmal sah ich, dass (in Code), ich tötete alle WINWORD.EXE Prozesse der gute Doktor selbst, und neu gestartet wird, den Prozess der Folterung Wort :-)

Hoffnung, dass Sie einige Hinweise darauf, was zu suchen gibt.

Alles Gute,

Rob G

P. S. Ich könnte sogar in der Lage sein, den Code in meinen Archiven auszugraben, wenn Sie nicht richtig kommen!

Verwandte Themen