none
Keine aktualisierung von ProcessThreads nach beendigung des Mutterprozesses RRS feed

  • 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!

    Samstag, 3. November 2012 02:19

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
    Samstag, 3. November 2012 08:10
    Moderator

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
    Samstag, 3. November 2012 08:10
    Moderator
  • 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!!!

    Samstag, 3. November 2012 19:34