system() - mehrere Kommandos



  • Mit Pipes geht sowas glaub' auch 🙄



  • Setzt doch einfach die Variable per SetEnvironmentVariable. Der Child-Process erbt dann per default den Environment-Block des Parents.



  • Ist dafür nicht CreateProcess() zuständig? Imho kann ich dort auch gleich die Umgebungsvariablen mitgeben?

    MfG SideWinder



  • SideWinder schrieb:

    Imho kann ich dort auch gleich die Umgebungsvariablen mitgeben?

    Du kannst es aber auch lassen. Dann gehen die Umgebungsvariablen des Erzeugers automatisch an den neuen Process über. Warum willst Du Dir extra Arbeit machen?



  • -King- schrieb:

    SideWinder schrieb:

    Imho kann ich dort auch gleich die Umgebungsvariablen mitgeben?

    Du kannst es aber auch lassen. Dann gehen die Umgebungsvariablen des Erzeugers automatisch an den neuen Process über. Warum willst Du Dir extra Arbeit machen?

    Oh nicht genau genug gelesen: Dachte er will ein Programm über system starten das neue Umgebungsvariablen benötigt und nicht er will Umgebungsvariablen setzen indem er eine Batchdatei aufruft.

    MfG SideWinder



  • SideWinder schrieb:

    Oh nicht genau genug gelesen: Dachte er will ein Programm über system starten das neue Umgebungsvariablen benötigt und nicht er will Umgebungsvariablen setzen indem er eine Batchdatei aufruft.

    🙂

    Genau das will er, so habe ich das auch verstanden. Die Umgebungsvariable setzt er nun einfach bei sich selbst und ruft dann von mir aus auch CreateProcess auf. Dabei kann er aber den Environment-Block auf NULL setzen, er braucht nicht extra einen zu erzeugen und anzugeben. Es vererbt sich der eigene Block an den Child-Process.

    Aus der Hilfe zu CreateProcess:

    MSDN schrieb:

    lpEnvironment
    [in] Pointer to an environment block for the new process. If this parameter is NULL, the new process uses the environment of the calling process.



  • Weiß ich - vor kurzem auch CreateProcess() in der MSDN durchgesehen für ein kleines Programm ;).

    Bloß wusste ich nicht, dass es besser ist zuerst bei sich die Umgebungsvariablen zu ändern und dann CreateProcess() mit 0 aufzurufen als sie gleich in CreateProcess() anzugeben?!

    Verstehe jetzt nicht ganz wo hier der Vorteil liegen soll 😕

    MfG SideWinder



  • SideWinder schrieb:

    Verstehe jetzt nicht ganz wo hier der Vorteil liegen soll 😕

    Von besser habe ich nichts gesagt. Es scheint mir nur einfacher zu sein. Ich löse das also in zwei Zeilen so:

    SetEnvironmentVariable(TEXT("DIESDAS"), szUserEingabe);
    CreateProcess(...);

    Wie sieht nun Deine Lösung aus? Bedenke, daß Du im Deinem Environment noch einige Variablen mehr als diese eine hast. Bedenke auch, daß der Child-Process die Eine oder Andere davon benötigen könnte, z.B. COMSPEC oder auch PATH.

    Oder bin ich nun auf dem Holzweg?



  • Ah nun hab ich begriffen auf was du hinaus willst. Ich dachte ich kann bei CreateProcess() alle Variablen wie "param=wert;param=wert;param=wert" angeben, stattdessen benötige ich ja lauter Einzelstrings.

    Klar, das sieht nach mehr Aufwand aus als immer brav und schön mit einer Funktion zu setzen und dann zu erben.

    Aber ist das nicht unsauber? Vor allem kommt es zu Problemen wenn eine Umgebungsvariable unterschiedlich gesetzt werden muss?

    MfG SideWinder



  • SideWinder schrieb:

    Aber ist das nicht unsauber?

    Nö, wieso?

    Vor allem kommt es zu Problemen wenn eine Umgebungsvariable unterschiedlich gesetzt werden muss?

    Dann geht das in so einfach natürlich nicht mehr. Aber wie oft kommt denn das bei Dir vor?


Anmelden zum Antworten