Bonjour,

J'ai besoin de tuer un processus (ainsi que ses éventuels enfants) dont je connais seulement son nom.
Comment faire ?

J'ai penser à créer un process qui utiliserait la commande "tasskill.exe" mais ceci ne semble pas fonctionner correctement.
Auriez-vous des idées ?
Merci pour votre aide.

Voici le code que j'utilise :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
 
int TuerProcess(char* Process)
{
    STARTUPINFO si;         /* Requis par CreateProcess */
    PROCESS_INFORMATION pi; /* Requis par CreateProcess */
    LPTSTR szCmdline;
    char* CmdTuerProcess = malloc (sizeof (*CmdTuerProcess));
 
    /* La structure si est utilisée en entrée donc elle doit être impérativement initialisée    */
    ZeroMemory(&si, sizeof(si));
 
    /* Pas la peine d'initialiser la structure pi car elle sera écrite et non lue              */
 
    //Initialisation du chemin du package d'installation
    sprintf(CmdTuerProcess, "%s%s%s", "\"taskkill /F /IM ", Process, " /T\"");
    szCmdline = TEXT(CmdTuerProcess);
 
    if((int) DebugMode==WINLOG_LEVEL_09)
    {
        INFO2("CmdTuerProcess=%s", szCmdline);
    }
 
 
    INFO2("CmdTuerProcess=%s", szCmdline);
 
    //Initialisation du process d'installation
    if (CreateProcess( szCmdline,       /* Nom de l'exécutable                    */
                       NULL,      /* Arguments de la ligne de commande                             */
                       NULL,      /* Attributs de sécurité du nouveau processus (processus fils)   */
                       NULL,      /* Attributs de sécurité du thread principal                     */
                       FALSE,     /* Le processus fils héritera t-il des handles du processus père */
                       0,         /* Flags de création                                             */
                       NULL,      /* Variables d'environnement                                     */
                       NULL,      /* Répertoire courant                                            */
                       &si,       /* Paramètres d'initialisation du processus                      */
                       &pi        /* Informations sur le processus                                 */ )!=0)
    {
        WaitForSingleObject(pi.hProcess, INFINITE);      /* Attendre la fin du processus           */
 
        CloseHandle(pi.hProcess); /* Fermer le handle vers le processus                            */
        CloseHandle(pi.hThread);  /* Fermer le handle vers le thread principal du processus        */
 
        free(CmdTuerProcess);
        return(TRUE);
    }
    else
    {
        WinLogW(WinLog_Error, WINLOG_LEVEL_09, L"Code Erreur CreateProcess = %d", GetLastError());
        if((int) DebugMode==9)
        {
            ERROR2("Process=%s", Process);
        }
 
        free(CmdTuerProcess);
        return(FALSE);
    }
}
Le code d'erreur qui est retourné est "123" soit "The filename, directory name, or volume label syntax is incorrect. alors même que le process existe bien dans la liste des processus qui tournent.