Benutzer mit den meisten Antworten
Keine aktualisierung von ProcessThreads nach beendigung des Mutterprozesses

Frage
-
Hallo Liebe C# Gemeinde,
ich habe ein massives Problem mit Prozessen in meiner Anwendung. Das Programm sollte eigentlich nur eine Anwendung ausführen und warten bis diese beendet ist .
Leider startet diese Anwendung gleich nach Ihrer ausführung einen Prozess und beendet die "Mutteranwendung". Somit geht die funktionelle Anwenund an einen Unterprozess. Diesen identifiziere ich auch ohne Probleme und hol alle infos. Nur werden diese "Infos" nie aktualisiert.
Beende ich die Anwendung bleibt der State weiterhin auf running.
Wo liegt der Denkfehler? :/
// Startet Faktura! // ++++ string Programme = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86); ProcessStartInfo Faktura = new System.Diagnostics.ProcessStartInfo(Programme + @"\Faktura\start.exe"); Faktura.CreateNoWindow = false; Faktura.UseShellExecute = false; Faktura.WorkingDirectory = Programme + @"\Faktura"; Process exeProcess = new Process(); exeProcess.StartInfo = Faktura; exeProcess.EnableRaisingEvents = false; exeProcess.Start(); // Abholen des Threads ProcessThread myThread = exeProcess.Threads[0]; // Der Prozess wird sofort beendet da eer einen Thread beauftragt... exeProcess.WaitForExit(); while(myThread.ThreadState == ThreadState.Running) System.Threading.Thread.Sleep(1000);
Vielen Dank im voraus!
Antworten
-
Hallo Bohan_VCS,
Ein Thread kann nur innerhalb eines Prozesses existieren. Wenn dein Launcher-Prozess gleich nach dem Start einen Thread abspaltet (würde mich wundern wenn es der Thread am Index 0 wäre) und gleich wieder endet, dann kann dein abgespalteter Thread nicht im luftleeren Raum existieren und wird mit dem Prozess beendet. Normalerweise würde dann myThread.ThreadState im Debugger einen Status von ThreadState.Ready aufweisen. Das dort erwartete ThreadState.Running ist also illusorisch.
Ich könnte mir aber vorstellen, dass dein Prozess keinen Thread abspaltet sondern einen neuen Prozess startet. In diesem Fall könntest Du z.B., wenn dir der Prozessname bekannt ist, über var processes = Process.GetProcessesByName("notepad") den dazugehörenden Prozess ermitteln und mit processes[idx].WaitForExit() auf dessen Beendigung warten.
Gruß
Marcel- Als Antwort markiert Bohan_VCS Samstag, 3. November 2012 19:29
Alle Antworten
-
Hallo Bohan_VCS,
Ein Thread kann nur innerhalb eines Prozesses existieren. Wenn dein Launcher-Prozess gleich nach dem Start einen Thread abspaltet (würde mich wundern wenn es der Thread am Index 0 wäre) und gleich wieder endet, dann kann dein abgespalteter Thread nicht im luftleeren Raum existieren und wird mit dem Prozess beendet. Normalerweise würde dann myThread.ThreadState im Debugger einen Status von ThreadState.Ready aufweisen. Das dort erwartete ThreadState.Running ist also illusorisch.
Ich könnte mir aber vorstellen, dass dein Prozess keinen Thread abspaltet sondern einen neuen Prozess startet. In diesem Fall könntest Du z.B., wenn dir der Prozessname bekannt ist, über var processes = Process.GetProcessesByName("notepad") den dazugehörenden Prozess ermitteln und mit processes[idx].WaitForExit() auf dessen Beendigung warten.
Gruß
Marcel- Als Antwort markiert Bohan_VCS Samstag, 3. November 2012 19:29
-
Hallo Marcel,
vielen Dank für die Antwort!
Du hast absolut recht. Der Hostprocess startet einen weiteren... und dieser ist mir nicht weiter aufgefallen... denn es war Javaw.exe...
Das Tool nutzt einfach nur java. Das war das Problem.
Vielen Dank nochmal!!!