Gibt es eine Möglichkeit zu überprüfen, ob ein Microsoft Office-Prozess (z. B. Word, Excel) bei Verwendung von Office Automation hängen geblieben ist? Wenn der Prozess hängt, gibt es eine Möglichkeit, es zu beenden?Überprüfen Sie, ob der Office-Prozess hängt, wenn Sie Office Automation verwenden
Antwort
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
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.
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!
- 1. überprüfen Sie, ob Anwendung für die ms ui Automation Framework
- 2. So überprüfen Sie, ob Office auf einem Server installiert ist
- 3. Überprüfen Sie, ob Form
- 4. Verwenden Sie AzCopy in Azure Automation Job
- 5. Überprüfen Sie, ob der serielle Port überwacht
- 6. Überprüfen Sie, ob der Dienst läuft.
- 7. Überprüfen Sie, ob der Typ generisch ist
- 8. Überprüfen Sie, ob Werte korrekt
- 9. Überprüfen Sie, ob der WCF-Dienst existiert
- 10. Überprüfen Sie, ob der Benutzer angemeldet ist
- 11. Dezimalwert Überprüfen Sie, ob Null
- 12. Javascript: Überprüfen Sie, ob Klassenname
- 13. Überprüfen Sie, ob NSUserDefaults Schlüssel
- 14. Django: Überprüfen Sie, ob Fremdschlüsselattribut
- 15. Überprüfen Sie, ob eine Klassenmethode
- 16. Überprüfen Sie, ob String palindrom
- 17. Überprüfen Sie, ob enthält Parameter
- 18. Überprüfen Sie, ob Feldfehler erzeugt
- 19. überprüfen, ob dann externe Skripte laden, wenn sie vorhanden Arent
- 20. Überprüfen, ob zwei Objekte gleich sind, auch wenn sie
- 21. Überprüfen Sie, ob benutzerdefinierte Schriftart Zeichen
- 22. Überprüfen Sie, ob CGRect Null in Getter
- 23. überprüfen Sie, ob Werte Match in MongoDB
- 24. Überprüfen Sie, ob Array-Objekt ohne Bezug
- 25. Überprüfen Sie, ob Facebook dann umleiten blockiert
- 26. Überprüfen Sie, ob die Standortdienste aktiviert sind.
- 27. Überprüfen Sie, ob curl TLS ist
- 28. Überprüfen Sie, ob der Benutzer das Konsolenfenster eingibt
- 29. Überprüfen Sie, ob Beratung angewendet wird
- 30. Überprüfen Sie, ob der Dienst unter Android ausgeführt wird.