![]() |
mit Webservice Programme starten ?
Hallo ..
folgendes Problem ich hab mir ein Webservice geschrieben .. mit so einigen Functionen die ich auch schon nutze und auch vom Client aus funktionieren .. Nun war meine Überlegung .. ob ich nicht für bestimmte Dinge auch mein Webservice benuzen kann.. und wollte wenn ich über eine Bestimmte Function mit übergebenen Passwort und Programm dieses Starten lassen könnte .. .. habs schon mit Shellexecute ( also executefile und Fmxutils )
Code:
calc ist natürlich nur als Beispiel :)
Executefile('calc.exe', '', '\', SW_NORMAL);
probiert. aber es macht einfach nix ?.. debuggen ist ja etwas schwierig ^^ oder geht das evtl gar nicht ? und man kann keine programme ausführen lassen .. jemand eine Idee ? |
AW: Webservis Programme starten ?
Benötigt ein Webservice nicht einen Webserver, in dessen Kontext auf Clientanfragen reagiert wird?
|
AW: Webservis Programme starten ?
ja der läuft ja auch .. sonst geht ja alles nicht
wie gesagt die anderen Fuktionen die ich in den Service drinnen hab (verändern einiger Dateien auf den Rechner oder löschen geht ja auch) nur eben das Programm aufrufen nicht .. er startet es eben nicht .. ? ..? also drinnen ist Function die 2 Strings übergeben bekommt.. ein String mit Programm und 2. String für Passwort wenn Passwort das richtige ist startet er das Programm so der Gedanke .. Fuktion kommt auch bei Webserver an denn als result bekomm ich das ok (was ich in der Funktion übergebe) .. aber er macht eben den Shellexecute nicht |
AW: Webservis Programme starten ?
achso als Hinweis ... es handelt sich um ein Cgi-bin webservice .. fals es unterschiede gibt
|
AW: Webservis Programme starten ?
Theoretisch müsstest Du an das CGI den Parameterstring senden, wie es auch der Server tut, z.b. MeinService.exe &Service=WitzDesTages&Type=LongString.
Das CGI schreibt es dann in stdout. |
AW: Webservis Programme starten ?
ja ..
also mal hier mein webservice mit nur der einen Function
Code:
und der Teil beim Client
{ Invokable-Implementierungsdatei für TRico_PC_service das IRico_PC_service implementiert }
unit Rico_PC_serviceImpl; interface uses FmxUtils, Windows, Classes, Consts, InvokeRegistry, Types, XSBuiltIns, Rico_PC_ServiceIntf; type { TRico_PC_service } TRico_PC_service = class(TInvokableClass, IRico_PC_service) public function Startwenn_ok(const WAS, PW : String): String; stdcall; end; implementation uses Forms, RtlConsts; function TRico_PC_service.Startwenn_ok(const WAS, PW : String): String; stdcall; begin if (PW='ganzgeheim') then Begin Executefile(WAS, '', '\', SW_NORMAL); result := 'OK :) '+WAS+ 'wurde gestartet !' ; end; end;
Code:
als Antwort bei Client kommt an : "OK :) calc.exe wurde gestartet !"
procedure TForm1.Button1Click(Sender: TObject);
var ws: IRico_PC_Service1; begin WS:=GetIRico_PC_Service1(true); Label1.Caption:=ws.Startwenn_ok('calc.exe','ganzgeheim'); end; aber es wurde dort nichts gestartet .. und calc.exe ist vorhanden und von überall aus aufrufbar.. |
AW: Webservis Programme starten ?
Bitte korrigiere mal den Rechtsschreibfehler im Beitragstitel.
|
AW: Webservis Programme starten ?
Mit ein bisschen Fehlerbehandlung, Auswertung der Rückgabewerte etc. solltest Du doch ausreichend Informationen bekommen, um dem Problem auf den Grund zu gehen :)
|
AW: Webservis Programme starten ?
Zitat:
aber wie ändere ich das ?? finde nirgens die Möglichkeit ?? (habs gefunden erledigt ..) @CCRDude ich bekomm ja das Result aber dort passiert eben nichts .. und wie soll ich das denn anders testen ? habe ja keine Fehlermeldung ?! Hatte gedacht es weiß jemand das es so nicht funktionieren kann oder eben anders und es mir vill verrät wie :wink: |
AW: mit Webservice Programme starten ?
@CCRDude
hab mir mal den Rückgabewert direkt rüber geben lassen .. es kommt Rückgabewert 42 an ? .. Normal ist das ja kein Fehler .. ?? jemand noch eine Idee oder Erfahrungen ? |
AW: mit Webservice Programme starten ?
Irgendwas gibt also 42 zurück und Du hast ja Result?
Ich kenne den Rückgabetyp von ExecuteFile nicht (und meine Delphi-Hilfe spinnt), meinst Du den? Hast Du schonmal in die Prozessliste geschaut, ob der Prozess nicht vielleicht doch läuft? Ich kenne mich mit CGI nicht aus, aber wenn es um einen Webserver geht, läuft der doch bestimmt als Service und ist somit interaktionslos... d.h. alles was Du von dort aus startest, wäre "unsichtbar" und mit viel zu viel Rechten. Dann müsstest Du Dir ein Token des angemeldeten Users holen und den passenden Prozess damit starten. |
AW: mit Webservice Programme starten ?
[OT] Wobei 42 ja die
![]() |
AW: mit Webservice Programme starten ?
Zitat:
soweit ich es verstanden hab sind Fehler unter 32 also 2 File not found z.B oder so Zitat:
Zitat:
aber wie geb ich das dann mit ? |
AW: mit Webservice Programme starten ?
Zitat:
is da was wahres dran ? .. naja will mich aber nicht zu sehr jetzt wieder ablenken ^^ |
AW: mit Webservice Programme starten ?
In
![]() |
AW: mit Webservice Programme starten ?
aha ja gut, das muss ich mir mal genau an schauen
ist ja doch auch etwas verzweigt .. Habe mir erstmal das Beispiel geholt .. jetzt muss ich das mal in den Webservice einbauen und testen .. geb Bescheid wenn es geholfen hat danke soweit erstmal DeddyH evtl ist das der Weg .. |
AW: mit Webservice Programme starten ?
hab es noch nicht getestet ..
werde mich jetzt aber mal daran setzen obwohl ich gerade von einer kleinen Feier komme .. :drunken: aber ich denke das dies der richtige Weg ist .. habe mir unterwegs mal so überlegt .. unter welchen Benutzer soll er denn jetzt sonst das Programm auch starten ? jetzt hat er sicher ein Problem damit .. wird zwar etwas kompliziert wie es scheint aber ich denke ich schaff es in den Webservice das ein zu bauen .. danke schon mal für den Denkanstoß |
AW: mit Webservice Programme starten ?
Was steht in WAS und wie ist ExecuteFile implementiert?
|
AW: mit Webservice Programme starten ?
so .. hab es getestet..
funktioniert leider auch nicht .. hab mir den msgbox Inhalt als Result an Client schicken lassen .. und .. Fehler code 5 ... bin mir aber mit Benutzer und PW ganz sicher soweit ich es nach gelesen hab : Const SE_ERR_ACCESSDENIED = 5 'The operating system denied access to the specified file. ' habe gleichen Source in Form gebaut und mit Buttonclick ausgeführt da funktioniert es. muss doch noch irgendwie vom Webservice abgefangen werden, das keine Prozesse gestartet werden können ? weiß jemand ob man das bei xampp irgendwie, irgendwo einstellen kann ?? |
AW: mit Webservice Programme starten ?
Es sieht so aus, als wenn dem Webservice die nötigen Rechte fehlen. Aber wie stellst du dir das vor. Der Webservice läuft doch auf einem Server. Und von dort sollte er keine Rechte haben lokal ein Programm bei dir zu starten.
|
AW: mit Webservice Programme starten ?
Nein ..
Webserver ist bei mir(hier) zu Hause.. ich möchte von Arbeit aus .. (oder unterwegs .. mit Lappi) per webservice die Möglichkeit mir schaffen das ich auf mein Rechner (hier zu Hause) ein Programm starten kann.. wenn ich hier wär könnte ich es anklickern ^^ weißt Du wie ich meine ? |
AW: mit Webservice Programme starten ?
Na ja, der Webserver wird wohl nicht die nötigen Rechte haben das Programm zu starten. Und es spielt keine Rolle, ob er auf dem Rechner installiert auf dem er auch das Programm starten soll. Es wäre wohl auch eine ziemliche Sicherheitslücke, wenn das so einfach ginge.
|
AW: mit Webservice Programme starten ?
Sicherheitslücke ? denke ich nicht ..
man kann ja nicht von außen ihn einfach installieren .. das muss man ja selber mit seinen gewünschten Funktionen tun... Und von den was man tut sollte man schon Wissen was man tut :) schade .. ich dachte ich könnte es irgendwie mit einbauen .. muss ich wohl doch Teamviewer die ganze Zeit an lassen :( oder hat jemand ein Tipp .. irgendeine Einstellung im xampp das ? das ich Prozesse ausführen darf ? oder so .. |
AW: mit Webservice Programme starten ?
Man kann (sollte aber nicht) natürlich dem Webserver Dienst (Apache) höhere Rechte verschaffen indem man ihm einen anderen Account zuweist. Dazu einfach unter Systemsteuerung Dienste den Dienst finden und ein anderes Benutzerkonto zuweisen.
Man kann aber auch aus dem Webserver (der ohne erhöhte Rechte läuft) heraus beim Eintreffen eines authorisierten HTTP Requests eine lokale Nachricht an einen anderen Prozess senden - über HTTP, UDP oder andere Techniken die man in der Web App zur Verfügung hat - der mit erhöhten Rechten läuft. D.h. man stellt nach aussen keine Rechte bereit und es gibt eine sehr begrenzte Schnittstelle, über die man andere Prozesse starten kann. Im WWW ist das gängige Praxis, man denke an Bildverarbeitungsdienstleister, die ein hochgeladenes Bild- oder Textdokument konvertieren oder sonstwie weiterverarbeiten und dazu ein lokales, oder auf einem anderen Intranetserver liegendes Programm starten müssen. |
AW: mit Webservice Programme starten ?
Die alleinige Rechtezuweißung des Dienstes hat aber scheinbar nichts damit zu tun..
bei mir laüft er auch unter Administrator (wie beschrieben bei Diensten) ohne dessen Rechte startet er bei mir nicht oder zumindest nur mit extra Klick Bestätigung) Ein anderes Programm dann schreiben was dann die Infos bekommt geht schon, ich hatte nur gedacht warum über LOS gehen, wenn man den kürzesten Weg gehen kann. Ich dachte, da man ja auch mit php diese Dinge machen kann .. also sprich mit " system({Programm}) " warum sollte man nicht auch im Webservice so etwas verpacken können.. Zudem man dann mit dem Client Programm was mit dem Webservice kommuniziert viele Möglichkeiten hat das so zu verbauen das andere da wirklich im Gegenzug zu WEB (php/html) nichts rausbekommen und machen könnten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:35 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-2025 by Thomas Breitkreuz