Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi mit Webservice Programme starten ? (https://www.delphipraxis.net/163686-mit-webservice-programme-starten.html)

Gege 11. Okt 2011 14:53


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:
Executefile('calc.exe', '', '\', SW_NORMAL);
calc ist natürlich nur als Beispiel :)

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 ?

Union 11. Okt 2011 14:55

AW: Webservis Programme starten ?
 
Benötigt ein Webservice nicht einen Webserver, in dessen Kontext auf Clientanfragen reagiert wird?

Gege 11. Okt 2011 15:03

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

Gege 11. Okt 2011 15:05

AW: Webservis Programme starten ?
 
achso als Hinweis ... es handelt sich um ein Cgi-bin webservice .. fals es unterschiede gibt

Union 11. Okt 2011 15:12

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.

Gege 11. Okt 2011 15:23

AW: Webservis Programme starten ?
 
ja ..

also mal hier mein webservice mit nur der einen Function

Code:
{ 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;
und der Teil beim Client

Code:
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;
als Antwort bei Client kommt an : "OK :) calc.exe wurde gestartet !"
aber es wurde dort nichts gestartet .. und calc.exe ist vorhanden und von überall aus aufrufbar..

Luckie 11. Okt 2011 16:57

AW: Webservis Programme starten ?
 
Bitte korrigiere mal den Rechtsschreibfehler im Beitragstitel.

CCRDude 11. Okt 2011 17:10

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 :)

Gege 11. Okt 2011 18:22

AW: Webservis Programme starten ?
 
Zitat:

Zitat von Luckie (Beitrag 1129858)
Bitte korrigiere mal den Rechtsschreibfehler im Beitragstitel.

:shock: na eben .. sorry
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:

Gege 12. Okt 2011 13:18

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 ?

CCRDude 12. Okt 2011 13:29

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.

DeddyH 12. Okt 2011 14:16

AW: mit Webservice Programme starten ?
 
[OT] Wobei 42 ja die ultimative Antwort ist :lol: [/OT]

Gege 12. Okt 2011 14:28

AW: mit Webservice Programme starten ?
 
Zitat:

Zitat von CCRDude (Beitrag 1130012)
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?

ja ich hab sozusagen Result:=shellexecute(... bla..bla bla);
soweit ich es verstanden hab sind Fehler unter 32 also 2 File not found z.B oder so

Zitat:

Zitat von CCRDude (Beitrag 1130012)
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.

ich vermute das es so irgendwie zusammen hängt .. Prozess läuft nicht zumindest seh ich es nirgens..
Zitat:

Zitat von CCRDude (Beitrag 1130012)
Dann müsstest Du Dir ein Token des angemeldeten Users holen und den passenden Prozess damit starten.

wär interresannt .. und wie ? :gruebel: ich mein ich weiß ja wer angemeldet ist (ich :) )
aber wie geb ich das dann mit ?

Gege 12. Okt 2011 14:32

AW: mit Webservice Programme starten ?
 
Zitat:

Zitat von DeddyH (Beitrag 1130026)
[OT] Wobei 42 ja die ultimative Antwort ist :lol: [/OT]

ehm... :gruebel: schickt Shellexecute 42 weil es sonst nix zu melden hat ? oder nix weiß
is da was wahres dran ?
.. naja will mich aber nicht zu sehr jetzt wieder ablenken ^^

DeddyH 12. Okt 2011 14:32

AW: mit Webservice Programme starten ?
 
In diesem Thread gibt es einen interessanten Code, versuch es doch mal damit.

Gege 12. Okt 2011 15:34

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 ..

Gege 12. Okt 2011 20:49

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ß

Luckie 12. Okt 2011 21:57

AW: mit Webservice Programme starten ?
 
Was steht in WAS und wie ist ExecuteFile implementiert?

Gege 12. Okt 2011 22:00

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 ??

Luckie 12. Okt 2011 22:36

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.

Gege 12. Okt 2011 23:18

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 ?

Luckie 12. Okt 2011 23:33

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.

Gege 13. Okt 2011 07:21

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 ..

mjustin 13. Okt 2011 10:21

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.

Gege 13. Okt 2011 12:11

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