IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

OpenProcess renvoie Invalid Process Handle


Sujet :

C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2006
    Messages : 22
    Points : 16
    Points
    16
    Par défaut OpenProcess renvoie Invalid Process Handle
    Bonjour,

    je voudrai fermer un process avec terminateprocess mais la fct ne marche pas et j'ai le code retour 6 : invalid process handle.

    la création du process :

    STARTUPINFO siStartupInfo;
    SECURITY_ATTRIBUTES security;

    memset(&siStartupInfo, 0, sizeof(siStartupInfo));
    memset(&g_piProcessInfo, 0, sizeof(g_piProcessInfo));
    siStartupInfo.cb = sizeof(siStartupInfo);

    security.nLength = sizeof(SECURITY_ATTRIBUTES);
    security.bInheritHandle = TRUE;
    security.lpSecurityDescriptor = NULL;

    if (!CreateProcess( NULL, "ServicesClavier.exe", &security, &security, TRUE, 0, NULL, NULL, &siStartupInfo, &g_piProcessInfo))

    sa destruction :

    hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
    uProcess.dwSize = (DWORD) sizeof(PROCESSENTRY32);
    r = Process32First(hSnapShot, &uProcess);

    do
    {
    if ( strstr(uProcess.szExeFile, "ServicesClavier.exe") )
    PID = (short) uProcess.th32ProcessID;
    r = Process32Next(hSnapShot, &uProcess);
    }
    while ( r );
    CloseHandle(hSnapShot);

    if ( PID != 0)
    {
    hProcess = OpenProcess(PROCESS_TERMINATE, TRUE, (DWORD) PID);
    WaitForSingleObject( hProcess, INFINITE );
    }

    if ( hProcess != NULL )
    {
    dwExitCode = TerminateProcess(hProcess,dwExitCode);
    }

    voila le OpenProcess me retourne tjr NULL et le getLastError retourne 6

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    1. :tagcode
    2. Heureusement que ton ouverture échoue, puisque tu fais un Wait(hProcess, INFINITE) juste après: Ton programme n'arriverait jamais jusqu'au TeminateProcess()...
    3. Pourquoi caster le PID en short ? En pratique, je n'ai jamais vu de PID supérieur à 32767, mais il me semble qu'en théorie rien ne l'empêche...
    4. Pourquoi ne pas garder tout simplement le handle que tu as avec ta PROCESS_INFORMATION ?

  3. #3
    Membre averti Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Points : 444
    Points
    444
    Par défaut
    Moi j'utilise plutot ca et ca semble fonctionner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,false,PID);
            if (hProcess!=NULL) {
              DWORD ExitCode;
              bool ok1=GetExitCodeProcess(hProcess,&ExitCode);
              if (ok1 && ExitCode==STILL_ACTIVE) TerminateProcess(hProcess,0);
              CloseHandle(hProcess);
            }

Discussions similaires

  1. TClientSocket consomme des process handle
    Par franckcl dans le forum Langage
    Réponses: 1
    Dernier message: 09/04/2013, 10h32
  2. Invalid transaction handle (expecting explicit transaction start)
    Par WebPac dans le forum Bases de données
    Réponses: 9
    Dernier message: 25/06/2007, 18h04
  3. Réponses: 2
    Dernier message: 23/05/2007, 11h02
  4. Réponses: 3
    Dernier message: 30/11/2006, 12h25
  5. handle avec "process identity" ?
    Par ilimo dans le forum C++
    Réponses: 1
    Dernier message: 29/04/2006, 19h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo