Windows Prozess killen mit C++

pking

Gesperrt
Huhu

Ich möchte einen Prozess killen mit C++ - Wenn ich z.B jetzt test.exe gestartet habe und dann die exe mit den prozess kill öffne, soll test.exe gekillt werden!
Hat jemand vielleicht ein bsp. Code?
Das wäre Supii :).

MfG pking
 
Windows-Prozesse killt man nicht mit C++ sondern mit der WinApi.
TerminateProcess wär dazu ein gutes Stichwort.
Aber da das eine unsichere Methode ist (warum->msdn!) solltest du uU Interprozesskommunikation in Erwägung ziehen..
Mfg
 
du startest deinen Prozess mit CreateProcess, der dir eine Prozess-ID zurückgibt. Mit TerminateProcess kannst du den Prozess dann wieder killen.
Bei mir hat das noch immer gut funktioniert...

Ich denke Beispielcode findest du in der MSDN...
(http://www.microsoft.msdn.com)
 
BadMourning hat gesagt.:
du startest deinen Prozess mit CreateProcess, der dir eine Prozess-ID zurückgibt. Mit TerminateProcess kannst du den Prozess dann wieder killen.
Bei mir hat das noch immer gut funktioniert...

Ich denke Beispielcode findest du in der MSDN...
(http://www.microsoft.msdn.com)

Musst dabei aber aufpassen:
Zum Beispiel werden mit dem Prozess verknüpfte Dlls nicht wieder freigegeben und können nicht mehr aus dem Speicher geladen werden.
Global allokierter Speicher (GlobalAlloc) wird auch nicht wieder freigegeben (denk ich jdf)
Usw... mit TerminateProcess sollte man eigentlich nur im Notfall arbeiten.
Vorzugsweise versucht man es mit WM_CLOSE-Messages, Interprocesskommunikation oder ähnlichem.
 
Ich habe zu dem Thema mal ne Frage.
Wie Beendet man einen Prozess dessen ID man nicht hat.
z.B.Ich möchte in einem Programm den Prozess "explorer.exe"
beenden. Wie mache ich das am einfachsen ?
 
Man listet sich alle Prozesse die momentan laufen, so
bekommt man dann auch den gewünschten. Geht mit
EnumProcesses oder EnumWindows, je nachdem, was
man speziell braucht.

Mußt du mal in der MSDN nachschauen. Ist aber nicht
unbedingt was für Anfänger!
 
Code:
#include <windows.h>
#include <tlhelp32.h>
#include <stdio.h>

void printError( TCHAR* msg );
BOOL KillProcessByName(char *szProcessToKill);


int main()
{
KillProcessByName("Icq.exe");      // Anstatt Icq.exe halt "Test.exe" eingeben!
return 0;
}


BOOL KillProcessByName(char *szProcessToKill)
{
HANDLE hProcessSnap;
HANDLE hProcess;
PROCESSENTRY32 pe32;
DWORD dwPriorityClass;

hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );

if( hProcessSnap == INVALID_HANDLE_VALUE )
  {
    printError( "CreateToolhelp32Snapshot (of processes)" );
    return( FALSE );
  }

pe32.dwSize = sizeof( PROCESSENTRY32 );

if( !Process32First( hProcessSnap, &pe32 ) )
  {
    printError( "Process32First" );  
    CloseHandle( hProcessSnap );     
    return( FALSE );
  }

do{
    if(!strcmp(pe32.szExeFile,szProcessToKill))
  	{
  	printf("Prozess: %s \n",pe32.szExeFile);
  	printf("PID: %d \n",pe32.th32ProcessID );  
	hProcess = OpenProcess(PROCESS_TERMINATE,0, pe32.th32ProcessID);
	TerminateProcess(hProcess,0);
	CloseHandle(hProcess);
  	} 
  } while( Process32Next(hProcessSnap,&pe32) );


CloseHandle( hProcessSnap );
return( TRUE );
}

void printError( TCHAR* msg )
{
  DWORD eNum;
  TCHAR sysMsg[256];
  TCHAR* p;

  eNum = GetLastError( );
  FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
         NULL, eNum,
         MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
         sysMsg, 256, NULL );

  // Trim the end of the line and terminate it with a null
  p = sysMsg;
  while( ( *p > 31 ) || ( *p == 9 ) )
    ++p;
  do { *p-- = 0; } while( ( p >= sysMsg ) &&
                          ( ( *p == '.' ) || ( *p < 33 ) ) );

  // Display the message
  printf( "\n  WARNING: %s failed with error %d (%s)", msg, eNum, sysMsg );
}


hab ihc in einem anderen board gefunden
hoffe das hilft dir

mfg
 

Neue Beiträge

Zurück