View Full Version : Avviare un .exe da un applicazione scritta in delphi
Come posso avviare un .exe da un applicazione scritta in delphi ?
Grazie
con la funzione API CreateProcess; la trovi documentata nella documentazione Windows SDK alla quale puoi accedere direttamente da Delphi (menu Help), oppure da http://msdn.microsoft.com se vuoi qualcosa di aggiornato.
DanieleC88
12-11-2004, 18:22
Adesso non ricordo, mi sembra ci sia qualcosa in particolare nel linguaggio Delphi per avviare un eseguibile. Comunque, puoi usare le API di Windows. Cerca su MSDN le informazione per "ShellExecute", dovrebbe essere cio' che fa al caso tuo.
Tieni anche presente che ShellExecute(Ex) è un po' diversa: a ShellExecute(Ex) puoi passare una generica stringa (non necessariamente il nome di un eseguibile) che viene a sua volta passata direttamente alla shell, quindi in questo modo ottieni quello che farebbe la shell se gli venisse passata quella stringa: nel caso del nome di un file o del nome di un link ad esso la shell aprirebbe il file col programma associato, nel caso del nome di un programma la shell lo avvierebbe, nel caso di un link ad una pagina Internet la shell aprirebbe il browser predefinito a quella pagina, e così via.
CreateProcess invece serve specificamente per avviare e controllare processi; se la ritieni troppo complicata e vuoi qualcosa di molto banale, puoi utilizzare invece WinExec, molto semplice, che è implementata come wrapper per CreateProcess.
Grazie mille,
alla fine ho optato per shellexecute.
Potreste spiegarmi anche come posso fare in modo che il mio programma delphi continui l'esecuzione solo dopo che il programma dos che ha appena lanciato si è chiuso ?
Ciao
Per fare quello che dici devi utilizzare CreateProcess; nelle process information che ti vengono restituite, c'è un handle al processo in questione; per interrompere l'esecuzione del tuo thread primario, usa WaitForSingleObject passandogli quell'handle; se poi vuoi evitare l'eventualità del blocco totale, usa WaitForMultipleObjects passandogli, oltre all'handle del processo avviato, anche un altro handle che possa risvegliare il tuo thread in qualche modo, ad esempio l'handle di un waitable timer.
Grazie, sono riuscito a risolvere il probl. Ciao
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.