如何运行依赖于另一个exe文件运行的exe文件

时间:2016-11-22 17:41:47

标签: c#

static Process[] processArray = new Process[1];
static void Main(string[] args)
{

    bool programIsRunning = false;
    string process = "file location file name .exe";
    processArray = Process.GetProcessesByName(Path.GetFileNameWithoutExtension(process));
    Console.WriteLine(processArray);
    do
    {
        if (processArray == null && programIsRunning == false) 
        {
            Process.Start("file location file name .exe"); 
            programIsRunning = true;
        } 
    } while (true);
}

当我运行此代码并启动第一个exe时,第二个不会开始运行(它应该)。但是,如果我if (processArray != null && programIsRunning == false)第二个exe文件运行,即使第一个exe文件没有运行。

1 个答案:

答案 0 :(得分:4)

这里最大的问题是循环中的代码不够(及其while(true)!)

因为您没有将programIsRunning重置为false(并且您甚至不需要该变量),或者重新获取Process数组,所以只有第一个结果才会曾经运行过(实际上,它只在processArray为空时运行,它可能不是,只是空的。)

你真的想要更接近的东西:

string process = "file location file name .exe";
do
{
    processArray = Process.GetProcessesByName(Path.GetFileNameWithoutExtension(process));
    Console.WriteLine(processArray);
    if (!processArray?.Any() ?? false) 
    {
        Process.Start(process);
    } 
    Thread.Sleep(2000);//IMPORTANT: Sleep or you are doing expensive work in a tight loop!
} while (true);

即使代码可以通过将你的循环放在一个单独的线程中并且在while上有条件来改进非常,所以你可以正确地关闭它,或者只使用Timer 。您根本不需要循环,因为您可以附加到您创建的进程的Exited事件,以防它关闭。