jak najkrócej i najprościej zabić proces w systemie znając jego nazwę, np chcę zabić proces o nazwie notepad.exe?
C:\Documents and Settings\Admin>taskkill /?
TASKKILL [/S system [/U nazwa_użytkownika [/P [hasło]]]]
{ [/FI filtr] [/PID id procesu | /IM nazwa obrazu] } [/F] [/T]
Opis:
To narzędzie wiersza polecenia może służyć do zakończenia jednego lub
więcej procesów.
Procesy można kasować przy użyciu identyfikatora procesu lub nazwy obrazu.
Lista parametrów:
/S system Określa system zdalny, z którym ma nastąpić
połączenie.
/U [domena\]użytkownik Określa kontekst użytkownika, w którym
polecenie powinno być wykonane.
/P [hasło] Określa hasło dla danego kontekstu użytkownika.
W razie pominięcia monituje o podanie danych.
/F Określa wymuszenie zakończenia
procesów.
/FI filtr Wyświetla zestaw zadań pasujących do
danych kryteriów określonych w filtrze.
/PID id procesu Określa identyfikator PID procesu, który
ma być zakończony.
/IM nazwa obrazu Określa nazwę obrazu procesu, który ma być
zakończony. Symbolu wieloznacznego '*' można
użyć do określenia wszystkich nazw obrazów.
/T Przerwanie drzewa; kończy określony proces
i wszystkich procesów podrzędnych, które zostały
uruchomione przez dany proces.
/? Wyświetla tę pomoc/sposób użycia.
Filtry:
Nazwa filtru Prawidłowe operatory Prawidłowe wartości
------------ -------------------- -------------------
STATUS eq, ne RUNNING | NOT RESPONDING
IMAGENAME eq, ne Nazwa obrazu.
PID eq, ne, gt, lt, ge, le Wartość identyfikatora PID.
SESSION eq, ne, gt, lt, ge, le Numer sesji.
CPUTIME eq, ne, gt, lt, ge, le Czas procesora w formacie
hh:mm:ss.
hh - godziny,
mm - minuty, ss - sekundy
MEMUSAGE eq, ne, gt, lt, ge, le Użycie pamięci w KB
USERNAME eq, ne Nazwa użytkownika w formacie
[domena\]użytkownik
MODULES eq, ne Nazwa biblioteki DLL
SERVICES eq, ne Nazwa usługi
WINDOWTITLE eq, ne Tytuł okna
UWAGA: Symbol wieloznaczny "*" dla przełącznika /IM jest akceptowany tylko
razem z filtrami.
UWAGA: Zakończenie procesów zdalnych będzie zawsze przeprowadzane przez
wymuszenie niezależnie od tego, czy określono opcję /F, czy nie.
Przykłady:
TASKKILL /S system /F /IM notepad.exe /T
TASKKILL /PID 1230 /PID 1241 /PID 1253 /T
TASKKILL /F /IM notepad.exe /IM mspaint.exe
TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*"
TASKKILL /F /FI "USERNAME eq NT AUTHORITY\SYSTEM" /IM notepad.exe
TASKKILL /S system /U domena\nazwa_użytkownika /FI "USERNAME ne NT*" /IM *
TASKKILL /S system /U nazwa_użytkownika /P hasło /FI "IMAGENAME eq note*"
a jak z poziomu delphi wywołać TASKKILL /IM notepad.exe /T ?
<quote=Qyon>
C:\Documents and Settings\Admin>taskkill /?</quote>C:\>TASKKILL
Nazwa 'TASKKILL' nie jest rozpoznawana jako polecenie wewnętrzne lub zewnętrzne, program wykonywalny lub plik wsadowy.
Taka odpowiedź jest dobra dla działu 'Software' a nie 'Programowanie'. Poza tym - nie działa [green].
Widać tylko porządne wersje Windows to mają... Zdaję sobie sprawę, że jest masa lepszych rozwiązań, ale to wydało mi się nieszablonowe.
//no właśnie mam porządną wersję i tego nie mam.. może to jest tylko w tych wodotryskowych wersjach? - M
CreateToolhelp32Snapshot, Process32First, Process32Next... OpenProcess, TerminateProcess...
// Tylko ile razy to już było? 10? 20? - Q
uses TLHelp32
function Kill(const Nazwa:string):Boolean;
var Uchwyt:tHandle;
Proces:tProcessEntry32;
begin
Uchwyt:=CreateToolHelp32SnapShot(TH32CS_SNAPALL,0);
Proces.dwSize:=SizeOf(Proces);
Result:=False;
if Integer(Process32First(Uchwyt,Proces))<>0 then
repeat
if AnsiUpperCase(ExtractFileName(Proces.szExeFile))=Nazwa then
Result:=KillProcess(Proces.th32ProcessID);
until Integer(Process32Next(Uchwyt,Proces))=0;
CloseHandle(Uchwyt);
end;
//uzycie
procedure TMainFrm.Button1Click(Sender: TObject);
begin
Kill('IEXPLORE.EXE');
end;
wyskakuja mi bledy przy kompilacji "undeclared Result, Nazwa, KillProcess
To ja przy okazji się spytam: Jak znaleźć proces z którego korzysta plik: np:
proces który otworzył plik: film.avi jest wmplayer.exe
Co do zamykania procesów:
function KillTask(ExeFileName: string): integer;
const
PROCESS_TERMINATE=$0001;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
Result := 0;
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle,FProcessEntry32);
while integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
UpperCase(ExeFileName))
or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))) then
Result := Integer(TerminateProcess(OpenProcess(
PROCESS_TERMINATE, BOOL(0), FProcessEntry32.th32ProcessID), 0));
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;
{Użycie:} Killtask('program.exe');
a ja dalem nan undeclared Results itd. Gdzie zdeklarowac to co nie jest zdeklarowane?
ensimek napisał(a)
a ja dalem nan undeclared Results itd. Gdzie zdeklarowac to co nie jest zdeklarowane?
co ty masz za kompilator? turbo pascal? czy coś jeszcze starszego? podany kod bez problemu skompiluje się w każdej wersji Delphi (no, może poza D1).