Arrancar servidor de Interbase/Firebird desde programa

Hace poco me ví en la necesidad de arrancar el Servidor de Interbase/Firebird (en mi caso Firebird) si este estuviera desconectado al arrancar mi aplicación. En este ejemplo las funciones pertenecen a un formulario de Splash que se ejecuta nada más empezar la aplicación.

Nota: debes incluir estas cabeceras:

#include <Registry.hpp>
#include <Inifiles.hpp>

El código es el siguiente:

// Devuelve un booleano indicando true si el servidor está en ejecución o false si no lo está.
bool __fastcall TFSplash::Is_IB_Server_Running()
{
    bool resultado;

    if (GetWindow(GetDesktopWindow,GW_HWNDNEXT)==FindWindow("IB_Server", "InterBase Server")) {
        resultado=false;
    } else {
        resultado=true;
    }
    return(resultado);
}
//---------------------------------------------------------------------------
// Esta función arranca el servidor Interbase/Firebird
bool __fastcall TFSplash::Start_IB_Server()
{
    TRegistry *lRegistry = new TRegistry();
    STARTUPINFO lStartUpInfo;
    SECURITY_ATTRIBUTES lSecurityAttr;
    PROCESS_INFORMATION lProcessInfo;
    AnsiString ruta_al_ibserver;
    bool resultado;
    try {
        lRegistry->RootKey=HKEY_LOCAL_MACHINE;
        if (!lRegistry->OpenKey("SOFTWARE\\Borland\\InterBase\\CurrentVersion", false)) {
            ShowMessage("InterBase server no esta instalado en este sistema.");
        } else {
            ruta_al_ibserver=lRegistry->ReadString("ServerDirectory") + "ibserver.exe" + " -a";
        }
        ZeroMemory(&lStartUpInfo, sizeof(lStartUpInfo));
        ZeroMemory(&lProcessInfo, sizeof(lProcessInfo));

        lStartUpInfo.cb=sizeof(lStartUpInfo);
        lSecurityAttr.nLength= sizeof (lSecurityAttr);
        lSecurityAttr.lpSecurityDescriptor=NULL;
        lSecurityAttr.bInheritHandle=true;
        if (CreateProcess(0, ruta_al_ibserver.c_str(), &lSecurityAttr, NULL, false, 0, 0, 0, 
                          &lStartUpInfo, &lProcessInfo)!= NULL) {
            resultado=true;
        } else {
            ShowMessage("El servidor podría no estar arrancado.");
            resultado=false;
        }
    } catch (const Exception &e) {
        delete lRegistry;
    }
    return(resultado);
}
//-----------------------------------------------------------------