System::Diagnostics::Process
-
Hallo,
ich habe ein kleines Problem, ich habe einen Prozess mit oben genanntem gestartet aber nun will ich abfragen ob dieser beendet wurde. Dort hapert es bei mir. Ich habe folgendes versucht:
if(System::Diagnostics::Process::Start("FileName")->HasExited == true) { .... }
Also es passiert gar nichts wenn ich das so mache...
Und noch andere wie Close und wie sie nicht alle heißen. Ich hoffe mir kann jemand weiterhelfen.
-
Du musst das Process-Objekt verwenden:
z.B. so:System::Diagnostics::Process^ p = System::Diagnostics::Process::Start("FileName"); p->WaitForProcessExit();
-
Vielen Dank hat geklappt. Ich habe es mit dienem Vorschlag so gemacht:
System::Diagnostics::Process^ p = System::Diagnostics::Process::Start("FileName"); p->WaitForExit(); if(p->HasExited == true) { ... }
-
Das HasExited kannst Du dir sparen
-
Aber wie soll ich sonst die abfrage machen? Ich kann ja nicht if(p->WaitForExit() == true) machen oder?
Oder einfach nur if(true)?! Mh das verwirrt mich etwas. Aber danke schonmal für deine Antwort :D.
-
Wenn dein Code aus WaitForExit() zurückkehrt, ist der Prozess beendet. Dann ist deine Abfrage überflüssig.
-
Aber ich will ja zuerst meine aktuelle Form verstecken (hide) dann eine andere exe starten und wenn sich diese beendet dann will ich das meine Form wieder sichtbar wird (show).
-
Dann verwende am besten das Ereignis "Exited". Auch musst Du dazu noch das "EnableRaisingEvents" auf "true" setzen.
Auch würde ich dann, um Race-Conditions zu vermeiden, das Prozess-Objekt von Hand anlegen... also wie im Beispiel:
http://msdn.microsoft.com/en-us/library/system.diagnostics.process.exited.aspx