Createprocess() help
Yvan64320
Messages postés
37
Statut
Membre
-
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):
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
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
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.
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.
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 :(
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.
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.
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 :
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,
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,