system() / exec() geht nicht

Von: (abgemeldet) , Frage gestellt am Do, 17. Jul 2003
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

5 Antworten zu dieser Frage

  1. Antwort von (abgemeldet) nach 3 Stunden 0 hilfreich
    Re: system() / exec() geht nicht
    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.
    • Antwort von (abgemeldet) nach 12 Stunden 0 hilfreich
      Re^2: system() / exec() geht nicht
      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
      • Antwort von (abgemeldet) nach 14 Stunden 0 hilfreich
        Re^3: system() / exec() geht nicht
        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.
        • Antwort von (abgemeldet) nach 14 Stunden 0 hilfreich
          Re^4: system() / exec() geht nicht
          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:<PRE>
          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>
          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
          • Antwort von (abgemeldet) nach 15 Stunden 0 hilfreich
            Re^5: system() / exec() geht nicht
            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.
Keine passende Antwort gefunden? Jetzt eigene Frage stellen!