[C] Externes Programm aufrufen (Windows)
jives 07.07.2006 - 10:46 942 5
jives
And the science gets done
|
Ich schreibe (oder versuche  ) gerade ein CLI-Programm in C, welches alle x Minuten (implementiert mit Sleep(x)) ein File auswerten und je nachdem was in dem File steht ein externes Programm (ebenfalls CLI und C) mit Argumenten aufrufen soll. Für Testzwecke habe ich folgendes Programm geschrieben, dass einfach nur die ihm übergebenen Kommandozeilenparamter zurückgibt #include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
long i = 0;
system("cls");
printf("Argument Test v1.0\n\n");
for (i = 0; i < argc; i++)
{
printf("> %ld: %s\n", i, argv[i]);
}
printf("\nDone.\n");
return 0;
}
Im Hauptprogramm wird das obere Programm mit execl/execv aufgerufen und zwar folgendermaßen const char execpath[] = "..\\ArgTest\\ArgTest.exe";
const char argument[] = "arg1";
...
execl(execpath, argument, (char *)0);
Das funktioniert auch, nur leider steht in argv[0] das Argument - und nicht der Programmname - und ich komme nicht mehr ins Hauptprogramm zurück. Mein Testprogramm wird auch nicht beendet. Scheinbar wird das aber Hauptprogramm beendet, denn mit execl("C:\\Windows\\system32\\taskmgr.exe", (char *)0);
wird der Taskmanager aufgerufen, das Hauptprogramm steht aber. So weit ich http://www.opengroup.org/onlinepubs...tions/exec.html verstanden habe, wird mit execl der aktuelle Prozess einfach überlagert - liegt darin der Fehler? Muss ich einen eigenen, unabhängigen Prozess starten? Wenn ja - wie kann ich das bewerkstelligen? tia
Bearbeitet von jives am 07.07.2006, 11:09
|
Darius
Guru
|
ich bin leider kein guter coder...kann ein bisschen schul C...ist jetzt zwar extrem Russisch...aber du könntest die Programme die du aufrufen willst in die Windows System32 kopieren und dann mit system("XXX"); aurufen...kA obs geht...wilde blöde idee
|
jives
And the science gets done
|
Das funktioniert  Wäre aber nur eine Notlösung, da das Programm, das aich aufrufen will, eigentlich auf einer zentralen Stelle liegen sollte... Thx auf jeden Fall.
|
jives
And the science gets done
|
Hat sich erledigt, system() kann auch Programme ausführen die nicht in system32 liegen, man muss nur den Pfad angeben
|
Darius
Guru
|
oh cool gut zu wissen
|
Luzandro
Here to stay
|
So weit ich http://www.opengroup.org/onlinepubs...tions/exec.html verstanden habe, wird mit execl der aktuelle Prozess einfach überlagert - liegt darin der Fehler? Muss ich einen eigenen, unabhängigen Prozess starten? Wenn ja - wie kann ich das bewerkstelligen? du müsstest zuerst ein fork() aufrufen und im kindprozess das exec - kommt aber aufs gleiche raus
|