Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Daten lesen und schreiben aus einer ISAPI-Dll (https://www.delphipraxis.net/211165-daten-lesen-und-schreiben-aus-einer-isapi-dll.html)

charly52 5. Aug 2022 18:14

Daten lesen und schreiben aus einer ISAPI-Dll
 
Hi all,

ich habe das Beispiel aus dem video von Danny Wind zum SummerCamp 2021 nachgebaut.
Läuft auch problemlos auf einem 2 ten Rechner mit Win10 und aktiviertem IIS.

Jetzt meine Frage

Kann ich aus der DLL heraus Daten von der Platte lesen / schreiben?

Unter was für einem Benutzer läuft der ISS? Ist doch ein Service, oder nicht?
Wegen eventueller Rechte.

Ich möchte eigentlich nur mit nem writeln(logfile,'ein logeintrag') etwas auf die Platte schreiben.

Habe dazu im WebModuleCreate ein

Delphi-Quellcode:
  Assignfile (msgLogFile, 'MsgFile.Log');
  REWRITE (msgLogFile);
  writeln(msgLogFile, 'Formular TWebModule1 wurde gerade created')
eingebaut. Dann steht der Server scheinbar und ich bekomme im RestDebugger von meinem Entwicklungsrechner aus nur ein Pling.

Bei einem lokalen Aufruf direkt auf dem 2ten Rechner bekomme ich

Diese Seite funktioniert im Moment nicht.localhost hat eine ungültige Antwort gesendet.
ERR_INVALID_HTTP_RESPONSE

Was mach ich falsch?

Charly

Redeemer 5. Aug 2022 18:22

AW: Daten lesen und schreiben aus einer ISAPI-Dll
 
Dienste können mit unterschiedlichen Rechten laufen. Schau doch mal nach, es steht ja da: Es gibt lokale Dienste, Netzwerkdienste und lokales System. Da du keinen Ordner angegeben hast, kann es gut sein, dass das Ding irgendwo in den Programmdateien von sich selbst oder IIS schreiben möchte, wo es durchaus Sinn ergibt, wenn ein lokaler oder Netzwerkdienst das nicht darf. Gib also einen Ordner an, wo der Dienst schreiben darf. Kann man ja auch sehen.

himitsu 5. Aug 2022 18:43

AW: Daten lesen und schreiben aus einer ISAPI-Dll
 
Zitat:

Delphi-Quellcode:
 Assignfile (msgLogFile, 'MsgFile.Log');

Wer mit relativen Pfaden arbeitet, der hat es nicht anders verdient, wenn sein Progamm ihm in den Kopf schießt.



Zitat:

Welcher Nutzer
Wenn es ein Service ist, dann schau doch mal in die Diensteverwaltung ... dort steht das ja. :stupid:

Rolf Frei 5. Aug 2022 18:44

AW: Daten lesen und schreiben aus einer ISAPI-Dll
 
Der Benutzer (Gruppe) heisst IIS_IUSRS. Zumindest für eine Delphi CGI-Exe wird dieser verwendet. Kann sein dass für eine ISAPI-DLL eventuell ein anderer genutzt wird (IIS_WBG / IUSR). Am Dienst darfst und sollst du nichts ändern (!), das läuft da alles wie es sein soll. Du musst nur dem IUser bei deinem Verzeichnis die richtigen Schreibrechte geben (auf NTFS ACL-Ebene) und dann sollte es problemlos gehen. Ich nehme ja mal an, dass du Grundkonfiguration (Handler, AppPool, etc) des IIS bereits angepasst hast, damit du ISAPI/CGI überhaupt nutzen kannst, ansonsten würde du einen anderen Fehler bekommen.

Ich würde dir aber empfehlen besser eine CGI-EXE zu machen, da diese viel einfacher administrierbar ist, da du so einfach die neue Exe ersetzen kannst, ohne den IIS zu Stoppen oder sonst was damit zu machen. Bei einer ISAPI DLL ist das deutlich mühsamer, da du dann den IIS Stoppen oder zumindest die alte Version entladen musst. Da ist nur unnötiger Aufwand und bringt nicht wirklich einen Vorteil, weil auch eine CGI-Exe im Cache des IIS beibt und daher praktisch genauso schnell ist wie eine ISAPI-DLL. Ich habe da mal Tests gemacht und da kaum einen Unterschied festgestellt. Einzig das erste Aufruf nach einem Neuboot, oder längerer Pause, kann etwas länger dauern, aber wie reden hier von ein paar ms.

Auf was du noch achten musst, ist dass du keine Routinen aufrufst, die eine MessageBox oder andeer Interaktion verlangen. Damit hängt sich deine Webapplikation auf und du wirst irgendwann einen Fehler bekommen.

@charly52 @himitsu @redeemer
Nein das hat mit dem Dienst nchts zu tun. Der IIS Dienst läuft als lokaler System Dienst. Die Benutzerverwaltung hat damit überhaupt nichts zu tun. Der IIS ist wesentlich komplexer als nur ein einfacher Dienst. Der User wird im IIS definiert, respektive eben als Default der sehr eingeschränkter anonyme User IIS_IUSR verwendet. Da muss er nichts daran ändern, sonst eröffnet er nur mögliche Sicherheitslöcher.

himitsu 5. Aug 2022 20:51

AW: Daten lesen und schreiben aus einer ISAPI-Dll
 
Wenn es ein Dienst ist, dann ist bei ihm angegeben, in welchem Account er von Windows gestartet wird.

Aber ja, wenn dieser Dienst dann wiederrum etwas in einem anderen Account startet, dann kann die DLL auch wo anders laufen.



per se ist es eh keine gute Idee einen Webservice mit Systemrechten laufen zu lassen .... falls da mal was schief läuft und jemand sich rein hackt, dann hätte er*innen alle nötigen Rechte für sonstwas Nettes. :duck:

charly52 6. Aug 2022 08:59

AW: Daten lesen und schreiben aus einer ISAPI-Dll
 
Erst mal Danke an alle
Ich werde mal weiter testen

Charly

Rolf Frei 6. Aug 2022 13:41

AW: Daten lesen und schreiben aus einer ISAPI-Dll
 
Zitat:

Zitat von himitsu (Beitrag 1509827)
Wenn es ein Dienst ist, dann ist bei ihm angegeben, in welchem Account er von Windows gestartet wird.

Aber ja, wenn dieser Dienst dann wiederrum etwas in einem anderen Account startet, dann kann die DLL auch wo anders laufen.



per se ist es eh keine gute Idee einen Webservice mit Systemrechten laufen zu lassen .... falls da mal was schief läuft und jemand sich rein hackt, dann hätte er*innen alle nötigen Rechte für sonstwas Nettes. :duck:

Er redet von IIS Dienst (WWW-Publishingdienst) und nicht von einem eigenen Dienst. Der Dienst läuft als lokales Systemkonto. Dateizugriffe, etc. aus IIS Prozessen (ISAPI,CGI,ASP, etc.) laufen nicht unter diesem Account, sondern wie erwähnt unter dem sehr eingeschrenkten anonymen IIS_IUSRS / IUSR Account, der auserhalb des IIS keine Zugriffsrechte auf irgendwas im Fielesystem hat. Einzig auf dem IIS Webroot mit den IIS-Websites, hat er Lesezugriff. Wenn man irgendwo was mit einer ISPA oder CGI-EXE reinschirebn will, muss man da beim entsprechenden Ordner NTFS Schreib- und ev. Löschrechte für den User IUSR geben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz