    for (auto & s : seq)
        s.on_setup(*this);

    if (error())
    {
        for (auto & s : seq)
           s.on_error(*this, error());
        return child();
    }
    int err_code = CreateProcess(
             exe,
             cmd_line,
             proc_attrs,
             thread_attrs,
             creation_flags,
             env,
             work_dir,
             startup_info,
             proc_info);

    child c(proc_info, exit_code);

    if (error())
        for (auto & s : seq)
            s.on_error(*this, error());
    else
        for (auto & s : seq)
            s.on_success(*this);

    //now we check again, because a on_success handler might've errored.
    if (error())
    {
        for (auto & s : seq)
            s.on_error(*this, error());
        return child();
    }
    else
        return c;