System() / exec() geht nicht

Hallo

Warum funktioniert das nicht?

system(‚rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,1‘) || die;

Eigentlich funktioniert kein einziger System-Call!
Woran kann das liegen??

mfG. Martin

Hallo auch.

Warum funktioniert das nicht?

system(‚rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,1‘)
|| die;

Eigentlich funktioniert kein einziger System-Call!
Woran kann das liegen??

system() gibt im Erfolgsfall die Zahl 0 zurück, deshalb
wird bei Deinem Code nach dem Systemaufruf immer die()
mit aufgerufen.

Probier’s mal mit

system('rundll32.exe shell32.dll,Control\_RunDLL sysdm.cpl,,1')==0 
 or die "Fehler: $?"

und der Doku unter perldoc -f system.

Gruß,
-Andreas.

Dank Dir! Da scheint es so als würde er das ausführen.
Ich hab jetzt folgenden Code probiert:

#!c:\programme\perl\bin\perl -w
print „Content-type: text/html\n\n“;
$x = system(‚cmd.exe‘);
print $x;
exit;

Diesen führt er auch brav aus, allerdings nicht so wie ich es mir vorgestellt habe. Ich möchte, dass die Eingabeaufforderung am Server aufgerufen wird und zwar als eigener Task. Geht das überhaupt? Bei diesem Code bekomme ich die Ausgabe im Internet-Explorer und cmd.exe wird nicht als eigener Task ausgeführt.

Besten Dank im Voraus, Martin

Hallo Martin.

Ich hab jetzt folgenden Code probiert:

#!c:\programme\perl\bin\perl -w
print „Content-type: text/html\n\n“;
$x = system(‚cmd.exe‘);
print $x;
exit;

Diesen führt er auch brav aus, allerdings nicht so wie ich es
mir vorgestellt habe. Ich möchte, dass die Eingabeaufforderung
am Server aufgerufen wird und zwar als eigener Task. Geht das
überhaupt? Bei diesem Code bekomme ich die Ausgabe im
Internet-Explorer und cmd.exe wird nicht als eigener Task
ausgeführt.

Wenn ich das Skript bei mir in einer DOS-Shell starte, sieht die Ausgabe aus wie folgt:

C:\web\cgi-bin\>perl system.pl
Content-type: text/html

Microsoft(R) Windows Millennium
 (C)Copyright Microsoft Corp 1981-1999.

C:\web\cgi-bin\>

Die Shell wird also korrekt aufgerufen, aber gleich wieder
beendet. Das ist aber kein Problem von Perl, sondern liegt an der
DOS-Shell selbst, wie Du beim Aufruf von „cmd.exe“ in einer DOS-Shell beobachten kannst. Andere Programme wie z.B. notepad.exe verhalten
sich wie von Dir gewünscht.

Du müsstest also die DOS-Shell überzeugen, sich nicht gleich zu
beenden. Vielleicht ist das irgendwie möglich. Schau Dir dazu mal
die Aufrufparameter der Shell mit cmd /? an und sag Bescheid, ob
Du eine Lösung gefunden hast.

Gruß,
-Andreas.

Hallo Andreas!

#!c:\programme\perl\bin\perl -w
print „Content-type: text/html\n\n“;
$x = system(‚cmd.exe‘);
print $x;
exit;

Wenn ich das Skript bei mir in einer DOS-Shell starte, sieht
die Ausgabe aus wie folgt:

C:\web\cgi-bin>perl system.pl
Content-type: text/html

Microsoft® Windows Millennium
©Copyright Microsoft Corp 1981-1999.

C:\web\cgi-bin>

cmd.exe war ein schlechtes Beispiel… nehmen wir notepad.exe her
Notepad.exe wird gestartet wenn ich das Script über die Shell starte.

Starte ich das Script allerdings via Browser (localhost\script.cgi) am Apache Server bekomme ich endlos eine Sanduhr! Im Task-Manager sehe ich notepad.exe und perl.exe… die Prozesse lassen sich auch nicht beenden…
Ich habe keine Ahnung wie ich Notepad via Internet-Explorer aufrufen kann.
Kann das vielleicht sein dass ich Apache anders konfigurieren muss?
Welche Einstellung könnte das sein?

mfG. Martin

Hallo!

Notepad.exe wird gestartet wenn ich das Script über die Shell
starte.

Starte ich das Script allerdings via Browser
(localhost\script.cgi) am Apache Server bekomme ich endlos
eine Sanduhr! Im Task-Manager sehe ich notepad.exe und
perl.exe…

Das ist korrekt: system() wartet, bis das aufgerufene Programm beendet
ist. Solange der notepad-Prozess noch läuft, wirst Du deshalb
die Sanduhr im Browser sehen oder irgendwann einen Timeout vom
Webserver erhalten.

die Prozesse lassen sich auch nicht beenden…
Ich habe keine Ahnung wie ich Notepad via Internet-Explorer
aufrufen kann.

Bei mir unter Windows ME läuft alles prima, bei Aufruf des
Skripts über den Browser öffnet sich Notepad und die Sanduhr beginnt
zu rieseln!

Scheint also ein „Problem“ mit Deinem Windows zu sein. Vielleicht
brauchst Du dazu irgendwelche Admin-Rechte unter NT/2000/XP? Keine
Ahnung, ich kann das mangels Testumgebung nicht nachvollziehen.

Gruß,
-Andreas.