warum Prozess.WaitForExit nicht warten?
warum Prozess.WaitForExit nicht warten?
static void Main(string[] args)
{
while (true)
{
try
{
if (Process.GetProcessesByName("ServerAPPFileManager").Length > 0)
{
Process clsProcess = Process.GetProcessesByName("ServerAPPFileManager")[0];
Console.WriteLine(clsProcess.ProcessName);
clsProcess.WaitForExit();
}
if (System.IO.File.Exists(System.IO.Path.Combine(Environment.CurrentDirectory, "ServerAPPFileManager.exe")))
{
Console.WriteLine("File Found");
Process p = new Process();
p.StartInfo.Verb = "runas";
p.StartInfo.FileName = System.IO.Path.Combine(Environment.CurrentDirectory, "ServerAPPFileManager.exe");
p.Start();
}
}
catch(Exception e)
{
Console.Write(e.Message);
System.Threading.Thread.Sleep(1000);
}
}
}
hält looping und starten die Anwendung wieder und wieder!
Edit:
Er arbeitete nun, Es war nicht funktioniert, da war es so clsProcess.WaitForExit(1000);
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser code wird dann in einen
while(true)
- Schleife und es gibt keinebreak
,throw
oderreturn
Anweisungen im Rumpf der Schleife. Es wird in der Tat führen zu einer Endlosschleife.Wenn Sie möchten, beenden Sie die Schleife, sobald die
WaitForExit
abgeschlossen hat, dann brauchen Sie, um die Einführung einerbreak
Anweisung, dies zu tun.while(true)
und fügen Sie einfach einbreak;
?if
Aussagen um, und entfernen Sie die Schleife. Das leistet was versuchst du hierclsProcess.WaitForExit(1000);
stattclsProcess.WaitForExit();
dass sein, warum es nicht warten.Überprüfen Sie, dass
if (Process.GetProcessesByName("ServerAPPFileManager").Length > 0)
nicht false zurück.Gut, das ist die Art, wie Sie codiert es. Es wartet auf Ausfahrt, dann in der nächsten if-Anweisung startet er es wieder. Und als Jared wies darauf hin, es hält looping mit keine Möglichkeit, auszubrechen. so beginnt er, wartet, bis es zu beenden, und dann startsit wieder
Das problem könnte sein, dass Sie den Aufruf nicht WaitForExit auf das Prozess-Objekt, das Sie erstellt haben, sondern stattdessen auf ein Process-Objekt zurück von Prozess.GetProcessesByName(). Versuchen Sie stattdessen:
entfernen Sie es in eine while-Anweisung und fügen Sie es in einen timer.. überprüfen, ob Prozess."hasexited" =true, dann rufen Sie wieder Ihren Prozess sonst, zu prüfen, ob Prozess.Reaktion=true dann warten andere Kraft, die den Prozess töten