启动过程并非总是如此

时间:2012-07-12 20:15:47

标签: c# .net process process.start

我有以下功能:

public static void ExecuteNewProcess(string fileToExecute, Action<string> writeToConsole)
{
    ProcessStartInfo startInfo = new ProcessStartInfo(fileToExecute);
    Process processToExecute = new Process();

    startInfo.UseShellExecute = true;
    processToExecute.StartInfo = startInfo;

    if (!File.Exists(fileToExecute))
    {
        throw new FileNotFoundException("File not found for execution");
    }

    if (processToExecute.Start())
    {
        Thread.Sleep(6000);
        Process[] procs = Process.GetProcesses();

        if (IsProcessOpen(Path.GetFileNameWithoutExtension(fileToExecute)))
        {
            writeToConsole(fileToExecute + " launched successfully...");
        }
        else
        {
            writeToConsole(fileToExecute + " started but not found.");
            throw new Exception("Application started butnot found running...Delay = 6000, File Name = " + Path.GetFileNameWithoutExtension(fileToExecute));               
        }

    }
    else
    {
        writeToConsole("Error Launching application: " + fileToExecute);
        throw new Exception("Application did not launch " + fileToExecute);
    }

}

private static bool IsProcessOpen(string name)
{

    foreach (Process clsProcess in Process.GetProcesses())
    {

        if (clsProcess.ProcessName.Contains(name))
        {

            return true;
        }
    }

    return false;
}

所以问题是有时候我试图用这个函数启动的应用程序没有启动(它开始大约80%的时间)。但是,我会检查代码的一部分,检查以确保它的启动和输出。我不确定为什么它没有开始。当我看到它没有开始确保它是一个有效的exe时,我双击该应用程序。它总是很好并且开始很好。我也试过使用shell而不使用shell。没有不同。

我认为在应用程序成功启动之前,processToExecute正在清理。只是一个猜测。

我提前感谢您的帮助。

我睡了一下,看看它是不是发生得太快了。

1 个答案:

答案 0 :(得分:0)

由于在看到用户界面之前应用程序加载的时间,因此应用程序在启动时没有显示20%的时间的原因

所以他们有两种方法可以实现它

1. start the process - > process.Start(); And then process.WaitForInputIdle();

OR

 2. start the process - > process.Start(); And then  Thread.Sleep(1000);
    //make sure you give reasonable milliseconds