Zum Inhalt springen

Empfohlene Beiträge

Geschrieben (bearbeitet)

Hallo Leuts ich habe mal wieder eines meiner Probleme mit einer Officeanwendung 2003 ... :eek

Ich nutze Visualstudio 2008 und möchte hier in einem "Webbrowserdialog" einige Dokumente anzeigen lassen. das funktioniert ganz vorzüglich, bis dann mal wieder irgendwann WinWord mal wieder einen Dokument "z.B. Test.doc" nicht richtig schließt und dann mein ganzes Programm abstürzt, weil nach Fehlermeldung "Ein noch aktiver Prozess" die weitere Arbeit blockiert. Ich habe schon das Internet durchforstet aber nichts brauchbares gefunden.

Ich vermute das der Garbage Collector nicht richtig arbeit und das Finally somit nicht abgeschlossen wird. Dadurch wird meine Datei zwar geschlossen aber WinWord bleibt geöffnet. Sobald dann eine neue Datei geöffnet werden soll, dann stürzt wieder alles ab. Ich kann dann über den Taskmanager die Anwendung manuell beenden. Dann funktioniert es mal wieder... aber nur ein paar Mal.

Hat jemand Erfahrungen wie man MIttels einer Anwendung aus VB.net 2008 heraus vielleicht Prozesse oder Anwendungen beenden kann.

Bearbeitet von PowerLooser
Geschrieben

Kenne mich in vb nicht so gut aus, aber kannst du den GarbageCollector selbst aktivieren?

Java biete die Möglichkeit, wenngleich auch hier das eher dem Zufall überlassen ist, ob der GC sich dem "Müll" annimmt.

Geschrieben

1. Weg:


Word.Application oWord = null;

oWord = (Word.Application)Marshal.GetActiveObject("Word.Application");

oWord.Quit();

für diesen code mußt du allerdings die Interop.Word.dll einbinden, und Quit erwartet Parameter. 2. Weg:

Process[] pSearch = Process.GetProcessesByName("WINWORD");

foreach (Process p in pSearch)

{

    if (p is Process)

       p.Kill();

}

  • 2 Wochen später...
Geschrieben

2. Weg:


Process[] pSearch = Process.GetProcessesByName("WINWORD");

foreach (Process p in pSearch)

{

    if (p is Process)

       p.Kill();

}

Habe zwar keine bessere Lösung aber ^^ diesen Weg halte ich für gefährlich denn er killt dir JEDEN Winword- Prozess auch den wenn du noch nebenbei ein anderes Dokument offen hast.

mfg Hans-Jörg

Geschrieben

Vielen Dank für die Info,

der Kill funktioniert schon, er killt auch andere Jobs des Words.

Da ich in meiner Anwendung ca 7000 Docs bearbeiten wollte und somit entsprechende Kill-Anforderungen abgeschickt habe war meine Windows-Installation nicht mehr zu gebrauchen.

Es lief nichts mehr.

Das Problem wird wohl irgendwo in der Nähe des Garbage-Collectors liegen.

Auch reagiert WinXP ganz anders als Vista.

Gruß

Geschrieben (bearbeitet)
Vielen Dank für die Info,

der Kill funktioniert schon, er killt auch andere Jobs des Words.

Da ich in meiner Anwendung ca 7000 Docs bearbeiten wollte und somit entsprechende Kill-Anforderungen abgeschickt habe war meine Windows-Installation nicht mehr zu gebrauchen.

Es lief nichts mehr.

Das Problem wird wohl irgendwo in der Nähe des Garbage-Collectors liegen.

Auch reagiert WinXP ganz anders als Vista.

Gruß

Hallo Saba1001

Ich habe das Problem auf meie Weise ersteinmal gelöst. :-)

Da ich meine Dokumente heraus im eigenen Browser laden lasse, wird zu jedem Documet ein eigener Process gestartet. Hierbei war das Problem stets, dass es zu keinem Finally kam und mein System schneller war, als "Winword" selber. Die internen Processe von "Winword" waren noch nicht abgeschlossen und es kam daher zur Fehlermeldung. Also lasse ich mir jeweils die Dateiendungen meiner Dateien bestimmen und lasse dazu wenn das System hängt einfach den Prozess killen. Ich habe dem Rechner einfach noch eine kurze Auszeit verpaßt und schon hat es funktioniert.


Imports System.Threading


private sub Datei_killen()

        Dim Dateiname, Endung


        ' Hier kann deine Datei als Variable ausgegeben werden

        Dateiname = "Testdokument.doc"

        Endung = Mid(Dateiname, InStrRev(Dateiname, "."))



        If Endung = ".doc" Then

            Dim name As String = "Winword"

            Dim procs As Process() = Process.GetProcessesByName(name)

            For Each p As Process In procs

                'If p.MainWindowTitle = String.Empty Then

                p.CloseMainWindow()

                p.Kill()

                GoTo gekillt

                'End If

            Next

        End If

        If Endung = ".xls" Then

            Dim name As String = "Excel"

            Dim procs As Process() = Process.GetProcessesByName(name)

            For Each p As Process In procs

                'If p.MainWindowTitle = String.Empty Then

                p.CloseMainWindow()

                p.Kill()

                GoTo gekillt

                'End If

            Next

        End If

        ' weitere Dokumentenendungen selber anfügen


gekillt:


        Dim i as Integer=0


        Do While i < 3

            Thread.Sleep(2000)

            i = i + 1

        Loop

end sub


Bei mir hat es bisher prima funktioniert. Versuch macht klug. Du mußt nur die entsprechenden Endungen deiner Dateien festlegen, die mit in der Routine behandelt werden sollen. :old

Bearbeitet von PowerLooser

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...