Firebird Detektálása install - kor
2005-11-03T08:57:11+01:00
2005-11-04T22:48:00+01:00
2022-07-23T02:37:36+02:00
chewy
Sziasztok!
A problémám összetett...
Alkalmazás installáláskor Ellenőriznem kéne, hogy van-e firebird telepítve. Ha igen, akkor létre kéne hoznom egy új felhasználónevet és jelszót, amivel full jogosultsággal kezelhetem az adatbázisom. A fenti megoldás azon probléma elhárítására találtam ki, hogy ha valamilyen másik progi használ fb-t, akkor mellette elférjen az én progim is. Ha tudtok valami ötlettel szolgálni akár új megoldásra, vagy a fentiek megvalósítására, kérlek osszátok meg velem.
Mutasd a teljes hozzászólást!

function IsProcessRunning(ProcessExeName:string):Boolean; var SnapShot :THandle; Processes :TProcessEntry32; begin Result:=FALSE; ProcessExeName:=AnsiUpperCase(ProcessExeName); SnapShot:=CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS,0); Win32Check(SnapShot>0); Processes.dwSize:=SizeOf(TProcessEntry32); if Process32First(SnapShot,Processes) then repeat if AnsiUpperCase(Processes.szExeFile)=ProcessExeName then begin Result:=TRUE; break; end; until not Process32Next(SnapShot,Processes); CloseHandle(SnapShot); end; function IsNTServiceExists(ServiceName:string):Boolean; var hSCM :SC_HANDLE; Srv :SC_HANDLE; LastError :DWORD; begin Result:=FALSE; hSCM:=OpenSCManager(NIL,NIL,SC_MANAGER_CONNECT); Win32Check(hSCM<>0); try Srv:=OpenService(hSCM,PChar(ServiceName),SERVICE_QUERY_STATUS); if Srv=0 then begin LastError:=GetLastError; if LastError=ERROR_SERVICE_DOES_NOT_EXIST then Exit; SetLastError(LastError); RaiseLastWin32Error; end; Result:=TRUE; CloseServiceHandle(Srv); finally CloseServiceHandle(hSCM); end; end; FireBirdInstalled:=IsProcessRunning('FBSERVER.EXE') or ((Win32Platform=VER_PLATFORM_WIN32_NT) and (IsNTServiceExists('FireBirdServerDefaultInstance')));
Mutasd a teljes hozzászólást!

  • Installnál felmásolsz egy adatbázist és megpróbálod megnyitni SYSDBA-val ha sikerült akkor van telepítve.
    Mutasd a teljes hozzászólást!
  • Ok.. megpróbálom, köszi... És az új user felvitele + full jog beállítás?
    Mutasd a teljes hozzászólást!

  • function IsProcessRunning(ProcessExeName:string):Boolean; var SnapShot :THandle; Processes :TProcessEntry32; begin Result:=FALSE; ProcessExeName:=AnsiUpperCase(ProcessExeName); SnapShot:=CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS,0); Win32Check(SnapShot>0); Processes.dwSize:=SizeOf(TProcessEntry32); if Process32First(SnapShot,Processes) then repeat if AnsiUpperCase(Processes.szExeFile)=ProcessExeName then begin Result:=TRUE; break; end; until not Process32Next(SnapShot,Processes); CloseHandle(SnapShot); end; function IsNTServiceExists(ServiceName:string):Boolean; var hSCM :SC_HANDLE; Srv :SC_HANDLE; LastError :DWORD; begin Result:=FALSE; hSCM:=OpenSCManager(NIL,NIL,SC_MANAGER_CONNECT); Win32Check(hSCM<>0); try Srv:=OpenService(hSCM,PChar(ServiceName),SERVICE_QUERY_STATUS); if Srv=0 then begin LastError:=GetLastError; if LastError=ERROR_SERVICE_DOES_NOT_EXIST then Exit; SetLastError(LastError); RaiseLastWin32Error; end; Result:=TRUE; CloseServiceHandle(Srv); finally CloseServiceHandle(hSCM); end; end; FireBirdInstalled:=IsProcessRunning('FBSERVER.EXE') or ((Win32Platform=VER_PLATFORM_WIN32_NT) and (IsNTServiceExists('FireBirdServerDefaultInstance')));
    Mutasd a teljes hozzászólást!

  • uses IBHeader, IB; procedure TForm1.Button1Click(Sender: TObject); var IBLibrary :THandle; isc_add_user :Tisc_add_user; isc_sqlcode :Tisc_sqlcode; isc_sql_interprete :Tisc_sql_interprete; StatusVector :TStatusVector; UserSecData :TUserSecData; SQLCODE :LongInt; Msg :AnsiString; function GetProcAddr(ProcName: PChar): Pointer; begin Result:=GetProcAddress(IBLibrary, ProcName); if not Assigned(Result) then RaiseLastWin32Error; end; begin IBLibrary := LoadLibrary('GDS32.DLL'); if (IBLibrary > HINSTANCE_ERROR) then begin isc_add_user :=GetProcAddr('isc_add_user'); isc_sqlcode :=GetProcAddr('isc_sqlcode'); isc_sql_interprete:=GetProcAddr('isc_sql_interprete'); with UserSecData do begin protocol :=sec_protocol_local; dba_user_name:='SYSDBA'; dba_password :='masterkey'; user_name :='usernev'; password :='jelszo'; sec_flags :=sec_password_spec OR sec_dba_user_name_spec OR sec_dba_password_spec; end; FillChar(StatusVector,SizeOf(StatusVector),0); isc_add_user(@StatusVector,@UserSecData); if StatusVector[0]=1 then if StatusVector[1]<>0 then begin SQLCODE:=isc_sqlcode(@StatusVector); SetLength(Msg,512); isc_sql_interprete(SQLCODE,PChar(Msg),512); SetLength(Msg,StrLen(PChar(Msg))); Application.MessageBox(PChar(Msg),'Interbase SQL Error',MB_ICONEXCLAMATION+MB_OK); end; FreeLibrary(IBLibrary); end; end;



    De csinálhatod a TIBSecurityService komponensen keresztül is.
    Mutasd a teljes hozzászólást!
  • És már csak az a gáz, ha már van FB telepítve mondjuk FB szerver, és a SYSDBA már régen nem létezik, és az admin név - jelszó ismeretlen, a szerveren nincs filemegosztás, és nem tudsz adatbűázist felmásolni.

    Szerencsésebb dolog a telepítőnek csatlakozni egy meglévő szerverhez (persze a felhasználó nevet és jelszót így is ismerni kell ) és SQL utasítás hegyekkel létrehozni az adatbázist.
    A szerverek megkereshetők a 3050-es porton, lehet akát több szerver is, akor ki kell választani, ha nincs vagy telepíteni kell egyet, vagy local FB-t kel telepíteni.
    Inteligens telepítő! InnoSetuppal mindez megoldható.
    Mutasd a teljes hozzászólást!
  • Teljesen igazad van, csak azért mondtam azt a fapados megoldást mert igazából csak a setup a jó megoldás, mivel bármi bárhol lehet a 3050-es port sem tuti el lehet állítani, a program vagy szolgáltatás keresés se biztos, lehet hogy nincs alapból elindítva. És mi van ha nem firebird van hanem interbase. Mindenre sajnos nem lehet felkészülni.
    Mutasd a teljes hozzászólást!
  • Azért a 3050 átírása már perverzió. Ha valahol van szerver az jellemzően szolgáltatásként fut, azaz elérhető, bár vannak kivételek
    A kedves usertől meg kell kérdezni, aztán ha valamit beírt az már lehet csekkolni hogy jó-e. Ha nem, az gáz.
    Ezért szokták az ilyen telepítők futtatását rendszergazdai joghoz kötni (az Inno ezt is tudja) mert az admin talán tudja ki hol lakik.
    Mutasd a teljes hozzászólást!
  • Köszi a forrást! Vannak gondjaim vele...
    nem ismeri a következőket:
    TProcessEntry32
    CreateToolHelp32SnapShot
    meg még egy csomó mindent, ami sztem ezekkel függ össze...
    Mutasd a teljes hozzászólást!

  • uses TLHelp32;
    Mutasd a teljes hozzászólást!
  • uses TLHelp32, WinSvc;
    Mutasd a teljes hozzászólást!
  • Bocs, ez egyszerre volt...
    Mutasd a teljes hozzászólást!
  • Ja, éppen tettem volna hozzá a WinSvc-t...
    Mutasd a teljes hozzászólást!
  • Köszi.. a Detect megy. A useradd is lefordul, csak nem tom, hogy kell paraméterezni... Mit csinál ez a script?
    Mutasd a teljes hozzászólást!
  • Műűködiiik! :D :D
    Már csak 1 dolog kéne...
    ha már adtam hozzá új felh.nevet és jelszót, a sysdba/masterkey-t le szeretném törölni.. lehet? hogyan?
    Mutasd a teljes hozzászólást!
  • Na ilyennel még nem próbálkoztam, és most nincs is a közelemben IB/FB doksi,
    hogy utána tudjak nézni.
    Esetleg próbálkozz a TIBSecurityService komponens DeleteUser metódusával.
    Mutasd a teljes hozzászólást!
  • A helyedben nem törölném. Inkább a jelszavát változtatnám csak meg.
    Mutasd a teljes hozzászólást!
  • Én még csak a jelszavát sem merném bántani, mert ha már a gépen van, annak lehet oka, hogy egy másik program használja esetleg SYSDBA/masterkey cuccost,és azt azért kár volna kinyúvasztani.
    Mutasd a teljes hozzászólást!
  • Köszönöm!
    Mutasd a teljes hozzászólást!
abcd