Ik heb een probleem met een applicatie die ik werkend probeer te krijgen.
Vanuit mijn applicatie run ik een executable mbv een commandline, via de functie CreateProcess. Die executable geeft output, die ik via een pipe opvang en laat zijn in mijn programma.
Relevante code:
Nu heb ik ontdekt dat als de executable iets meer werk heeft dan anders, hij voortijdig ophoudt iets te doen, maar niet termineert en in het geheugen actief blijft. Dit zonder enige vorm van output of foutmelding. Bij een snelle executie verloopt alles prima en kan ik zonder problemen de output opvangen. Als ik nu de bInheritHandles in de CreateProcess-aanroep op 'false' zet, lopen alle processen goed, ook die wat meer tijd kosten. Alleen, dan kan ik dus de output niet opvangen en die heb ik wel nodig.
Wat is er met die inherited handles wat ervoor zorgt dat mijn executable zijn werk niet afmaakt?
.modbreak: gebruik [norml]
Vanuit mijn applicatie run ik een executable mbv een commandline, via de functie CreateProcess. Die executable geeft output, die ik via een pipe opvang en laat zijn in mijn programma.
Relevante code:
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| if Createpipe (ReadPipe, WritePipe, @Security, 0) then begin FillChar(Start,Sizeof(Start),#0); start.cb := SizeOf(start); -> start = tStartupInfo start.lpReserved := nil; start.hStdOutput := WritePipe; start.hStdError := WritePipe; start.hStdInput := GetStdHandle(STD_INPUT_HANDLE); start.dwFlags := STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW; start.wShowWindow := SW_SHOWNORMAL;//SW_HIDE; ...... if( CreateProcess( nil, PChar(command), @Security, @Security, true, // Set handle inheritance 0, nil, nil, start, ProcessInfo ) ) |
Nu heb ik ontdekt dat als de executable iets meer werk heeft dan anders, hij voortijdig ophoudt iets te doen, maar niet termineert en in het geheugen actief blijft. Dit zonder enige vorm van output of foutmelding. Bij een snelle executie verloopt alles prima en kan ik zonder problemen de output opvangen. Als ik nu de bInheritHandles in de CreateProcess-aanroep op 'false' zet, lopen alle processen goed, ook die wat meer tijd kosten. Alleen, dan kan ik dus de output niet opvangen en die heb ik wel nodig.
Wat is er met die inherited handles wat ervoor zorgt dat mijn executable zijn werk niet afmaakt?
.modbreak: gebruik [norml]
Delphi:
[/] tags om delphi code weer te geven 1
| ... |
[ Voor 5% gewijzigd door .oisyn op 22-09-2003 18:09 ]