[C] Externes Programm aufrufen (Windows)

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/c_externes_programm_aufrufen_windows_165416/page_1 - zur Vollversion wechseln!


jives schrieb am 07.07.2006 um 10:46

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

Code:
#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
Code:
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
Code:
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 :)


Darius schrieb am 07.07.2006 um 10:52

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 schrieb am 07.07.2006 um 10:59

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 schrieb am 07.07.2006 um 11:08

Hat sich erledigt, system() kann auch Programme ausführen die nicht in system32 liegen, man muss nur den Pfad angeben :D


Darius schrieb am 07.07.2006 um 11:33

oh cool gut zu wissen :)


Luzandro schrieb am 07.07.2006 um 11:44

Zitat von jives
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




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026