Eigentlich irrelevant, ob Pipe oder Datei. Aber der zuletzt gepostete Code bringt u.U. des Rätsels Lösung.
Wie oben schon erwähnt, gibt es verschiedene "Kanäle" auf denen Ein- und Ausgaben von/in die Konsole stattfinden. Die komplette Struktur, welche du als Variable "start" ansprichst, sieht in C so aus:
Code:
typedef struct _STARTUPINFO {
DWORD cb;
LPTSTR lpReserved;
LPTSTR lpDesktop;
LPTSTR lpTitle;
DWORD dwX;
DWORD dwY;
DWORD dwXSize;
DWORD dwYSize;
DWORD dwXCountChars;
DWORD dwYCountChars;
DWORD dwFillAttribute;
DWORD dwFlags;
WORD wShowWindow;
WORD cbReserved2;
LPBYTE lpReserved2;
[color=darkred]
HANDLE hStdInput;
HANDLE hStdOutput;
[b]
HANDLE hStdError;[/b][/color]
} STARTUPINFO, *LPSTARTUPINFO;
Die Kanäle habe ich mal hervorgehoben. Da du nur den Ausgabekanal "STDOUT" überwachst, kann es sein, daß dir Ausgaben auf "STDERR" (fett hervorgehoben) verloren gehen. Das war mein Punkt. Daher solltest du entweder - noch nie probiert ob das geht - die Datei so öffnen, daß sie von mehreren "Benutzern" zum Schreiben verwendet werden kann (i.e. FILE_SHARE_WRITE mit angeben), oder eine zweite Datei für diesen Ausgabekanal bereitstellen um ihn abzufangen. Wenn es dann immernoch nicht geht, liegt ein anderes Problem vor, aber eigentlich sollte es das lösen.
Klartext - versuche es mal mit folgender Einfügung:
start.hStdError := tmp;
(vor oder nach:
start.hStdOutput := tmp;
sollte egal sein)