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)はありません。実際、無限ループになります。 breakthrowreturn

終了後にループを終了する場合は、そのためのステートメントを WaitForExit導入する必要があります。break

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

まあ、それはあなたがそれをコーディングした方法です。終了を待ってから、次のifステートメントで再開します。そして、Jaredが指摘したように、それは抜け出す方法がなく、ループし続けます。それで、それを開始し、それが終了するのを待ってから、それを再び開始します

于 2012-04-12T14:31:20.500 に答える
0

if (Process.GetProcessesByName("ServerAPPFileManager").Length > 0)false を返さないことを確認します。

于 2012-04-12T14:30:21.043 に答える