2

为什么 Process.WaitForExit 不等待?

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);
            }
        }
    }

它不断循环并一次又一次地启动应用程序!

编辑:

它现在起作用了,它不起作用,因为它是这样的clsProcess.WaitForExit(1000);

4

5 回答 5

5

这段代码被包裹在一个循环中,循环体内while(true)没有break, throwor语句。return它确实会导致无限循环。

如果您想在WaitForExit完成后退出循环,那么您需要引入一个break语句来执行此操作。

clsProcess.WaitForExit();
break;
于 2012-04-12T14:28:30.127 回答
0

检查if (Process.GetProcessesByName("ServerAPPFileManager").Length > 0)不返回错误。

于 2012-04-12T14:30:21.043 回答
0

嗯,这就是你编码的方式。它正在等待退出,然后在下一个 if 语句中再次启动它。正如 Jared 指出的那样,它一直在循环,无法突破。所以它启动它,等待它退出,然后再次启动它

于 2012-04-12T14:31:20.500 回答
0

问题可能是您没有在已创建的 Process 对象上调用 WaitForExit,而是在从 Process.GetProcessesByName() 返回的 Process 对象上调用。相反,请尝试:

Process p = new Process(); 
// etc
p.Start();
p.WaitForExit();
于 2012-04-12T14:43:38.663 回答
0

在 while 语句中将其删除并将其添加到计时器中.. 验证是否 process.hasexited=true 然后再次调用您的进程,否则验证是否 process.responding=true 然后等待否则强制进程终止

于 2013-04-02T11:29:05.180 回答