hazet
8/17/2007 12:50:00 PM
Witam prubuje uruchomic zewnetrzny program za pomoca CreateProcess:
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
AnsiString cmd = // tutaj mam parametry programu do uruchomienia
CreateProcess(
"katalog\\nazwa_prog.exe",
cmd.c_str(),
NULL,
NULL,
FALSE,
CREATE_NO_WINDOW,
NULL,
NULL,
&si,
&pi )
)
Program jest kompilowany w Turbo C++, problem polega na tym iz
uzytkownik wskazuje katalog za pomoca kontrolki TDirectoryListBox, w
ten sposob pobrany katalog jest dodawany do parametrow
uruchomieniowych programu. Jezeli zmieni sie katalog na inny niz
katalog programu z poziomu ktorego uruchamiany bedzie process to
funkcja nie moze odnalezc sciezki. GetLastError zwraca
ERROR_PATH_NOT_FOUND. Sadzilem ze jezeli w argumencie
lpCurrentDirectory funkcji CreateProcess podam NULL to process
odziedziczy katalog startowy.
Przypuszczam ze za pomoca directory list box'a zmianiany jest biezacy
katalog i przez to funkcja nie znajduje programu do uruchomienia.
Czy w takim przypadku musze najpierw pobrac pelna sciezke procesu z
poziomu ktorego bede uruchamial ta aplikacje, czy po prostu mam bledne
wywolanie funkcji CreateProcess?
dzieki, pozdrawiam