Appel de programme par un programme

ElendilAranwe Messages postés 10 Date d'inscription mercredi 30 décembre 2009 Statut Membre Dernière intervention 27 avril 2010 - 9 janv. 2010 à 18:54
memspell Messages postés 4 Date d'inscription jeudi 21 janvier 2010 Statut Membre Dernière intervention 23 janvier 2010 - 23 janv. 2010 à 11:56
Bonjour, je sais que cette question des milliers de fois vous l'avez vu! Et vous en avez surement marre, "google tout y es!" oui et non, j'ai trouver de nombreuses réponses pour mon problème mais tout les sujets renvoies a createProcess() et il se trouve que je n'arrive pas à l'utiliser correctement.
Je suis aller sur msdn pour voir le prototype de la fonction, et j'ai des parametres que je n'arrive pas à renseigner. alors si vous pouviez m'aider a faire un appel de programme, comme sa je saurais comment faire.

données:

Je veux lancer le programme sd4hide.exe
Je suis sous Borland c++
Programmation sous C++
le chemin absolu est "C:\\Programmes\\Electronic Arts\\L'Avènement du Roi-sorcier\\sd4hide.exe"

HRESULT CreateProcess (
[in] LPCWSTR lpApplicationName,
[in] LPWSTR lpCommandLine,
[in] LPSECURITY_ATTRIBUTES lpProcessAttributes,
[in] LPSECURITY_ATTRIBUTES lpThreadAttributes,
[in] BOOL bInheritHandles,
[in] DWORD dwCreationFlags,
[in] PVOID lpEnvironment,
[in] LPCWSTR lpCurrentDirectory,
[in] LPSTARTUPINFOW lpStartupInfo,
[in] LPPROCESS_INFORMATION lpProcessInformation,
[in] CorDebugCreateProcessFlags debuggingFlags,
[out] ICorDebugProcess **ppProcess
);

merci


Du C/C++ donnez m'en j'adore en manger^^

8 réponses

cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
9 janv. 2010 à 23:30
#include <stdio.h>
#include <tchar.h>
#include <windows.h>

int main(int argc, char* argv[])
{
STARTUPINFO startupinfo; PROCESS_INFORMATION procinfo; DWORD ret;
memset(&startupinfo,0,sizeof(STARTUPINFO));	startupinfo.cb = sizeof(STARTUPINFO);
ret = CreateProcess(_T("C:\\Program Files\\Electronic Arts\\L'Avènement du Roi-sorcier\\sd4hide.exe"),_T(""),NULL,NULL,FALSE,0,NULL,NULL,&startupinfo,&procinfo);
if (ret == FALSE) wprintf(_T("Erreur lors de lors de l'ouverture de l'application.\nCode d'erreur : %X\n"),GetLastError());
//WaitForSingleObject(procinfo.hProcess,INFINITE); //si tu veux attendre la fin de son exécution
CloseHandle(procinfo.hProcess); CloseHandle(procinfo.hThread);
return 0;
}

---
VB.NET is good ... VB6 is better
0
ElendilAranwe Messages postés 10 Date d'inscription mercredi 30 décembre 2009 Statut Membre Dernière intervention 27 avril 2010
9 janv. 2010 à 23:55
merci beaucoup je vais tester sa, par contre j'avoue qu'il y a des choses que je ne comprend pas:

- qu'est ce que sont les _T, ensuite pourquoi CreateProcess() à perdu des arguments?

Je sais je dois être chiant :D mais je préfère comprendre quelque chose que de revenir dans deux heures pour une ouverture d'un autre exe. mici

Du C/C++ donnez m'en j'adore en manger^^
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
10 janv. 2010 à 00:13
_T permet de transformer une chaîne de caractères ASCII en Unicode (c'est pour cela que printf est devenue wprintf signifiant wide printf). Je n'ai pas le même nombre d'arguments que toi pour CreateProcess malgré que je ne trouve pas d'autre prototype pour CreateProcess.
---
VB.NET is good ... VB6 is better
0
ElendilAranwe Messages postés 10 Date d'inscription mercredi 30 décembre 2009 Statut Membre Dernière intervention 27 avril 2010
10 janv. 2010 à 02:20
d'accord merci :) Je vais me renseigner sur wprintf je savais pas que sa existait et sur l'unicode.

bonne soirée

Du C/C++ donnez m'en j'adore en manger^^
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
10 janv. 2010 à 02:20
Salut,
Si c'est juste pour lancer un executable, tu as aussi ShellExecute() qui est moins embêtant à utiliser que CreateProcess().
A propos des _T, ça ne sert pas a transformer une chaine ascii en unicode, mais a faire du code générique, qui peut etre compilé au choix en ascii ou en unicode. il ne faut donc pas utiliser wprintf mais _tprintf (qui sera remplacé par printf ou wprintf).
0
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
12 janv. 2010 à 20:59
Si tu n'as pas besoin de récupérer ce qu'envoie ce programme sur la sortie standard, alors system() suffira :
system(""C:\\Documents and Settings\\etc\\chrome.exe"");
0
ElendilAranwe Messages postés 10 Date d'inscription mercredi 30 décembre 2009 Statut Membre Dernière intervention 27 avril 2010
15 janv. 2010 à 23:04
Rebonjour merci pour vos réponses :)

Katsankat j'ai essayer ta solution et je me retrouve confronter à des problèmes.

- A chaque essai de lancement du programme ( le programme permettant le lancement des autres programmes ), au milieu de celui-ci la console reste inactive, comme une attente. Ce qui est bizarre c'est que le moment auquel le programme "freeze" est toltalement aléatoire. J'ai essayer de lancer les programmes séparement et sa fonctionne.

Mon but serait de lancer les trois programmes en lancant l'exe. Un peu d'aide ne serait pas de refus merci.

ps: je voudrais vraiment effectuer ceci en C++.

PS: ce n'est pas pour un jeu craqué, jeu acheter légalement mais qui se raye. merci

#include 
#include <stdlib.h>
#include <stdio.h>
#include <time.h>


void main()
{


system( ""C:\\Program Files\\DAEMON Tools Lite\\DTLite.exe"" );
   system( "pause" );
system( ""C:\\Program Files\\Electronic Arts\\L'Avènement du Roi-sorcier\\sd4hide.exe"" );
   system( "pause" );
   system( ""C:\\Program Files\\Electronic Arts\\L'Avènement du Roi-sorcier\\.exe"" );


}


Du C/C++ donnez m'en j'adore en manger^^
0
memspell Messages postés 4 Date d'inscription jeudi 21 janvier 2010 Statut Membre Dernière intervention 23 janvier 2010
23 janv. 2010 à 11:56
hello, la méthode system attend le retour du process, ce n'est visiblement pas l'effet que cherche.

Le code que ghuysmans99 est ce dont tu as besoin.

Pour faire un peu plus simple voila ce que tu pourrais utiliser :
#include <windows.h>
void create_process_detached(const char * file_path)
{
STARTUPINFOA lpStartupInfo;
    PROCESS_INFORMATION lpProcessInformation;
memset(&lpProcessInformation,0,sizeof(STARTUPINFOA));	lpStartupInfo.cb = sizeof(STARTUPINFOA);
CreateProcessA(file_path,"",0,0,0,0,0,0,&lpStartupInfo,&lpProcessInformation);
CloseHandle(lpProcessInformation.hProcess); CloseHandle(lpProcessInformation.hThread);
}
0
Rejoignez-nous