Prozesse auslesen

Das ist nicht der aktuelle Code. Die COMSPEC Variable muss gesetzt sein. Siehe Beitrag #48.
C:
if (getenv("SERVER_NAME") != NULL) {
                char env[256];
		sprintf(env, "COMSPEC=%s%c%c",
                getenv("COMSPEC"), '\0', '\0');

		PROCESS_INFORMATION piA;
		STARTUPINFO suiA;
		// dieses Programm als Kindprozess starten, mit		CreateProcess(argv[0],NULL,NULL,NULL,FALSE,CREATE_DEFAULT_ERROR_MODE|NORMAL_PRIORITY_CLASS,env,NULL,&suiA,&piA);
  } else {}
Habe es jetzt so übernommen

Wenn ein Programm als CGI Programm ausgeführt wird, sind bestimmte Umgebungsvariablen gesetzt (z.B. REMOTE_ADDR). So kann man feststellen, ob das aktuelle Programm als CGI Programm ausgeführt wird.
Wenn man dann einen Kindprozeß erzeugen will der nicht als CGI Programm ausgeführt werden soll, muss man dann natürlich sicherstellen, dass in diesem Prozess die CGI Variablen nicht gesetzt sind. Dazu werden neue Umgebungsvariablen an den Kindprozess übergeben.
Gruß
Er beendet meine test.exe, aber die APache.exe läuft weiter. Ich hatte dann überlegt, nach dem CreateProcess(); nochmal meine test.exe aufzurufen mit system(argv[0]); aber dann startet er immer wieder die test.exe und kommt sozusagen in eine Endlosschleife, weil er jedesmal in den if-Zweig reingeht.

Was mache ich falsch bzw. was müsste ich nach CreateProcess() noch ausführen?

Gruß
 
Er beendet meine test.exe, aber die APache.exe läuft weiter. Ich hatte dann überlegt, nach dem CreateProcess(); nochmal meine test.exe aufzurufen mit system(argv[0]);
Wie ich eben erklärt habe ist das Unsinn. Lies es dir nochmal durch.
aber dann startet er immer wieder die test.exe und kommt sozusagen in eine Endlosschleife, weil er jedesmal in den if-Zweig reingeht.
Allerdings.
Was mache ich falsch bzw. was müsste ich nach CreateProcess() noch ausführen?
Du mußt nur die Handles schließen. Aber das ist ja klar.

Stelle fest was nicht funktioniert. Schreibe ein Log-Datei im else Zweig, wo du die Ausgabe bzw. den Rückgabewert der system() Funktion reinschreibst, so kannst du nachschauen warum es nicht geht.

Oder du "spielst" den Apache und setzt die Umgebungsvariable in einer Shell:
Code:
set SERVER_NAME=blub
dein_programm.exe
Füge ein paar Sleep() Aufrufe hinzu, so dass du im Task-Manager beobachten kannst das deine Programme aktiv sind.

Gruß
 
Du mußt nur die Handles schließen. Aber das ist ja klar.
Welche Handles? in dem Bsp:
C:
	if (getenv("SERVER_NAME") != NULL) {
		char env[256];
		sprintf(env, "COMSPEC=%s%c%c",
                getenv("COMSPEC"), '\0', '\0');

		PROCESS_INFORMATION piA;
		STARTUPINFO suiA;		CreateProcess(argv[0],NULL,NULL,NULL,FALSE,CREATE_DEFAULT_ERROR_MODE|NORMAL_PRIORITY_CLASS,env,NULL,&suiA,&piA);
		system(argv[0]);
  }
sind doch gar keine Handles offen oder sehe ich das falsch?
Stelle fest was nicht funktioniert. Schreibe ein Log-Datei im else Zweig, wo du die Ausgabe bzw. den Rückgabewert der system() Funktion reinschreibst, so kannst du nachschauen warum es nicht geht.
Wie kommt er denn irgendwann in den else-Zweig. Die main wird doch nur einmal aufgerufen und zwar aus der javascript durch den Aufruf der exe, dann geht er aber in den if-Zweig, weils ja von einem Server aus aufgerufen wurde und dann beendet er bei CreateProcess die test.exe und dann? wie soll er dann in den else-Zweig kommen? Bei mir geht er nicht in den else-Zweig rein.

Gruß
 
Welche Handles? in dem Bsp:
...
sind doch gar keine Handles offen oder sehe ich das falsch?
Letzteres. Versuch doch mal den Code zu verstehen. Welche Handles mußt du denn nach dem CreateProcess Aufruf schließen? ;-]

Das ist kein vollständiges Beispiel. Die auf der Hand liegenden Dinge (Initialsierung von den Strukturen, Parameter für den CreateProcess Aufruf, Überprüfung des Rückgabewertes der CreateProcess Funktion) habe ich weggelassen. Irgendwas sollst du ja auch selber machen.
Wie kommt er denn irgendwann in den else-Zweig. Die main wird doch nur einmal aufgerufen und zwar aus der javascript durch den Aufruf der exe, dann geht er aber in den if-Zweig, weils ja von einem Server aus aufgerufen wurde und dann beendet er bei CreateProcess die test.exe und dann? wie soll er dann in den else-Zweig kommen? Bei mir geht er nicht in den else-Zweig rein.
Beweise es. Zeig dein vollständiges Programm.

Gruß
 
Zurück