Alexander: SSI - EXE ausführen und Parameter übergeben...

Hi,

heute stand ich vor dem Problem, dass ich eine EXE-Datei per SSI-Kommando <!--exec cmd="datei.exe" --> ausführen lassen wollte. Das System ist Win 98 mit Apache. Leider muss der Aufruf mit der EXE-Datei mit Parameter erfolgen also in der Art <!--exec cmd="datei.exe parameter1" --> (wohlgemerkt ohne ein "-" oder "/" vor dem Parameter). Leider wollte Apache bzw. Windows dies nicht richtig verarbeiten, es kam immer zu einem "Befehl oder Dateiname nicht gefunden". Ich vermute also mal, dass der Parameter noch als Dateiname interpretiert wird.

Ich habe mir jetzt so geholfen, dass anstatt der EXE direkt, eine BAT-Datei OHNE Parameter aufgerufen wird, die dann wiederrum die EXE MIT Paramter aufruft. Wie gesagt, das klappt, ist aber eher umständlich.

Ich kann mir allerdings gut vorstellen, dass dies auch ohne diesen Umweg geht und wollte daher fragen, welchen Fehler ich gemacht habe und wie der Aufruf der EXE mit Parameter über SSI richtig erfolgen muss? Oder geht das tatsächlich nicht?

Viele Grüße...

Alex :)

  1. Hallo,

    [Programm per SSI ausführen und Paramter übergeben]

    http://httpd.apache.org/docs/howto/ssi.html
    http://httpd.apache.org/docs/mod/mod_include.html

    Wie lautet denn Deine SSI-Anweisung wirklich, und wo liegen die jeweiligen Dateien (die "Includierenden" und die "Includierte").

    BTW: "Befehl oder Dateiname nicht gefunden" sagt doch eigentlich genau was los ist. ;) Gib entweder den vollständigen Pfad an, oder stecke das Verzeichnis in dem "datei.exe" liegt in Deine PATH-Umgebungsvariable.
    Das sollte imho helfen.

    Gruß Alex

  2. hi,

    try this

    <!--#include virtual="/cgi-bin/asdf.exe?parameter"-->

    Ggf: httpd.conf ergänzen
    ....
    AddHandler cgi-script .exe

    Falls noch nicht....

    Rolf

    Hi,

    heute stand ich vor dem Problem, dass ich eine EXE-Datei per SSI-Kommando <!--exec cmd="datei.exe" --> ausführen lassen wollte. Das System ist Win 98 mit Apache. Leider muss der Aufruf mit der EXE-Datei mit Parameter erfolgen also in der Art <!--exec cmd="datei.exe parameter1" --> (wohlgemerkt ohne ein "-" oder "/" vor dem Parameter). Leider wollte Apache bzw. Windows dies nicht richtig verarbeiten, es kam immer zu einem "Befehl oder Dateiname nicht gefunden". Ich vermute also mal, dass der Parameter noch als Dateiname interpretiert wird.

    Ich habe mir jetzt so geholfen, dass anstatt der EXE direkt, eine BAT-Datei OHNE Parameter aufgerufen wird, die dann wiederrum die EXE MIT Paramter aufruft. Wie gesagt, das klappt, ist aber eher umständlich.

    Ich kann mir allerdings gut vorstellen, dass dies auch ohne diesen Umweg geht und wollte daher fragen, welchen Fehler ich gemacht habe und wie der Aufruf der EXE mit Parameter über SSI richtig erfolgen muss? Oder geht das tatsächlich nicht?

    Viele Grüße...

    Alex :)

    1. Hi Rolf,

      try this
      <!--#include virtual="/cgi-bin/asdf.exe?parameter"-->

      so, wie die Frage gestellt war, bin ich davon überzeugt, daß dieses Programm die CGI-Schnittstelle nicht unterstützt und als "black box" nicht geändert werden kann - denn wieso hätte Alex sonst überhaupt die SSI-Einschalung benötigt, statt direkt auf das Programm zu verlinken?

      Viele Grüße
            Michael

      --
      T'Pol: I apologize if I acted inappropriately.
      V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.
  3. Hi Alexander,

    Leider muss der Aufruf mit der EXE-Datei mit Parameter erfolgen also in der Art <!--exec cmd="datei.exe parameter1" --> (wohlgemerkt ohne ein "-" oder "/" vor dem Parameter).

    kann "datei.exe" über deine PATH-Variable des Evironment gefunden werden?

    Abgesehen davon sehe ich in Deinem Fall keinen Unterschied gegenüber
       http://httpd.apache.org/docs/howto/ssi.html#executingcommands.

    Viele Grüße
          Michael

    --
    T'Pol: I apologize if I acted inappropriately.
    V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.
    1. Hallo Michael,

      kann "datei.exe" über deine PATH-Variable des Evironment gefunden werden?

      Nein, kann sie nicht. Ich habe aber den Pfad zur EXE entsprechend angepasst. Ich weiss auch, dass der Aufruf selbst funktioniert. Wenn ich den Parameter weglasse, wird die EXE-Datei korrekt aufgerufen. Leider kann ich den Parameter nicht weglassen, da sonst das Programm nicht wie gewünscht ausgeführt wird. Es "scheitert" also alles am Parameter, was mich eben dazu veranlasst hat, dieses Posting zu erstellen.

      Abgesehen davon sehe ich in Deinem Fall keinen Unterschied gegenüber
         http://httpd.apache.org/docs/howto/ssi.html#executingcommands.

      Nun ja, in der Doku ist nichts bzgl. des Aufrufes eines Programms mit Parametern beschrieben.

      Viele Grüße...

      Alex :)

      1. Hi Alexander,

        Es "scheitert" also alles am Parameter, was mich eben dazu veranlasst hat, dieses Posting zu erstellen.

        wenn Du die CGI-Schnittstelle zum Aufrufen eines Programms nutzen willst, aber das Programm diese Schnittstelle nicht versteht, dann mußt Du eine Zwischenschicht bauen - so wie Du das mit Deiner Batch-Datei bereits getan hast.
        Eleganter ist Dein Problem nicht zu lösen ... in der realen Welt gibt es viele solche "Zwischenschichten", wenn zwei Programme miteinander kommunizieren müssen, sich aber nicht auf eine gemeinsame Konvention einigen (können oder wollen).

        Dabei kann allerdings Deine Batch-Datei die CGI-Konventionen befolgen:

        The CGI script is given the PATH_INFO and query string (QUERY_STRING) of the original

        request from the client; these cannot be specified in the URL path. The include

        variables will be available to the script in addition to the standard CGI environment.

        Damit könntest Du entsprechende Parameterwerte in der Batch-Datei analysieren und daraus die erforderliche Kommandozeile für Dein Programm zusammenkleben.

        Exakt dieses Modell habe ich damals bei meinen allerersten CGI-Gehversuchen ausgenutzt (etwa als ich hier im Forum aufgetaucht bin ...).

        Viele Grüße
              Michael

        --
        T'Pol: I apologize if I acted inappropriately.
        V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.
      2. Hallo,

        [...]

        Wenn ich den Parameter weglasse, wird die EXE-Datei korrekt aufgerufen. Leider kann ich den Parameter nicht weglassen, da sonst das Programm nicht wie gewünscht ausgeführt wird. Es "scheitert" also alles am Parameter, was mich eben dazu veranlasst hat, dieses Posting zu erstellen.

        Abgesehen davon sehe ich in Deinem Fall keinen Unterschied gegenüber
           http://httpd.apache.org/docs/howto/ssi.html#executingcommands.

        Nun ja, in der Doku ist nichts bzgl. des Aufrufes eines Programms mit Parametern beschrieben.

        Aber der zweite Link den ich Dir gegeben habe erklärt, warum es _mit_ Paramtern in Deinem Fall nicht funktioniert (habe es beim ersten mal aber auch nicht so genau gelesen ;).

        <cite href="http://httpd.apache.org/docs/mod/mod_include.html">
             cmd

        The server will execute the given string using /bin/sh. The include variables are available to the command, in addition
                  to the usual set of CGI variables.

        The use of #include virtual is almost always prefered to using either #exec cgi or #exec cmd. The former
                  (#include virtual) used the standard Apache sub-request mechanism to include files or scripts. It is much better
                  tested and maintained.
             <strong>
                  In addition, on some platforms, like Win32, and on unix when using suexec, you cannot pass arguments to a command
                  in an exec directive, or otherwise include spaces in the command. Thus, while the following will work under a
                  non-suexec configuration on unix, it will not produce the desired result under Win32, or when running suexec:
             </strong>
                  <!--#exec cmd="perl /path/to/perlscript arg1 arg2" -->
        </cite>

        Gruß Alex

        1. Hi,

          Aber der zweite Link den ich Dir gegeben habe erklärt, warum es _mit_ Paramtern in Deinem Fall nicht funktioniert (habe es beim ersten mal aber auch nicht so genau gelesen ;).

          OK, wieder was dazu gelernt :)
          Also muss ich es wohl den "Umweg" über die Batch-Datei machen. Aber an sich stellt das ja kein Problem dar, nur an sich möchte ich möglichst wenig "Zwischenschichten" und Schnittstellen verwenden, da hier immer ein gewisses Fehlerpotential vorliegt.

          Trotzdem vielen Dank und viele Grüße...

          Alex :)