Createprocess() help

Yvan64320 Messages postés 37 Statut Membre -  
Yvan64320 Messages postés 37 Statut Membre -
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 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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 37 Statut Membre
 
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 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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 37 Statut Membre
 
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 37 Statut Membre
 
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