PDA

View Full Version : Launcher eseguibili in c


andre998
08-07-2007, 17:33
Ciao a tutti.
Ho necessita di avere un programmino che mi lanci 2 o piu applicazioni residenti in percorsi diversi.

avevo pensato a una cosa semplicissima sfruttando createprocess vi metto il codice

STARTUPINFO si;
ZeroMemory(&si,sizeof(si));
si.cb = sizeof(si);
PROCESS_INFORMATION pi;
ZeroMemory(&pi,sizeof(pi));

STARTUPINFO si2;
ZeroMemory(&si2,sizeof(si2));
si2.cb = sizeof(si2);
PROCESS_INFORMATION pi2;
ZeroMemory(&pi2,sizeof(pi2));


CreateProcess("App1.exe",NULL,NULL,NULL,false,0,NULL,NULL,&si,&pi);

CreateProcess("./Data/App2.exe",NULL,NULL,NULL,false,0,NULL,NULL,&si2,&pi);


la seconda applicazione sta in una sottocartella..ma non viene aperta, credo non riconosca il percorso perche mettendole entrambe nella stessa dir non ci sono problemi.

Se avete anche un altra soluzione potreste direttamente scrivermela?dato che sicuramente sono necessarie giusto un paio di righe..grazie a tutti!

andbin
08-07-2007, 19:38
la seconda applicazione sta in una sottocartella..ma non viene aperta, credo non riconosca il percorsoIl separatore di directory è " \ " ;)

E comunque se devi solo lanciare qualcosa, va sicuramente anche bene ShellExecute().

andre998
08-07-2007, 19:47
scusa per la fesseria che ho scritto:) mi ero distratto come ho cambiato la stringa...putroppo il problema non e quello..il percorso me lo prende solo se glielo metto per intero ma non se lo metto tipo apputno .\Data\App.exe ...ora ora provo shellexecute!

andre998
08-07-2007, 19:54
non so nn me lo lancia orse sbaglio sintassi..potresti scrivermi la riga con la funzione?devo eseguire un applicazione in una sottocartella..pero evitando di scrivere i il percorso intero..

andre998
08-07-2007, 22:52
Risolto con shellexecute!

ultimissimo problema e poi ho finito..che comando posso usare per chiudere un processo?

in pratica ogni volta che lancio da questo launcher una delle applicazioni è volutamente in background..si puo chiudere solo dalla finestra dei processi.

il problema è che lanciando 2 o piu volte il launcher questa applicazione viene aperta nuovamente anche se è gia in esecuzione..
quello che vorrei fare è appunto aggiungere al launcher un comando che prima di aprire questa applicazione la chiuda se è in esecuzione..è possibile?

ho provato cosi velocemente a dare
ExitProcess("applicaz.exe",NULL);

ma non la chiude..

scusate se non sono stato molto chiaro

andbin
09-07-2007, 08:20
quello che vorrei fare è appunto aggiungere al launcher un comando che prima di aprire questa applicazione la chiuda se è in esecuzione..è possibile?

ho provato cosi velocemente a dare
ExitProcess("applicaz.exe",NULL);No no ... ExitProcess serve per terminare il processo corrente (quello che ha chiamato ExitProcess, appunto) non un altro processo!

Domanda: il programma che è in background e che vuoi terminare l'hai sviluppato tu? Perché se così si può fare in modo che sia il processo in background a terminare felicemente senza un kill "brutale" (ma bisognerebbe vedere come è stato fatto il programma).

Altrimenti le cose sono due: o termini il processo e lo rilanci, oppure vedi se esiste già e non lo rilanci. In ogni caso hai bisogno di usare le funzioni PSAPI (da NT 4 in poi).

andre998
09-07-2007, 15:38
si il programma è mio ma deve restare sempre in esecuzione..
ho risolto usando system("taskkill /im app.exe /F"); a ogni chiamata li launcher...in modo che se è aperto lo chiuda per poi riaprirlo..in modo da non avere duplicati in esecuzione..grazie!