Forum Clubic

[C++] Problème avec kill.exe - RESOLU - Erreur lors du kill de process

Bonjour à tous,

Je suis en train de porter une application : je la passe de windows 2000 à windows XP. Auparavant, j’utilisais kill.exe pour tuer un processus et cela fonctionnait sans problème. :slight_smile:
Maintenant lorsque j’utilise kill.exe en ligne de commande, il tue bien le processus mais j’ai une erreur en plus :
Le message Microsoft process kill utility a rencontré un problème et doit fermer … (vive Microsoft !)
Sur ma ligne de commande j’ai la ligne suivante : “Process (0) - ‘’ could not be killed” (ligne non présente auparavant).

Auriez-vous une idée qui expliquerait pourquoi cela part en erreur sur certains clients windows XP et pas d’autres ? (le kill.exe utilisé est le même sur tous les clients aussi bien sur Windows XP que windows 2000).

Merci de votre aide !

Bonjour,

Je te prierai de mettre le langage informatique dans le titre, tel que requis par la charte du forum programmation - pour une meilleure compréhension les uns des autres.

A lire :
http://www.clubic.com/forum/charte-du-foru…on-t306797.html

Pour éditer:
Suffit de cliquer sur ce bouton, dans ton message : http://www.clubic.com/forum/style_images/persoclubic/editer.gif

Utilise pskill ou code le toi même en utilisant psapi.

Voici le code C que j’utilise pour tuer un process sous Windows (testé sous WindowsXP):

#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <tlhelp32.h>

int DLLEXPORT _stdcall KillProcess(char ProcessToKill[256])
{
    PROCESSENTRY32 proc;
    DWORD process = 0;
    HANDLE PID = NULL;
    HANDLE sys = NULL;

    // CreateToolhelp32Snapshot permet de dresser une liste de tous les process
    if (!(sys = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)))
        return -1;

    // Ouverture du premier process
    ZeroMemory(&proc, sizeof(proc));
    proc.dwSize = sizeof(proc);
    if (!Process32First(sys, &proc))
        return -2;

    // on cherche le process 'ProcessToKill'
    do
    {
        if (lstrcmp(proc.szExeFile, ProcessToKill) == 0)
        {
            process = proc.th32ProcessID;
            break;
        }
    }
    while (Process32Next(sys, &proc));
    CloseHandle(sys);

    // Le process à tuer n'a pas été trouvé
    if (!process)
        return -3;

    // ouverture du process 'ProcessToKill'
    if (!(PID = OpenProcess(PROCESS_TERMINATE, FALSE, process)))
        return -4;

    // terminaison du process 'ProcessToKill'
    TerminateProcess(PID, 0);
    CloseHandle(PID);

    // fin du programme
    return 0;
}

Je l’ai compilé sous forme de dll (dispo sur mon site perso: http://www.infotech.free.fr/dev/) mais devrait être adaptable en exécutable :super:

Merci beaucoup gaadek ! Ca fonctionne très bien !!