-
Créer un process
Bonjour,
J'ai une application implémentée sous forme de service windows, créée avec visual c++ 6, dans laquelle je voudrais lancer un process. J'ai essayé de lancer le process naturellement par "CreateProcess" et par _exec, mais ça ne marche pas et je n'ai pas obtenu de code d'erreur sur ces fonctions. Si quelqu'un sait comment je pourrais résoudre mon problème, qu'il n'hésite à me proposer sa solution.
Merci d'avance
Devconf77
-
Donne un bout de code de ce que tu as fait pour qu'on examine
-
ainsi que les erreurs retournée :p
-
CreateProcess depuis un service ne pose aucun problème.
Si cela ne fonctionne pas, il s'agit d'un souci dans le code de ton prog.
-
créer un process
voici le code : CreateProcess() retourne une valeur non nulle
PROCESS_INFORMATION pi;
STARTUPINFO si;
GetStartupInfo(&si);
si.dwFlags= STARTF_USEPOSITION | STARTF_USESHOWWINDOW | STARTF_USESIZE ;
si.dwXSize = 1000;
si.dwYSize = 1000;
si.dwXCountChars = 1000;
si.dwYCountChars = 1000;
CHAR szCommand[128+1];
sprintf (szCommand, "ResetService.exe -T 60000 %s", szService);
if(CreateProcess(NULL, szCommand, NULL, NULL, FALSE,CREATE_SUSPENDED,NULL, NULL, &si, &pi))
{
bReset = TRUE;
// Lance le process
DWORD RetVal = ResumeThread(pi.hThread);
}
-
Chez moi ce code marche parfaitement (j'ai remplacé ResetService par notepad).
Quelques remarques toutefois :
Tu changes la taille de console (dwXCountChars et dwYCountChars) sans mettre le flag STARTF_USECOUNTCHARS
Tu mets le flag STARTF_USEPOSITION sans donner de valeur dwX et dwY donc celles du lanceur sont récupérées si elles avaient été fournies, sinon 0.
As tu bien accès à la commande ResetService ?
Je suppose qu'il s'agit d'une commande que tu as développé pour ré-initialiser un service et pas ce fameux Reset5 que certains utilisent pour éviter l'activation de XP-SP2.
-
créer un process
Tout d'abord, merci à toutes les personnes qui ont essayé d'apporter une solution à mon problème.
Aux questions de pascal.barbier : As tu bien accès à la commande ResetService ? Réponse est oui
Je suppose qu'il s'agit d'une commande que tu as développé pour ré-initialiser un service, réponse est oui.
Je précise que le code que j'ai donné s'exécute à l'intérieur d'un SERVICE. S'il s'exécute hors d'un service, il marche très bien.
Finalement, j'ai trouvé par hasard la solution. J'ai tout simplement renseigné le paramètre "lpCurrentDirectory" de la fonction CreateProcess().
Merci