Zum Inhalt springen

@Programmierer: Prozesse automatisch beenden


Gast Lino
 Teilen

Empfohlene Beiträge

Hallo Druckwelle,

ich komme gleich zu Sache:

Ist wer imstande, ein Programm zu schreiben, welches automatisch alle Prozesse beendet außer folgende:

system

smss.exe

csrss.exe

winlogon.exe

services.exe

lsass.exe

svchost.exe (wenn mehrfach offen, offen lassen)

Explorer

spoolsv.exe

--------------------

ICQLite.exe

Teamspeak.exe

Beim Goggeln habe ich leider kein Prog gefunden.

Danke schonmal.

Lino

Link zu diesem Kommentar
Auf anderen Seiten teilen

Genau das ist die Frage ;)

Hoffe jemand kennt die Antowrt. Ansonsten wäre ich auch für die Batch-Datei von dir dankbar. Könnte sie mir glaub ich auch selbst umändern für meine Prozesse.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi Leute,

Leider habe ich kein solches Programm, würde es auch nicht benötigen. Viele Programme die ich verwende müssen einfach für mein System vorhanden sein und

es ist nicht notwendig diese zu beenden.

So sehr ich euch auch gerne hier helfen würde muss ich euch sagen das ich so etwas nicht haben ;(

Denke Rayne hat es mit einem anderen Programm verwechselt was ich damals für meinen Server brauchte um diese als Deinst dauerhaft in Windows zu implantieren.

Grüße aus Portugal

Link zu diesem Kommentar
Auf anderen Seiten teilen

Schade, aber danke für de Info ;)

Hooker: Hättest du die Güte mir die Batchdatei zu schicken? kannst ja auch die Programmnamen rauslassen, wenn du was verstecken willst ^^

Nur so, dass ich die Befehle sehe, die nötig sind.

Danke

E-Mail Adresse per PN an dich

Link zu diesem Kommentar
Auf anderen Seiten teilen

da meine performance net so doll ist beende ich was nicht nötig ist, und starte was ich brauche.

Den folgenden code in eine textdatei kopieren und als name.cmd oder name.bat speichern.

Um prozesse zu beenden muss man z.B. die pskill.exe in C:\WINDOWS\system32 kopieren.

Bei dem 'start TS' ist eine erweiterung für automatischen login dabei.

@echo off
KEYB GR
pskill process1.exe
pskill process2.exe
pskill process3.exe
start C:\Root\to\TeamSpeak.exe teamspeak://druckwelle-esports.de/channel=ENTERchannelnameHERE?nickname=ENTERnicknameHERE?LoginName=ENTERloginnaneHERE?password=ENTERpasswordHERE
start C:\Root\to\anygame.exe
cls
QUIT

aber alles ausser bestimmte prozesse beenden geht nich, oder?

/edit

in google kann man das alles zum tehma "batch datei" finden

Link zu diesem Kommentar
Auf anderen Seiten teilen

Vielen Dank Hooker. Habe jetzt die Batchdateien auf meine Beürfnisse zurechtgeschrieben, soweit ich das konnte. Habe einfach die Prozesse reingeschrieben, die so gut wie immer laufen. Leider werden immernoch eineige Prozesse nicht beendet, die aber in dem Befehl auftauchen. Die Schreibweise habe ich schon kontrolliert.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Is doch nix aufwendiges, du machst ne kleine for-Schleife die prüft und speichert (z.B. in nen array), ob und welche Prozesse zwischen 0 und 5000(?) existieren, und beendest diese dann erst soft, dann hard, natürlich mit Ausnahme derer die du behalten willst.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Man nehme eine C-Umgebung (z.B. dev-cpp) , und füge zusammen:

Die Prozessnamen, der Prozesse, die du behalten willst, in eine PID wandeln:

HANDLE GetProcessHandle( CString strProcessExe )
{
HANDLE hSnapShot; // System-Snap-Shot-Handle
PROCESSENTRY32 PEntry; // Process-Enumerations-Struktur
HANDLE hProcess; // Prozess-Handle
CString strExeFile; // Hilfssstring
BOOL bOK; // Abbruch-Flag

// Liste aller im System laufenden Prozesse erstellen
hSnapShot=::CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );

if( hSnapShot==INVALID_HANDLE_VALUE )
// Fehler aufgetreten
return NULL;

// Prozess-Executable in Kleinbuchstaben wandeln
strProcessExe.MakeLower( );


// Prozess-Liste durchlaufen
PEntry.dwSize=sizeof( PEntry );
bOK=::Process32First( hSnapShot, &PEntry );
for( ; bOK; bOK=::Process32Next( hSnapShot, &PEntry )){

// Pozess-ID in Handle umwandeln
hProcess=::OpenProcess( PROCESS_TERMINATE, FALSE, PEntry.th32ProcessID );
if( hProcess==NULL )
// Umwandlung misslungen
continue;

// Prozess-Executable in Kleinbuchstaben wandeln und prüfen
strExeFile=PEntry.szExeFile;
strExeFile.MakeLower( );
if( strExeFile.Find( strProcessExe )!=-1 )
// Passenden Prozess gefunden, Handle zurückgeben
return hProcess;
}

// Nichts Passendes gefunden
return NULL;
}

Um die dann in einen array zu schreiben z.B. am Anfang einen Array mit den Namen anlegen, der dann nach und nach in PIDs gewandelt wird:


char procNam[] = { 'lsass.exe', 'svchost.exe', 'winlogon.exe' );
char prodID[] = { };
int i;

for ( i = 0 ; i <= ( sizeof(procNam) / sizeof(procNam[0]) ) - 1 ; i++ )
{
procID[i] = GetProcessHandle( procNam[i] );
}

Dann noch eine Liste der Systemprozesse erstellen, und dann alle kilen, außer die, deren PID du oben in procID geschrieben hast.

Über folgendes Programm, das eigentlich alle Prozesse auflistet, kann man dann alle killen lassen (die Ausgabe einfach mit dem Killbefehl ersetzen, natürlich vorher prüfen, ob dies kein Prozess ist, den man behalten will)

#include <windows.h>
#include <tlhelp32.h>
#include <iostream>

using namespace std;

typedef BOOL (WINAPI *TH32_PROCESS)
(HANDLE hSnapShot, LPPROCESSENTRY32 lppe);

static TH32_PROCESS pProcess32First = NULL;
static TH32_PROCESS pProcess32Next = NULL;

int main()
{
PROCESSENTRY32 pe32 = { 0 };
HANDLE hSnapshot = NULL;

HINSTANCE hDll = LoadLibrary("kernel32.dll");


pProcess32First=(TH32_PROCESS)GetProcAddress(hDll,"Process32First");
pProcess32Next=(TH32_PROCESS)GetProcAddress(hDll,"Process32Next");

hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if (hSnapshot != (HANDLE) -1)
{
pe32.dwSize = sizeof (PROCESSENTRY32);
int proc_cnt=0,thrd_cnt=0;

if (pProcess32First (hSnapshot, &pe32))
{
// Dies entfällt dann komplett
/* cout<<"Name\t\t\t\tThreads"<<endl<<endl;*/
do
{
thrd_cnt+=pe32.cntThreads;
proc_cnt++;

// Hier kommt dann das eigentliche killen hin
/* cout<<" "<<"\t\t\t\t"<<pe32.cntThreads
<<"\r"<<pe32.szExeFile<<endl; */


}
while(pProcess32Next (hSnapshot, &pe32));

}

// Dies entfällt dann komplett
/* cout<<endl
<<"Threads: "<<thrd_cnt<<endl
<<"Prozesse: "<<proc_cnt<<endl;*/

CloseHandle (hSnapshot);
}

cin.get();
return 0;
}

Der Ersatz könnte dann in etwa so aussehen:

if ( !procID.Find(pe32)
{
TerminateProcess( pe32, 0 );
}

Daraus dürfte sich doch was basteln lassen, hab das mal eben aus ein paar Fragmenten zusammengeschmissen, wird so nicht laufen, sind nur ein paar Ideen ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Puh, großen Dank für die ganze Mühe. Nur leider kenne ich mich damit garnicht aus. Bei dem Code von Hooker konnte ich mir noch zusammendenken, was ich wo einfügen muss.

Wäre jemand so freundlich, das so zu schreiben, dass die im 1. Post genannten Prozesse erhalten bleiben?

Danke schonmal

Link zu diesem Kommentar
Auf anderen Seiten teilen

Deine Meinung

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Benutzerkonto hast, melde Dich bitte an, um mit Deinem Konto zu schreiben.

Guest
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

  • Vorschau
 Teilen

×
×
  • Neu erstellen...

Wichtige Information

Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen zu Cookies erhalten Sie in unserer Datenschutzerklärung.