Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Prüfen, ob Programm schon disposed wurde

Mitglied: MarcoBorn

MarcoBorn (Level 1) - Jetzt verbinden

19.09.2019 um 13:35 Uhr, 668 Aufrufe, 17 Kommentare

Hallo Forum,
ich habe in VB.NET ein Programm geschrieben, welches Word startet und dort Daten ausliest. Obwohl ich die Variable, die auf die Word-Applikation verweist, am Ende auf Nothing setze und dispose, bleibt Word im Task-Manager als Prozess weiterhin aktiv. Ich habe dann versucht, das Fenster zu maximieren, damit der Nutzer es manuell schließen kann, aber dann bricht die Prozedur ab.

Word ist weiterhin offen, aber mein Programm hat die Verbindung verloren und kann nicht mehr mit Word interagieren.
Wie kann ich entweder Word sauber beenden oder prüfen, ob es im Task-Manager noch als Prozess läuft und diesen dann sauber beenden (d.h. ggf. mit Möglichkeit zum Speichern)?

Vielen Dank im voraus,
M. Born
Mitglied: 140913
19.09.2019, aktualisiert um 13:47 Uhr
Zitat von MarcoBorn:

Hallo Forum,
ich habe in VB.NET ein Programm geschrieben, welches Word startet und dort Daten ausliest. Obwohl ich die Variable, die auf die Word-Applikation verweist, am Ende auf Nothing setze und dispose, bleibt Word im Task-Manager als Prozess weiterhin aktiv. Ich habe dann versucht, das Fenster zu maximieren, damit der Nutzer es manuell schließen kann, aber dann bricht die Prozedur ab.

Word ist weiterhin offen, aber mein Programm hat die Verbindung verloren und kann nicht mehr mit Word interagieren.
Wie kann ich entweder Word sauber beenden oder prüfen, ob es im Task-Manager noch als Prozess läuft und diesen dann sauber beenden (d.h. ggf. mit Möglichkeit zum Speichern)?
Wird Word über ein COM-Object angesprochen?, für die gibt's Extra Behandlung:
https://docs.microsoft.com/de-de/dotnet/api/system.runtime.interopservic ...

Und vorher am Ende immer ein Quit() auf das Word-Application Object absetzen damit Word "sanft" schließt und nicht einfach nur abgewürgt wird.
Bitte warten ..
Mitglied: MarcoBorn
19.09.2019 um 13:58 Uhr
Wenn ich statt Quit den o.g. Befehl aufrufe, erhalte ich eine Fehlermeldung:
Muss ich Word ggf. anders definieren, oder reicht folgendes?
Bitte warten ..
Mitglied: emeriks
19.09.2019, aktualisiert um 14:03 Uhr
Hi,
Zitat von MarcoBorn:
Obwohl ich die Variable, die auf die Word-Applikation verweist, am Ende auf Nothing setze und dispose, bleibt Word im Task-Manager als Prozess weiterhin aktiv. Ich habe dann versucht, das Fenster zu maximieren, damit der Nutzer es manuell schließen kann, aber dann bricht die Prozedur ab.
Also das Word.Application Objekt hat meines Wissens keine Dispose-Methode. Weiterhin - für andere Objekte - muss man natürlich erst das Dispose aufrufen (sofern für diese Klasse verfügbar) und dann erst die Variable auf Nothing setzen.

Wie @140913 schon schreibt, muss man das Word-Programm schon explizit über Quit() schließen, weil es als eigenständiger Prozess gestartet wird.

E.
Bitte warten ..
Mitglied: emeriks
19.09.2019 um 14:04 Uhr
Selbst wenn Du das ReleaseComObject absetzt, bleibt sollte die Anwendung weiterhin als Prozess laufen.
Bitte warten ..
Mitglied: MarcoBorn
19.09.2019 um 14:06 Uhr
Gibt es dann keine Möglichkeit, Word wieder zu beenden?
Bitte warten ..
Mitglied: emeriks
19.09.2019, aktualisiert um 14:23 Uhr
Zitat von MarcoBorn:
Gibt es dann keine Möglichkeit, Word wieder zu beenden?
Liest Du unsere Kommentare nicht?
Methode Quit() ausführen! Was sollen wir da noch schreiben?

Edit:
Natürlich bevor Du die Variable auf Nothing setzt, ist klar.
Bitte warten ..
Mitglied: 140913
19.09.2019, aktualisiert um 14:23 Uhr
Zitat von MarcoBorn:

Gibt es dann keine Möglichkeit, Word wieder zu beenden?
Lesen ist schon schwer, stand oben schon in meinem ersten Kommentar.
https://docs.microsoft.com/de-de/office/vba/api/word.application.quit(me ...)
Bitte warten ..
Mitglied: MarcoBorn
19.09.2019 um 14:24 Uhr
Quit und auf Nothing setzen hatte ich ja in meinem ursprünglichen Code schon drin, aber trotzdem ist Word selbst 30 Minuten nach dem Ende des Programms immer noch aktiv. Selbst der GC sollte zwischendurch mindestens einmal durchgelaufen sein. Die Stelle mit Quit und Nothing-setzen wird auch definitiv durchlaufen. Das habe ich testweise mit eine MsgBox davor und danach getestet.

ReleaseComObject bringt mir nur eine Fehlermeldung, hilft mir also leider auch nicht weiter. Was könnte ich noch probieren?
Bitte warten ..
Mitglied: 140913
19.09.2019, aktualisiert um 14:29 Uhr
ReleaseComObject bringt mir nur eine Fehlermeldung
Das ist auch nur mögich wenn Word als reines COM-Object erzeugt wurde, nicht mit managed classes.
aber trotzdem ist Word selbst 30 Minuten nach dem Ende des Programms immer noch aktiv.
Dann wirst du noch andere Referenzen offen haben.
Selbst der GC sollte zwischendurch mindestens einmal durchgelaufen sein.
Den mal testweise die Garbage Collection manuell aufrufen.
Bitte warten ..
Mitglied: MarcoBorn
19.09.2019 um 14:28 Uhr
Hier mal mein Code zum Schließen:
Bitte warten ..
Mitglied: emeriks
19.09.2019, aktualisiert um 14:34 Uhr
Nochmal:
Word läuft als eigener Prozess! Da nützt Dir also "Nothing" und "Garbage Collection" für das Beenden des Prozess überhaupt nichts, weil es sich nur auf die belegten Ressourcen innerhalb Deines Programms bezieht.

Wenn der Prozess nach dem Quit() immer noch läuft, dann bekommst Du im VB.Net doch sicher eine Ausnahme gefeuert, oder?
Bitte warten ..
Mitglied: 140913
19.09.2019, aktualisiert um 14:31 Uhr
.DisplayAlerts = Word.Enums.WdAlertLevel.wdAlertsNone
Dir ist aber schon klar das du damit sämtliche Meldungen auch nach dem Schließen von Word permanent deaktivierst?
Das sollte man vor dem Schließen der Instanz wieder zurücksetzen.
Bitte warten ..
Mitglied: MarcoBorn
19.09.2019 um 14:30 Uhr
Nein, der Code läuft normal durch. Ich habe alle Prozeduren komplett mit Try-Catch gekapselt, aber ich erhalte keine Fehlermeldung. Word wird auch nur einmal zu Anfang des Projekts gestartet.
Bitte warten ..
Mitglied: MarcoBorn
19.09.2019 um 14:41 Uhr
Danke für den Hinweis. Nach dem Schließen der Datei setze ich es wieder auf "All". Ich lasse gerade das Tool durchlaufen. Mal sehen, ob mir jetzt etwas anderes angezeigt wird.
Bitte warten ..
Mitglied: SachsenHessi
19.09.2019, aktualisiert um 15:00 Uhr
Hallo,

dein Problem besteht nicht nur bei Word, sonder auch bei Excel.
Bei beiden arbeitet die Quit()-Methode nicht sauber. Man müsste jetzt über die Marshalling gehen, aber das nervt und ist aufwendig.
(Stichworte: System.Runtime.InteropServices.Marshal und System.Runtime.InteropServices.GCHandle)

Folgendes ist zwar nicht "schön", aber funktioniert und ist schnell und einfach.
Der Ansatz ist einfach den Prozess für die Office-Instanz zu killen.
Das hier sollte auch für Word nutzbar sein (ist für Excel):
Bitte warten ..
Mitglied: MarcoBorn
19.09.2019 um 15:06 Uhr
Danke. Hier wird zwar Word nicht sauber beendet, sondern nur abgeschossen. Aber ich werde mal testen, ob das zumindest als Notlösung funktioniert.
Bitte warten ..
Mitglied: SachsenHessi
19.09.2019 um 15:25 Uhr
Hatte ich geschrieben, nicht "schön" aber funktioniert.
Selbst nach einem
Quit()
Marshal.ReleaseComObject()
GCCollect()
GC.WaitForPendingFinalizers()
war es teilweise (besser häufiger) noch aktiv.
daher diese frickel-lösung.

Gruß
SH
Bitte warten ..
Ähnliche Inhalte
Multimedia
Diashow Programm
gelöst Frage von 77282Multimedia6 Kommentare

Hallo, ich suche eine Software zum Diashow erstellen. Möchte gerne Videoclips und Bilder hinzufügen können und das Ganze mit ...

Windows Server
CRM Programm Problem
gelöst Frage von DaHuberWindows Server7 Kommentare

Hallo zusammen, Haben 2 Cluster rds 1 rds 2 nenne ich die mal ein Programm Cobra CRM, das auf ...

Batch & Shell
Fehler in Programm
Frage von IleiesBatch & Shell9 Kommentare

Hallo zusammen, Ich habe jetzt dieses Programm geschrieben: in der " ;%profile%-%dato%.dat"-Datei steht meistens sowas: An einem anderen sowas: ...

LAN, WAN, Wireless
Captive Portal Programm
gelöst Frage von max.koblerLAN, WAN, Wireless11 Kommentare

Hallo Leute, Mal ne frage wir haben 25 Unifi AP AC HD in unserer Schule und ich bin Administrator ...

Neue Wissensbeiträge
Off Topic
3D-Drucker gegen Corona - helft mit!
Information von DerWoWusste vor 10 StundenOff Topic12 Kommentare

Unter vorigem Link sind Anleitungen, wie man sich mit seinem 3D-Drucker an der Produktion (Druck) von Bauteilen für Atemmasken ...

Instant Messaging

Die Kommunikations-App Zoom kommt aus der Kritik so schnell nicht mehr raus

Information von Frank vor 11 StundenInstant Messaging4 Kommentare

Ich würde Zoom ja gerne nutzen (das Featureset ist ziemlich gut) aber irgendwie hinterlassen die ganzen Nachrichten einen faden ...

Off Topic
Die Känguru-Chroniken - ab April im Streaming
Information von Frank vor 1 TagOff Topic2 Kommentare

Die Corona-Krise hat auch die Kinos zum Stillstand gebracht. Daher gehen einige Verleiher neue Wege und stellen ihre Filme ...

Windows Server

Update KB4541329 (März 2020) und Windows Server 2016 RDS 1609 Probleme

Information von System-Fehler vor 2 TagenWindows Server1 Kommentar

Hallo, hier zur Info und eventuelle Hilfe: Wir hatten folgende Fehler: Windows 2016 Datacenter 1609, hier als RDS Dienste ...

Heiß diskutierte Inhalte
Batch & Shell
Alle Dateien eines Typs in Unterordnern in ein anderes Verzeichnis kopieren, aber so, dass sie in einem einzigen Unterverzeichnis liegen
Frage von Julia1989Batch & Shell20 Kommentare

Hallo, ich habe folgendes Problem: Ich habe viele *.php dateien, diese liegen in jeweils verschiedenen Unternordnern also C:\PfadZumOberverzeichnis\{A bis ...

Zusammenarbeit
Corona schlimmer als Ferien?
Frage von RaboomZusammenarbeit15 Kommentare

Hallo zusammen, sagt mal, kommt euch das auch so vor? Viele Eintagsfliegen stellen rudimentäre Fragen und reagieren dann gar ...

Internet Domänen
Subdomain auf subdomain bzw. dyndns mit port weiterleiten?
Frage von DynlaraBartisInternet Domänen15 Kommentare

hey ich habe einen server bei mir mit proxmox auf diesem habe ich vm´s im heimnetz habe ich eine ...

Windows 10
Über Remotedesktopverbindung erkennen, ob Monitor angeschaltet ist
Frage von Tomac84Windows 1013 Kommentare

Hallo Zusammen, Auf Grund der Krise arbeite ich vom Home Office aus. Ich melde mich per Remotedesktopverbindung an meinen ...