[C++](chyba) Trywialny problem - jak odpalić inna aplikacje?


(Lena(R)) #1

Witam

Wydaje mi się że to trywialny problem, jednak sam nie bardzo wiem jak sobie z nim poradzić.

Język programowania, oczywiście jak w temacie C++. Kompilator (o ile się nie mylę) to GCC.

Jak napisać program (wszystko jedno czy konsolowy czy graficzny), który na nasze polecenie odpali jakąś aplikacje (dosłownie cokolwiek), ALE nasz napisany program poczeka na zakończenie otwartej aplikacji zanim będzie kontynuował dalszą część programu.

To znaczy:

Otwieram swój program (niech będzie to zwykły konsolowy, nazwę go "prog1"). I on wie, że jak wpisze "teraz" ma mi otworzyć program który nazywa się przykładowo "moj.exe" i jest on w katalogu "E:\PROG\moj.exe".

Co więcej ten napisany przeze mnie program (prog1), ma zaczekać na zakończenie otwartego moj.exe, a dopiero później ma wykonać dalsze instrukcje w programie.

Proszę o jakąś pomoc, dosłownie tak prostej aplikacji.


(Fiołek) #2
string polecenie;

cin >> polecenie; //Pobieramy polecenie

if(polecenie == "teraz")

   system("E:/PROG/moj.exe"); //Odpala program i czeka aż się zakończy

(Lena(R)) #3

No ok. A teraz (znowu "chyba") trochę trudniejszy problem.

Potrzebuje z mojego "głównego programu", odpalić instalator innego programu, który (i to ważne) zostanie odpalony w tle i zainstaluje się bez mojej ingerencji, a na koniec tylko wyśle info do mojego "głównego programu", że zakończono instalacje, czy coś w ten deseń.

Próbowałem już czegoś w stylu:

system("E:/PROG/setup.exe /silent");

czy

system("start E:/PROG/setup.exe" /quite);

oraz podobnych, ale instalator nie chce się odpalić w tle (po prostu rozpoczyna się normalna instalacja). Ktoś ma może na to jakąś radę? Czy może nie da się tego zrobić przez zwykłe system() ?


([alex]) #4

Użyj CreateProcess, a dla oczekiwania na zakończenie użyj [uel=[http://msdn.microsoft.com/en-us/library/ms687032%28VS.85%29.aspx]WaitForSingleObject](http://msdn.microsoft.com/en-us/library/ms687032%28VS.85%29.aspx%5DWaitForSingleObject)


(Lena(R)) #5

No dobra, czytam te informacje o funkcji CreateProcess(), ale nie bardzo rozumiem który z tych argumentów odpowiada za "instalowanie aplikacji w tle". Być może dlatego że nie jestem gigant z angielskiego. Obstawiam też że nie ma wersji polskiej MSDN...

Ktoś podpowie co dalej?


(Fiołek) #6

Bo tego nie ma. Jeśli aplikacja tego nie udostępnia to ciężko będziesz miał to zrobić. Możesz okresowo(albo tylko na samym początku, zależnie czy potem okno się pojawi) wysyłać oknom aplikacji komunikat SW_HIDE(ukryje okno) a gdy zajdzie potrzeba poszczególnym kontrolką wysyłać to co potrzeba aby instalacja "szła" dalej.


(Lena(R)) #7

to znaczy, że nie każdy instalator obsługuje "cichą" instalację, bez ingerencji użytkownika?


([alex]) #8

... tak samo jak nie każdy człowiek potrafi "cicho" zrozumieć prostą rzecz, i musi upewniać się na forum pisząc coś w stylu:

  • to znaczy, że nie każdy instalator obsługuje "cichą" instalację, bez ingerencji użytkownika?

Instalator to też program, jak został napisany tak działa, jeżeli programista nie przewidział gadania programu po japońsku to na pewno program nie będzie tego robić.


(Lena(R)) #9

No i wszystko już jasne. nie trzeba było tak od razu?