Createprocess() help

Fermé
Yvan64320 Messages postés 33 Date d'inscription jeudi 28 juillet 2011 Statut Membre Dernière intervention 25 août 2011 - 19 août 2011 à 12:05
Yvan64320 Messages postés 33 Date d'inscription jeudi 28 juillet 2011 Statut Membre Dernière intervention 25 août 2011 - 25 août 2011 à 17:12
Bonjour,
Je suis entrain d'essayer d'utiliser la fonction createprocess() et terminateprocess(),je suis entrain de tester createprocess() tout d'abord, je suis allez voir sur la msdn comment cette fonction marche mais je comprend pas du tout comment je dois l'intégrer à mon code.....
J'écris ici en espérant que quelqu'un aurait un exemple plus concret ou mieux expliqué que la msdn de comment utilisé cette fonction car j'y suis a peu près arrivé comme ceci (je souhaite exécuté ce qui est contenu dans ligne1.c_str):

  STARTUPINFO siStartupInfo; 
    PROCESS_INFORMATION piProcessInfo; 
    memset(&siStartupInfo, 0, sizeof(siStartupInfo)); 
    memset(&piProcessInfo, 0, sizeof(piProcessInfo)); 
    siStartupInfo.cb = sizeof(siStartupInfo); 


	LPTSTR lpCommandLine = "system(ligne1.c_str())";

		int i = CreateProcess(NULL, lpCommandLine, NULL, NULL, TRUE, CREATE_NO_WINDOW, NULL, NULL, &siStartupInfo, &piProcessInfo);
		


j'ai entre autre comme erreur : c:\users\portable ouverture\documents\visual studio 2010\projects\testcreateetterminate\testcreateetterminate\test.cpp(50): error C2440: 'initialisation' : impossible de convertir de 'const char [15]' en 'LPTSTR'

Je ne sais pas du tout si ma syntaxe et correcte et je pense dors et déjà que non.
Si quelqu'un pourrait m'aider ou me guider ça serait gentil.
Merci

3 réponses

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
19 août 2011 à 14:17
Salut.
Je ne connais pas les spécificités win. La première tâche consiste à savoir ce qu'est un LPTSTR pour savoir comment le remplir.
Je pense qu'il faut utiliser directement la commande, c'est à dire un truc dans le genre :
LPTSTR lpCommandLine = ligne1.c_str();
la commande telle que tu l'as écrit est une commande C, pas une commande shell.
0
Yvan64320 Messages postés 33 Date d'inscription jeudi 28 juillet 2011 Statut Membre Dernière intervention 25 août 2011
19 août 2011 à 16:16
Ok merci de ta réponse char snipeur comme toujours ;) je fais des recherche du côté de LPTSTR, j'avais déjà testé sans system j'ai toujours le même message d'erreur :(
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
19 août 2011 à 16:49
bon, j'ai pris 30s pour chercher sur google (je suis curieux) je ne sais pas ce que c'est que ce type de merde, mais je sais comment l'initialiser :
LPTSTR szCmdline = _tcsdup(TEXT("C:\\Program Files\\MyApp -L -S"));
vu là :
https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessa?redirectedfrom=MSDN

En voyant ça, je pense que l'adage "pourquoi faire simple lorsque l'on peut faire compliqué ?" a du être créer pour Windows.
0
Yvan64320 Messages postés 33 Date d'inscription jeudi 28 juillet 2011 Statut Membre Dernière intervention 25 août 2011
19 août 2011 à 17:19
Ok merci encore, je vais regarder franchement la prochaine fois je ferais tout sous Unix ça à l'air bien plus simple !!!
0
Yvan64320 Messages postés 33 Date d'inscription jeudi 28 juillet 2011 Statut Membre Dernière intervention 25 août 2011
25 août 2011 à 17:12
Bonjour,
J'ai un petit soucis avec mon code que je n'arrive pas à résoudre.
Tout d'abord le but de mon code est de récupérer dans un fichier texte le chemin d'accès d'un fichier et l'exécute. Il vérifit ensuite toutes les x secondes si le chemin a changé.Si non il continu à exécuter le fichier ,si oui il ferme l'ancien fichier et exécute le nouveau.
Je suis arrivé avec de l'aide sur les forums à tout faire mais je n'arrive pas a fermé le premier fichier exécuté lorsque l'on doit exécuté le nouveau.
Ma boucle n'est pas parfaite je sais si quelqu'un pourrait m'aiguiller ou m'expliquer qq trucs ça serait gentil.
Mon code :
int main()
{
	string ligne1, ligne2;
	HANDLE hProcess;
    UINT uExitCode;
PROCESS_INFORMATION pi;

STARTUPINFO si = {sizeof(si)};


while(true)
{
	ligne1=enTete("D:\\test.txt");

if(ligne2.compare(ligne1)!=0)
{
		string cmdline = (string("C:\\Program Files (x86)\\Microsoft Office\\Office14\\PPTVIEW.exe \"") + ligne1 + "\"");
	if (!CreateProcess(0, (LPSTR)cmdline.c_str(), 0, 0, 0, CREATE_SUSPENDED, 0, 0, &si, &pi))
break;
	
	ligne2=ligne1;
	ResumeThread(pi.hThread);
CloseHandle(pi.hThread);

Sleep(4000);
TerminateProcess(pi.hProcess,0);
CloseHandle(pi.hProcess);

} 

Sleep(10000);
}
}


De plus il y a un truc déjà qui me dérange dans ma boucle infini (while(true)) comment se fait il qu'il execute la partie du code dans if(ligne2.compare(ligne1)!=0) alors que la condition n'est même pas remplit ?
Merci.
Cordialement,
0