Blog 2014-12-03: Eigenes CGI-Programm unter IIS 7 laufen lassen

2014-12-03: Eigenes CGI-Programm unter IIS 7 laufen lassen
Kategorie:IT / Web-Server
Stichworte:IT, Web, Server, IIS, IIS7, ms, microsoft, Internet Information Services, CGI, exe, Programm, installieren, konfigurieren


Der Hauptgrund, dass ich von einem Linux zu einem Windows-Webserver gewechselt bin, war ja, dass ich dort außer PHP auch ASP.net und sogar eigene Windows-Programme (über CGI) laufen lassen kann. Natürlich ginge sowas auch unter Linux (jetzt mal von dem Microsoft-eigenen ASP abgesehen), aber ich programmiere schon seit Jugendtagen unter DOS und Windows und es haben sich in dieser Zeit viele Funktionen, Module und DLLs angesammelt, die ich dann doch gerne wiederverwenden würde.

So habe ich z. B. ein unter Visual Basic selbstgeschriebenes Programm namens Mystery Master, dass mich mit vielen, hilfreichen Funktionen beim Lösen von Geocaching Mysteries (Rätsel-Caches) unterstützt. Und das ich mit meinen Mitcachern teilen will. Würde ich mich auf PHP festlegen, müsste ich alle Funktionen von VB in die C-ähnliche PHP-Syntax portieren, also quasi neuschreiben. Würde ich ASP.net nehmen, könnte ich dort auch Visual Basic benutzen, müsste aber alle Funktionen übertragen und wohl hier und da ein wenig anpassen. Mit CGI ist es mir aber möglich, das Programm selbst zu benutzen. Es braucht eigentlich nur ein zusätzlichen CGI-Interface, um die Funktionsergebnisse nicht im Programm selbst anzuzeigen, sondern nach STDIO zu schreiben, wo Sie dann der Web-Server entgegennimmt. Zusammen mit Ajax ließe sich dann ein interaktive Browser-Anwendung basteln, die das Programm über CGI einbindet.

Wie aber bringt man nun ein CGI-Programm unter IIS7 zum laufen? Das ist gar nicht so schwierig und soll hier anhand eines kleinen Beispielprogramms erläutert werden. Zuerst einmal brauchen wir ein Programm. Nehme wir als Sprache C#. Zum Eingeben taugt jeder Editor. Kopieren Sie folgenden Sourcecode in den Editor: using System; class TestCGI { static void Main(string[] args) { Console.WriteLine("\r\nHello World! I'm a CGI program!\r\n"); } } Speichern Sie die Datei in Ihrem Sourcen-Verzeichnis als TestCGI.cs. Danach können wir es mit %windir%\Microsoft.NET\Framework\v2.0.50727\csc.exe TestCGI.cs kompilieren und erhalten eine TestCGI.exe. Erstellen Sie den Pfad c:\inetpub\wwwroot\cgi und kopieren Sie die TestCGI.exe dort hinein.
Beim Aufruf von testCGI.exe in der Eingabeaufforderung sollte folgende Ausgabe erscheinen: Hello World! I'm a CGI program!
Als nächstes müssen wir dem IIS unser neues CGI-Programm bekannt machen. Aus Sicherheitsgründen muss jedes CGI-Programm, dass auf dem Server ausgeführt werden soll, in eine Liste eingetragen werden. Starten Sie den IIS-Manager, klicken Sie dort auf den Haupt-Node (Name des Rechners) und danach in der mittleren Spalte auf das Feature "ISAPI- und CGI-Einschränkungen". Dort oben rechts auf "Hinzufügen". Füllen Sie den Dialog wie rechts aus:
Dann brauchen wir noch ein virtuelles Verzeichnis, dem wir das Recht geben, Programme auszuführen. Dazu rechtsklicken wir links unter Sites auf "Default Web Site" und dann auf "Virtuelles Verzeichnis hinzufügen".
Den Dialog füllen wir wie folgt aus.
Ganz wichtig ist es noch, dem IIS-Handler Ausführungsrechte für unser cgi-Verzeichnis zu geben. Ansonsten würde nämlich das Programm nicht ausgeführt werden und die exe dem User als Download angeboten. Böse Falle! Dazu klicken wir links auf unser cgi-Verzeichnis, dann in der Mitte doppelt auf Handlerzuordnungen und dort dann rechts auf "Feature-Berechtigungen bearbeiten" und setzen dort das Häkchen bei "Ausführen", so dass der Eintrag "CGI-exe" von Deaktiviert nach Aktiviert rutscht.
Wenn das CGI-Programm etwas in seinen Pfad schreiben soll, z. B. Log-Files, dann müssen noch Schreibrechte für das cgi-Verzeichnis vergeben werden, sonst enden Abfragen in einem 50x-Servererror. Rechtsklicken Sie wieder links auf das cgi-Verzeichnis und wählen Sie "Berechtigungen bearbeiten..." aus. Klicken sie dann auf den Tab "Sicherheit" und dann auf "Bearbeiten...". Gibt es noch keinen User "IUSR" (das ist der User für IIS), dann legen Sie ihn mittels "Hinzufügen..." an ("IUSR" unten bei Objektnamen eingeben und dann OK klicken). Wählen Sie dann "IUSR" aus und klicken Sie unten bei Berechtigungen auch "Ändern" und "Schreiben" an.
Zum Abschluss geben wir noch http://localhost/cgi/TestCGI.exe in den Browser ein und schauen, ob alles richtig konfiguriert ist und die erwartete Ausgabe kommt.