Ich schreibe eine win32-Dienstprogrammfunktion für unser Produkt, das ein beliebiges Programm über die Shell aufrufen und seine Ausgabe protokollieren muss. Wir tun dies, indem Sie die Standardausgabe aus dem untergeordneten Prozess in ein Rohr umgeleitet:Win32: Ermitteln, ob stdout handle char oder wchar Stream ist
saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
saAttr.bInheritHandle = TRUE;
saAttr.lpSecurityDescriptor = NULL;
CreatePipe(&hReadPipe, &hWritePipe, &saAttr, 0);
// Redirect the first process stdout to our write pipe
// so that we can read its output from the read pipe.
startUpInfo.dwFlags = STARTF_USESTDHANDLES;
startUpInfo.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
startUpInfo.hStdOutput = hWritePipe;
startUpInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE);
CreateProcessA(NULL, szCmdLine, NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS, NULL, NULL, &startUpInfo[i], &procInfo);
Es gibt eine Vielzahl von Programmen, die auf diese Weise aufgerufen werden können, von denen viele nicht unter unserer Kontrolle. Derzeit sehen wir ein Problem, bei dem die Ausgabe vieler Programme nach dem ersten Zeichen abgeschnitten scheint - normalerweise ein sicheres Zeichen dafür, dass fälschlicherweise eine WCHAR-Zeichenfolge als CHAR verwendet wird.
Wie kann ich feststellen, ob der untergeordnete Prozess in seine Stdout-Pipe als CHAR oder WCHAR schreibt?