Un lugar de encuentro para los programadores de habla hispana

Un lugar de encuentro para los programadores de habla hispana

Buscar

Entrar

Puedes acceder utilizando tu cuenta de usuario del foro.

Si no dispone de cuenta, puede crear una accediendo al formulario de registro del foro.



Arrancar servidor de Interbase/Firebird desde programa Imprimir
Ideas - C++ Builder

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&aacute; en ejecuci&oacute;n o false si no lo est&aacute;.
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&oacute;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(&amp;lStartUpInfo, sizeof(lStartUpInfo));
        ZeroMemory(&amp;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(), &amp;lSecurityAttr, NULL, false, 0, 0, 0, 
                          &amp;lStartUpInfo, &amp;lProcessInfo)!= NULL) {
            resultado=true;
        } else {
            ShowMessage("El servidor podr&iacute;a no estar arrancado.");
            resultado=false;
        }
    } catch (const Exception &amp;e) {
        delete lRegistry;
    }
    return(resultado);
}
//-----------------------------------------------------------------
 
 
Comentarios (0)
Para escribir un comentario debes estar registrado