[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

pl.comp.programming

CreateProcess - problem ze sciezka

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

4 Answers

Jan Kowalski

8/17/2007 1:35:00 PM

0


U¿ytkownik "hazet" <hazet@os.pl> napisa³ w wiadomo¶ci
news:1187355023.210393.166590@k79g2000hse.googlegroups.com...
> Witam prubuje uruchomic zewnetrzny program za pomoca CreateProcess:
> 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.
>

Czy pamiêtasz o ewentualnych spacjach w ¶cie¿kach?


hazet

8/17/2007 2:20:00 PM

0

On 17 Sie, 15:35, "Jan Kowalski" <jan.kowal...@onet.pl> wrote:
> U ytkownik "hazet" <ha...@os.pl> napisa w wiadomo cinews:1187355023.210393.166590@k79g2000hse.googlegroups.com...
>
> > Witam prubuje uruchomic zewnetrzny program za pomoca CreateProcess:
> > 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.
>
> Czy pami tasz o ewentualnych spacjach w cie kach?

Generalnie program ktory wywoluje nie znajduje sie w sciezce z
spacjami, rowniez katalog programu nie ma w swojej sciezce spacji,
katalog ktory pobieram z directory list box'a podaje w parametrze
lpCommandLine dla programu wywolynego i ujmuje go w cudzyslowy "\"".

Jezeli po uruchomieniu programu nie zmieni sie sciezki tylko directory
list wskazuje na katalog biezacego programu to wszystko jest ok.
Problem sie pojawia po zmianie katalogu, funkcja juz nie znajduje
relatywnej sciezki programu.

pozdrawiam


hazet

8/17/2007 3:34:00 PM

0

On 17 Sie, 16:20, hazet <ha...@os.pl> wrote:
> On 17 Sie, 15:35, "Jan Kowalski" <jan.kowal...@onet.pl> wrote:
>
> > U ytkownik "hazet" <ha...@os.pl> napisa w wiadomo cinews:1187355023.210393.166590@k79g2000hse.googlegroups.com...
>
> > > Witam prubuje uruchomic zewnetrzny program za pomoca CreateProcess:
> > > 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.
>
> > Czy pami tasz o ewentualnych spacjach w cie kach?
>
> Generalnie program ktory wywoluje nie znajduje sie w sciezce z
> spacjami, rowniez katalog programu nie ma w swojej sciezce spacji,
> katalog ktory pobieram z directory list box'a podaje w parametrze
> lpCommandLine dla programu wywolynego i ujmuje go w cudzyslowy "\"".
>
> Jezeli po uruchomieniu programu nie zmieni sie sciezki tylko directory
> list wskazuje na katalog biezacego programu to wszystko jest ok.
> Problem sie pojawia po zmianie katalogu, funkcja juz nie znajduje
> relatywnej sciezki programu.
>
> pozdrawiam

Witam ze wzgledow praktycznych zastosowalem taki sposob zeby rozwiazac
ten problem. Podczas uruchomienia programu pobieram pelna sciezke do
programu za pomoca funkcji GetFullPathName, pozniej przy tworzeniu
procesu podaje pelna sciezke i tyle.

Nie podoba mi sie ten sposob na pewno jest jakis lepsze wyjscie, a
moze po prostu zle wywoluje funkcje CreateProcess? poki co to musze
sie zadowolic tym rozwiazaniem:)

pozdrawiam

hazet

8/18/2007 1:38:00 PM

0

On 17 Sie, 17:34, hazet <ha...@os.pl> wrote:
> On 17 Sie, 16:20, hazet <ha...@os.pl> wrote:
>
>
>
> > On 17 Sie, 15:35, "Jan Kowalski" <jan.kowal...@onet.pl> wrote:
>
> > > U ytkownik "hazet" <ha...@os.pl> napisa w wiadomo cinews:1187355023.210393.166590@k79g2000hse.googlegroups.com...
>
> > > > Witam prubuje uruchomic zewnetrzny program za pomoca CreateProcess:
> > > > 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.
>
> > > Czy pami tasz o ewentualnych spacjach w cie kach?
>
> > Generalnie program ktory wywoluje nie znajduje sie w sciezce z
> > spacjami, rowniez katalog programu nie ma w swojej sciezce spacji,
> > katalog ktory pobieram z directory list box'a podaje w parametrze
> > lpCommandLine dla programu wywolynego i ujmuje go w cudzyslowy "\"".
>
> > Jezeli po uruchomieniu programu nie zmieni sie sciezki tylko directory
> > list wskazuje na katalog biezacego programu to wszystko jest ok.
> > Problem sie pojawia po zmianie katalogu, funkcja juz nie znajduje
> > relatywnej sciezki programu.
>
> > pozdrawiam
>
> Witam ze wzgledow praktycznych zastosowalem taki sposob zeby rozwiazac
> ten problem. Podczas uruchomienia programu pobieram pelna sciezke do
> programu za pomoca funkcji GetFullPathName, pozniej przy tworzeniu
> procesu podaje pelna sciezke i tyle.
>
> Nie podoba mi sie ten sposob na pewno jest jakis lepsze wyjscie, a
> moze po prostu zle wywoluje funkcje CreateProcess? poki co to musze
> sie zadowolic tym rozwiazaniem:)
>
> pozdrawiam

Dla zainteresowanych dodam iz mozna rowniez uzyc funkcji zawartej w
VCL SelectDirectory(), tworzy okno do wyboru katalogu bez zmiany
katalogu biezacego.

pozdrawiam