Конференция "Базы" » Проверка на наличие установленной Firebird. [D7]
 
  • Aleks1241 (15.07.13 12:42) [0]
    Подскажите, как при открытии программы проверить установлена ли Firebird?
  • sniknik © (15.07.13 13:12) [1]
    а если установлен но не активен? служба к примеру не запущена (прямо как у меня... включается по надобности) или установлена локально, но коннект настроен "на соседа"? или не установлена но в наличие (подложили) "'эмбедед/персонал" версию?

    если пофигу просто смотри на наличие службы, например.
  • Sergey13 © (17.07.13 10:53) [2]
    А задача программы именно проверить наличие или подключиться к БД и работать?
  • Jeer © (17.07.13 17:24) [3]
    >Подскажите,

    При открытии программы не надо проверять установлен ли FB.
    Его должен админ предварительно установить, либо написать инструкцию по установке.
  • DVM © (21.07.13 17:48) [4]

    > Aleks1241   (15.07.13 12:42) 
    > Подскажите, как при открытии программы проверить установлена
    > ли Firebird?

    Посмотри как это делает стандартный инсталлятор Firebird в исходниках Firebird:
    \builds\install\arch-specific\win32\FirebirdInstallEnvironmentChecks.inc

    Там просто имхо ветки реестра проверятся некоторые
  • asail © (04.08.13 23:14) [5]

    > проверить установлена ли Firebird?

    А что именно подразумевается под Firebird? Сервер или клиент?
  • Aleks1241 (21.01.14 12:41) [6]
    А что именно подразумевается под Firebird? Сервер или клиент?

    И то и другое.
  • Дмитрий Белькевич (21.01.14 22:14) [7]
    Если нужно проверить на 'установлена и запущена', можно попробовать подключиться к какой-нибудь временной базе или попытаться создать базу 'с нуля'.
  • DenSarych © (28.01.14 23:16) [8]
    Для проверки установки сервера FB смотрим:
    1. В реестре: [HKEY_LOCAL_MACHINE\SOFTWARE\Firebird Project\Firebird Server\Instances]
    2. Сервисах: "Firebird Server - DefaultInstance"

    3. Для проверки установки клиента ищем FbClient.dll
    4. Если сервер FB запущен, то откликается TCP порт 3050
  • Кщд (29.01.14 09:41) [9]
    >DenSarych ©   (28.01.14 23:16) [8]
    откликается то, что на нём(порту) висит(или не откликается и не висит:)), в общем случае
    а сервер может болтаться и на другом
  • Кщд (29.01.14 09:41) [10]
    >DenSarych ©   (28.01.14 23:16) [8]
    откликается то, что на нём(порту) висит(или не откликается и не висит:)), в общем случае
    а сервер может болтаться и на другом
  • Дмитрий Белькевич (30.01.14 00:36) [11]
    Для проверки установки сервера FB смотрим:
    1. В реестре: [HKEY_LOCAL_MACHINE\SOFTWARE\Firebird Project\Firebird Server\Instances]
    2. Сервисах: "Firebird Server - DefaultInstance"
    3. Для проверки установки клиента ищем FbClient.dll
    4. Если сервер FB запущен, то откликается TCP порт 3050

    Не всё так просто.
    1. Разные версии в разных местах лежат в реестре.
    2. Сервисы могут немного по-разному называться.
    3. Не всегда есть. Может только gds32 быть или вообще не быть.
    4. Не обязательно будет дефолтный порт.
  • Дмитрий Белькевич (30.01.14 00:39) [12]
    Мы недавно использовали, но отказались за ненадобностью:


    function GetIBPath: string;
    var
    Reg: Tregistry;
    begin
    Reg := TRegistry.Create;
    try
     Reg.RootKey := HKEY_LOCAL_MACHINE;
     if not Reg.OpenKeyReadonly('Software\FirebirdSQL\Firebird\CurrentVersion') then
     begin
      Reg.CloseKey;
      Reg.OpenKeyReadonly('Software\Borland\InterBase\CurrentVersion');
     end;
     Result := Reg.ReadString('ServerDirectory');
     Reg.CloseKey;
     if (Result = '') or not FileExists(Result + 'gbak.exe') then
     begin
      Reg.OpenKeyReadonly('SOFTWARE\Firebird Project\Firebird Server\Instances');
      Result := Reg.ReadString('DefaultInstance');
      if not IsEmptyStr(Result) then
       Result := Result + 'bin\';
      Reg.CloseKey;
     end;
     if (Result = '') or not FileExists(Result + 'gbak.exe') then
     begin
      Reg.OpenKeyReadonly('SOFTWARE\Borland\InterBase\Servers\gds_db');
      Result := Reg.ReadString('ServerDirectory');
      Reg.CloseKey;
     end;
     if (Result = '') or not FileExists(Result + 'gbak.exe') then
     begin
      Reg.OpenKeyReadonly('SYSTEM\CurrentControlSet\Services\InterBaseServer');
      Result := ExtractFilePath(Reg.ReadString('ImagePath'));
      Reg.CloseKey;
     end;
     if (Result = '') or not FileExists(Result + 'gbak.exe') then
     begin
      Reg.OpenKeyReadonly('SYSTEM\CurrentControlSet\Services\FirebirdServerDefaultInst ance');
      Result := ExtractFilePath(Reg.ReadString('ImagePath'));
      Reg.CloseKey;
     end;
     Result := NormalDir(Result);
    finally
     FreeAndNil(Reg);
    end;
    end;



    p.s. всех случаев FB/IB не покрывает, но большинство.
  • Дмитрий Белькевич (30.01.14 00:41) [13]
    p.p.s искать gbak.exe, как в коде, не обязательно. Он может быть неустановлен.
  • Дмитрий Белькевич (17.02.14 19:01) [14]
    Aleks, сделал проверку подключения к сервису без подключения к базе (с помощью isc_service_attach). Если есть интерес - пиша на e-mail.
 
Конференция "Базы" » Проверка на наличие установленной Firebird. [D7]
Есть новые Нет новых   [134428   +39][b:0][p:0.002]