Problem mit system() + Dateizugriff / Execute Rechten



  • Hi,

    ich hoffe ich bin hier richtig gelandet da ich eigentlich für Windows programmiere allerdings mit cygwin compiliere und somit eine Linux Umgebung simuliere ( glaube ich zumindest bin noch Anfänger ).

    Da ich diverse kleine Tasks mit batch dateien automatisiert habe wollte ich jetzt ein c tool schreiben das mir die batch Dateien verwaltet also auf Wunsch ausführt.

    Aufgerufen werden die batches via system("cmd /c call test.bat"); , bei mir funktioniert das soweit auch gut. Nur wollte ich nun einem Bekannten das Programm schicken und bei ihm gibt das system() commando immer -1 zurück als würden dem Programm die Rechte fehlen auf die cmd zuzugreifen ( ka nur eine Vermutung wäre schon dankbar wenn mir jmd sagen könnte wie man system() Fehler genauer analysiert ). Meine Vermutung kommt daher, dass wenn er nach einem Programmaufruf versucht die batch Datei manuell zu starten den Fehler bekommt er kann auf die Datei nicht zugreifen entweder existiert sie nicht oder ihm Fehlen Rechte. Wenn er die batch Datei jetzt in einen anderen Ordner kopiert kann er sie wieder ausführen.

    Da ich dieses Problem nicht genauer hinterforschen kann bin ich auf eure Erfahrung angewiesen, evtl gibt es ja auch eine bessere Möglichkeit als das system() command.

    Bin für jeden Vorschlag dankbar. TIA

    mfg Copper Hobbit



  • Ich weiss zwar nicht wieso system() nicht geht aber mit winexec() hats geklappt nur schade das man ken feedback bekommt wann die aufgerufene datei terminiert.



  • WinExec ist veraltet und ist nur noch wegen der Kompatibilität zu 16-Bit Programmen vorhanden. Ich sehe das immer wieder, guckt ihr nicht mal ins PSDK und informiert euch? 🙄

    Nimm ShellexecuteEx und WaitForSingleObject.



  • Luckie schrieb:

    Nimm ShellexecuteEx und WaitForSingleObject.

    Besser evtl. noch:
    CreateProcess und WaitForSingleObject



  • Thx ja ich bechäftige mich erst seit 3 Tagen mit c das merkt man leider

    mfg ch


Anmelden zum Antworten