Ik ben bezig met een commandline applicatie die een process kan opstarten en deze in de gaten houden.Het grootste gedeelte is af en getest, maar nu wilde ik er een extra feature in bouwen. Ik wil het mogelijk maken dat de input/output stream van de process doorgestuurd kan worden naar de applicatie zelf, of naar een bestand. Het door sturen naar een bestand is me al gelukt, maar hoe ik het van de process naar de applicatie stuur is me een raadsel.
Ik gebruik de volgende opzet: (C++, niet relevante code daargelaten)
Ik gebruik de DETACHED_PROCESS flag om ervoor te zorgen dat de gestarte process actief blijft indien de applicatie afgesloten word. Als ik deze flag weglaat komt alle input/output braaf in de console van m'n applicatie terecht, maar met blijft mijn console leeg.
Ik heb een donkerbruin vermoeden dan het ligt aan GetStdHandle. Misschien geeft deze wel niet een goede handle terug, omdat de process nu een aparte thread heeft gekregen.
Na bezoek aan google en msdn stuitte ik op de functies CreatePipe en DuplicateHandle, maar ik heb na lezen van wat site's nog geen flauw idee hoe ik die hiervoor moet gebruiken.
Weten jullie misschien hoe ik bij het creeëren van een nieuw process de input en output kan doorsturen naar de parent applicatie?
Ik gebruik de volgende opzet: (C++, niet relevante code daargelaten)
code:
1
2
3
4
5
6
7
8
9
10
11
| STARTUPINFO si = {sizeof (si)}; // Verwijzing naar startupinfo struct
si.dwFlags = STARTF_USESTDHANDLES; // Gebruik maken van aangepaste stream handles
si.hStdInput = GetStdHandle(STD_INPUT_HANDLE); // Ontvang handle van
si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE); // oorsprokelijke applicatie.
si.hStdError = GetStdHandle(STD_ERROR_HANDLE);
CreateProcess(0, command, 0, 0, true, DETACHED_PROCESS, env, workpath, &si, &pi);
WaitForSingleObject(pi.hProcess, timeout); // Wachten totdat process gesloten is |
Ik gebruik de DETACHED_PROCESS flag om ervoor te zorgen dat de gestarte process actief blijft indien de applicatie afgesloten word. Als ik deze flag weglaat komt alle input/output braaf in de console van m'n applicatie terecht, maar met blijft mijn console leeg.
Ik heb een donkerbruin vermoeden dan het ligt aan GetStdHandle. Misschien geeft deze wel niet een goede handle terug, omdat de process nu een aparte thread heeft gekregen.
Na bezoek aan google en msdn stuitte ik op de functies CreatePipe en DuplicateHandle, maar ik heb na lezen van wat site's nog geen flauw idee hoe ik die hiervoor moet gebruiken.
Weten jullie misschien hoe ik bij het creeëren van een nieuw process de input en output kan doorsturen naar de parent applicatie?
-=Waiz=-