Witam.
ostatnio zauważyłem dziwne zachowanie funkcji CreateProcess(). W moim programie wykorzystuję ją do uruchomienia kompilatora asemblera.
Podaję kod:
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOWDEFAULT;
AnsiString Command_A = "tasm.exe plik.asm plik.obj"; // dziala
AnsiString Command_AA = "tasm.exe plik.asm plik.obj>log.txt"; // dziala
AnsiString Command_B = "tasm32.exe /ml plik32.asm plik32.obj"; // dziala
//a to NIE DZIALA (proces przebiega ale brak rezultatu (nie otrzymuje wyniku: plik.obj i log.txt)
AnsiString Command_BB = "tasm32.exe /ml plik32.asm plik32.obj>log.txt";
if(!CreateProcess( NULL, Command.c_str(), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi ))
{/* obsluga i komunikat o bledzie */}
WaitForSingleObject( pi.hProcess, INFINITE);
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
W podanym kodzie w miejsce zmiennej Command podstawiam jeden z czterech przedstawionych wariantów.
Wykorzystuję kompilator firmy Borland (tasm - do kompilacji programów 16 bitowch i tasm32 do kompilacji programów 32-bitowych).
Przechwytuję wynik kompilacji do pliku tekstowego w celu wyświetlenia go i odczytania ewentualnych błędów w kodzie .asm.
Co ciekawe testowałem wszystkie 4 warianty ręcznie z poziomu konsoli i działają bez zarzutu.
Nie wiem dlaczego w przypadku użycia Command_BB = "tasm32.exe /ml plik32.asm plik32.obj>log.txt";
proces się wykonuje ale nie dostaję plików .obj i .txt.
Kto wie, w czym tkwi problem i jak go rozwiązać ?