Diskuze: Ako spustiť externý program vo windows a odchytiť jeho návratový kód či error ak spadne na nejakú chybu?
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 3 zpráv z 3.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Po WaitForSingleObject zavolej GetExitCodeProcess, čímž získáš návratovou hodnotu procesu. Nezapomeň také zavřít handle toho procesu skrz CloseHandle.
Co se týče logování standardního a chybového výstupu daného procesu, myslím, že budeš muset místo ShellExecuteEx použít CreateProcess a dát mu vlastní handle pro standardní výstup a standardní chybový výstup. Obvyklý postup je takový, že přes CreatePipe či CreateNamedPipe vytvoříš roury, jejichž jeden konec vždy dáš tomu novému procesu a ze druhého čteš data, která ten proces zapisuje.
Pak hodně záleží na tom, jakým způsobem chceš ta data z těchto rour číst; zda-li synchronně či asynchronně. Druhá možnost je lepší, ale budeš muset použít CreateNamedPipe a pak asynchronně používat ReadFile či ReadFileEx. Synchronní čtení se mi moc neosvědčilo (v zásadě je to čtecí vlákno zablokováno, dokud se daný proces nerozhodne něco zapsat, což mu může trvat velmi dlouho. Navíc se snadno dostaneš do situace, kdy to vlákno bude čekat navždycky).
Veľmi pekne ďakujem za nasmerovanie - večer to prepíšem na CreateProcess
resp jeho widestringovú variantu CreateProcessW. A pri čítaní z pipe pojdem
asi tou asynchrónnou cestou (ak to nebude moc komplikované). Ďakujem zatiaľ
Zobrazeno 3 zpráv z 3.