Möchte externes Programm starten

Alles, was PHP betrifft, kann hier besprochen werden.

Möchte externes Programm starten

Postby Brainscanner » 16. August 2004 17:06

Hallo,

ich möchte mit einem PHP Skript auf dem Webserver-Rechner ein Programm starten können. Leider klappt das nicht ganz. Eigene Skripts funktionieren nicht, genauso wie eines von der php Seite über den Befehl "exec":
Code: Select all
<?php

//start MSPaint maximized and wait for you to close it before continuing the script:
$WshShell = new COM("WScript.Shell");
$oExec = $WshShell->Run("mspaint.exe", 3, true);

?>

Ich lade das Skript mit einem Browser, aber es tut sich nichts. Der Browser tut als würde er ewig auf die Antwort des Webservers warten. In dem Verzeichnis, in dem das Script gestartet wird, ist kein Safemode oder sonstige Einschränken aktiv. Wenn mir jemand nochmal auf die Sprünge hilft, wie der Befehl geht, mit dem man Informationen über die aktuelle Php Konfiguration anzeigen lassen kann, kann ich das auch beweisen.

Das ganze läuft auf einem Windows 2000 Server...
Code: Select all
Apache/2.0.49 (Win32) mod_ssl/2.0.49 OpenSSL/0.9.7d PHP/4.3.6 mod_autoindex/color Server at server Port 80

Wär schön, wenn mir jemand helfen könnte. Das Austausch zwischen Desktop und Dienst, den man in den Diensteinstellungen für den Apache unter Windows einstellen kann, hab ich auch aktiviert. Windows sollte von dieser Anwendung also Befehle annehmen.
Brainscanner
 
Posts: 45
Joined: 07. March 2004 23:42
Location: Baden-Württemberg

Postby Wiedmann » 16. August 2004 18:10

Das Austausch zwischen Desktop und Dienst, den man in den Diensteinstellungen für den Apache unter Windows einstellen kann, hab ich auch aktiviert.

Hast du den Dienst "Apache2" danach auch neu gestartet?

Ich lade das Skript mit einem Browser, aber es tut sich nichts. Der Browser tut als würde er ewig auf die Antwort des Webservers warten.

Das liegt wohl daran, dass "mspaint.exe" läuft (im Hintergrund), und das Script jetzt auf das Beenden von diesem Programm wartet (Parameter "true") bis es weitermachen kann.

Das "mspaint.exe" läuft, kannst du mit dem Taskmanager oder tlist.exe (wenn vorhanden) überprüfen.
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Brainscanner » 16. August 2004 21:10

Hi,

Du hattest mit beiden Recht. Nach dem Neustart vom Apache gings, und das Skript lief ihm Browser so lange bis das Programm wieder geschlossen wurde.
Kann man das Skript auch so schreiben, daß es sich nicht darum schert, was mit dem Programm später passiert? Also, daß es auch schon nach dem Starten des Programms fertig ist?

Allerdings ist das vielleicht noch weniger wichtig. Denn ich möchte eigentlich gar kein Programm starten, sondern einfach etwas "ausführen". Dabei handelt es sich um einen Downloadlink, der von einem Programm angenommen wird. Wenn ich diesen über "Ausführen" im Windows Startmenü starte, klappt das auch. Aber die DOS Box kommt damit nicht klar und sagt mir, daß das keine richtige Anwendung sei - ist es ja auch nicht.

Hast Du ne Idee, wie ich das machen könnte? Das einzige, was mir hier einfällt, wäre ein Zusatzprogramm, dem man den Link gibt, und das dann seinerseits den Link "ausführt". Ich such mal danach.

Mal vielen Dank für die beiden Tips!
Brainscanner
 
Posts: 45
Joined: 07. March 2004 23:42
Location: Baden-Württemberg

Postby Wiedmann » 16. August 2004 21:51

Kann man das Skript auch so schreiben, daß es sich nicht darum schert, was mit dem Programm später passiert?

Yep. du kannst die run-Methode ja auch mit "false" anstatt mit "true" aufrufen (da hilft ein Blick in die Doku vom Scripting Host).

Dabei handelt es sich um einen Downloadlink, der von einem Programm angenommen wird.

Von was für einem Programm? Dann starte doch das Programm und übergib den Link als Parameter.

BTW. Wenn der Link ein registriertes Protokoll ist, dann kannst du ihn in der DOS-Box mit dem "start"-Kommando aufrufen. Ob man dazu jetzt aber die COM-Funktionen braucht? Da müsste doch auch exec() langen (evtl. klappt es da aber nicht mit der Hintergrundausführung).

Was ist ein "Zusatzprogramm"? Willst du da was in VB oder C schreiben?
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Brainscanner » 16. August 2004 23:16

Hi,

danke für die Hilfe. Ich hatte es zwischenzeitlich zum Laufen bekommen, aber jetzt streikt es wieder.
Es geht dabei um Emule. Diese Tauschbörse arbeitet mit Links, die mit ed2k:// beginnen.

Das Programm, das die Links annimmt, läuft auf dem Rechner, auf dem auch der Webserver installiert ist. Allerdings sollen diese Links auf einem anderen Rechner geklickt werden. So, jetzt hab ich eine kleine Exe, mit der man Skripts starten kann. Und die übergibt dem Skript auf dem Server auch gleich den Link, welcher ihn dann startet.

Das hatte auch funktioniert. Wirklich! Allerdings streikt er nun, ich hab keine Ahnung, wieso. Es scheint am Skript zu liegen.

Code: Select all
<?php

//$Link="Hallo";

exec("c:\programme\emule\emule.exe \"$Link\"");

print("$Link wurde hinzugefügt.");

?>


Es nimmt keine Parameter mehr an. Wenn ich das Skript so starte:

Code: Select all
http://server/edonkeylinks/Linkcatcher.php?$Link=Hallo


sollte er ja eigentlich zumindest mal "Hallo wurde hinzugefügt" ausgeben, wenn ich das Skript mit einem normalen Browser starte. Tut er aber nicht. Er nimmt keine Parameter mehr an. Wenn ich allerdings die auskommentierte Zeile oben entkommentiere und keinen Parameter angebe, klappt es.

Meine Ansteuerung mit ?$Link= stimmt doch, oder?
Brainscanner
 
Posts: 45
Joined: 07. March 2004 23:42
Location: Baden-Württemberg

Postby Brainscanner » 16. August 2004 23:40

Hab den Fehler gefunden. Bei einer Pfadumstellung des Skripts hat sich in mein Hirn irgendwie die Annahme eingebürgert, daß das $ bei der Ansteuerung mit Parametern dabei sein müßte.

Kannst Du mir das hier nochmal genauer erklären?
Yep. du kannst die run-Methode ja auch mit "false" anstatt mit "true" aufrufen (da hilft ein Blick in die Doku vom Scripting Host).


Wie kann ich das dann angeben? Ich hab in der Anleitung zu dem Befehl jetzt nicht ganz so was gefunden... Sorry, vielleicht bin ich auch einfach nur zu blöd.
Brainscanner
 
Posts: 45
Joined: 07. March 2004 23:42
Location: Baden-Württemberg

Postby Wiedmann » 17. August 2004 00:06

$oExec = $WshShell->Run("mspaint.exe", 3, true);


Run-Methode
Führt ein Programm in einem neuen Prozess aus:
object.Run(strCommand, [intWindowStyle], [bWaitOnReturn])

bWaitOnReturn
Optional. Boolescher Wert, der angibt, ob das Skript auf die Beendigung der Programmausführung warten soll, bevor mit der nächsten Anweisung im Skript fortgefahren wird. Falls dieses Argument auf true festgelegt ist, wird die Skriptausführung angehalten, bis das Programm beendet ist, und Run gibt den vom Programm zurückgegebenen Fehlercode zurück. Falls dieses Argument auf false festgelegt ist, kehrt die Run-Methode sofort nach dem Start des Programms zurück und gibt automatisch 0 zurück (dies ist nicht als Fehlercode zu interpretieren).
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Brainscanner » 21. August 2004 14:50

Sorry, daß ich mir so lange Zeit gelassen habe.
Kann ich das true auch ohne die 3 reinschreiben? Also mit anderen Worten, was bedeutet [intWindowStyle]?
Brainscanner
 
Posts: 45
Joined: 07. March 2004 23:42
Location: Baden-Württemberg

Postby Wiedmann » 21. August 2004 18:38

Wiedmann wrote:Yep. du kannst die run-Methode ja auch mit "false" anstatt mit "true" aufrufen (da hilft ein Blick in die Doku vom Scripting Host).

Brainscanner wrote:Ich hab in der Anleitung zu dem Befehl jetzt nicht ganz so was gefunden...

Hmm, deiner Aussage nach hast du ja die Doku. Da steht das ja genau drin und wird erklärt. Das letzte von mir, hab ich ja auch nur als Auschnitt direkt da rauskopiert...
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Brainscanner » 24. August 2004 22:48

Okay, dann schau ich da nochmal genauer rein. Danke für Deine Hilfe!
Brainscanner
 
Posts: 45
Joined: 07. March 2004 23:42
Location: Baden-Württemberg


Return to PHP

Who is online

Users browsing this forum: No registered users and 33 guests