![]() |
Datenbank: Firebird • Version: 1.5 • Zugriff über: IBO
Firebird über NTService (Dienst) zugreifen funkt nicht
Hallo Zusammen,
ich hab eine Windows Forms Anwendung geschrieben die über IBO auf eine entfernte Firebird Datenbank zugreift. Alles funktioniert einwandfrei. Nun erzeuge ich ein parallel Projekt mit exakt der gleichen Funktionalität jedoch als Dienst. Beim versuch die TIB_Connection zu öffnen bekomme ich eine Fehlermeldung: "Zugriffsverletzung bei Adresse 10013621 in Modul 'fbclient.dll'. Schreiben von Adresse 00000054" ich habe auch die richtige fbclient.dll in das Programmverzeichnis kopiert, doch ohne Erfolg. Ist da etwas spezielles zu tun wenn es sich um ein Service handelt? Alles andere funktioniert einwandfrei. Kann es sein dass ein Dienst nicht auf eine Firebird Installation auf einem anderen Rechner zugreifen kann? Gruß Kostas |
AW: Firebird über NTService (Dienst) zugreifen funkt nicht
Du musst dem Konto unter dem der Dienst läuft Netzwerkzugriff einräumen oder den dafür definierten Benutzer NT AUTHORITY\NetworkService verwenden.
|
AW: Firebird über NTService (Dienst) zugreifen funkt nicht
Hallo Union,
danke für die Blitz Antwort. Ich starte den Dienst über mein eingelogten user (Admin Rechte) Was genau müsste ich bitte machen? Etwa dem Dienst unter Anmeldung die Gruppe "NETZWERKDIENST" zuordnen? das habe ich soeben versucht. Der Dienst int nun angemeldet als Netzwerkdienst, funktioniert jedoch auch nicht. Die gleiche Fehlermeldung. Gruß Kostas |
AW: Firebird über NTService (Dienst) zugreifen funkt nicht
Funktioniert es denn mit dem Service als Standalone exe? Kannst Du auf den Rechner und die DB auf anderem Wege zugreifen?
|
AW: Firebird über NTService (Dienst) zugreifen funkt nicht
Ich habe die Applikation zuerst als normale Windows VCL-Anwendung erstellt, wobei das main Form leer ist.
Alle Elemente befinden sich auf ein Datamodul. Die Anwendung funktioniert einwandfrei. Danach habe ich ein parallel Projekt angelegt und alles aus dem Datamodul in ein NTServiceModul gepackt. Ich verwende übrigens die Komponenten SvCom( bin noch im Test damit) für die Umsetzung als Dienst. Mir ist nicht bekannt ob es möglich ist den Dienst als normale Anwendung zu starten. Jetzt wird es vermutlich schwierig oder? Gruß Kostas |
AW: Firebird über NTService (Dienst) zugreifen funkt nicht
Du kannst das in der dpr programmieren:
Delphi-Quellcode:
begin
if ParamStr(1) = '/EXE' then begin // Das musst Du hinzufügen mit einem entsprechenden Formular aus dem Du die Aktionen aufrufst wie im Service (normalerweise in ServiceExecute. Am besten ServiceExecute besteht nur aus einer Zeile...) Forms.Application.Initialize; Forms.Application.CreateForm(TfrmDeinFormular, frmDeinFormular); Forms.Application.Run; end else begin // Das hier ist der automatisch erzeugte Block einer Dienstanwendung SvcMgr.Application.Initialize; SvcMgr.Application.CreateForm(TSrvDeinService, SrvDeinService); SvcMgr.Application.Run; end; end. |
AW: Firebird über NTService (Dienst) zugreifen funkt nicht
ah, jetzt verstehe ich das. Die SvCom Komponenten haben das per Default drin.
Ich werde das mal gleich morgen ausprobieren. Ich habe jetzt leider noch einen Termin. Herzlichen Dank und ich melde mich morgen damit. Dir noch eine schöne Zeit. |
AW: Firebird über NTService (Dienst) zugreifen funkt nicht
Ja, dann musst Du das entsprechend austauschen:
Delphi-Quellcode:
begin
if SvComfindCommand('EXE') then begin Forms.Application.Initialize; Forms.Application.CreateForm(TfrmDeinFormular, frmDeinFormular); Forms.Application.Run; end else begin SvCom_NTService.Application.Initialize; SvCom_NTService.Application.CreateForm(TSrvDeinService, SrvDeinService); SvCom_NTService.Application.Run; end; end. |
AW: Firebird über NTService (Dienst) zugreifen funkt nicht
Kostas,
zusätzlich zu den Delphi-Empfehlungen ist es auch ratsam einen TCP/IP Connect-String zur Firebird Datenbank in einer Service Anwendung zu verwenden. |
AW: Firebird über NTService (Dienst) zugreifen funkt nicht
Hallo Zusammen,
hallo Thomas, schon lange nicht mehr voneinander gehört. Ich hoffe es geht dir soweit gut. Ich habe den Dienst nun als Standalone Exe laufen lassen und es funkt alles einwandfrei. Auch ein Neustart hat nicht gebraucht. Den User "NT AUTHORITY" habe ich auf mein Win7 Ultimate 64Bit nicht. Dafür konnte ich jedoch den Dienst-Anmeldung-DiesesKonto= "NETZWERKDIENST" mit dem Admin Passwort angeben. Für IBO habe ich der TIB_Connection wie immer: cn1.Server := Computername/3050 cn1.Protocol := 'cpTCP_IP' cn1.Path := 'F:\Real path zur Datenbank\Datenbank.FDB' Damit funktioniert der Dienst als Standalone Exe einwandfrei. Nur der Dienst macht Zicken mit der Fehlermeldung Zugriffsverletzung bei Adresse 10013621 in Modul 'fbclient.dll'. Schreiben von Adresse 00000054 Wie gesagt, die richtige fbclient.dll habe ich auch im Exe Verzeichnis kopiert. Übrigens, die Entwicklungsmaschine ist vistualisiert mit VMWare Workstation 9.0.2 Delphi XE2 und der Dienst laufen auf der vistualisierten Maschine Win7 Ultimate 64Bit. Firebird läuft nur auf der Host-Maschine in zwei Instanzen FB1.5 Port 3050 und FB2.5 Port 3025. Das LW F: ist eine Netzlaufwerk auf der Host-Maschine, ebenfalls Win7 Ultimate 64Bit. LW F: ist auch freigegeben für "Jeder" und zusätzlich jetzt auch für "NETZWERKDIENST". Hat leider auch nicht funktioniert. Hat jemand noch eine Idee? |
AW: Firebird über NTService (Dienst) zugreifen funkt nicht
Das ist ja kein TCP Connectstring. Woher soll denn der Dienst bitte das Laufwerk F: kennen? also entweder <Server>:<lokaler Serverpfad> oder <Ip-Adresse>:<lokaler Serverpfad>
|
AW: Firebird über NTService (Dienst) zugreifen funkt nicht
Zitat:
|
AW: Firebird über NTService (Dienst) zugreifen funkt nicht
Zitat:
Sie sollte nur lokal erreichbar sein, und auch nicht in einem freigegebenen Ordner liegen. |
AW: Firebird über NTService (Dienst) zugreifen funkt nicht
Der Pfad muss aus Sicht des Servers aufgebaut sein. Eine direkter Zugriff auf die Datenbankdatei vom Client aus ist aus Sicherheitsgründen zu unterbinden.
|
AW: Firebird über NTService (Dienst) zugreifen funkt nicht
Hallo!
Ich habe mir (aus leidvoller Erfahrung) angewöhnt, grundsätzlich über einen Alias auf die Datenbank zuzugreifen. Außerdem sollte man bedenken, dass ein Dienst keine Freigaben und auch keine Laufwerksbuchstaben kennt (imho) |
AW: Firebird über NTService (Dienst) zugreifen funkt nicht
Hallo Zusammen,
Dankeschön für die zahlreihe Antworten. Ich bin es von IBO gewohnt dass er selbstständig den Path in TCP Konvention anpasst wenn ein Server und das Protokoll 'cpTCP_IP' angegeben ist. Anscheinend ist es bei einem Dienst anders. Wenn der "Dienst" als Standalone Exe läuft, wird der Path angepasst und alles läuft einwandfrei. Jetzt funktioniert auch der Dienst nachdem ich den Path angepasst habe in TCP Konvention, auch über das das Netzwerk einwandfrei. Ich habe die Konstellation nur während der Entwicklungsphase. Der Dienst wird dann schon auf dem Produktiv-Server laufen auf dem FB und die DB installiert sind. Herzlichen Dank an alle und einen schönen Tag. |
AW: Firebird über NTService (Dienst) zugreifen funkt nicht
Sorry dass ich nochmals zurückkomme, ich habe mich vorher geirrt und war zur voreilig mit der Meldung jetzt geht’s. Ich habe nur schnell auf die lange Fehlerzeile im Log geschaut. Weil sie nicht mehr da war, war ich der Meinung jetzt geht’s. Aber das war nur eine andere kürzere Fehlermeldung
„Verbindungspfad nicht gültig“ Kurzum, es funktioniert die Verbindung zur FB-Datenbank über den Dienst nicht. Ich übergebe nur noch TIB_Connection1.database := notebook/3050:F:\TC_Projekte\CSV2\Server\Datenbank.FDB Den Dienst habe ich auf der physikalischen Maschine installiert. Der Name meiner Maschine ist notebook, FB1.5 hört auf den Port 3050, der angegebene Pfad ist wirklich vorhanden auf der Partition F: und ist kein Netzlaufwerk. Egal was ich versuche, ich bekomme Zugriffsverletzung bei Adresse 10013621 in Modul 'fbclient.dll'. Schreiben von Adresse 00000054. Starte ich den "Dienst" als Standalone Exe funktioniert die Verbindung einwandfrei. Sorry nohmals für die Irreführung. Gruß Kostas |
AW: Firebird über NTService (Dienst) zugreifen funkt nicht
Die Datei liegt aber immer noch auf einem gemappten Laufwerk. Da der Dienst inen einem anderen Benutzerkontext läuft, kennt dieser dieses Laufwerk nicht!
|
AW: Firebird über NTService (Dienst) zugreifen funkt nicht
Hallo Markus,
Das LW F: ist eine Partition auf der Lokalen Festplatte vom NOTEBOOK. Firebird ist ebenfalls auf NOTEBOOK installiert zufällig auch auf der Partition F:. Der Dienst wurde auf NOTEBOOK installiert und gestartet. Ich habe es mit Server=localhost/3050 und mit NOTEBOOK/3050 ausprobiert. Die Eigenschaft Database habe ich auch direkt zugewiesen mit notebook/3050:F:\TC_Projekte\CSV2\Server\Datenbank.FDB und auch localhost/3050:F:\TC_Projekte\CSV2\Server\Datenbank.FDB. Ich habe auch den Dienst von FB2.5 (Port 3025) gestoppt. Es bringt alles nichts. Grundsätzlich würde mich interessieren ob jemand aus dem Forum über einen Dienst auf eine Firebird 1.5 Dialekt 1 Datenbank zugegriffen hat. Die gleiche Anwendung mit den gleichen Einstellungen über notebook/3050:F:\TC_Projekte\CSV2\Server\Datenbank.FDB als Standalone Exe funktioniert einwandfrei. Gruß Kostas |
AW: Firebird über NTService (Dienst) zugreifen funkt nicht
Ist die Port-Angabe so richtig ('laptop/3050')?
Sollte es nicht 'laptop:3050' heißen? |
AW: Firebird über NTService (Dienst) zugreifen funkt nicht
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,
ich habe mit Bordmitteln von Delphi XE2 eine Testanwendung erzeugt die nur die Verbindung zur Datenbank über IBO 5.2.0.6 öffnet und wieder schießt. Der Dienst wird danach gleich beendet. Der Dienst wird auf der physikalischen Maschine installiert auf den lokal auf Firebird und die Dantebank installiert ist. Dennoch bekomme ich die Fehlermeldung "Zugriffsverletzung bei Adresse 100229DB in Modul 'fbclient.dll'. Schreiben von Adresse 00000054" Kann mir bitte jemand sagen was ich da falsch mache. Dankeschön Kostas |
AW: Firebird über NTService (Dienst) zugreifen funkt nicht
Dein Parameterstring scheint falsch zu sein.
Code:
Wird wohl nicht gehen. Evtl. so:
SERVER=notebook/3050
Code:
SERVER=notebook
PORT=3050 |
AW: Firebird über NTService (Dienst) zugreifen funkt nicht
bei den IBO-Komponenten, zumindest bei meiner Version, gibt es keine Eigenschaft "Port"
Den Port kann ich auch komplett weglassen da die Defaulinstanz von Firebird eh auf 3050 hört. Ich habe alle Varianten bereits ausprobiert. Es scheint nicht am Connectionstring zu liegen. Irgend eine Kleinigkeit übersehe ich permanent und komme einfach nicht drauf. Das ist mein erster Versuch auf eine Firebird 1.5 Datenbank über einen Dienst zuzugreifen. Deshalb weis ich überhaupt nicht ob das generell geht. Gruß Kostas |
AW: Firebird über NTService (Dienst) zugreifen funkt nicht
Hi,
Port gibt es bei IBO nicht. Angabe Server ist so korrekt. Ich würde dennoch versuchen, notebook durch die IP-Adresse zu ersetzen. Dann würde ich noch sichergehen, dass die richtige fbclient.dll verwendet wird. Bei neueren Versionen mit der Fuktion IB_GetClientLibNameFunc: In die DPR IB_Session (vor allen nicht zu Delphi gehörigen Units) unter uses und dann:
Delphi-Quellcode:
Frank
...
function GetFBClientLibName: string; begin Result := ExtractFilePath(Application.ExeName) + 'fbclient.dll'; end; begin IB_GetClientLibNameFunc := GetFBClientLibName; if not Application.DelayInitialize or Application.Installing then Application.Initialize; Application.CreateForm(TService1, Service1); Application.Run; end. [EDIT] Bei den Samples ist bei IBO eine NTServiceApp dabei. Da wird das Service App Framework (IBS_BASE) verwendet. Hab das nie gebraucht, aber vielleicht findest du ja dort einen Ansatz.^ Möglicherweise musst du auch den Dienst so konfigurieren, dass Datenaustausch mit Desktop aktiv ist. [/EDIT] |
AW: Firebird über NTService (Dienst) zugreifen funkt nicht
Hallo Frank,
ich habe soeben das Testprojekt umgestellt auf das IBS_Base Framework indem ich einen neuen TService abgeleitet habe von IBS_Base. Es hat sofort funktioniert. Es funktioniert auch wenn der Service auf der VMWare virtuellen Enwicklungsmaschine Win7 Ultimate 64Bit installiert ist auf dem kein Firebird installiert ist, und der Zugriff über das Netzwerk auf die Host Maschine (Laptop) auf dem Firebird und die Datenbank sich befinden. Du schreibst, du hast dieses Framework nie gebraucht. Wenn ich dich richtig verstehe, hast du bereits ein Dienst geschrieben welcher auf einer Firebirddatenbank zugreifen kann mit den Delphi Bordmitteln ohne das IBS_Base Framework zu nutzen. Ist das so? Ich frage deshalb weil ich eigentlich die Komponente SvCom für Dienste nutzen möchte. SvCom hat für TService ebenfalls eine eigene Abhandlung. Ich müsste also versuchen beide TService Abhandlungen zusammen zu setzen. Das wird nicht so einfach sein schätze ich. Aber wenn du es geschafft hast, würde es ja bedeuten dass es grundsätzlich geht. Gruß Kostas |
AW: Firebird über NTService (Dienst) zugreifen funkt nicht
Hallo zusammen,
jetzt funktionierts nachdem ich den entscheidenden Hinweis über YahooGroups zufällig gelesen habe. Es muss NUR eine TIB_Session Komponente auf die TService Form und alles ist gut. Die Komponente TIB_Connection hat ja eine integrierte TIB_Session das ist die Default session. Für Dienste darf die nicht verwendet werden. Also die TIB_Connection mit der TIB_Session verheiraten und schon funkts. Ist doch wie Weihnachten. Gruß Kostas |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz