-
Подскажите, как при открытии программы проверить установлена ли Firebird?
-
а если установлен но не активен? служба к примеру не запущена (прямо как у меня... включается по надобности) или установлена локально, но коннект настроен "на соседа"? или не установлена но в наличие (подложили) "'эмбедед/персонал" версию?
если пофигу просто смотри на наличие службы, например.
-
А задача программы именно проверить наличие или подключиться к БД и работать?
-
>Подскажите,
При открытии программы не надо проверять установлен ли FB.
Его должен админ предварительно установить, либо написать инструкцию по установке.
-
> Aleks1241 (15.07.13 12:42)
> Подскажите, как при открытии программы проверить установлена
> ли Firebird?
Посмотри как это делает стандартный инсталлятор Firebird в исходниках Firebird:
\builds\install\arch-specific\win32\FirebirdInstallEnvironmentChecks.inc
Там просто имхо ветки реестра проверятся некоторые
-
> проверить установлена ли Firebird?
А что именно подразумевается под Firebird? Сервер или клиент?
-
А что именно подразумевается под Firebird? Сервер или клиент?
И то и другое.
-
Если нужно проверить на 'установлена и запущена', можно попробовать подключиться к какой-нибудь временной базе или попытаться создать базу 'с нуля'.
-
Для проверки установки сервера FB смотрим:
1. В реестре: [HKEY_LOCAL_MACHINE\SOFTWARE\Firebird Project\Firebird Server\Instances]
2. Сервисах: "Firebird Server - DefaultInstance"
3. Для проверки установки клиента ищем FbClient.dll
4. Если сервер FB запущен, то откликается TCP порт 3050
-
>DenSarych © (28.01.14 23:16) [8]
откликается то, что на нём(порту) висит(или не откликается и не висит:)), в общем случае
а сервер может болтаться и на другом
-
>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
Не всё так просто.
1. Разные версии в разных местах лежат в реестре.
2. Сервисы могут немного по-разному называться.
3. Не всегда есть. Может только gds32 быть или вообще не быть.
4. Не обязательно будет дефолтный порт.
-
Мы недавно использовали, но отказались за ненадобностью:
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 не покрывает, но большинство.
-
p.p.s искать gbak.exe, как в коде, не обязательно. Он может быть неустановлен.
-
Aleks, сделал проверку подключения к сервису без подключения к базе (с помощью isc_service_attach). Если есть интерес - пиша на e-mail.